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
49
console.log("Initializing typelex project...\n");
50
50
console.log("Installing dependencies...\n");
51
51
52
52
-
// Detect package manager
52
52
+
// Detect package manager and lexicons directory by walking up directory tree
53
53
let packageManager = "npm";
54
54
-
try {
55
55
-
await access(resolve(cwd, "pnpm-lock.yaml"));
56
56
-
packageManager = "pnpm";
57
57
-
} catch {
58
58
-
try {
59
59
-
await access(resolve(cwd, "yarn.lock"));
60
60
-
packageManager = "yarn";
61
61
-
} catch {
62
62
-
// Default to npm
54
54
+
let lexiconsDir: string | null = null;
55
55
+
let currentDir = cwd;
56
56
+
const root = resolve("/");
57
57
+
58
58
+
// First, move up one directory (we only want lexicons from parent directories)
59
59
+
const parentDir = resolve(currentDir, "..");
60
60
+
if (parentDir !== currentDir) {
61
61
+
currentDir = parentDir;
62
62
+
63
63
+
while (currentDir !== root) {
64
64
+
// Check for package manager lockfiles
65
65
+
if (packageManager === "npm") {
66
66
+
try {
67
67
+
await access(resolve(currentDir, "pnpm-lock.yaml"));
68
68
+
packageManager = "pnpm";
69
69
+
} catch {
70
70
+
try {
71
71
+
await access(resolve(currentDir, "yarn.lock"));
72
72
+
packageManager = "yarn";
73
73
+
} catch {
74
74
+
// Continue
75
75
+
}
76
76
+
}
77
77
+
}
78
78
+
79
79
+
// Check for lexicons directory (only in parent directories)
80
80
+
if (!lexiconsDir) {
81
81
+
try {
82
82
+
const lexiconsPath = resolve(currentDir, "lexicons");
83
83
+
await access(lexiconsPath);
84
84
+
// Calculate relative path from cwd to this lexicons directory
85
85
+
const relative = require("path").relative(cwd, lexiconsPath);
86
86
+
lexiconsDir = relative;
87
87
+
} catch {
88
88
+
// Continue
89
89
+
}
90
90
+
}
91
91
+
92
92
+
// Move up one directory
93
93
+
const nextParent = resolve(currentDir, "..");
94
94
+
if (nextParent === currentDir) break; // Reached root
95
95
+
currentDir = nextParent;
63
96
}
64
97
}
65
98
···
136
169
packageJson.scripts = {};
137
170
}
138
171
if (!packageJson.scripts["build:typelex"]) {
139
139
-
packageJson.scripts["build:typelex"] = `typelex compile ${namespace}`;
172
172
+
const outFlag = lexiconsDir ? ` --out ${lexiconsDir}` : "";
173
173
+
packageJson.scripts["build:typelex"] = `typelex compile ${namespace}${outFlag}`;
140
174
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2) + "\n", "utf-8");
141
175
console.log("✓ Added build:typelex script to package.json");
176
176
+
if (lexiconsDir) {
177
177
+
console.log(` Using existing lexicons directory: ${lexiconsDir}`);
178
178
+
}
142
179
} else {
143
180
console.log("✓ build:typelex script already exists in package.json");
144
181
}