{"version":3,"file":"cli.cjs","names":["TemplatesGenConfig","HTTP_CLIENT","generateTemplates","CodeGenConfig","generateApi","path"],"sources":["../index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as path from \"node:path\";\nimport { loadConfig } from \"c12\";\nimport { defineCommand, runMain } from \"citty\";\nimport packageJson from \"./package.json\" with { type: \"json\" };\nimport { TemplatesGenConfig } from \"./src/commands/generate-templates/configuration.js\";\nimport { CodeGenConfig } from \"./src/configuration.js\";\nimport { HTTP_CLIENT } from \"./src/constants.js\";\nimport { generateApi, generateTemplates } from \"./src/index.js\";\nimport type { GenerateApiParams, HttpClientType } from \"./types/index.js\";\n\nconst templateGenBaseConfig = new TemplatesGenConfig({});\n\nconst generateTemplatesCommand = defineCommand({\n  meta: {\n    name: \"generate-templates\",\n    description: 'Generate \".ejs\" templates needed for generate api',\n  },\n  args: {\n    \"clean-output\": {\n      type: \"boolean\",\n      description:\n        \"clean output folder before generate template. WARNING: May cause data loss\",\n      default: templateGenBaseConfig.cleanOutput,\n    },\n    debug: {\n      type: \"boolean\",\n      description: \"additional information about processes inside this tool\",\n      default: templateGenBaseConfig.debug,\n    },\n    \"http-client\": {\n      type: \"string\",\n      description: `http client type (possible values: ${Object.values(\n        HTTP_CLIENT,\n      )})`,\n      default: templateGenBaseConfig.httpClientType,\n    },\n    modular: {\n      type: \"boolean\",\n      description:\n        \"generate templates needed to separate files for http client, data contracts, and routes\",\n      default: templateGenBaseConfig.modular,\n    },\n    output: {\n      type: \"string\",\n      alias: \"o\",\n      description: \"output path of generated templates\",\n      default: templateGenBaseConfig.output,\n    },\n    rewrite: {\n      type: \"boolean\",\n      alias: \"r\",\n      description: \"rewrite content in existing templates\",\n      default: templateGenBaseConfig.rewrite,\n    },\n    silent: {\n      type: \"boolean\",\n      description: \"Output only errors to console\",\n      default: templateGenBaseConfig.silent,\n    },\n  },\n  run: async ({ args }) => {\n    await generateTemplates({\n      cleanOutput: args[\"clean-output\"],\n      httpClientType: args[\"http-client\"] as HttpClientType,\n      modular: args.modular,\n      output: args.output,\n      rewrite: args.rewrite,\n      silent: args.silent,\n      debug: args.debug,\n    });\n  },\n});\n\nconst codeGenBaseConfig = new CodeGenConfig({});\n\nconst generateCommand = defineCommand({\n  meta: {\n    name: \"generate\",\n    description: packageJson.description,\n  },\n  args: {\n    \"add-readonly\": {\n      type: \"boolean\",\n      description: \"generate readonly properties\",\n      default: codeGenBaseConfig.addReadonly,\n    },\n    \"another-array-type\": {\n      type: \"boolean\",\n      description: \"generate array types as Array<Type> (by default Type[])\",\n      default: codeGenBaseConfig.anotherArrayType,\n    },\n    \"api-class-name\": {\n      type: \"string\",\n      description: \"name of the api class\",\n      default: codeGenBaseConfig.apiClassName,\n    },\n    axios: {\n      type: \"boolean\",\n      description: \"generate axios http client\",\n      default: false,\n    },\n    \"clean-output\": {\n      type: \"boolean\",\n      description:\n        \"clean output folder before generate api. WARNING: May cause data loss\",\n      default: codeGenBaseConfig.cleanOutput,\n    },\n    client: {\n      type: \"boolean\",\n      description: \"do not generate an API class\",\n      default: codeGenBaseConfig.generateClient,\n    },\n    \"custom-config\": {\n      type: \"string\",\n      description: \"custom config: primitiveTypeConstructs, hooks, ... \",\n    },\n    debug: {\n      type: \"boolean\",\n      description: \"additional information about processes inside this tool\",\n      default: codeGenBaseConfig.debug,\n    },\n    \"default-as-success\": {\n      type: \"boolean\",\n      alias: \"d\",\n      description:\n        'use \"default\" response status code as success response too. some swagger schemas use \"default\" response status code as success response type by default.',\n      default: codeGenBaseConfig.defaultResponseAsSuccess,\n    },\n    \"default-response\": {\n      type: \"string\",\n      description: \"default type for empty response schema\",\n      default: codeGenBaseConfig.defaultResponseType,\n    },\n    \"disable-throw-on-error\": {\n      type: \"boolean\",\n      description: \"Do not throw an error when response.ok is not true\",\n      default: codeGenBaseConfig.disableThrowOnError,\n    },\n    \"enum-names-as-values\": {\n      type: \"boolean\",\n      description:\n        \"use values in 'x-enumNames' as enum values (not only as keys)\",\n      default: codeGenBaseConfig.enumNamesAsValues,\n    },\n    \"extract-enums\": {\n      type: \"boolean\",\n      description:\n        \"extract all enums from inline interface/type content to typescript enum construction\",\n      default: codeGenBaseConfig.extractEnums,\n    },\n    \"extract-request-body\": {\n      type: \"boolean\",\n      description: \"extract request body type to data contract\",\n      default: codeGenBaseConfig.extractRequestBody,\n    },\n    \"extract-request-params\": {\n      type: \"boolean\",\n      description:\n        \"extract request params to data contract (Also combine path params and query params into one object)\",\n      default: codeGenBaseConfig.extractRequestParams,\n    },\n    \"extract-response-body\": {\n      type: \"boolean\",\n      description: \"extract response body type to data contract\",\n      default: codeGenBaseConfig.extractResponseBody,\n    },\n    \"extract-response-error\": {\n      type: \"boolean\",\n      description: \"extract response error type to data contract\",\n      default: codeGenBaseConfig.extractResponseError,\n    },\n    \"extract-responses\": {\n      type: \"boolean\",\n      description: \"extract all responses described in /components/responses\",\n      default: codeGenBaseConfig.extractResponses,\n    },\n    \"generate-union-enums\": {\n      type: \"boolean\",\n      description: 'generate all \"enum\" types as union types (T1 | T2 | TN)',\n      default: codeGenBaseConfig.generateUnionEnums,\n    },\n    \"http-client\": {\n      type: \"string\",\n      description: `http client type (possible values: ${Object.values(\n        HTTP_CLIENT,\n      )})`,\n    },\n    js: {\n      type: \"boolean\",\n      description: \"generate js api module with declaration file\",\n      default: codeGenBaseConfig.toJS,\n    },\n    modular: {\n      type: \"boolean\",\n      description:\n        \"generate separated files for http client, data contracts, and routes\",\n      default: codeGenBaseConfig.modular,\n    },\n    \"module-name-first-tag\": {\n      type: \"boolean\",\n      description: \"splits routes based on the first tag\",\n      default: codeGenBaseConfig.moduleNameFirstTag,\n    },\n    \"module-name-index\": {\n      type: \"string\",\n      description:\n        \"determines which path index should be used for routes separation (example: GET:/fruits/getFruit -> index:0 -> moduleName -> fruits)\",\n      default: codeGenBaseConfig.moduleNameIndex.toString(),\n    },\n    name: {\n      type: \"string\",\n      alias: \"n\",\n      description: \"name of output typescript api file\",\n      default: codeGenBaseConfig.fileName,\n    },\n    output: {\n      type: \"string\",\n      alias: \"o\",\n      description: \"output path of typescript api file\",\n      default: \"./\",\n    },\n    patch: {\n      type: \"boolean\",\n      description: \"fix up small errors in the swagger source definition\",\n      default: codeGenBaseConfig.patch,\n    },\n    path: {\n      type: \"string\",\n      alias: \"p\",\n      description: \"path/url to swagger schema\",\n    },\n    responses: {\n      type: \"boolean\",\n      alias: \"r\",\n      description:\n        \"generate additional information about request responses also add typings for bad responses\",\n      default: codeGenBaseConfig.generateResponses,\n    },\n    \"route-types\": {\n      type: \"boolean\",\n      description: \"generate type definitions for API routes\",\n      default: codeGenBaseConfig.generateRouteTypes,\n    },\n    silent: {\n      type: \"boolean\",\n      description: \"Output only errors to console\",\n      default: codeGenBaseConfig.silent,\n    },\n    \"single-http-client\": {\n      type: \"boolean\",\n      description: \"Ability to send HttpClient instance to Api constructor\",\n      default: codeGenBaseConfig.singleHttpClient,\n    },\n    \"sort-routes\": {\n      type: \"boolean\",\n      description: \"sort routes in alphabetical order\",\n      default: codeGenBaseConfig.sortRoutes,\n    },\n    \"sort-types\": {\n      type: \"boolean\",\n      description: \"sort fields and types\",\n      default: codeGenBaseConfig.sortTypes,\n    },\n    templates: {\n      type: \"string\",\n      alias: \"t\",\n      description: \"path to folder containing templates\",\n    },\n    \"type-prefix\": {\n      type: \"string\",\n      description: \"data contract name prefix\",\n      default: codeGenBaseConfig.typePrefix,\n    },\n    \"type-suffix\": {\n      type: \"string\",\n      description: \"data contract name suffix\",\n      default: codeGenBaseConfig.typeSuffix,\n    },\n    \"unwrap-response-data\": {\n      type: \"boolean\",\n      description: \"unwrap the data item from the response\",\n      default: codeGenBaseConfig.unwrapResponseData,\n    },\n  },\n  run: async ({ args }) => {\n    const customConfig = await loadConfig<GenerateApiParams>({\n      name: \"swagger-typescript-api\",\n      configFile: args[\"custom-config\"],\n    });\n\n    await generateApi({\n      addReadonly: args[\"add-readonly\"],\n      anotherArrayType: args[\"another-array-type\"],\n      apiClassName: args[\"api-class-name\"],\n      cleanOutput: args[\"clean-output\"],\n      debug: args.debug,\n      defaultResponseAsSuccess: args[\"default-as-success\"],\n      defaultResponseType: args[\"default-response\"],\n      disableThrowOnError: args[\"disable-throw-on-error\"],\n      enumNamesAsValues: args[\"enum-names-as-values\"],\n      extractEnums: args[\"extract-enums\"],\n      extractRequestBody: args[\"extract-request-body\"],\n      extractRequestParams: args[\"extract-request-params\"],\n      extractResponseBody: args[\"extract-response-body\"],\n      extractResponseError: args[\"extract-response-error\"],\n      extractResponses: args[\"extract-responses\"],\n      fileName: args.name,\n      generateClient: args.client,\n      generateResponses: args.responses,\n      generateRouteTypes: args[\"route-types\"],\n      generateUnionEnums: args[\"generate-union-enums\"],\n      httpClientType:\n        args[\"http-client\"] || args.axios\n          ? HTTP_CLIENT.AXIOS\n          : HTTP_CLIENT.FETCH,\n      input: path.resolve(process.cwd(), args.path as string),\n      modular: args.modular,\n      moduleNameFirstTag: args[\"module-name-first-tag\"],\n      moduleNameIndex: +args[\"module-name-index\"] || 0,\n      output: path.resolve(process.cwd(), (args.output as string) || \".\"),\n      patch: args.patch,\n      silent: args.silent,\n      singleHttpClient: args[\"single-http-client\"],\n      sortRoutes: args[\"sort-routes\"],\n      sortTypes: args[\"sort-types\"],\n      templates: args.templates,\n      toJS: args.js,\n      typePrefix: args[\"type-prefix\"],\n      typeSuffix: args[\"type-suffix\"],\n      unwrapResponseData: args[\"unwrap-response-data\"],\n      url: args.path,\n      ...customConfig.config,\n    });\n  },\n});\n\nconst main = defineCommand({\n  meta: {\n    name: packageJson.name,\n    description: packageJson.description,\n    version: packageJson.version,\n  },\n  subCommands: {\n    generate: generateCommand,\n    \"generate-templates\": generateTemplatesCommand,\n  },\n});\n\nrunMain(main);\n"],"mappings":"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"}