From 60e884d624bce807f2482c2e329cd4c292cd8be9 Mon Sep 17 00:00:00 2001 From: Sora Morimoto Date: Tue, 10 Sep 2024 18:58:22 +0900 Subject: [PATCH] citty Signed-off-by: Sora Morimoto --- cli/constants.js | 6 - cli/execute.js | 178 ------- cli/index.d.ts | 35 -- cli/index.js | 96 ---- cli/operations/display-help.js | 176 ------- cli/operations/display-version.js | 5 - cli/parse-args.js | 24 - cli/process-option.js | 77 --- index.js => index.ts | 438 ++++++++--------- package.json | 4 +- src/constants.js | 2 +- src/index.js | 3 +- tests/extended.test.ts | 2 +- tests/simple.test.ts | 2 +- .../additional-properties-2.0/basic.test.ts | 2 +- tests/spec/another-array-type/basic.test.ts | 2 +- tests/spec/another-query-params/basic.test.ts | 2 +- tests/spec/axios/basic.test.ts | 2 +- .../spec/axiosSingleHttpClient/basic.test.ts | 2 +- tests/spec/const-keyword/basic.test.ts | 2 +- tests/spec/custom-extensions/basic.test.ts | 2 +- tests/spec/defaultAsSuccess/basic.test.ts | 2 +- tests/spec/defaultResponse/basic.test.ts | 2 +- tests/spec/deprecated/basic.test.ts | 2 +- tests/spec/discriminator/basic.test.ts | 2 +- tests/spec/dot-path-params/basic.test.ts | 2 +- tests/spec/enumNamesAsValues/basic.test.ts | 2 +- tests/spec/enums-2.0/basic.test.ts | 2 +- tests/spec/extractRequestBody/basic.test.ts | 2 +- tests/spec/extractRequestParams/basic.test.ts | 2 +- tests/spec/extractResponseBody/basic.test.ts | 2 +- tests/spec/extractResponseError/basic.test.ts | 2 +- tests/spec/js/basic.test.ts | 2 +- tests/spec/jsAxios/basic.test.ts | 2 +- tests/spec/moduleNameFirstTag/basic.test.ts | 2 +- tests/spec/moduleNameIndex/basic.test.ts | 2 +- tests/spec/noClient/basic.test.ts | 2 +- tests/spec/nullable-2.0/basic.test.ts | 2 +- tests/spec/nullable-3.0/basic.test.ts | 2 +- tests/spec/object-types/basic.test.ts | 2 +- tests/spec/on-insert-path-param/basic.test.ts | 2 +- tests/spec/patch/basic.test.ts | 2 +- tests/spec/readonly/basic.test.ts | 2 +- tests/spec/responses/basic.test.ts | 2 +- tests/spec/routeTypes/basic.test.ts | 2 +- tests/spec/singleHttpClient/basic.test.ts | 2 +- tests/spec/sortTypes-false/basic.test.ts | 2 +- tests/spec/sortTypes/basic.test.ts | 2 +- tests/spec/specProperty/basic.test.ts | 2 +- tests/spec/typeSuffixPrefix/basic.test.ts | 2 +- tests/spec/unionEnums/basic.test.ts | 2 +- tsconfig.json | 3 +- tsup.config.ts | 2 +- yarn.lock | 442 +++++------------- 54 files changed, 385 insertions(+), 1184 deletions(-) delete mode 100644 cli/constants.js delete mode 100644 cli/execute.js delete mode 100644 cli/index.d.ts delete mode 100644 cli/index.js delete mode 100644 cli/operations/display-help.js delete mode 100644 cli/operations/display-version.js delete mode 100644 cli/parse-args.js delete mode 100644 cli/process-option.js rename index.js => index.ts (50%) diff --git a/cli/constants.js b/cli/constants.js deleted file mode 100644 index 89e886237..000000000 --- a/cli/constants.js +++ /dev/null @@ -1,6 +0,0 @@ -const root_command = Symbol("root"); -const skip_command = Symbol("skip"); - -const reservedOptions = ["version", "help"]; - -export { root_command, skip_command, reservedOptions }; diff --git a/cli/execute.js b/cli/execute.js deleted file mode 100644 index fe9ee210a..000000000 --- a/cli/execute.js +++ /dev/null @@ -1,178 +0,0 @@ -import didYouMean from "didyoumean"; -import { root_command, skip_command } from "./constants.js"; -import { parseArgs } from "./parse-args.js"; - -didYouMean.threshold = 0.5; - -const execute = (params, commands, instance) => { - const args = parseArgs(params.args, params.from); - - return new Promise((resolve, reject) => { - const { command, usageOptions, error } = processArgs(commands, args); - - if (error) { - reject(new Error(error)); - return; - } - - if (!usageOptions.length && command.name === root_command) { - usageOptions.push( - command.options.find((option) => option.flags.name === "help"), - ); - } - - const operationOptions = usageOptions.filter((option) => option.operation); - if (operationOptions.length) { - operationOptions[0].operation(); - resolve({ - command: skip_command, - options: {}, - }); - return; - } else { - let error = ""; - - const processUserOptionData = (userOption, option) => { - if (userOption) { - const data = userOption.$data; - if (!data.length && !option.flags.value) { - return !option.flags.isNoFlag; - } - if (option.flags.value) { - if (option.flags.value.variadic) { - return data.reduce((acc, d) => { - acc.push(...d.split(",").map(option.flags.value.formatter)); - return acc; - }, []); - } else { - return option.flags.value.formatter(data[0] || option.default); - } - } - } - - return option.default; - }; - - const parsedOptionsObject = command.options.reduce((acc, option) => { - if (error) return acc; - - const userOption = usageOptions.find( - (o) => o.flags.name === option.flags.name, - ); - - if (!userOption && option.required) { - error = `required option '${option.flags.raw}' not specified`; - return acc; - } - - const flagValue = processUserOptionData(userOption, option); - if (!option.operation) { - const internal = option.internal || {}; - acc[internal.name || option.flags.name] = internal.formatter - ? internal.formatter(flagValue) - : flagValue; - } - - return acc; - }, {}); - - if (error) { - reject(new Error(error)); - } else { - resolve({ - command: command.name === root_command ? null : command.name, - options: parsedOptionsObject, - }); - } - } - }); -}; - -const processArgs = (commands, args) => { - let command = null; - let usageOptions = []; - let walkingOption = null; - let error = ""; - - let allFlagKeys = []; - - args.forEach((arg, i) => { - if (error) return; - - if (i === 0) { - command = commands[arg]; - - if (!command && !arg.startsWith("-")) { - const tip = didYouMean(arg, commands.keys()); - error = `unknown command ${arg}${ - tip ? `\n(Did you mean ${tip} ?)` : "" - }`; - } else if (!command) { - command = commands[root_command]; - } - - if (command) { - allFlagKeys = command.options.reduce( - (acc, option) => [...acc, ...option.flags.keys], - [], - ); - } - } - - if (error) return; - - if (arg.startsWith("-")) { - const option = command.options.find((option) => - option.flags.keys.includes(arg), - ); - - if (!option) { - const tip = didYouMean(arg, allFlagKeys); - error = `unknown option ${arg}${ - tip ? `\n(Did you mean ${tip} ?)` : "" - }`; - } - - if (option) { - if (walkingOption && walkingOption.flags.name === option.flags.name) { - return; - } - const existedOption = usageOptions.find( - (o) => o.flags.name === option.flags.name, - ); - if (existedOption) { - walkingOption = existedOption; - } else { - walkingOption = { - ...option, - $data: [], - }; - usageOptions.push(walkingOption); - } - } - - return; - } - - if (walkingOption) { - walkingOption.$data.push(arg); - } - }); - command = command || commands[root_command]; - - if (error) { - return { - command: null, - usageOptions: [], - error, - }; - } - - return { - command, - usageOptions, - error, - }; -}; - -export { execute }; diff --git a/cli/index.d.ts b/cli/index.d.ts deleted file mode 100644 index d4fc87279..000000000 --- a/cli/index.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -type CliStructOption = { - default?: unknown; - description?: string; - flags?: string; - internal?: { name?: string; formatter?: (value: any) => any }; - required?: boolean; -}; - -type CliStruct = { - alias?: string; - commands?: CliStruct[]; - description?: string; - inherited?: string | null; - name?: string; - options: CliStructOption[]; - version?: string; -}; - -type ExecuteOptions = { - args: string[]; -}; - -type ExecuteOutput = { - command: null | string; - options: Record; -}; - -type CliInstance = { - addCommand: (struct: CliStruct) => CliInstance; - execute: (options: ExecuteOptions) => Promise; -}; - -type Cli = >(struct: S) => CliInstance; - -export declare const cli: Cli; diff --git a/cli/index.js b/cli/index.js deleted file mode 100644 index f0ff21573..000000000 --- a/cli/index.js +++ /dev/null @@ -1,96 +0,0 @@ -import lodash from "lodash"; -import { reservedOptions, root_command } from "./constants.js"; -import { execute } from "./execute.js"; -import { displayHelp } from "./operations/display-help.js"; -import { displayVersion } from "./operations/display-version.js"; -import { processOption } from "./process-option.js"; - -const cli = (input) => { - const commands = {}; - - const addCommand = (command, { addVersion = false, addHelp = true } = {}) => { - commands[command.name] = { - name: command.name, - description: `${command.description || ""}`, - options: lodash.compact(command.options.map(processOption)), - }; - - if (addVersion) { - commands[command.name].options.unshift( - processOption({ - flags: "-v, --version", - description: "output the current version", - operation: () => displayVersion(instance), - }), - ); - } - - if (addHelp) { - commands[command.name].options.push( - processOption({ - flags: "-h, --help", - description: "display help for command", - operation: () => - displayHelp(commands, instance, commands[command.name]), - }), - ); - } - - return instance; - }; - - const instance = { - commands, - input, - addCommand, - execute: (params) => execute(params, commands, instance), - }; - - addCommand( - { - name: root_command, - options: [], - }, - { - addVersion: false, - addHelp: false, - }, - ); - - for (const option of input.options) { - const processed = processOption(option); - - if (!processed) return; - - if (reservedOptions.includes(processed.name)) { - console.warn("reserved option", processed.name); - return; - } - - commands[root_command].options.push(processed); - } - - commands[root_command].options.unshift( - processOption({ - flags: "-v, --version", - description: "output the current version", - operation: () => displayVersion(instance), - }), - ); - - commands[root_command].options.push( - processOption({ - flags: "-h, --help", - description: "display help for command", - operation: () => displayHelp(commands, instance, commands[root_command]), - }), - ); - - for (const command of Object.entries(input.commands ?? {})) { - addCommand(command); - } - - return instance; -}; - -export { cli }; diff --git a/cli/operations/display-help.js b/cli/operations/display-help.js deleted file mode 100644 index eb1d40e00..000000000 --- a/cli/operations/display-help.js +++ /dev/null @@ -1,176 +0,0 @@ -import lodash from "lodash"; -import { root_command } from "../constants.js"; - -const generateOptionsOutput = (options) => - options.reduce( - (acc, option) => { - const flags = `${option.flags.keys.join(", ")}${ - option.flags.value?.raw ? ` ${option.flags.value?.raw}` : "" - }`; - const description = `${option.description || ""}${ - option.default === undefined || - (option.flags.isNoFlag && option.default === true) - ? "" - : ` (default: ${ - typeof option.default === "string" - ? `"${option.default}"` - : option.default - })` - }`; - - if (flags.length > acc.maxLength) { - acc.maxLength = flags.length; - } - - acc.options.push({ - flags, - description, - }); - return acc; - }, - { - options: [], - maxLength: 0, - }, - ); - -const generateOptionsTextOutput = (options, maxLength, spaces) => - options - .map((option) => { - const spacesText = Array(spaces).fill(" ").join(""); - const leftStr = `${spacesText}${option.flags.padEnd(maxLength, " ")} `; - const leftStrFiller = Array(leftStr.length).fill(" ").join(""); - const descriptionLines = option.description.split("\n"); - - return ( - leftStr + - descriptionLines - .map((line, i) => { - if (i === 0) { - return line; - } - - return `\n${leftStrFiller}${line}`; - }) - .join("") - ); - }) - .join("\n"); - -const displayAllHelp = (commands, instance) => { - const { options, maxLength: maxOptionLength } = generateOptionsOutput( - commands[root_command].options, - ); - - const { commands: commandLabels, maxLength: maxCommandLength } = lodash - .filter(commands, (command) => command.name !== root_command) - .reduce( - (acc, command) => { - const options = generateOptionsOutput(command.options); - const name = `${command.name}${options.length ? " [options]" : ""}`; - const description = command.description; - - const maxLength = Math.max(name.length, options.maxLength); - if (maxLength > acc.maxLength) { - acc.maxLength = maxLength; - } - - acc.commands.push({ - description, - name, - options, - }); - return acc; - }, - { - commands: [], - maxLength: maxOptionLength, - }, - ); - - const optionsOutput = generateOptionsTextOutput(options, maxOptionLength, 2); - - const commandsOutput = commandLabels - .map((commandLabel) => { - const leftStr = ` ${commandLabel.name.padEnd( - maxCommandLength, - " ", - )} `; - const leftStrFiller = Array(leftStr.length).fill(" ").join(""); - const descriptionLines = commandLabel.description.split("\n"); - const optionsTextOutput = generateOptionsTextOutput( - commandLabel.options.options, - maxCommandLength, - 4, - ); - - return ( - leftStr + - descriptionLines - .map((line, i) => { - if (i === 0) { - return line; - } - - return `\n${leftStrFiller}${line}`; - }) - .join("") + - (optionsTextOutput.length ? `\n${optionsTextOutput}` : "") - ); - }) - .join("\n"); - - const outputTest = [ - optionsOutput && - `Options: -${optionsOutput}`, - commandsOutput && - `Commands: -${commandsOutput}`, - ] - .filter(Boolean) - .join("\n\n"); - - console.log(`Usage: ${[instance.input.name, instance.input.alias] - .filter(Boolean) - .join("|")}${optionsOutput ? " [options]" : ""}${ - commandsOutput ? " [command]" : "" - } -${ - instance.input.description && - ` -${instance.input.description}` -} - -${outputTest}`); -}; - -const displayHelp = (commands, instance, command) => { - if (command.name === root_command) return displayAllHelp(commands, instance); - - const { options, maxLength: maxOptionLength } = generateOptionsOutput( - command.options, - ); - const optionsOutput = generateOptionsTextOutput(options, maxOptionLength, 2); - - const outputTest = [ - optionsOutput && - `Options: -${optionsOutput}`, - ] - .filter(Boolean) - .join("\n\n"); - - console.log(`Usage: ${instance.input.name} ${command.name}${ - optionsOutput ? " [options]" : "" - } -${ - command.description && - ` -${command.description}` -} - -${outputTest}`); -}; - -export { displayHelp }; diff --git a/cli/operations/display-version.js b/cli/operations/display-version.js deleted file mode 100644 index 2a793e36c..000000000 --- a/cli/operations/display-version.js +++ /dev/null @@ -1,5 +0,0 @@ -const displayVersion = (instance) => { - console.log(instance.input.version); -}; - -export { displayVersion }; diff --git a/cli/parse-args.js b/cli/parse-args.js deleted file mode 100644 index 405a60902..000000000 --- a/cli/parse-args.js +++ /dev/null @@ -1,24 +0,0 @@ -const parseArgs = (args, type) => { - if (args == null || !Array.isArray(args)) { - throw "args should be array"; - } - const argsCopy = args.slice(); - - switch (type) { - case "electron": { - if (process.defaultApp) { - return argsCopy.slice(2); - } - - return argsCopy.slice(1); - } - case "user": { - return argsCopy; - } - default: { - return argsCopy.slice(2); - } - } -}; - -export { parseArgs }; diff --git a/cli/process-option.js b/cli/process-option.js deleted file mode 100644 index 47bc92602..000000000 --- a/cli/process-option.js +++ /dev/null @@ -1,77 +0,0 @@ -import lodash from "lodash"; - -const optionFormatters = { - number: (str) => +str, - numeric: (str) => +str, - str: (str) => `${str}`, - string: (str) => `${str}`, - bool: (str) => !!str, - boolean: (str) => !!str, -}; - -const processFlags = (flags) => { - let name = null; - const keys = []; - let value = null; - const isNoFlag = flags.includes("--no-"); - - const strArr = lodash.compact( - flags.split(" ").map((str) => str.replace(/,/g, "")), - ); - - for (const str of strArr) { - if (str.startsWith("-")) { - keys.push(str); - } else if (value === null) { - if (str.startsWith("{") || str.startsWith("[") || str.startsWith("<")) { - const rawValue = str.replace(/[{[<>}\].]/g, ""); - const variadic = str.includes("..."); - value = { - raw: str, - variadic, - name: rawValue, - formatter: optionFormatters[rawValue] || optionFormatters.string, - }; - } - } - } - - const longestKey = keys.slice().sort((a, b) => b.length - a.length)[0]; - - if (longestKey !== "") { - name = lodash.camelCase( - (isNoFlag ? longestKey.replace("--no-", "") : longestKey).replace( - /(--?)/, - "", - ), - ); - } - - return { - isNoFlag, - raw: flags, - name, - keys, - value, - }; -}; - -const processOption = (option) => { - const processedFlags = processFlags(option.flags); - - if (!processedFlags.name) { - console.warn("invalid option", option); - return null; - } - - return { - required: !!option.required, - description: `${option.description || ""}`, - default: option.default, - flags: processedFlags, - operation: option.operation, - internal: option.internal, - }; -}; - -export { processOption }; diff --git a/index.js b/index.ts similarity index 50% rename from index.js rename to index.ts index a920f2d0e..7ee5eb777 100644 --- a/index.js +++ b/index.ts @@ -1,345 +1,361 @@ -#!/usr/bin/env node - -import { resolve } from "node:path"; -import { cli } from "./cli/index.js"; -import packageJson from "./package.json"; +import * as path from "node:path"; +import { defineCommand, runMain } from "citty"; +import { consola } from "consola"; +import packageJson from "./package.json" with { type: "json" }; import { TemplatesGenConfig } from "./src/commands/generate-templates/configuration.js"; import { CodeGenConfig } from "./src/configuration.js"; import { HTTP_CLIENT } from "./src/constants.js"; import { generateApi, generateTemplates } from "./src/index.js"; -const codeGenBaseConfig = new CodeGenConfig({}); const templateGenBaseConfig = new TemplatesGenConfig({}); -const program = cli({ - name: packageJson.name, - alias: "sta", - version: packageJson.version, - description: - "Generate api via swagger scheme.\nSupports OA 3.0, 2.0, JSON, yaml.", - options: [ - { - flags: "-p, --path ", +const generateTemplatesCommand = defineCommand({ + meta: { + name: "generate-templates", + description: 'Generate ".ejs" templates needed for generate api', + }, + args: { + "clean-output": { + type: "boolean", + description: + "clean output folder before generate template. WARNING: May cause data loss", + default: templateGenBaseConfig.cleanOutput, + }, + "http-client": { + type: "string", + description: `http client type (possible values: ${Object.values( + HTTP_CLIENT, + )})`, + default: templateGenBaseConfig.httpClientType, + }, + modular: { + type: "boolean", + description: + "generate templates needed to separate files for http client, data contracts, and routes", + default: templateGenBaseConfig.modular, + }, + output: { + type: "string", + alias: "o", + description: "output path of generated templates", + default: templateGenBaseConfig.output, + }, + rewrite: { + type: "boolean", + alias: "r", + description: "rewrite content in existing templates", + default: templateGenBaseConfig.rewrite, + }, + silent: { + type: "boolean", + description: "Output only errors to console", + default: templateGenBaseConfig.silent, + }, + }, + run: async ({ args }) => { + await generateTemplates({ + cleanOutput: args["clean-output"], + httpClientType: args["http-client"], + modular: args.modular, + output: args.output, + rewrite: args.rewrite, + silent: args.silent, + }); + }, +}); + +const codeGenBaseConfig = new CodeGenConfig({}); + +const generateCommand = defineCommand({ + meta: { + name: "generate", + description: packageJson.description, + }, + args: { + path: { + type: "string", + alias: "p", description: "path/url to swagger scheme", required: true, }, - { - flags: "-o, --output ", + output: { + type: "string", + alias: "o", description: "output path of typescript api file", default: "./", }, - { - flags: "-n, --name ", + name: { + type: "string", + alias: "n", description: "name of output typescript api file", default: codeGenBaseConfig.fileName, }, - { - flags: "-t, --templates ", + templates: { + type: "string", + alias: "t", description: "path to folder containing templates", }, - { - flags: "-d, --default-as-success", + "default-as-success": { + type: "boolean", + alias: "d", description: - 'use "default" response status code as success response too.\n' + - 'some swagger schemas use "default" response status code as success response type by default.', + 'use "default" response status code as success response too. some swagger schemas use "default" response status code as success response type by default.', default: codeGenBaseConfig.defaultResponseAsSuccess, - internal: { name: "defaultResponseAsSuccess" }, }, - { - flags: "-r, --responses", + responses: { + type: "boolean", + alias: "r", description: - "generate additional information about request responses\n" + - "also add typings for bad responses", + "generate additional information about request responses also add typings for bad responses", default: codeGenBaseConfig.generateResponses, - internal: { name: "generateResponses" }, }, - { - flags: "--union-enums", + "union-enums": { + type: "boolean", description: 'generate all "enum" types as union types (T1 | T2 | TN)', default: codeGenBaseConfig.generateUnionEnums, - internal: { name: "generateUnionEnums" }, }, - { - flags: "--add-readonly", + "add-readonly": { + type: "boolean", description: "generate readonly properties", default: codeGenBaseConfig.addReadonly, }, - { - flags: "--route-types", + "route-types": { + type: "boolean", description: "generate type definitions for API routes", default: codeGenBaseConfig.generateRouteTypes, - internal: { name: "generateRouteTypes" }, }, - { - flags: "--no-client", + "no-client": { + type: "boolean", description: "do not generate an API class", default: codeGenBaseConfig.generateClient, }, - { - flags: "--enum-names-as-values", + "enum-names-as-values": { + type: "boolean", description: "use values in 'x-enumNames' as enum values (not only as keys)", default: codeGenBaseConfig.enumNamesAsValues, }, - { - flags: "--extract-request-params", + "extract-request-params": { description: "extract request params to data contract (Also combine path params and query params into one object)", default: codeGenBaseConfig.extractRequestParams, - internal: { formatter: Boolean }, }, - { - flags: "--extract-request-body", + "extract-request-body": { + type: "boolean", description: "extract request body type to data contract", default: codeGenBaseConfig.extractRequestBody, - internal: { formatter: Boolean }, }, - { - flags: "--extract-response-body", + "extract-response-body": { + type: "boolean", description: "extract response body type to data contract", default: codeGenBaseConfig.extractResponseBody, - internal: { formatter: Boolean }, }, - { - flags: "--extract-response-error", + "extract-response-error": { + type: "boolean", description: "extract response error type to data contract", default: codeGenBaseConfig.extractResponseError, - internal: { formatter: Boolean }, }, - { - flags: "--extract-responses", + "extract-responses": { + type: "boolean", description: "extract all responses described in /components/responses", default: codeGenBaseConfig.extractResponses, - internal: { formatter: Boolean }, }, - { - flags: "--modular", + modular: { + type: "boolean", description: "generate separated files for http client, data contracts, and routes", default: codeGenBaseConfig.modular, - internal: { formatter: Boolean }, }, - { - flags: "--js", + js: { + type: "boolean", description: "generate js api module with declaration file", default: codeGenBaseConfig.toJS, - internal: { formatter: Boolean, name: "toJS" }, }, - { - flags: "--module-name-index ", + "module-name-index": { + type: "string", description: "determines which path index should be used for routes separation (example: GET:/fruits/getFruit -> index:0 -> moduleName -> fruits)", default: codeGenBaseConfig.moduleNameIndex, - internal: { formatter: (moduleNameIndex) => +moduleNameIndex || 0 }, }, - { - flags: "--module-name-first-tag", + "module-name-first-tag": { + type: "boolean", description: "splits routes based on the first tag", default: codeGenBaseConfig.moduleNameFirstTag, }, - { - flags: "--disableStrictSSL", + disableStrictSSL: { + type: "boolean", description: "disabled strict SSL", default: codeGenBaseConfig.disableStrictSSL, - internal: { formatter: Boolean }, }, - { - flags: "--disableProxy", + disableProxy: { + type: "boolean", description: "disabled proxy", default: codeGenBaseConfig.disableProxy, - internal: { formatter: Boolean }, }, - { - flags: "--axios", + axios: { + type: "boolean", description: "generate axios http client", default: codeGenBaseConfig.httpClientType === HTTP_CLIENT.AXIOS, }, - { - flags: "--unwrap-response-data", + "unwrap-response-data": { + type: "boolean", description: "unwrap the data item from the response", default: codeGenBaseConfig.unwrapResponseData, }, - { - flags: "--disable-throw-on-error", + "disable-throw-on-error": { + type: "boolean", description: "Do not throw an error when response.ok is not true", default: codeGenBaseConfig.disableThrowOnError, }, - { - flags: "--single-http-client", + "single-http-client": { + type: "boolean", description: "Ability to send HttpClient instance to Api constructor", default: codeGenBaseConfig.singleHttpClient, - internal: { formatter: Boolean }, }, - { - flags: "--silent", + silent: { + type: "boolean", description: "Output only errors to console", default: codeGenBaseConfig.silent, - internal: { formatter: Boolean }, }, - { - flags: "--default-response ", + "default-response": { + type: "string", description: "default type for empty response schema", default: codeGenBaseConfig.defaultResponseType, - internal: { name: "defaultResponseType" }, }, - { - flags: "--type-prefix ", + "type-prefix": { + type: "boolean", description: "data contract name prefix", default: codeGenBaseConfig.typePrefix, }, - { - flags: "--type-suffix ", + "type-suffix": { + type: "boolean", description: "data contract name suffix", default: codeGenBaseConfig.typeSuffix, }, - { - flags: "--clean-output", + "clean-output": { + type: "boolean", description: "clean output folder before generate api. WARNING: May cause data loss", default: codeGenBaseConfig.cleanOutput, - internal: { formatter: Boolean }, }, - { - flags: "--api-class-name ", + "api-class-name": { + type: "string", description: "name of the api class", default: codeGenBaseConfig.apiClassName, }, - { - flags: "--patch", + patch: { + type: "boolean", description: "fix up small errors in the swagger source definition", default: codeGenBaseConfig.patch, - internal: { formatter: Boolean }, }, - { - flags: "--debug", + debug: { + type: "boolean", description: "additional information about processes inside this tool", default: codeGenBaseConfig.debug, }, - { - flags: "--another-array-type", + "another-array-type": { + type: "boolean", description: "generate array types as Array (by default Type[])", default: codeGenBaseConfig.anotherArrayType, }, - { - flags: "--sort-types", + "sort-types": { + type: "boolean", description: "sort fields and types", default: codeGenBaseConfig.sortTypes, }, - { - flags: "--extract-enums", + "extract-enums": { + type: "boolean", description: - "extract all enums from inline interface\\type content to typescript enum construction", + "extract all enums from inline interface/type content to typescript enum construction", default: codeGenBaseConfig.extractEnums, }, - { - flags: "--sort-routes", + "sort-routes": { + type: "boolean", description: "sort routes in alphabetical order", default: codeGenBaseConfig.sortRoutes, }, - { - flags: "--custom-config ", + "custom-config": { + type: "string", description: "custom config: primitiveTypeConstructs, hooks, ... ", default: "", }, - ], -}); - -program.addCommand({ - name: "generate-templates", - description: `Generate ".ejs" templates needed for generate api`, - options: [ - { - flags: "-o, --output ", - description: "output path of generated templates", - default: templateGenBaseConfig.output, - }, - { - flags: "-m, --modular", - description: - "generate templates needed to separate files for http client, data contracts, and routes", - default: templateGenBaseConfig.modular, - internal: { formatter: Boolean }, - }, - { - flags: "--http-client ", - description: `http client type (possible values: ${Object.values( - HTTP_CLIENT, - ) - .map((v) => `"${v}"`) - .join(", ")})`, - default: templateGenBaseConfig.httpClientType, - internal: { name: "httpClientType" }, - }, - { - flags: "-c, --clean-output", - description: - "clean output folder before generate template. WARNING: May cause data loss", - default: templateGenBaseConfig.cleanOutput, - internal: { formatter: Boolean }, - }, - { - flags: "-r, --rewrite", - description: "rewrite content in existing templates", - default: templateGenBaseConfig.rewrite, - internal: { formatter: Boolean }, - }, - { - flags: "--silent", - description: "Output only errors to console", - default: templateGenBaseConfig.silent, - internal: { formatter: Boolean }, - }, - ], -}); + }, + run: async ({ args }) => { + let customConfig = null; + let customConfigPath: string | undefined; -const main = async () => { - const { command, options } = await program.execute({ args: process.argv }); - - let customConfig = null; - let customConfigPath; - - if (options.customConfig) { - try { - customConfigPath = resolve(process.cwd(), options.customConfig); - customConfig = await import(customConfigPath); - customConfig = customConfig.default || customConfig; - } catch (e) { - console.error("Error loading custom config", e); + if (args["custom-config"]) { + try { + customConfigPath = path.resolve(process.cwd(), args["custom-config"]); + customConfig = await import(customConfigPath); + customConfig = customConfig.default || customConfig; + } catch (error) { + consola.error("Error loading custom config:", error); + } } + if (customConfig) { - console.log(`✨ found custom config at: ${customConfigPath}`); + consola.info(`Found custom config at: ${customConfigPath}`); } - } - try { - switch (command) { - case null: { - await generateApi({ - ...options, - name: options.name, - url: options.path, - generateRouteTypes: options.generateRouteTypes, - generateClient: !!(options.axios || options.client), - httpClientType: options.axios ? HTTP_CLIENT.AXIOS : HTTP_CLIENT.FETCH, - input: resolve(process.cwd(), options.path), - output: resolve(process.cwd(), options.output || "."), - ...customConfig, - }); - break; - } - case "generate-templates": { - await generateTemplates(options); - break; - } - default: { - break; - } - } - } catch (e) { - console.error(e); - process.exit(1); - } - process.exit(0); -}; + await generateApi({ + addReadonly: args["add-readonly"], + anotherArrayType: args["another-array-type"], + apiClassName: args["api-class-name"], + cleanOutput: args["clean-output"], + debug: args.debug, + defaultResponseAsSuccess: args["default-as-success"], + defaultResponseType: args["default-response"], + disableProxy: args.disableProxy, + disableStrictSSL: args.disableStrictSSL, + disableThrowOnError: args["disable-throw-on-error"], + enumNamesAsValues: args["enum-names-as-values"], + extractEnums: args["extract-enums"], + extractRequestBody: args["extract-request-body"], + extractRequestParams: args["extract-request-params"], + extractResponseBody: args["extract-response-body"], + extractResponseError: args["extract-response-error"], + extractResponses: args["extract-responses"], + fileName: args.name, + generateClient: !(args.axios || args["no-client"]), + generateResponses: args.responses, + generateRouteTypes: args["route-types"], + generateUnionEnums: args["union-enums"], + httpClientType: + args["http-client"] || args.axios + ? HTTP_CLIENT.AXIOS + : HTTP_CLIENT.FETCH, + input: path.resolve(process.cwd(), args.path), + modular: args.modular, + moduleNameFirstTag: args["module-name-first-tag"], + moduleNameIndex: +args["module-name-index"] || 0, + output: path.resolve(process.cwd(), args.output || "."), + patch: args.patch, + silent: args.silent, + singleHttpClient: args["single-http-client"], + sortRoutes: args["sort-routes"], + sortTypes: args["sort-types"], + templates: args.templates, + toJS: args.js, + typePrefix: args["type-prefix"], + typeSuffix: args["type-suffix"], + unwrapResponseData: args["unwrap-response-data"], + url: args.path, + ...customConfig, + }); + }, +}); + +const main = defineCommand({ + meta: { + name: packageJson.name, + description: packageJson.description, + version: packageJson.version, + }, + subCommands: { + generate: generateCommand, + "generate-templates": generateTemplatesCommand, + }, +}); -main(); +runMain(main); diff --git a/package.json b/package.json index d1c65ddbf..cce1cf5f9 100644 --- a/package.json +++ b/package.json @@ -47,9 +47,9 @@ }, "dependencies": { "@types/swagger-schema-official": "^2.0.25", + "citty": "^0.1.6", "consola": "^3.2.3", "cosmiconfig": "^9.0.0", - "didyoumean": "^1.2.2", "eta": "^2.2.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", @@ -63,13 +63,11 @@ "@biomejs/biome": "1.8.3", "@tsconfig/node18": "18.2.4", "@tsconfig/strictest": "2.0.5", - "@types/didyoumean": "1.2.2", "@types/js-yaml": "4.0.9", "@types/lodash": "4.17.7", "@types/node": "22.5.4", "@types/swagger2openapi": "7.0.4", "axios": "1.7.7", - "shx": "0.3.4", "tsup": "8.2.4", "vitest": "2.0.5" }, diff --git a/src/constants.js b/src/constants.js index ce0aaf914..efce06144 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,4 +1,4 @@ -import packageJson from "../package.json"; +import packageJson from "../package.json" with { type: "json" }; const DEFAULT_BODY_ARG_NAME = "data"; diff --git a/src/index.js b/src/index.js index 64ece6de6..aa30ba836 100644 --- a/src/index.js +++ b/src/index.js @@ -5,13 +5,12 @@ import { CodeGenProcess } from "./code-gen-process.js"; import { generateTemplates } from "./commands/generate-templates/index.js"; import * as constants from "./constants.js"; -async function generateApi({ name, prettier, ...config }) { +async function generateApi({ prettier, ...config }) { if (config.debug) { consola.level = Number.MAX_SAFE_INTEGER; } const codeGenProcess = new CodeGenProcess({ ...config, - fileName: name, prettierOptions: prettier, }); return await codeGenProcess.start(); diff --git a/tests/extended.test.ts b/tests/extended.test.ts index a13394b59..6823431ab 100644 --- a/tests/extended.test.ts +++ b/tests/extended.test.ts @@ -22,7 +22,7 @@ describe("extended", async () => { test.each(schemas)("$name", async (schema) => { await generateApi({ - name: schema.name, + fileName: schema.name, input: schema.filePath, output: tmpdir, silent: true, diff --git a/tests/simple.test.ts b/tests/simple.test.ts index 5acd14f76..759dabed6 100644 --- a/tests/simple.test.ts +++ b/tests/simple.test.ts @@ -22,7 +22,7 @@ describe("simple", async () => { test.each(schemas)("$name", async (schema) => { await generateApi({ - name: schema.name, + fileName: schema.name, input: schema.filePath, output: tmpdir, silent: true, diff --git a/tests/spec/additional-properties-2.0/basic.test.ts b/tests/spec/additional-properties-2.0/basic.test.ts index ac1ec5908..fb0f504d8 100644 --- a/tests/spec/additional-properties-2.0/basic.test.ts +++ b/tests/spec/additional-properties-2.0/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("additional properties 2.0", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/another-array-type/basic.test.ts b/tests/spec/another-array-type/basic.test.ts index aa74320db..9971c5a60 100644 --- a/tests/spec/another-array-type/basic.test.ts +++ b/tests/spec/another-array-type/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--another-array-type", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/another-query-params/basic.test.ts b/tests/spec/another-query-params/basic.test.ts index c08abad8b..eb4cf4338 100644 --- a/tests/spec/another-query-params/basic.test.ts +++ b/tests/spec/another-query-params/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("another-query-params", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/axios/basic.test.ts b/tests/spec/axios/basic.test.ts index e0d180d58..1f0102a2f 100644 --- a/tests/spec/axios/basic.test.ts +++ b/tests/spec/axios/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--axios option", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/axiosSingleHttpClient/basic.test.ts b/tests/spec/axiosSingleHttpClient/basic.test.ts index 9145872bf..b7ce66817 100644 --- a/tests/spec/axiosSingleHttpClient/basic.test.ts +++ b/tests/spec/axiosSingleHttpClient/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--axios --single-http-client", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/const-keyword/basic.test.ts b/tests/spec/const-keyword/basic.test.ts index dbd0273cd..381e3425e 100644 --- a/tests/spec/const-keyword/basic.test.ts +++ b/tests/spec/const-keyword/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("const-keyword", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/custom-extensions/basic.test.ts b/tests/spec/custom-extensions/basic.test.ts index caea62b88..498b8e06d 100644 --- a/tests/spec/custom-extensions/basic.test.ts +++ b/tests/spec/custom-extensions/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("custom extensions", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/defaultAsSuccess/basic.test.ts b/tests/spec/defaultAsSuccess/basic.test.ts index 01bd78d3b..97dc36cc4 100644 --- a/tests/spec/defaultAsSuccess/basic.test.ts +++ b/tests/spec/defaultAsSuccess/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--default-as-success", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/defaultResponse/basic.test.ts b/tests/spec/defaultResponse/basic.test.ts index 87d96b6ae..a83dd8ed1 100644 --- a/tests/spec/defaultResponse/basic.test.ts +++ b/tests/spec/defaultResponse/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--default-response", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/deprecated/basic.test.ts b/tests/spec/deprecated/basic.test.ts index e59796eeb..0109fc583 100644 --- a/tests/spec/deprecated/basic.test.ts +++ b/tests/spec/deprecated/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("@deprecated", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/discriminator/basic.test.ts b/tests/spec/discriminator/basic.test.ts index b8698fac5..ee0f66b96 100644 --- a/tests/spec/discriminator/basic.test.ts +++ b/tests/spec/discriminator/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("discriminator", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/dot-path-params/basic.test.ts b/tests/spec/dot-path-params/basic.test.ts index 9d1819e3c..365c21c77 100644 --- a/tests/spec/dot-path-params/basic.test.ts +++ b/tests/spec/dot-path-params/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--dot-path-params", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/enumNamesAsValues/basic.test.ts b/tests/spec/enumNamesAsValues/basic.test.ts index 718dc24f4..efca6f078 100644 --- a/tests/spec/enumNamesAsValues/basic.test.ts +++ b/tests/spec/enumNamesAsValues/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--enum-names-as-values", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/enums-2.0/basic.test.ts b/tests/spec/enums-2.0/basic.test.ts index a38be9c24..c8046d54d 100644 --- a/tests/spec/enums-2.0/basic.test.ts +++ b/tests/spec/enums-2.0/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("enums-2.0", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/extractRequestBody/basic.test.ts b/tests/spec/extractRequestBody/basic.test.ts index c32859c09..3f8636b61 100644 --- a/tests/spec/extractRequestBody/basic.test.ts +++ b/tests/spec/extractRequestBody/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--extract-request-body", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/extractRequestParams/basic.test.ts b/tests/spec/extractRequestParams/basic.test.ts index 7391363be..78577fca0 100644 --- a/tests/spec/extractRequestParams/basic.test.ts +++ b/tests/spec/extractRequestParams/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--extract-request-params", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/extractResponseBody/basic.test.ts b/tests/spec/extractResponseBody/basic.test.ts index 0df652cea..de8e108ce 100644 --- a/tests/spec/extractResponseBody/basic.test.ts +++ b/tests/spec/extractResponseBody/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--extract-response-body", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/extractResponseError/basic.test.ts b/tests/spec/extractResponseError/basic.test.ts index 0ff2cfee4..1aa62a583 100644 --- a/tests/spec/extractResponseError/basic.test.ts +++ b/tests/spec/extractResponseError/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--extract-response-body", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/js/basic.test.ts b/tests/spec/js/basic.test.ts index 899bda46f..7e43b09a6 100644 --- a/tests/spec/js/basic.test.ts +++ b/tests/spec/js/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--js --axios", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/jsAxios/basic.test.ts b/tests/spec/jsAxios/basic.test.ts index 0253f844d..08a220e25 100644 --- a/tests/spec/jsAxios/basic.test.ts +++ b/tests/spec/jsAxios/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--js", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/moduleNameFirstTag/basic.test.ts b/tests/spec/moduleNameFirstTag/basic.test.ts index 5c0f2956e..2b7271f6e 100644 --- a/tests/spec/moduleNameFirstTag/basic.test.ts +++ b/tests/spec/moduleNameFirstTag/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--module-name-first-tag", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/moduleNameIndex/basic.test.ts b/tests/spec/moduleNameIndex/basic.test.ts index 4e0716c97..a0fcc69ad 100644 --- a/tests/spec/moduleNameIndex/basic.test.ts +++ b/tests/spec/moduleNameIndex/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--module-name-index", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/noClient/basic.test.ts b/tests/spec/noClient/basic.test.ts index f3e8f166c..dc9db014d 100644 --- a/tests/spec/noClient/basic.test.ts +++ b/tests/spec/noClient/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--no-client", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/nullable-2.0/basic.test.ts b/tests/spec/nullable-2.0/basic.test.ts index 446de19f6..6cbf72796 100644 --- a/tests/spec/nullable-2.0/basic.test.ts +++ b/tests/spec/nullable-2.0/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("nullable-2.0 refs", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/nullable-3.0/basic.test.ts b/tests/spec/nullable-3.0/basic.test.ts index 5a755dede..0da689b61 100644 --- a/tests/spec/nullable-3.0/basic.test.ts +++ b/tests/spec/nullable-3.0/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("nullable-3.0 refs", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/object-types/basic.test.ts b/tests/spec/object-types/basic.test.ts index bfa60a76c..346814722 100644 --- a/tests/spec/object-types/basic.test.ts +++ b/tests/spec/object-types/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("object-types", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/on-insert-path-param/basic.test.ts b/tests/spec/on-insert-path-param/basic.test.ts index f2612c4ac..8446bc565 100644 --- a/tests/spec/on-insert-path-param/basic.test.ts +++ b/tests/spec/on-insert-path-param/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("on-insert-path-param", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/patch/basic.test.ts b/tests/spec/patch/basic.test.ts index 49f666979..38c36b1b3 100644 --- a/tests/spec/patch/basic.test.ts +++ b/tests/spec/patch/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--patch", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/readonly/basic.test.ts b/tests/spec/readonly/basic.test.ts index ee2be8ca7..bbedff1cb 100644 --- a/tests/spec/readonly/basic.test.ts +++ b/tests/spec/readonly/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("readonly", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/responses/basic.test.ts b/tests/spec/responses/basic.test.ts index 14fa2cb11..097b3091f 100644 --- a/tests/spec/responses/basic.test.ts +++ b/tests/spec/responses/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("responses", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/routeTypes/basic.test.ts b/tests/spec/routeTypes/basic.test.ts index 0226aad57..132a67553 100644 --- a/tests/spec/routeTypes/basic.test.ts +++ b/tests/spec/routeTypes/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--route-types", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/singleHttpClient/basic.test.ts b/tests/spec/singleHttpClient/basic.test.ts index 1ea7f76b8..13d4a00a5 100644 --- a/tests/spec/singleHttpClient/basic.test.ts +++ b/tests/spec/singleHttpClient/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--single-http-client", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/sortTypes-false/basic.test.ts b/tests/spec/sortTypes-false/basic.test.ts index 246aeedd6..be2cc0972 100644 --- a/tests/spec/sortTypes-false/basic.test.ts +++ b/tests/spec/sortTypes-false/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--sort-types=false", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/sortTypes/basic.test.ts b/tests/spec/sortTypes/basic.test.ts index 0de7eedf9..6aa6695de 100644 --- a/tests/spec/sortTypes/basic.test.ts +++ b/tests/spec/sortTypes/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--sort-types", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/specProperty/basic.test.ts b/tests/spec/specProperty/basic.test.ts index cdcf98a4d..3a5013a26 100644 --- a/tests/spec/specProperty/basic.test.ts +++ b/tests/spec/specProperty/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("specProperty", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/typeSuffixPrefix/basic.test.ts b/tests/spec/typeSuffixPrefix/basic.test.ts index 511bb3192..cdf708d9c 100644 --- a/tests/spec/typeSuffixPrefix/basic.test.ts +++ b/tests/spec/typeSuffixPrefix/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--type-prefix and --type-suffix", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tests/spec/unionEnums/basic.test.ts b/tests/spec/unionEnums/basic.test.ts index 986e2e379..6f2383258 100644 --- a/tests/spec/unionEnums/basic.test.ts +++ b/tests/spec/unionEnums/basic.test.ts @@ -19,7 +19,7 @@ describe("basic", async () => { test("--union-enums", async () => { await generateApi({ - name: "schema", + fileName: "schema", input: path.resolve(import.meta.dirname, "schema.json"), output: tmpdir, silent: true, diff --git a/tsconfig.json b/tsconfig.json index ba71ee8f8..61fe4989c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,8 @@ "checkJs": false, "module": "NodeNext", "moduleResolution": "NodeNext", - "noEmit": true + "noEmit": true, + "resolveJsonModule": true }, "exclude": ["dist"] } diff --git a/tsup.config.ts b/tsup.config.ts index f4751399d..ce22a735b 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -3,7 +3,7 @@ import { defineConfig } from "tsup"; export default defineConfig({ entry: { lib: "src/index.js", - cli: "index.js", + cli: "index.ts", }, clean: true, dts: { diff --git a/yarn.lock b/yarn.lock index 41d5277ea..7f684c471 100644 --- a/yarn.lock +++ b/yarn.lock @@ -583,114 +583,114 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.0" +"@rollup/rollup-android-arm-eabi@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.2" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-android-arm64@npm:4.21.0" +"@rollup/rollup-android-arm64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-android-arm64@npm:4.21.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.21.0" +"@rollup/rollup-darwin-arm64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.21.0" +"@rollup/rollup-darwin-x64@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.0" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.0" +"@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.0" +"@rollup/rollup-linux-arm64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.0" +"@rollup/rollup-linux-arm64-musl@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.0" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.0" +"@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.0" +"@rollup/rollup-linux-s390x-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.0" +"@rollup/rollup-linux-x64-gnu@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.0" +"@rollup/rollup-linux-x64-musl@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.0" +"@rollup/rollup-win32-arm64-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.0" +"@rollup/rollup-win32-ia32-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.21.0": - version: 4.21.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.0" +"@rollup/rollup-win32-x64-msvc@npm:4.21.2": + version: 4.21.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -709,13 +709,6 @@ __metadata: languageName: node linkType: hard -"@types/didyoumean@npm:1.2.2": - version: 1.2.2 - resolution: "@types/didyoumean@npm:1.2.2" - checksum: 10c0/59dbc10061ef486a672b222c55f2183e71c34e575652a1e2a88412b31086065d6a38ee046eca8a7568d2cf0fa86ee13df7dfa9e68dbe28ea829ba284c1673fb6 - languageName: node - linkType: hard - "@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" @@ -737,16 +730,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 22.5.0 - resolution: "@types/node@npm:22.5.0" - dependencies: - undici-types: "npm:~6.19.2" - checksum: 10c0/45aa75c5e71645fac42dced4eff7f197c3fdfff6e8a9fdacd0eb2e748ff21ee70ffb73982f068a58e8d73b2c088a63613142c125236cdcf3c072ea97eada1559 - languageName: node - linkType: hard - -"@types/node@npm:22.5.4": +"@types/node@npm:*, @types/node@npm:22.5.4": version: 22.5.4 resolution: "@types/node@npm:22.5.4" dependencies: @@ -869,9 +853,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc languageName: node linkType: hard @@ -970,16 +954,6 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - "brace-expansion@npm:^2.0.1": version: 2.0.1 resolution: "brace-expansion@npm:2.0.1" @@ -1107,6 +1081,15 @@ __metadata: languageName: node linkType: hard +"citty@npm:^0.1.6": + version: 0.1.6 + resolution: "citty@npm:0.1.6" + dependencies: + consola: "npm:^3.2.3" + checksum: 10c0/d26ad82a9a4a8858c7e149d90b878a3eceecd4cfd3e2ed3cd5f9a06212e451fb4f8cbe0fa39a3acb1b3e8f18e22db8ee5def5829384bad50e823d4b301609b48 + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -1173,13 +1156,6 @@ __metadata: languageName: node linkType: hard -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - "consola@npm:^3.2.3": version: 3.2.3 resolution: "consola@npm:3.2.3" @@ -1216,14 +1192,14 @@ __metadata: linkType: hard "debug@npm:4, debug@npm:^4.3.4, debug@npm:^4.3.5": - version: 4.3.6 - resolution: "debug@npm:4.3.6" + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b languageName: node linkType: hard @@ -1241,13 +1217,6 @@ __metadata: languageName: node linkType: hard -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: 10c0/95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -1481,9 +1450,9 @@ __metadata: linkType: hard "escalade@npm:^3.1.1": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 languageName: node linkType: hard @@ -1590,12 +1559,12 @@ __metadata: linkType: hard "follow-redirects@npm:^1.15.6": - version: 1.15.6 - resolution: "follow-redirects@npm:1.15.6" + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" peerDependenciesMeta: debug: optional: true - checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071 + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f languageName: node linkType: hard @@ -1638,13 +1607,6 @@ __metadata: languageName: node linkType: hard -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - "fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" @@ -1664,13 +1626,6 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -1724,20 +1679,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.0": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - "globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" @@ -1766,15 +1707,6 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -1863,30 +1795,6 @@ __metadata: languageName: node linkType: hard -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"interpret@npm:^1.0.0": - version: 1.4.0 - resolution: "interpret@npm:1.4.0" - checksum: 10c0/08c5ad30032edeec638485bc3f6db7d0094d9b3e85e0f950866600af3c52e9fd69715416d29564731c479d9f4d43ff3e4d302a178196bdc0e6837ec147640450 - languageName: node - linkType: hard - "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" @@ -1913,15 +1821,6 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0": - version: 2.15.1 - resolution: "is-core-module@npm:2.15.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/53432f10c69c40bfd2fa8914133a68709ff9498c86c3bf5fca3cdf3145a56fd2168cbf4a43b29843a6202a120a5f9c5ffba0a4322e1e3441739bc0b641682612 - languageName: node - linkType: hard - "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -2173,15 +2072,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.1.1": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - "minimatch@npm:^9.0.4": version: 9.0.5 resolution: "minimatch@npm:9.0.5" @@ -2191,13 +2081,6 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.3": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -2291,10 +2174,10 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 languageName: node linkType: hard @@ -2478,15 +2361,6 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - "onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -2549,13 +2423,6 @@ __metadata: languageName: node linkType: hard -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - "path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -2570,13 +2437,6 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - "path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" @@ -2609,9 +2469,9 @@ __metadata: linkType: hard "picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 languageName: node linkType: hard @@ -2652,14 +2512,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.41": - version: 8.4.41 - resolution: "postcss@npm:8.4.41" +"postcss@npm:^8.4.43": + version: 8.4.45 + resolution: "postcss@npm:8.4.45" dependencies: nanoid: "npm:^3.3.7" picocolors: "npm:^1.0.1" source-map-js: "npm:^1.2.0" - checksum: 10c0/c1828fc59e7ec1a3bf52b3a42f615dba53c67960ed82a81df6441b485fe43c20aba7f4e7c55425762fd99c594ecabbaaba8cf5b30fd79dfec5b52a9f63a2d690 + checksum: 10c0/ad6f8b9b1157d678560373696109745ab97a947d449f8a997acac41c7f1e4c0f3ca4b092d6df1387f430f2c9a319987b1780dbdc27e35800a88cde9b606c1e8f languageName: node linkType: hard @@ -2719,15 +2579,6 @@ __metadata: languageName: node linkType: hard -"rechoir@npm:^0.6.2": - version: 0.6.2 - resolution: "rechoir@npm:0.6.2" - dependencies: - resolve: "npm:^1.1.6" - checksum: 10c0/22c4bb32f4934a9468468b608417194f7e3ceba9a508512125b16082c64f161915a28467562368eeb15dc16058eb5b7c13a20b9eb29ff9927d1ebb3b5aa83e84 - languageName: node - linkType: hard - "reftools@npm:^1.1.9": version: 1.1.9 resolution: "reftools@npm:1.1.9" @@ -2756,32 +2607,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 - languageName: node - linkType: hard - "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -2797,25 +2622,25 @@ __metadata: linkType: hard "rollup@npm:^4.19.0, rollup@npm:^4.20.0": - version: 4.21.0 - resolution: "rollup@npm:4.21.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.21.0" - "@rollup/rollup-android-arm64": "npm:4.21.0" - "@rollup/rollup-darwin-arm64": "npm:4.21.0" - "@rollup/rollup-darwin-x64": "npm:4.21.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.21.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.21.0" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.21.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.21.0" - "@rollup/rollup-linux-x64-musl": "npm:4.21.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.21.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.21.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.21.0" + version: 4.21.2 + resolution: "rollup@npm:4.21.2" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.21.2" + "@rollup/rollup-android-arm64": "npm:4.21.2" + "@rollup/rollup-darwin-arm64": "npm:4.21.2" + "@rollup/rollup-darwin-x64": "npm:4.21.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.21.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.21.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.21.2" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.21.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.21.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.21.2" + "@rollup/rollup-linux-x64-musl": "npm:4.21.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.21.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.21.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.21.2" "@types/estree": "npm:1.0.5" fsevents: "npm:~2.3.2" dependenciesMeta: @@ -2855,7 +2680,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10c0/984beb858da245c5e3a9027d6d87e67ad6443f1b46eab07685b861d9e49da5856693265c62a6f8262c36d11c9092713a96a9124f43e6de6698eb84d77118496a + checksum: 10c0/c9d97f7a21cde110371b2e890a31a996fee09b81e639e79372b962a9638ae653d2d24186b94632fc5dfab8a0582e1d0639dfe34b8b75051facd86915a9585a5f languageName: node linkType: hard @@ -2900,19 +2725,6 @@ __metadata: languageName: node linkType: hard -"shelljs@npm:^0.8.5": - version: 0.8.5 - resolution: "shelljs@npm:0.8.5" - dependencies: - glob: "npm:^7.0.0" - interpret: "npm:^1.0.0" - rechoir: "npm:^0.6.2" - bin: - shjs: bin/shjs - checksum: 10c0/feb25289a12e4bcd04c40ddfab51aff98a3729f5c2602d5b1a1b95f6819ec7804ac8147ebd8d9a85dfab69d501bcf92d7acef03247320f51c1552cec8d8e2382 - languageName: node - linkType: hard - "should-equal@npm:^2.0.0": version: 2.0.0 resolution: "should-equal@npm:2.0.0" @@ -2969,18 +2781,6 @@ __metadata: languageName: node linkType: hard -"shx@npm:0.3.4": - version: 0.3.4 - resolution: "shx@npm:0.3.4" - dependencies: - minimist: "npm:^1.2.3" - shelljs: "npm:^0.8.5" - bin: - shx: lib/cli.js - checksum: 10c0/83251fb09314682f5a192f0249a4be68c755933313a41b5152b11c19fc0a68311954d3ca971a0cbae05815786a893c59b82f356484d8eeb009c84f4066b3fa31 - languageName: node - linkType: hard - "siginfo@npm:^2.0.0": version: 2.0.0 resolution: "siginfo@npm:2.0.0" @@ -3038,9 +2838,9 @@ __metadata: linkType: hard "source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf languageName: node linkType: hard @@ -3164,13 +2964,6 @@ __metadata: languageName: node linkType: hard -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - "swagger-schema-official@npm:2.0.0-bab6bed": version: 2.0.0-bab6bed resolution: "swagger-schema-official@npm:2.0.0-bab6bed" @@ -3185,22 +2978,20 @@ __metadata: "@biomejs/biome": "npm:1.8.3" "@tsconfig/node18": "npm:18.2.4" "@tsconfig/strictest": "npm:2.0.5" - "@types/didyoumean": "npm:1.2.2" "@types/js-yaml": "npm:4.0.9" "@types/lodash": "npm:4.17.7" "@types/node": "npm:22.5.4" "@types/swagger-schema-official": "npm:^2.0.25" "@types/swagger2openapi": "npm:7.0.4" axios: "npm:1.7.7" + citty: "npm:^0.1.6" consola: "npm:^3.2.3" cosmiconfig: "npm:^9.0.0" - didyoumean: "npm:^1.2.2" eta: "npm:^2.2.0" js-yaml: "npm:^4.1.0" lodash: "npm:^4.17.21" nanoid: "npm:^3.3.7" prettier: "npm:~3.3.3" - shx: "npm:0.3.4" swagger-schema-official: "npm:2.0.0-bab6bed" swagger2openapi: "npm:^7.0.8" tsup: "npm:8.2.4" @@ -3289,9 +3080,9 @@ __metadata: linkType: hard "tinyspy@npm:^3.0.0": - version: 3.0.0 - resolution: "tinyspy@npm:3.0.0" - checksum: 10c0/eb0dec264aa5370efd3d29743825eb115ed7f1ef8a72a431e9a75d5c9e7d67e99d04b0d61d86b8cd70c79ec27863f241ad0317bc453f78762e0cbd76d2c332d0 + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0 languageName: node linkType: hard @@ -3438,12 +3229,12 @@ __metadata: linkType: hard "vite@npm:^5.0.0": - version: 5.4.2 - resolution: "vite@npm:5.4.2" + version: 5.4.3 + resolution: "vite@npm:5.4.3" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.41" + postcss: "npm:^8.4.43" rollup: "npm:^4.20.0" peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 @@ -3476,7 +3267,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/23e347ca8aa6f0a774227e4eb7abae228f12c6806a727b046aa75e7ee37ffc2d68cff74360e12a42c347f79adc294e2363bc723b957bf4b382b5a8fb39e4df9d + checksum: 10c0/7afe601bcba82f81980c718fc171ba8f0c45e3bffaeb7ef831b64b84e396f963c3c87818b74da4c8e817d1bce1c179f1efae3bcb14d2e94b4eb635071722c8f2 languageName: node linkType: hard @@ -3620,13 +3411,6 @@ __metadata: languageName: node linkType: hard -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8"