|
1 | | -import { npmCommand } from "./npm.js"; |
| 1 | +import { npmCommand, npxCommand } from "./npm.js"; |
2 | 2 | import { createTempDirectory, removeDirectory, readTspLocation, getEmitterFromRepoConfig } from "./fs.js"; |
3 | 3 | import { Logger, printBanner, enableDebug, printVersion } from "./log.js"; |
4 | 4 | import { TspLocation, compileTsp, discoverMainFile, resolveTspConfigUrl } from "./typespec.js"; |
5 | 5 | import { getOptions } from "./options.js"; |
6 | | -import { mkdir, writeFile, cp, readFile, access, stat } from "node:fs/promises"; |
| 6 | +import { mkdir, writeFile, cp, readFile, access, stat, rename } from "node:fs/promises"; |
7 | 7 | import { addSpecFiles, checkoutCommit, cloneRepo, getRepoRoot, sparseCheckout } from "./git.js"; |
8 | 8 | import { doesFileExist } from "./network.js"; |
9 | 9 | import { parse as parseYaml } from "yaml"; |
10 | 10 | import { joinPaths, normalizePath, resolvePath } from "@typespec/compiler"; |
11 | 11 | import { formatAdditionalDirectories, getAdditionalDirectoryName } from "./utils.js"; |
12 | 12 | import { resolve } from "node:path"; |
13 | | -import { spawn } from "node:child_process"; |
14 | 13 | import { config as dotenvConfig } from "dotenv"; |
15 | 14 |
|
16 | 15 |
|
@@ -240,24 +239,25 @@ async function generate({ |
240 | 239 | } |
241 | 240 |
|
242 | 241 |
|
243 | | -async function convert(readme: string, outputDir: string): Promise<void> { |
244 | | - return new Promise((resolve, reject) => { |
245 | | - const autorest = spawn("npx", ["autorest", readme, "--openapi-to-typespec", "--use=@autorest/openapi-to-typespec", `--output-folder=${outputDir}`], { |
246 | | - cwd: outputDir, |
247 | | - stdio: "inherit", |
248 | | - shell: true, |
249 | | - }); |
250 | | - autorest.once("exit", (code) => { |
251 | | - if (code === 0) { |
252 | | - resolve(); |
253 | | - } else { |
254 | | - reject(new Error(`openapi to typespec conversion failed exited with code ${code}`)); |
255 | | - } |
256 | | - }); |
257 | | - autorest.once("error", (err) => { |
258 | | - reject(new Error(`openapi to typespec conversion failed with error: ${err}`)); |
259 | | - }); |
260 | | - }); |
| 242 | +async function convert(readme: string, outputDir: string, arm?: boolean): Promise<void> { |
| 243 | + const args = ["autorest", "--openapi-to-typespec", "--csharp=false", `--output-folder="${outputDir}"`, "--use=@autorest/openapi-to-typespec", `"${readme}"`]; |
| 244 | + if (arm) { |
| 245 | + const generateMetadataCmd = ["autorest", "--csharp", "--max-memory-size=8192", '--use="https://aka.ms/azsdk/openapi-to-typespec-csharp"', `--output-folder="${outputDir}"`, "--mgmt-debug.only-generate-metadata", "--azure-arm", "--skip-csproj", `"${readme}"`]; |
| 246 | + try { |
| 247 | + await npxCommand(outputDir, generateMetadataCmd); |
| 248 | + } catch (err) { |
| 249 | + Logger.error(`Error occurred while attempting to generate ARM metadata: ${err}`); |
| 250 | + process.exit(1); |
| 251 | + } |
| 252 | + try { |
| 253 | + await rename(joinPaths(outputDir, "metadata.json"), joinPaths(outputDir, "resources.json")); |
| 254 | + } catch (err) { |
| 255 | + Logger.error(`Error occurred while attempting to rename metadata.json to resources.json: ${err}`); |
| 256 | + process.exit(1); |
| 257 | + } |
| 258 | + args.push("--isArm"); |
| 259 | + } |
| 260 | + return await npxCommand(outputDir, args); |
261 | 261 | } |
262 | 262 |
|
263 | 263 |
|
@@ -330,7 +330,7 @@ async function main() { |
330 | 330 | if (await doesFileExist(readme)) { |
331 | 331 | readme = normalizePath(resolve(readme)); |
332 | 332 | } |
333 | | - await convert(readme, rootUrl); |
| 333 | + await convert(readme, rootUrl, options.arm); |
334 | 334 | break; |
335 | 335 | default: |
336 | 336 | throw new Error(`Unknown command: ${options.command}`); |
|
0 commit comments