UNPKG

orval

Version:

A swagger client generator for typescript

86 lines (84 loc) 4.1 kB
#!/usr/bin/env node import { c as description, i as startWatcher, l as name, n as loadConfigFile, r as generateSpec, s as normalizeOptions, t as findConfigFile, u as version } from "../config-CPV4lUaV.mjs"; import path from "node:path"; import { Option, program } from "@commander-js/extra-typings"; import { ErrorWithTag, OutputClient, OutputMode, isString, log, logError, setVerbose, startMessage } from "@orval/core"; //#region src/bin/orval.ts const orvalMessage = startMessage({ name, version, description }); const cli = program.name("orval").description("Instantly generate TypeScript clients from your OpenAPI specification").version(version); cli.addOption(new Option("-o, --output <path>", "output file destination").conflicts(["config", "project"])).addOption(new Option("-i, --input <path>", "input file (yaml or json openapi specs)").conflicts(["config", "project"])).addOption(new Option("-c, --config <path>", "override flags by a config file").conflicts(["input", "output"])).addOption(new Option("-p, --project <name...>", "focus one or more projects of the config").conflicts(["input", "output"])).addOption(new Option("-m, --mode <name>", "default mode that will be used").choices(Object.values(OutputMode))).option("-w, --watch [paths...]", "Watch mode, if path is not specified, it watches the input target").addOption(new Option("--client <name>", "default client that will be used").choices(Object.values(OutputClient))).option("--mock", "activate the mock").option("--clean [paths...]", "Clean output directory").option("--prettier", "Prettier generated files").option("--biome", "biome generated files").option("--tsconfig <path>", "path to your tsconfig file").option("--verbose", "Enable verbose logging").action(async (options) => { if (options.verbose) setVerbose(true); log(orvalMessage); if (isString(options.input) && isString(options.output)) { const normalizedOptions = await normalizeOptions({ input: options.input, output: { target: options.output, clean: options.clean, prettier: options.prettier, biome: options.biome, mock: options.mock, client: options.client, mode: options.mode, tsconfig: options.tsconfig } }); if (options.watch) await startWatcher(options.watch, async () => { try { await generateSpec(process.cwd(), normalizedOptions); } catch (error) { logError(error); process.exit(1); } }, normalizedOptions.input.target); else try { await generateSpec(process.cwd(), normalizedOptions); } catch (error) { if (error instanceof ErrorWithTag) logError(error.cause, error.tag); else logError(error); process.exit(1); } } else { const configFilePath = findConfigFile(options.config); const workspace = path.dirname(configFilePath); const configFile = await loadConfigFile(configFilePath); const missingProjects = options.project?.filter((p) => !Object.hasOwn(configFile, p)); if (missingProjects?.length) { logError(`Project not found in config: ${missingProjects.join(", ")}`); process.exit(1); } const configs = Object.entries(configFile).filter(([projectName]) => !Array.isArray(options.project) || options.project.includes(projectName)); let hasErrors = false; for (const [projectName, config] of configs) { const normalizedOptions = await normalizeOptions(config, workspace, options); if (options.watch === void 0) try { await generateSpec(workspace, normalizedOptions, projectName); } catch (error) { hasErrors = true; logError(error, projectName); } else { const fileToWatch = isString(normalizedOptions.input.target) ? normalizedOptions.input.target : void 0; await startWatcher(options.watch, async () => { try { await generateSpec(workspace, normalizedOptions, projectName); } catch (error) { logError(error, projectName); } }, fileToWatch); } } if (hasErrors) { logError("One or more project failed, see above for details"); process.exit(1); } } }); await cli.parseAsync(process.argv); //#endregion export { }; //# sourceMappingURL=orval.mjs.map