{"version":3,"file":"cli.mjs","sources":["../src/cli.ts"],"sourcesContent":["import { Command, Option } from 'commander'\nimport { loadApplicationJson } from './schema/load'\nimport * as path from 'path'\nimport { generate } from './client/generate'\nimport { writeDocumentPartsToStream } from './output/writer'\nimport { colorConsole } from './util/color-console'\nimport { GenerateMode, generateModes, GeneratorOptions } from './client/generator-context'\n\nexport function cli(workingDirectory: string, args: string[]) {\n  // Pre 13 commander allowed `-pn` however the latest version doesn't. Rewrite it to `--pn` for backwards compatibility.\n  const processedArgs = args.map((arg) => (arg === '-pn' ? '--pn' : arg))\n  const program = new Command()\n  program\n    .command('generate')\n    .description('Generates a TypeScript client for the given application.json file')\n    .requiredOption('-a --application <path>', 'Specifies the application.json file')\n    .requiredOption('-o --output <path>', 'Specifies the output file path')\n    .option('--pn --preserve-names', 'Preserve names from application.json spec instead of sanitizing them')\n    .addOption(\n      new Option(\n        '-m --mode <mode>',\n        \"Generate client in specified mode. The 'full' mode includes all features, 'minimal' generates a smaller client without deployment features.\",\n      )\n        .choices(generateModes)\n        .default('full'),\n    )\n    .allowExcessArguments(true) // Maintains backwards compatibility with pre 13 commanded\n    .action(\n      async ({\n        application,\n        output,\n        preserveNames,\n        mode,\n      }: {\n        application: string\n        output: string\n        preserveNames?: boolean\n        mode?: GenerateMode\n      }): Promise<void> => {\n        await generateClientCommand({\n          application,\n          output,\n          preserveNames: Boolean(preserveNames),\n          mode: (mode ?? 'full') as GenerateMode,\n          workingDirectory,\n        })\n        colorConsole.success`Operation completed successfully`\n      },\n    )\n    .configureOutput({\n      writeErr(str: string) {\n        colorConsole.error`${str}`\n      },\n    })\n  try {\n    program.parse(processedArgs)\n  } catch (err) {\n    if (err instanceof Error) {\n      colorConsole.error`Unhandled error: \\n\\n${err.stack}`\n    } else {\n      colorConsole.error`Unhandled error: \\n\\n${err}`\n    }\n    process.exit(-1)\n  }\n}\n\nexport async function generateClientCommand({\n  application,\n  output,\n  preserveNames,\n  mode,\n  workingDirectory,\n}: {\n  application: string\n  output: string\n  workingDirectory: string\n} & GeneratorOptions): Promise<void> {\n  const fs = await import('fs')\n\n  const resolvedAppJsonPath = path.resolve(workingDirectory, application)\n  const resolvedOutPath = path.resolve(workingDirectory, output)\n  const resolvedOutDir = path.dirname(resolvedOutPath)\n  colorConsole.info`Reading application.json file from path ${resolvedAppJsonPath}`\n  const spec = await loadApplicationJson(resolvedAppJsonPath)\n  colorConsole.info`Generating TS client for ${spec.name}`\n  const parts = generate(spec, { preserveNames, mode })\n  if (!fs.existsSync(resolvedOutDir)) {\n    colorConsole.warn`Output directory ${resolvedOutDir} does not exist and will be created.`\n    fs.mkdirSync(resolvedOutDir, { recursive: true })\n  }\n  colorConsole.info`Writing TS client to ${resolvedOutPath}`\n  const file = await createAwaitableWriteStream(resolvedOutPath)\n  writeDocumentPartsToStream(parts, file)\n  await file.finish()\n}\n\nasync function createAwaitableWriteStream(path: string) {\n  const fs = await import('fs')\n  const stream = fs.createWriteStream(path, {\n    flags: 'w',\n  })\n  const finish = new Promise<void>((resolve, reject) => {\n    stream.on('error', (err) => {\n      reject(err)\n    })\n    stream.on('finish', () => {\n      resolve()\n    })\n  })\n  return {\n    write(chunk: string): void {\n      stream.write(chunk)\n    },\n    finish() {\n      stream.end()\n      return finish\n    },\n  }\n}\n"],"names":[],"mappings":";;;;;;;;AAQM,SAAU,GAAG,CAAC,gBAAwB,EAAE,IAAc,EAAA;;IAE1D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC;AACvE,IAAA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;IAC7B;SACG,OAAO,CAAC,UAAU;SAClB,WAAW,CAAC,mEAAmE;AAC/E,SAAA,cAAc,CAAC,yBAAyB,EAAE,qCAAqC;AAC/E,SAAA,cAAc,CAAC,oBAAoB,EAAE,gCAAgC;AACrE,SAAA,MAAM,CAAC,uBAAuB,EAAE,sEAAsE;AACtG,SAAA,SAAS,CACR,IAAI,MAAM,CACR,kBAAkB,EAClB,6IAA6I;SAE5I,OAAO,CAAC,aAAa;SACrB,OAAO,CAAC,MAAM,CAAC;AAEnB,SAAA,oBAAoB,CAAC,IAAI,CAAC;AAC1B,SAAA,MAAM,CACL,OAAO,EACL,WAAW,EACX,MAAM,EACN,aAAa,EACb,IAAI,GAML,KAAmB;AAClB,QAAA,MAAM,qBAAqB,CAAC;YAC1B,WAAW;YACX,MAAM;AACN,YAAA,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;AACrC,YAAA,IAAI,GAAG,IAAI,IAAI,MAAM,CAAiB;YACtC,gBAAgB;AACjB,SAAA,CAAC;AACF,QAAA,YAAY,CAAC,OAAO,CAAA,CAAA,gCAAA,CAAkC;AACxD,IAAA,CAAC;AAEF,SAAA,eAAe,CAAC;AACf,QAAA,QAAQ,CAAC,GAAW,EAAA;AAClB,YAAA,YAAY,CAAC,KAAK,CAAA,CAAA,EAAG,GAAG,EAAE;QAC5B,CAAC;AACF,KAAA,CAAC;AACJ,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;IAC9B;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,IAAI,GAAG,YAAY,KAAK,EAAE;YACxB,YAAY,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,GAAG,CAAC,KAAK,EAAE;QACvD;aAAO;AACL,YAAA,YAAY,CAAC,KAAK,CAAA,CAAA,qBAAA,EAAwB,GAAG,EAAE;QACjD;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAClB;AACF;AAEO,eAAe,qBAAqB,CAAC,EAC1C,WAAW,EACX,MAAM,EACN,aAAa,EACb,IAAI,EACJ,gBAAgB,GAKE,EAAA;AAClB,IAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;IAE7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC;IACvE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AACpD,IAAA,YAAY,CAAC,IAAI,CAAA,CAAA,wCAAA,EAA2C,mBAAmB,EAAE;AACjF,IAAA,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,mBAAmB,CAAC;IAC3D,YAAY,CAAC,IAAI,CAAA,CAAA,yBAAA,EAA4B,IAAI,CAAC,IAAI,EAAE;AACxD,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;AAClC,QAAA,YAAY,CAAC,IAAI,CAAA,CAAA,iBAAA,EAAoB,cAAc,sCAAsC;QACzF,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACnD;AACA,IAAA,YAAY,CAAC,IAAI,CAAA,CAAA,qBAAA,EAAwB,eAAe,EAAE;AAC1D,IAAA,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC,eAAe,CAAC;AAC9D,IAAA,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC;AACvC,IAAA,MAAM,IAAI,CAAC,MAAM,EAAE;AACrB;AAEA,eAAe,0BAA0B,CAAC,IAAY,EAAA;AACpD,IAAA,MAAM,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;AAC7B,IAAA,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE;AACxC,QAAA,KAAK,EAAE,GAAG;AACX,KAAA,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;QACnD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAI;YACzB,MAAM,CAAC,GAAG,CAAC;AACb,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;AACvB,YAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;IACF,OAAO;AACL,QAAA,KAAK,CAAC,KAAa,EAAA;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QACrB,CAAC;QACD,MAAM,GAAA;YACJ,MAAM,CAAC,GAAG,EAAE;AACZ,YAAA,OAAO,MAAM;QACf,CAAC;KACF;AACH;;;;"}