An experimental TypeSpec syntax for Lexicon

deps first

+48 -45
+48 -45
packages/cli/src/commands/init.ts
··· 61 61 // Remove the .* suffix for use in template 62 62 const namespacePrefix = namespace.slice(0, -2); 63 63 64 + // Install dependencies first 65 + console.log("\nInstalling dependencies...\n"); 66 + 67 + // Detect package manager 68 + let packageManager = "npm"; 69 + try { 70 + await access(resolve(cwd, "pnpm-lock.yaml")); 71 + packageManager = "pnpm"; 72 + } catch { 73 + try { 74 + await access(resolve(cwd, "yarn.lock")); 75 + packageManager = "yarn"; 76 + } catch { 77 + // Default to npm 78 + } 79 + } 80 + 81 + // Install dependencies and only proceed if successful 82 + await new Promise<void>((resolvePromise, reject) => { 83 + const args = packageManager === "npm" 84 + ? ["install", "--save-dev", "@typelex/cli", "@typelex/emitter"] 85 + : ["add", "-D", "@typelex/cli", "@typelex/emitter"]; 86 + 87 + const install = spawn(packageManager, args, { 88 + cwd, 89 + stdio: "inherit", 90 + }); 91 + 92 + install.on("close", (code) => { 93 + if (code === 0) { 94 + console.log("\n✓ Installed @typelex/cli and @typelex/emitter\n"); 95 + resolvePromise(); 96 + } else { 97 + console.error("\nFailed to install dependencies"); 98 + process.exit(code ?? 1); 99 + } 100 + }); 101 + 102 + install.on("error", (err) => { 103 + console.error("Failed to install dependencies:", err); 104 + reject(err); 105 + }); 106 + }); 107 + 64 108 // Create typelex directory 65 109 await mkdir(typelexDir, { recursive: true }); 66 110 ··· 104 148 console.warn("⚠ Could not update package.json:", (err as Error).message); 105 149 } 106 150 107 - // Install dependencies 108 - console.log("\nInstalling dependencies..."); 109 - 110 - // Detect package manager 111 - let packageManager = "npm"; 112 - try { 113 - await access(resolve(cwd, "pnpm-lock.yaml")); 114 - packageManager = "pnpm"; 115 - } catch { 116 - try { 117 - await access(resolve(cwd, "yarn.lock")); 118 - packageManager = "yarn"; 119 - } catch { 120 - // Default to npm 121 - } 122 - } 123 - 124 - return new Promise((resolvePromise, reject) => { 125 - const args = packageManager === "npm" 126 - ? ["install", "--save-dev", "@typelex/cli", "@typelex/emitter"] 127 - : ["add", "-D", "@typelex/cli", "@typelex/emitter"]; 128 - 129 - const install = spawn(packageManager, args, { 130 - cwd, 131 - stdio: "inherit", 132 - }); 133 - 134 - install.on("close", (code) => { 135 - if (code === 0) { 136 - console.log("\n✓ Installed @typelex/cli and @typelex/emitter"); 137 - console.log("\nTypelex initialized successfully!"); 138 - console.log("\nNext steps:"); 139 - console.log(" 1. Edit typelex/main.tsp to define your lexicons"); 140 - console.log(" 2. Run: npm run build:typelex"); 141 - resolvePromise(); 142 - } else { 143 - process.exit(code ?? 1); 144 - } 145 - }); 146 - 147 - install.on("error", (err) => { 148 - console.error("Failed to install dependencies:", err); 149 - reject(err); 150 - }); 151 - }); 151 + console.log("\nTypelex initialized successfully!"); 152 + console.log("\nNext steps:"); 153 + console.log(" 1. Edit typelex/main.tsp to define your lexicons"); 154 + console.log(" 2. Run: npm run build:typelex"); 152 155 }