tangled
alpha
login
or
join now
danabra.mov
/
typelex
56
fork
atom
An experimental TypeSpec syntax for Lexicon
56
fork
atom
overview
issues
1
pulls
2
pipelines
upwards
danabra.mov
5 months ago
05fd2333
a56b08d7
+48
-11
1 changed file
expand all
collapse all
unified
split
packages
cli
src
commands
init.ts
+48
-11
packages/cli/src/commands/init.ts
···
49
console.log("Initializing typelex project...\n");
50
console.log("Installing dependencies...\n");
51
52
-
// Detect package manager
53
let packageManager = "npm";
54
-
try {
55
-
await access(resolve(cwd, "pnpm-lock.yaml"));
56
-
packageManager = "pnpm";
57
-
} catch {
58
-
try {
59
-
await access(resolve(cwd, "yarn.lock"));
60
-
packageManager = "yarn";
61
-
} catch {
62
-
// Default to npm
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
63
}
64
}
65
···
136
packageJson.scripts = {};
137
}
138
if (!packageJson.scripts["build:typelex"]) {
139
-
packageJson.scripts["build:typelex"] = `typelex compile ${namespace}`;
0
140
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n", "utf-8");
141
console.log("✓ Added build:typelex script to package.json");
0
0
0
142
} else {
143
console.log("✓ build:typelex script already exists in package.json");
144
}
···
49
console.log("Initializing typelex project...\n");
50
console.log("Installing dependencies...\n");
51
52
+
// Detect package manager and lexicons directory by walking up directory tree
53
let packageManager = "npm";
54
+
let lexiconsDir: string | null = null;
55
+
let currentDir = cwd;
56
+
const root = resolve("/");
57
+
58
+
// First, move up one directory (we only want lexicons from parent directories)
59
+
const parentDir = resolve(currentDir, "..");
60
+
if (parentDir !== currentDir) {
61
+
currentDir = parentDir;
62
+
63
+
while (currentDir !== root) {
64
+
// Check for package manager lockfiles
65
+
if (packageManager === "npm") {
66
+
try {
67
+
await access(resolve(currentDir, "pnpm-lock.yaml"));
68
+
packageManager = "pnpm";
69
+
} catch {
70
+
try {
71
+
await access(resolve(currentDir, "yarn.lock"));
72
+
packageManager = "yarn";
73
+
} catch {
74
+
// Continue
75
+
}
76
+
}
77
+
}
78
+
79
+
// Check for lexicons directory (only in parent directories)
80
+
if (!lexiconsDir) {
81
+
try {
82
+
const lexiconsPath = resolve(currentDir, "lexicons");
83
+
await access(lexiconsPath);
84
+
// Calculate relative path from cwd to this lexicons directory
85
+
const relative = require("path").relative(cwd, lexiconsPath);
86
+
lexiconsDir = relative;
87
+
} catch {
88
+
// Continue
89
+
}
90
+
}
91
+
92
+
// Move up one directory
93
+
const nextParent = resolve(currentDir, "..");
94
+
if (nextParent === currentDir) break; // Reached root
95
+
currentDir = nextParent;
96
}
97
}
98
···
169
packageJson.scripts = {};
170
}
171
if (!packageJson.scripts["build:typelex"]) {
172
+
const outFlag = lexiconsDir ? ` --out ${lexiconsDir}` : "";
173
+
packageJson.scripts["build:typelex"] = `typelex compile ${namespace}${outFlag}`;
174
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n", "utf-8");
175
console.log("✓ Added build:typelex script to package.json");
176
+
if (lexiconsDir) {
177
+
console.log(` Using existing lexicons directory: ${lexiconsDir}`);
178
+
}
179
} else {
180
console.log("✓ build:typelex script already exists in package.json");
181
}