orval 7.13.1 → 7.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin/orval.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const require_generate = require('../generate-3XUKbpiV.js');
2
+ const require_generate = require('../generate-B5LnJ5C4.js');
3
3
  let __orval_core = require("@orval/core");
4
4
  __orval_core = require_generate.__toESM(__orval_core);
5
5
  let __commander_js_extra_typings = require("@commander-js/extra-typings");
@@ -23,6 +23,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
23
23
  //#endregion
24
24
  let __orval_core = require("@orval/core");
25
25
  __orval_core = __toESM(__orval_core);
26
+ let node_fs = require("node:fs");
27
+ node_fs = __toESM(node_fs);
28
+ let node_path = require("node:path");
29
+ node_path = __toESM(node_path);
30
+ let node_process = require("node:process");
31
+ node_process = __toESM(node_process);
32
+ let node_url = require("node:url");
33
+ node_url = __toESM(node_url);
26
34
  let __apidevtools_swagger_parser = require("@apidevtools/swagger-parser");
27
35
  __apidevtools_swagger_parser = __toESM(__apidevtools_swagger_parser);
28
36
  let chalk = require("chalk");
@@ -387,20 +395,20 @@ const getAllSchemas = (spec, specKey) => {
387
395
 
388
396
  //#endregion
389
397
  //#region src/import-specs.ts
390
- const resolveSpecs = async (path, { validate,...options }, isUrl$2, isOnlySchema) => {
398
+ const resolveSpecs = async (path$1, { validate,...options }, _isUrl, isOnlySchema) => {
391
399
  try {
392
400
  if (validate) try {
393
- await __apidevtools_swagger_parser.default.validate(path, options);
401
+ await __apidevtools_swagger_parser.default.validate(path$1, options);
394
402
  } catch (error) {
395
403
  if (error instanceof Error && error.name === "ParserError") throw error;
396
404
  if (!isOnlySchema) (0, __orval_core.log)(`⚠️ ${chalk.default.yellow(error)}`);
397
405
  }
398
- const data = (await __apidevtools_swagger_parser.default.resolve(path, options)).values();
399
- if (isUrl$2) return data;
400
- return Object.fromEntries(Object.entries(data).sort().map(([key, value]) => [__orval_core.upath.resolve(key), value]));
406
+ const data = (await __apidevtools_swagger_parser.default.resolve(path$1, options)).values();
407
+ if (_isUrl) return data;
408
+ return Object.fromEntries(Object.entries(data).sort().map(([key, value]) => [(0, __orval_core.isUrl)(key) ? key : __orval_core.upath.resolve(key), value]));
401
409
  } catch {
402
- const file = await fs_extra.default.readFile(path, "utf8");
403
- return { [path]: js_yaml.default.load(file) };
410
+ const file = await fs_extra.default.readFile(path$1, "utf8");
411
+ return { [path$1]: js_yaml.default.load(file) };
404
412
  }
405
413
  };
406
414
  const importSpecs = async (workspace, options) => {
@@ -427,7 +435,7 @@ const importSpecs = async (workspace, options) => {
427
435
  //#region package.json
428
436
  var name = "orval";
429
437
  var description = "A swagger client generator for typescript";
430
- var version = "7.13.1";
438
+ var version = "7.14.0";
431
439
  var license = "MIT";
432
440
  var files = ["dist", "!dist/**/*.d.ts.map"];
433
441
  var bin = "./dist/bin/orval.js";
@@ -436,6 +444,7 @@ var exports$1 = { ".": {
436
444
  "types": "./dist/index.d.ts",
437
445
  "default": "./dist/index.js"
438
446
  } };
447
+ var engines = { "node": ">=22.18.0" };
439
448
  var keywords = [
440
449
  "rest",
441
450
  "client",
@@ -526,6 +535,7 @@ var package_default = {
526
535
  bin,
527
536
  type,
528
537
  exports: exports$1,
538
+ engines,
529
539
  keywords,
530
540
  author,
531
541
  repository,
@@ -560,10 +570,10 @@ const request = (urlOptions, data) => {
560
570
 
561
571
  //#endregion
562
572
  //#region src/utils/github.ts
563
- const getGithubSpecReq = ({ accessToken, repo, owner, branch, path }) => {
573
+ const getGithubSpecReq = ({ accessToken, repo, owner, branch, path: path$1 }) => {
564
574
  const payload = JSON.stringify({ query: `query {
565
575
  repository(name: "${repo}", owner: "${owner}") {
566
- object(expression: "${branch}:${path}") {
576
+ object(expression: "${branch}:${path$1}") {
567
577
  ... on Blob {
568
578
  text
569
579
  }
@@ -601,19 +611,19 @@ const getGithubAcessToken = async (githubTokenPath) => {
601
611
  return answers.githubToken;
602
612
  }
603
613
  };
604
- const getGithubOpenApi = async (url) => {
614
+ const getGithubOpenApi = async (url$1) => {
605
615
  const githubTokenPath = __orval_core.upath.join(__dirname, ".githubToken");
606
616
  const accessToken = await getGithubAcessToken(githubTokenPath);
607
- const [info] = url.split("github.com/").slice(-1);
617
+ const [info] = url$1.split("github.com/").slice(-1);
608
618
  const [owner, repo, , branch, ...paths] = info.split("/");
609
- const path = paths.join("/");
619
+ const path$1 = paths.join("/");
610
620
  try {
611
621
  const { body } = await request(...getGithubSpecReq({
612
622
  accessToken,
613
623
  repo,
614
624
  owner,
615
625
  branch,
616
- path
626
+ path: path$1
617
627
  }));
618
628
  if (body.errors?.length) {
619
629
  if (body.errors?.some((error) => error?.type === "NOT_FOUND")) {
@@ -951,13 +961,13 @@ const normalizeMutator = (workspace, mutator) => {
951
961
  };
952
962
  return mutator;
953
963
  };
954
- const normalizePathOrUrl = (path, workspace) => {
955
- if ((0, __orval_core.isString)(path) && !(0, __orval_core.isUrl)(path)) return normalizePath(path, workspace);
956
- return path;
964
+ const normalizePathOrUrl = (path$1, workspace) => {
965
+ if ((0, __orval_core.isString)(path$1) && !(0, __orval_core.isUrl)(path$1)) return normalizePath(path$1, workspace);
966
+ return path$1;
957
967
  };
958
- const normalizePath = (path, workspace) => {
959
- if (!(0, __orval_core.isString)(path)) return path;
960
- return __orval_core.upath.resolve(workspace, path);
968
+ const normalizePath = (path$1, workspace) => {
969
+ if (!(0, __orval_core.isString)(path$1)) return path$1;
970
+ return __orval_core.upath.resolve(workspace, path$1);
961
971
  };
962
972
  const normalizeOperationsAndTags = (operationsOrTags, workspace, global) => {
963
973
  return Object.fromEntries(Object.entries(operationsOrTags).map(([key, { transformer, mutator, formData, formUrlEncoded, paramsSerializer, query: query$1, zod: zod$1,...rest }]) => {
@@ -1093,7 +1103,7 @@ const startWatcher = async (watchOptions, watchFn, defaultTarget = ".") => {
1093
1103
  if (!watchOptions) return;
1094
1104
  const { watch } = await import("chokidar");
1095
1105
  const ignored = ["**/{.git,node_modules}/**"];
1096
- const watchPaths = typeof watchOptions === "boolean" ? defaultTarget : Array.isArray(watchOptions) ? watchOptions.filter((path) => typeof path === "string") : watchOptions;
1106
+ const watchPaths = typeof watchOptions === "boolean" ? defaultTarget : Array.isArray(watchOptions) ? watchOptions.filter((path$1) => typeof path$1 === "string") : watchOptions;
1097
1107
  (0, __orval_core.log)(`Watching for changes in ${Array.isArray(watchPaths) ? watchPaths.map((v) => "\"" + v + "\"").join(" | ") : "\"" + watchPaths + "\""}`);
1098
1108
  watch(watchPaths, {
1099
1109
  ignorePermissionErrors: true,
@@ -1183,7 +1193,7 @@ const writeSpecs = async (builder, workspace, options, projectName) => {
1183
1193
  });
1184
1194
  if (output.workspace) {
1185
1195
  const workspacePath = output.workspace;
1186
- const imports = implementationPaths.filter((path) => !output.mock || !path.endsWith(`.${(0, __orval_core.getMockFileExtensionByTypeName)(output.mock)}.ts`)).map((path) => __orval_core.upath.relativeSafe(workspacePath, (0, __orval_core.getFileInfo)(path).pathWithoutExtension));
1196
+ const imports = implementationPaths.filter((path$1) => !output.mock || !path$1.endsWith(`.${(0, __orval_core.getMockFileExtensionByTypeName)(output.mock)}.ts`)).map((path$1) => __orval_core.upath.relativeSafe(workspacePath, (0, __orval_core.getFileInfo)(path$1).pathWithoutExtension));
1187
1197
  if (output.schemas) imports.push(__orval_core.upath.relativeSafe(workspacePath, (0, __orval_core.getFileInfo)(output.schemas).dirname));
1188
1198
  if (output.indexFiles) {
1189
1199
  const indexFile = __orval_core.upath.join(workspacePath, "/index.ts");
@@ -1303,10 +1313,35 @@ const generateSpecs = async (config, workspace, projectName) => {
1303
1313
  }
1304
1314
  if (hasErrors) throw new Error("One or more project failed, see above for details");
1305
1315
  };
1316
+ function findConfigFile(configFilePath) {
1317
+ if (configFilePath) {
1318
+ if (!node_fs.default.existsSync(configFilePath)) throw new Error(`Config file ${configFilePath} does not exist`);
1319
+ return configFilePath;
1320
+ }
1321
+ const root = node_process.default.cwd();
1322
+ for (const ext of [
1323
+ ".ts",
1324
+ ".js",
1325
+ ".mjs",
1326
+ ".cjs"
1327
+ ]) {
1328
+ const fullPath = node_path.default.resolve(root, `orval.config${ext}`);
1329
+ if (node_fs.default.existsSync(fullPath)) return fullPath;
1330
+ }
1331
+ throw new Error(`No config file found in ${root}`);
1332
+ }
1306
1333
  const generateConfig = async (configFile, options) => {
1307
- const { path, file: configExternal, error } = await (0, __orval_core.loadFile)(configFile, { defaultFileName: "orval.config" });
1308
- if (!configExternal) throw new Error(`failed to load from ${path} => ${error}`);
1309
- const workspace = __orval_core.upath.dirname(path);
1334
+ const configFilePath = findConfigFile(configFile);
1335
+ let configExternal;
1336
+ try {
1337
+ const importedModule = await import(node_url.default.pathToFileURL(configFilePath).href);
1338
+ if (importedModule.default === void 0) throw new Error(`${configFilePath} doesn't have a default export`);
1339
+ configExternal = importedModule.default;
1340
+ } catch (error) {
1341
+ const errorMsg = error instanceof Error ? error.message : "unknown error";
1342
+ throw new Error(`failed to load from ${configFilePath} => ${errorMsg}`);
1343
+ }
1344
+ const workspace = node_path.default.dirname(configFilePath);
1310
1345
  const config = await ((0, __orval_core.isFunction)(configExternal) ? configExternal() : configExternal);
1311
1346
  const normalizedConfig = await (0, __orval_core.asyncReduce)(Object.entries(config), async (acc, [key, value]) => {
1312
1347
  acc[key] = await normalizeOptions(value, workspace, options);
@@ -1359,4 +1394,4 @@ Object.defineProperty(exports, 'startWatcher', {
1359
1394
  return startWatcher;
1360
1395
  }
1361
1396
  });
1362
- //# sourceMappingURL=generate-3XUKbpiV.js.map
1397
+ //# sourceMappingURL=generate-B5LnJ5C4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-B5LnJ5C4.js","names":["OutputClient","GENERATOR_CLIENT: GeneratorClients","generateClientImports: GeneratorClientImports","dependencies","generateClientHeader: GeneratorClientHeader","generateClientFooter: GeneratorClientFooter","implementation: string","generateClientTitle: GeneratorClientTitle","mock","generateExtraFiles","GetterPropType","acc","generateMockImports","context: ContextSpecs","name","upath","SwaggerParser","path","upath","fs","yaml","https","path","githubToken: string | null","fs","upath","url","error: any","fs","yaml","dependencies","version","fs","FormDataArrayHandling","mock: GlobalMockOptions | ClientMockBuilder | undefined","DEFAULT_MOCK_OPTIONS","globalQueryOptions: NormalizedQueryOptions","normalizedOptions: NormalizedOptions","NamingConvention","OutputClient","OutputHttpClient","RefComponentSuffix","PropertySortOrder","upath","path","query","zod","OutputMode","hono","pkg","description","version","path","type","name","upath","schemas","implementationPaths: string[]","path","fs","config: Partial<TypeDocOptions>","configPath: string | null","OutputMode","writeSplitMode","writeTagsMode","writeSplitTagsMode","writeSingleMode","ErrorWithTag","hasErrors: true | undefined","projectName","fs","process","path","configExternal: ConfigExternal","url","options"],"sources":["../src/client.ts","../src/api.ts","../src/import-open-api.ts","../src/import-specs.ts","../package.json","../src/utils/request.ts","../src/utils/github.ts","../src/utils/package-json.ts","../src/utils/tsconfig.ts","../src/utils/http-resolver.ts","../src/utils/options.ts","../src/utils/watcher.ts","../src/utils/execute-hook.ts","../src/write-specs.ts","../src/generate.ts"],"sourcesContent":["import angular from '@orval/angular';\nimport axios from '@orval/axios';\nimport {\n asyncReduce,\n type ClientFileBuilder,\n type ClientMockGeneratorBuilder,\n type ContextSpecs,\n generateDependencyImports,\n type GeneratorClientFooter,\n type GeneratorClientHeader,\n type GeneratorClientImports,\n type GeneratorClients,\n type GeneratorClientTitle,\n type GeneratorOperations,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GeneratorVerbsOptions,\n isFunction,\n type NormalizedOutputOptions,\n OutputClient,\n type OutputClientFunc,\n pascal,\n} from '@orval/core';\nimport fetchClient from '@orval/fetch';\nimport hono from '@orval/hono';\nimport mcp from '@orval/mcp';\nimport * as mock from '@orval/mock';\nimport query from '@orval/query';\nimport swr from '@orval/swr';\nimport zod from '@orval/zod';\n\nconst DEFAULT_CLIENT = OutputClient.AXIOS;\n\nconst getGeneratorClient = (\n outputClient: OutputClient | OutputClientFunc,\n output: NormalizedOutputOptions,\n) => {\n const GENERATOR_CLIENT: GeneratorClients = {\n axios: axios({ type: 'axios' })(),\n 'axios-functions': axios({ type: 'axios-functions' })(),\n angular: angular()(),\n 'react-query': query({ output, type: 'react-query' })(),\n 'svelte-query': query({ output, type: 'svelte-query' })(),\n 'vue-query': query({ output, type: 'vue-query' })(),\n swr: swr()(),\n zod: zod()(),\n hono: hono()(),\n fetch: fetchClient()(),\n mcp: mcp()(),\n };\n\n const generator = isFunction(outputClient)\n ? outputClient(GENERATOR_CLIENT)\n : GENERATOR_CLIENT[outputClient];\n\n if (!generator) {\n throw new Error(`Oups... 🍻. Client not found: ${outputClient}`);\n }\n\n return generator;\n};\n\nexport const generateClientImports: GeneratorClientImports = ({\n client = DEFAULT_CLIENT,\n implementation,\n imports,\n specsName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n hasGlobalMutator,\n hasTagsMutator,\n hasParamsSerializerOptions,\n packageJson,\n output,\n}) => {\n const { dependencies } = getGeneratorClient(client, output);\n return generateDependencyImports(\n implementation,\n dependencies\n ? [\n ...dependencies(\n hasGlobalMutator,\n hasParamsSerializerOptions,\n packageJson,\n output.httpClient,\n hasTagsMutator,\n output.override,\n ),\n ...imports,\n ]\n : imports,\n specsName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n );\n};\n\nexport const generateClientHeader: GeneratorClientHeader = ({\n outputClient = DEFAULT_CLIENT,\n isRequestOptions,\n isGlobalMutator,\n isMutator,\n provideIn,\n hasAwaitedType,\n titles,\n output,\n verbOptions,\n tag,\n clientImplementation,\n}) => {\n const { header } = getGeneratorClient(outputClient, output);\n return {\n implementation: header\n ? header({\n title: titles.implementation,\n isRequestOptions,\n isGlobalMutator,\n isMutator,\n provideIn,\n hasAwaitedType,\n output,\n verbOptions,\n tag,\n clientImplementation,\n })\n : '',\n implementationMock: `export const ${titles.implementationMock} = () => [\\n`,\n };\n};\n\nexport const generateClientFooter: GeneratorClientFooter = ({\n outputClient = DEFAULT_CLIENT,\n operationNames,\n hasMutator,\n hasAwaitedType,\n titles,\n output,\n}) => {\n const { footer } = getGeneratorClient(outputClient, output);\n\n if (!footer) {\n return {\n implementation: '',\n implementationMock: `\\n]\\n`,\n };\n }\n\n let implementation: string;\n try {\n if (isFunction(outputClient)) {\n implementation = (footer as (operationNames: any) => string)(\n operationNames,\n );\n // being here means that the previous call worked\n console.warn(\n '[WARN] Passing an array of strings for operations names to the footer function is deprecated and will be removed in a future major release. Please pass them in an object instead: { operationNames: string[] }.',\n );\n } else {\n implementation = footer({\n operationNames,\n title: titles.implementation,\n hasMutator,\n hasAwaitedType,\n });\n }\n } catch {\n implementation = footer({\n operationNames,\n title: titles.implementation,\n hasMutator,\n hasAwaitedType,\n });\n }\n\n return {\n implementation,\n implementationMock: `]\\n`,\n };\n};\n\nexport const generateClientTitle: GeneratorClientTitle = ({\n outputClient = DEFAULT_CLIENT,\n title,\n customTitleFunc,\n output,\n}) => {\n const { title: generatorTitle } = getGeneratorClient(outputClient, output);\n\n if (!generatorTitle) {\n return {\n implementation: '',\n implementationMock: `get${pascal(title)}Mock`,\n };\n }\n\n if (customTitleFunc) {\n const customTitle = customTitleFunc(title);\n return {\n implementation: generatorTitle(customTitle),\n implementationMock: `get${pascal(customTitle)}Mock`,\n };\n }\n return {\n implementation: generatorTitle(title),\n implementationMock: `get${pascal(title)}Mock`,\n };\n};\n\nconst generateMock = (\n verbOption: GeneratorVerbOptions,\n options: GeneratorOptions,\n): ClientMockGeneratorBuilder => {\n if (!options.mock) {\n return {\n implementation: {\n function: '',\n handler: '',\n handlerName: '',\n },\n imports: [],\n };\n }\n\n if (isFunction(options.mock)) {\n return options.mock(verbOption, options);\n }\n\n return mock.generateMock(\n verbOption,\n options as typeof options & {\n mock: Exclude<(typeof options)['mock'], Function | undefined>;\n },\n );\n};\n\nexport const generateOperations = (\n outputClient: OutputClient | OutputClientFunc = DEFAULT_CLIENT,\n verbsOptions: GeneratorVerbsOptions,\n options: GeneratorOptions,\n output: NormalizedOutputOptions,\n): Promise<GeneratorOperations> => {\n return asyncReduce(\n verbsOptions,\n async (acc, verbOption) => {\n const { client: generatorClient } = getGeneratorClient(\n outputClient,\n output,\n );\n const client = await generatorClient(verbOption, options, outputClient);\n\n if (!client.implementation) {\n return acc;\n }\n\n const generatedMock = generateMock(verbOption, options);\n\n acc[verbOption.operationId] = {\n implementation: verbOption.doc + client.implementation,\n imports: client.imports,\n implementationMock: generatedMock.implementation,\n importsMock: generatedMock.imports,\n tags: verbOption.tags,\n mutator: verbOption.mutator,\n clientMutators: client.mutators,\n formData: verbOption.formData,\n formUrlEncoded: verbOption.formUrlEncoded,\n paramsSerializer: verbOption.paramsSerializer,\n operationName: verbOption.operationName,\n fetchReviver: verbOption.fetchReviver,\n };\n\n return acc;\n },\n {} as GeneratorOperations,\n );\n};\n\nexport const generateExtraFiles = (\n outputClient: OutputClient | OutputClientFunc = DEFAULT_CLIENT,\n verbsOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n): Promise<ClientFileBuilder[]> => {\n const { extraFiles: generateExtraFiles } = getGeneratorClient(\n outputClient,\n output,\n );\n\n if (!generateExtraFiles) {\n return Promise.resolve([]);\n }\n\n return generateExtraFiles(verbsOptions, output, context);\n};\n","import {\n asyncReduce,\n type ContextSpecs,\n generateVerbsOptions,\n type GeneratorApiBuilder,\n type GeneratorApiOperations,\n type GeneratorSchema,\n getFullRoute,\n getRoute,\n GetterPropType,\n isReference,\n type NormalizedInputOptions,\n type NormalizedOutputOptions,\n resolveRef,\n} from '@orval/core';\nimport { generateMockImports } from '@orval/mock';\nimport type { PathItemObject } from 'openapi3-ts/oas30';\n\nimport {\n generateClientFooter,\n generateClientHeader,\n generateClientImports,\n generateClientTitle,\n generateExtraFiles,\n generateOperations,\n} from './client';\n\nexport const getApiBuilder = async ({\n input,\n output,\n context,\n}: {\n input: NormalizedInputOptions;\n output: NormalizedOutputOptions;\n context: ContextSpecs;\n}): Promise<GeneratorApiBuilder> => {\n const api = await asyncReduce(\n Object.entries(context.specs[context.specKey].paths ?? {}),\n async (acc, [pathRoute, verbs]: [string, PathItemObject]) => {\n const route = getRoute(pathRoute);\n\n let resolvedVerbs = verbs;\n let resolvedContext = context;\n\n if (isReference(verbs)) {\n const { schema, imports } = resolveRef<PathItemObject>(verbs, context);\n\n resolvedVerbs = schema;\n\n resolvedContext = {\n ...context,\n ...(imports.length > 0\n ? {\n specKey: imports[0].specKey,\n }\n : {}),\n };\n }\n\n let verbsOptions = await generateVerbsOptions({\n verbs: resolvedVerbs,\n input,\n output,\n route,\n pathRoute,\n context: resolvedContext,\n });\n\n // GitHub #564 check if we want to exclude deprecated operations\n if (output.override.useDeprecatedOperations === false) {\n verbsOptions = verbsOptions.filter((verb) => {\n return !verb.deprecated;\n });\n }\n\n const schemas = verbsOptions.reduce<GeneratorSchema[]>(\n (acc, { queryParams, headers, body, response, props }) => {\n if (props) {\n acc.push(\n ...props.flatMap((param) =>\n param.type === GetterPropType.NAMED_PATH_PARAMS\n ? param.schema\n : [],\n ),\n );\n }\n if (queryParams) {\n acc.push(queryParams.schema, ...queryParams.deps);\n }\n if (headers) {\n acc.push(headers.schema, ...headers.deps);\n }\n\n acc.push(...body.schemas, ...response.schemas);\n\n return acc;\n },\n [],\n );\n\n const fullRoute = getFullRoute(\n route,\n verbs.servers ?? context.specs[context.specKey].servers,\n output.baseUrl,\n );\n if (!output.target) {\n throw new Error('Output does not have a target');\n }\n const pathOperations = await generateOperations(\n output.client,\n verbsOptions,\n {\n route: fullRoute,\n pathRoute,\n override: output.override,\n context: resolvedContext,\n mock: output.mock,\n output: output.target,\n },\n output,\n );\n\n for (const verbOption of verbsOptions) {\n acc.verbOptions[verbOption.operationId] = verbOption;\n }\n acc.schemas.push(...schemas);\n acc.operations = { ...acc.operations, ...pathOperations };\n\n return acc;\n },\n {\n operations: {},\n verbOptions: {},\n schemas: [],\n } as GeneratorApiOperations,\n );\n\n const extraFiles = await generateExtraFiles(\n output.client,\n api.verbOptions,\n output,\n context,\n );\n\n return {\n operations: api.operations,\n schemas: api.schemas,\n verbOptions: api.verbOptions,\n title: generateClientTitle,\n header: generateClientHeader,\n footer: generateClientFooter,\n imports: generateClientImports,\n importsMock: generateMockImports,\n extraFiles,\n };\n};\n","import {\n asyncReduce,\n type ContextSpecs,\n dynamicImport,\n generateComponentDefinition,\n generateParameterDefinition,\n generateSchemasDefinition,\n type GeneratorSchema,\n ibmOpenapiValidator,\n type ImportOpenApi,\n type InputOptions,\n isObject,\n isReference,\n isSchema,\n type NormalizedOutputOptions,\n openApiConverter,\n upath,\n type WriteSpecsBuilder,\n} from '@orval/core';\nimport type { JSONSchema6, JSONSchema7 } from 'json-schema';\nimport type { OpenAPIObject, SchemasObject } from 'openapi3-ts/oas30';\n\nimport { getApiBuilder } from './api';\n\nexport const importOpenApi = async ({\n data,\n input,\n output,\n target,\n workspace,\n}: ImportOpenApi): Promise<WriteSpecsBuilder> => {\n const specs = await generateInputSpecs({ specs: data, input, workspace });\n\n const schemas = getApiSchemas({ input, output, target, workspace, specs });\n\n const api = await getApiBuilder({\n input,\n output,\n context: {\n specKey: target,\n target,\n workspace,\n specs,\n output,\n },\n });\n\n return {\n ...api,\n schemas: {\n ...schemas,\n [target]: [...(schemas[target] ?? []), ...api.schemas],\n },\n target,\n info: specs[target].info,\n };\n};\n\nconst generateInputSpecs = async ({\n specs,\n input,\n workspace,\n}: {\n specs: JSONSchema6 | JSONSchema7 | Record<string, OpenAPIObject | unknown>;\n input: InputOptions;\n workspace: string;\n}): Promise<Record<string, OpenAPIObject>> => {\n const transformerFn = input.override?.transformer\n ? await dynamicImport(input.override.transformer, workspace)\n : undefined;\n\n return asyncReduce(\n Object.entries(specs),\n async (acc, [specKey, value]) => {\n const schema = await openApiConverter(\n value,\n input.converterOptions,\n specKey,\n );\n\n const transfomedSchema = transformerFn ? transformerFn(schema) : schema;\n\n if (input.validation) {\n await ibmOpenapiValidator(transfomedSchema, input.validation);\n }\n\n acc[specKey] = transfomedSchema;\n\n return acc;\n },\n {} as Record<string, OpenAPIObject>,\n );\n};\n\nconst getApiSchemas = ({\n input,\n output,\n target,\n workspace,\n specs,\n}: {\n input: InputOptions;\n output: NormalizedOutputOptions;\n workspace: string;\n target: string;\n specs: Record<string, OpenAPIObject>;\n}) => {\n return Object.entries(specs).reduce<Record<string, GeneratorSchema[]>>(\n (acc, [specKey, spec]) => {\n const context: ContextSpecs = {\n specKey,\n target,\n workspace,\n specs,\n output,\n };\n\n const parsedSchemas = spec.openapi\n ? (spec.components?.schemas as SchemasObject)\n : getAllSchemas(spec, specKey);\n\n const schemaDefinition = generateSchemasDefinition(\n parsedSchemas,\n context,\n output.override.components.schemas.suffix,\n input.filters,\n );\n\n const responseDefinition = generateComponentDefinition(\n spec.components?.responses,\n context,\n output.override.components.responses.suffix,\n );\n\n const bodyDefinition = generateComponentDefinition(\n spec.components?.requestBodies,\n context,\n output.override.components.requestBodies.suffix,\n );\n\n const parameters = generateParameterDefinition(\n spec.components?.parameters,\n context,\n output.override.components.parameters.suffix,\n );\n\n const schemas = [\n ...schemaDefinition,\n ...responseDefinition,\n ...bodyDefinition,\n ...parameters,\n ];\n\n if (schemas.length === 0) {\n return acc;\n }\n\n acc[specKey] = schemas;\n\n return acc;\n },\n {},\n );\n};\n\nconst getAllSchemas = (spec: object, specKey?: string): SchemasObject => {\n const keysToOmit = new Set([\n 'openapi',\n 'info',\n 'servers',\n 'paths',\n 'components',\n 'security',\n 'tags',\n 'externalDocs',\n ]);\n\n const cleanedSpec = Object.fromEntries(\n Object.entries(spec).filter(([key]) => !keysToOmit.has(key)),\n );\n\n if (specKey && isSchema(cleanedSpec)) {\n const name = upath.getSchemaFileName(specKey);\n\n const additionalKeysToOmit = new Set([\n 'type',\n 'properties',\n 'allOf',\n 'oneOf',\n 'anyOf',\n 'items',\n ]);\n\n return {\n [name]: cleanedSpec as SchemasObject,\n ...getAllSchemas(\n Object.fromEntries(\n Object.entries(cleanedSpec).filter(\n ([key]) => !additionalKeysToOmit.has(key),\n ),\n ),\n ),\n };\n }\n\n const schemas = Object.entries(cleanedSpec).reduce<SchemasObject>(\n (acc, [key, value]) => {\n if (!isObject(value)) {\n return acc;\n }\n\n if (!isSchema(value) && !isReference(value)) {\n return { ...acc, ...getAllSchemas(value) };\n }\n\n acc[key] = value;\n\n return acc;\n },\n {},\n );\n\n return {\n ...schemas,\n ...((spec as OpenAPIObject)?.components?.schemas as SchemasObject),\n };\n};\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport {\n isString,\n isUrl,\n log,\n type NormalizedOptions,\n type SwaggerParserOptions,\n upath,\n type WriteSpecsBuilder,\n} from '@orval/core';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport yaml from 'js-yaml';\n\nimport { importOpenApi } from './import-open-api';\n\nconst resolveSpecs = async (\n path: string,\n { validate, ...options }: SwaggerParserOptions,\n _isUrl: boolean,\n isOnlySchema: boolean,\n) => {\n try {\n if (validate) {\n try {\n await SwaggerParser.validate(path, options);\n } catch (error) {\n if (error instanceof Error && error.name === 'ParserError') {\n throw error;\n }\n\n if (!isOnlySchema) {\n log(`⚠️ ${chalk.yellow(error)}`);\n }\n }\n }\n\n const data = (await SwaggerParser.resolve(path, options)).values();\n\n if (_isUrl) {\n return data;\n }\n\n // normalizing slashes after SwaggerParser\n return Object.fromEntries(\n Object.entries(data)\n .sort()\n .map(([key, value]) => [isUrl(key) ? key : upath.resolve(key), value]),\n );\n } catch {\n const file = await fs.readFile(path, 'utf8');\n\n return {\n [path]: yaml.load(file),\n };\n }\n};\n\nexport const importSpecs = async (\n workspace: string,\n options: NormalizedOptions,\n): Promise<WriteSpecsBuilder> => {\n const { input, output } = options;\n\n if (!isString(input.target)) {\n return importOpenApi({\n data: { [workspace]: input.target },\n input,\n output,\n target: workspace,\n workspace,\n });\n }\n\n const isPathUrl = isUrl(input.target);\n\n const data = await resolveSpecs(\n input.target,\n input.parserOptions,\n isPathUrl,\n !output.target,\n );\n\n return importOpenApi({\n data,\n input,\n output,\n target: input.target,\n workspace,\n });\n};\n","{\n \"name\": \"orval\",\n \"description\": \"A swagger client generator for typescript\",\n \"version\": \"7.14.0\",\n \"license\": \"MIT\",\n \"files\": [\n \"dist\",\n \"!dist/**/*.d.ts.map\"\n ],\n \"bin\": \"./dist/bin/orval.js\",\n \"type\": \"commonjs\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"engines\": {\n \"node\": \">=22.18.0\"\n },\n \"keywords\": [\n \"rest\",\n \"client\",\n \"swagger\",\n \"open-api\",\n \"fetch\",\n \"data fetching\",\n \"code-generation\",\n \"angular\",\n \"react\",\n \"react-query\",\n \"svelte\",\n \"svelte-query\",\n \"vue\",\n \"vue-query\",\n \"msw\",\n \"mock\",\n \"axios\",\n \"vue-query\",\n \"vue\",\n \"swr\",\n \"zod\",\n \"hono\"\n ],\n \"author\": {\n \"name\": \"Victor Bury\",\n \"email\": \"victor@anymaniax.com\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/orval-labs/orval.git\"\n },\n \"scripts\": {\n \"build\": \"tsdown --config-loader unconfig\",\n \"dev\": \"tsdown --config-loader unconfig --watch src --onSuccess 'yarn generate-api'\",\n \"lint\": \"eslint .\",\n \"generate-api\": \"orval --config ../../samples/react-query/basic/orval.config.ts\",\n \"test\": \"tsc --noEmit && vitest\",\n \"clean\": \"rimraf .turbo dist\",\n \"nuke\": \"rimraf .turbo dist node_modules\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/lodash.uniq\": \"^4.5.9\",\n \"eslint\": \"^9.35.0\",\n \"openapi-types\": \"^12.1.3\",\n \"rimraf\": \"^6.0.1\",\n \"tsdown\": \"^0.15.2\",\n \"typescript\": \"^5.9.2\",\n \"vitest\": \"^3.2.4\"\n },\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^12.0.0\",\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@orval/angular\": \"workspace:*\",\n \"@orval/axios\": \"workspace:*\",\n \"@orval/core\": \"workspace:*\",\n \"@orval/fetch\": \"workspace:*\",\n \"@orval/hono\": \"workspace:*\",\n \"@orval/mcp\": \"workspace:*\",\n \"@orval/mock\": \"workspace:*\",\n \"@orval/query\": \"workspace:*\",\n \"@orval/swr\": \"workspace:*\",\n \"@orval/zod\": \"workspace:*\",\n \"chalk\": \"^4.1.2\",\n \"chokidar\": \"^4.0.3\",\n \"commander\": \"^14.0.1\",\n \"enquirer\": \"^2.4.1\",\n \"execa\": \"^5.1.1\",\n \"find-up\": \"5.0.0\",\n \"fs-extra\": \"^11.3.1\",\n \"js-yaml\": \"4.1.0\",\n \"lodash.uniq\": \"^4.5.0\",\n \"openapi3-ts\": \"4.5.0\",\n \"string-argv\": \"^0.3.2\",\n \"tsconfck\": \"^2.1.2\",\n \"typedoc\": \"^0.28.12\",\n \"typedoc-plugin-coverage\": \"^4.0.1\",\n \"typedoc-plugin-markdown\": \"^4.8.1\"\n }\n}\n","import http from 'node:http';\nimport https from 'node:https';\n\nexport type Response<T = Record<string, unknown>> = {\n status: http.IncomingMessage['statusCode'];\n headers: http.IncomingMessage['headers'];\n body: T;\n};\n\nexport const request = <T>(\n urlOptions: string | https.RequestOptions | URL,\n data?: string,\n): Promise<Response<T>> => {\n return new Promise((resolve, reject) => {\n const req = https.request(urlOptions, (res) => {\n let body = '';\n res.on('data', (chunk) => (body += chunk.toString()));\n res.on('error', reject);\n res.on('end', () => {\n const response = {\n status: res.statusCode,\n headers: res.headers,\n body: JSON.parse(body),\n };\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n resolve(response);\n } else {\n reject(response);\n }\n });\n });\n req.on('error', reject);\n if (data) {\n req.write(data, 'binary');\n }\n req.end();\n });\n};\n","import https from 'node:https';\n\nimport SwaggerParser from '@apidevtools/swagger-parser';\nimport { upath } from '@orval/core';\nimport { prompt } from 'enquirer';\nimport fs from 'fs-extra';\n\nimport { request } from './request';\n\nexport const getGithubSpecReq = ({\n accessToken,\n repo,\n owner,\n branch,\n path,\n}: {\n accessToken: string;\n repo: string;\n owner: string;\n branch: string;\n path: string;\n}): [https.RequestOptions, string] => {\n const payload = JSON.stringify({\n query: `query {\n repository(name: \"${repo}\", owner: \"${owner}\") {\n object(expression: \"${branch}:${path}\") {\n ... on Blob {\n text\n }\n }\n }\n }`,\n });\n\n return [\n {\n method: 'POST',\n hostname: 'api.github.com',\n path: '/graphql',\n headers: {\n 'content-type': 'application/json',\n 'user-agent': 'orval-importer',\n authorization: `bearer ${accessToken}`,\n 'Content-Length': payload.length,\n },\n },\n payload,\n ];\n};\n\nlet githubToken: string | null = null;\n\nexport const getGithubAcessToken = async (githubTokenPath: string) => {\n if (githubToken) {\n return githubToken;\n }\n\n if (await fs.pathExists(githubTokenPath)) {\n return fs.readFile(githubTokenPath, 'utf8');\n } else {\n const answers = await prompt<{\n githubToken: string;\n saveToken: boolean;\n }>([\n {\n type: 'input',\n name: 'githubToken',\n message:\n 'Please provide a GitHub token with `repo` rules checked (https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)',\n },\n {\n type: 'confirm',\n name: 'saveToken',\n message:\n 'Would you like to store your token for the next time? (stored in your node_modules)',\n },\n ]);\n\n githubToken = answers.githubToken;\n\n if (answers.saveToken) {\n await fs.outputFile(githubTokenPath, answers.githubToken);\n }\n return answers.githubToken;\n }\n};\n\nexport const getGithubOpenApi = async (url: string): Promise<string> => {\n const githubTokenPath = upath.join(__dirname, '.githubToken');\n const accessToken = await getGithubAcessToken(githubTokenPath);\n const [info] = url.split('github.com/').slice(-1);\n\n const [owner, repo, , branch, ...paths] = info.split('/');\n const path = paths.join('/');\n\n try {\n const { body } = await request<{\n data?: { repository: any };\n errors?: { type: string }[];\n }>(...getGithubSpecReq({ accessToken, repo, owner, branch, path }));\n if (body.errors?.length) {\n const isErrorRemoveLink = body.errors?.some(\n (error) => error?.type === 'NOT_FOUND',\n );\n\n if (isErrorRemoveLink) {\n const answers = await prompt<{ removeToken: boolean }>([\n {\n type: 'confirm',\n name: 'removeToken',\n message:\n \"Your token doesn't have the correct permissions, should we remove it?\",\n },\n ]);\n if (answers.removeToken) {\n await fs.unlink(githubTokenPath);\n }\n }\n }\n\n return body.data?.repository?.object.text;\n } catch (error: any) {\n if (!error.body) {\n throw new Error(`Oups... 🍻. ${error}`);\n }\n\n if (error.body.message === 'Bad credentials') {\n const answers = await prompt<{ removeToken: boolean }>([\n {\n type: 'confirm',\n name: 'removeToken',\n message:\n \"Your token doesn't have the correct permissions, should we remove it?\",\n },\n ]);\n if (answers.removeToken) {\n await fs.unlink(githubTokenPath);\n }\n }\n throw new Error(error.body.message || `Oups... 🍻. ${error}`);\n }\n};\n\nexport const githubResolver = {\n order: 199,\n canRead(file: SwaggerParser.FileInfo) {\n return file.url.includes('github.com');\n },\n\n read(file: SwaggerParser.FileInfo) {\n return getGithubOpenApi(file.url);\n },\n};\n","import { dynamicImport, isString, log, type PackageJson } from '@orval/core';\nimport chalk from 'chalk';\nimport findUp from 'find-up';\nimport fs from 'fs-extra';\nimport yaml from 'js-yaml';\n\nimport { normalizePath } from './options';\n\nexport const loadPackageJson = async (\n packageJson?: string,\n workspace = process.cwd(),\n): Promise<PackageJson | undefined> => {\n if (!packageJson) {\n const pkgPath = await findUp(['package.json'], { cwd: workspace });\n if (pkgPath) {\n const pkg = await dynamicImport<unknown>(pkgPath, workspace);\n\n if (isPackageJson(pkg)) {\n return await maybeReplaceCatalog(pkg, workspace);\n } else {\n throw new Error('Invalid package.json file');\n }\n }\n return;\n }\n\n const normalizedPath = normalizePath(packageJson, workspace);\n if (fs.existsSync(normalizedPath)) {\n const pkg = await dynamicImport<unknown>(normalizedPath);\n\n if (isPackageJson(pkg)) {\n return await maybeReplaceCatalog(pkg, workspace);\n } else {\n throw new Error(`Invalid package.json file: ${normalizedPath}`);\n }\n }\n return;\n};\n\nconst isPackageJson = (obj: any): obj is PackageJson =>\n typeof obj === 'object' && obj !== null;\n\nconst maybeReplaceCatalog = async (\n pkg: PackageJson,\n workspace: string,\n): Promise<PackageJson> => {\n if (\n ![\n ...Object.entries(pkg.dependencies ?? {}),\n ...Object.entries(pkg.devDependencies ?? {}),\n ...Object.entries(pkg.peerDependencies ?? {}),\n ].some(([, value]) => isString(value) && value.startsWith('catalog:'))\n ) {\n return pkg;\n }\n\n const filePath = await findUp('pnpm-workspace.yaml', { cwd: workspace });\n if (!filePath) {\n log(\n `⚠️ ${chalk.yellow('package.json contains pnpm catalog: in dependencies, but no pnpm-workspace.yaml was found.')}`,\n );\n return pkg;\n }\n const file = await fs.readFile(filePath, 'utf8');\n\n const pnpmWorkspaceFile = yaml.load(file) as Record<string, any>;\n performSubstitution(pkg.dependencies, pnpmWorkspaceFile);\n performSubstitution(pkg.devDependencies, pnpmWorkspaceFile);\n performSubstitution(pkg.peerDependencies, pnpmWorkspaceFile);\n\n return pkg;\n};\n\nconst performSubstitution = (\n dependencies: Record<string, string> | undefined,\n pnpmWorkspaceFile: Record<string, any>,\n) => {\n if (!dependencies) return;\n for (const [packageName, version] of Object.entries(dependencies)) {\n if (version === 'catalog:' || version === 'catalog:default') {\n if (!pnpmWorkspaceFile.catalog) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, catalog: substitution for the package '${packageName}' failed as there were no default catalog.`)}`,\n );\n continue;\n }\n const sub = pnpmWorkspaceFile.catalog[packageName];\n if (!sub) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, catalog: substitution for the package '${packageName}' failed as there were no matching package in the default catalog.`)}`,\n );\n continue;\n }\n dependencies[packageName] = sub;\n } else if (version.startsWith('catalog:')) {\n const catalogName = version.slice('catalog:'.length);\n const catalog = pnpmWorkspaceFile.catalogs?.[catalogName];\n if (!catalog) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, '${version}' substitution for the package '${packageName}' failed as there were no matching catalog named '${catalogName}'. (available named catalogs are: ${Object.keys(pnpmWorkspaceFile.catalogs ?? {}).join(', ')})`)}`,\n );\n continue;\n }\n const sub = catalog[packageName];\n if (!sub) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, '${version}' substitution for the package '${packageName}' failed as there were no package in the catalog named '${catalogName}'. (packages in the catalog are: ${Object.keys(catalog).join(', ')})`)}`,\n );\n continue;\n }\n dependencies[packageName] = sub;\n }\n }\n};\n","import { isObject, isString, isUndefined, type Tsconfig } from '@orval/core';\nimport findUp from 'find-up';\nimport fs from 'fs-extra';\nimport { parse } from 'tsconfck';\n\nimport { normalizePath } from './options';\n\nexport const loadTsconfig = async (\n tsconfig?: Tsconfig | string,\n workspace = process.cwd(),\n): Promise<Tsconfig | undefined> => {\n if (isUndefined(tsconfig)) {\n const configPath = await findUp(['tsconfig.json', 'jsconfig.json'], {\n cwd: workspace,\n });\n if (configPath) {\n const config = await parse(configPath);\n return config.tsconfig;\n }\n return;\n }\n\n if (isString(tsconfig)) {\n const normalizedPath = normalizePath(tsconfig, workspace);\n if (fs.existsSync(normalizedPath)) {\n const config = await parse(normalizedPath);\n\n const tsconfig =\n config.referenced?.find(\n ({ tsconfigFile }) => tsconfigFile === normalizedPath,\n )?.tsconfig || config.tsconfig;\n\n return tsconfig;\n }\n return;\n }\n\n if (isObject(tsconfig)) {\n return tsconfig;\n }\n return;\n};\n","export const httpResolver = {\n safeUrlResolver: false, // this is merged with the default http resolver in json-schema-ref-parser\n};\n","import {\n type ClientMockBuilder,\n type ConfigExternal,\n createLogger,\n FormDataArrayHandling,\n type GlobalMockOptions,\n type GlobalOptions,\n type HonoOptions,\n type Hook,\n type HookFunction,\n type HookOption,\n type HooksOptions,\n isBoolean,\n isFunction,\n isObject,\n isString,\n isUndefined,\n isUrl,\n type JsDocOptions,\n mergeDeep,\n type Mutator,\n NamingConvention,\n type NormalizedHonoOptions,\n type NormalizedHookOptions,\n type NormalizedJsDocOptions,\n type NormalizedMutator,\n type NormalizedOperationOptions,\n type NormalizedOptions,\n type NormalizedOverrideOutput,\n type NormalizedQueryOptions,\n type OperationOptions,\n type OptionsExport,\n OutputClient,\n OutputHttpClient,\n OutputMode,\n type OverrideOutput,\n PropertySortOrder,\n type QueryOptions,\n RefComponentSuffix,\n type SwaggerParserOptions,\n upath,\n} from '@orval/core';\nimport { DEFAULT_MOCK_OPTIONS } from '@orval/mock';\nimport chalk from 'chalk';\n\nimport pkg from '../../package.json';\nimport { githubResolver } from './github';\nimport { loadPackageJson } from './package-json';\nimport { loadTsconfig } from './tsconfig';\nimport { httpResolver } from './http-resolver';\n\n/**\n * Type helper to make it easier to use orval.config.ts\n * accepts a direct {@link ConfigExternal} object.\n */\nexport function defineConfig(options: ConfigExternal): ConfigExternal {\n return options;\n}\n\nconst createFormData = (\n workspace: string,\n formData: OverrideOutput['formData'],\n): NormalizedOverrideOutput['formData'] => {\n const defaultArrayHandling = FormDataArrayHandling.SERIALIZE;\n if (formData === undefined)\n return { disabled: false, arrayHandling: defaultArrayHandling };\n if (isBoolean(formData))\n return { disabled: !formData, arrayHandling: defaultArrayHandling };\n if (isString(formData))\n return {\n disabled: false,\n mutator: normalizeMutator(workspace, formData),\n arrayHandling: defaultArrayHandling,\n };\n if ('mutator' in formData || 'arrayHandling' in formData)\n return {\n disabled: false,\n mutator: normalizeMutator(workspace, formData.mutator),\n arrayHandling: formData.arrayHandling ?? defaultArrayHandling,\n };\n return {\n disabled: false,\n mutator: normalizeMutator(workspace, formData),\n arrayHandling: defaultArrayHandling,\n };\n};\n\nexport const normalizeOptions = async (\n optionsExport: OptionsExport,\n workspace = process.cwd(),\n globalOptions: GlobalOptions = {},\n) => {\n const options = await (isFunction(optionsExport)\n ? optionsExport()\n : optionsExport);\n\n if (!options.input) {\n throw new Error(chalk.red(`Config require an input`));\n }\n\n if (!options.output) {\n throw new Error(chalk.red(`Config require an output`));\n }\n\n const inputOptions = isString(options.input)\n ? { target: options.input }\n : options.input;\n\n const outputOptions = isString(options.output)\n ? { target: options.output }\n : options.output;\n\n const outputWorkspace = normalizePath(\n outputOptions.workspace || '',\n workspace,\n );\n\n const { clean, prettier, client, httpClient, mode, biome } = globalOptions;\n\n const tsconfig = await loadTsconfig(\n outputOptions.tsconfig || globalOptions.tsconfig,\n workspace,\n );\n\n const packageJson = await loadPackageJson(\n outputOptions.packageJson || globalOptions.packageJson,\n workspace,\n );\n\n const mockOption = outputOptions.mock ?? globalOptions.mock;\n let mock: GlobalMockOptions | ClientMockBuilder | undefined;\n if (typeof mockOption === 'boolean' && mockOption) {\n mock = DEFAULT_MOCK_OPTIONS;\n } else if (isFunction(mockOption)) {\n mock = mockOption;\n } else if (mockOption) {\n mock = {\n ...DEFAULT_MOCK_OPTIONS,\n ...mockOption,\n };\n } else {\n mock = undefined;\n }\n\n const defaultFileExtension = '.ts';\n\n const globalQueryOptions: NormalizedQueryOptions = {\n useQuery: true,\n useMutation: true,\n signal: true,\n shouldExportMutatorHooks: true,\n shouldExportHttpClient: true,\n shouldExportQueryKey: true,\n shouldSplitQueryKey: false,\n ...normalizeQueryOptions(outputOptions.override?.query, workspace),\n };\n\n const normalizedOptions: NormalizedOptions = {\n input: {\n target: globalOptions.input\n ? normalizePathOrUrl(globalOptions.input, process.cwd())\n : normalizePathOrUrl(inputOptions.target, workspace),\n validation: inputOptions.validation || false,\n override: {\n transformer: normalizePath(\n inputOptions.override?.transformer,\n workspace,\n ),\n },\n converterOptions: inputOptions.converterOptions ?? {},\n parserOptions: mergeDeep(\n parserDefaultOptions,\n inputOptions.parserOptions ?? {},\n ),\n filters: inputOptions.filters,\n },\n output: {\n target: globalOptions.output\n ? normalizePath(globalOptions.output, process.cwd())\n : normalizePath(outputOptions.target, outputWorkspace),\n schemas: normalizePath(outputOptions.schemas, outputWorkspace),\n namingConvention:\n outputOptions.namingConvention || NamingConvention.CAMEL_CASE,\n fileExtension: outputOptions.fileExtension || defaultFileExtension,\n workspace: outputOptions.workspace ? outputWorkspace : undefined,\n client: outputOptions.client ?? client ?? OutputClient.AXIOS_FUNCTIONS,\n httpClient:\n outputOptions.httpClient ?? httpClient ?? OutputHttpClient.AXIOS,\n mode: normalizeOutputMode(outputOptions.mode ?? mode),\n mock,\n clean: outputOptions.clean ?? clean ?? false,\n docs: outputOptions.docs ?? false,\n prettier: outputOptions.prettier ?? prettier ?? false,\n biome: outputOptions.biome ?? biome ?? false,\n tsconfig,\n packageJson,\n headers: outputOptions.headers ?? false,\n indexFiles: outputOptions.indexFiles ?? true,\n baseUrl: outputOptions.baseUrl,\n unionAddMissingProperties:\n outputOptions.unionAddMissingProperties ?? false,\n override: {\n ...outputOptions.override,\n mock: {\n arrayMin: outputOptions.override?.mock?.arrayMin ?? 1,\n arrayMax: outputOptions.override?.mock?.arrayMax ?? 10,\n stringMin: outputOptions.override?.mock?.stringMin ?? 10,\n stringMax: outputOptions.override?.mock?.stringMax ?? 20,\n fractionDigits: outputOptions.override?.mock?.fractionDigits ?? 2,\n ...outputOptions.override?.mock,\n },\n operations: normalizeOperationsAndTags(\n outputOptions.override?.operations ?? {},\n outputWorkspace,\n {\n query: globalQueryOptions,\n },\n ),\n tags: normalizeOperationsAndTags(\n outputOptions.override?.tags ?? {},\n outputWorkspace,\n {\n query: globalQueryOptions,\n },\n ),\n mutator: normalizeMutator(\n outputWorkspace,\n outputOptions.override?.mutator,\n ),\n formData: createFormData(\n outputWorkspace,\n outputOptions.override?.formData,\n ),\n formUrlEncoded:\n (isBoolean(outputOptions.override?.formUrlEncoded)\n ? outputOptions.override?.formUrlEncoded\n : normalizeMutator(\n outputWorkspace,\n outputOptions.override?.formUrlEncoded,\n )) ?? true,\n paramsSerializer: normalizeMutator(\n outputWorkspace,\n outputOptions.override?.paramsSerializer,\n ),\n header:\n outputOptions.override?.header === false\n ? false\n : isFunction(outputOptions.override?.header)\n ? outputOptions.override?.header!\n : getDefaultFilesHeader,\n requestOptions: outputOptions.override?.requestOptions ?? true,\n namingConvention: outputOptions.override?.namingConvention ?? {},\n components: {\n schemas: {\n suffix: RefComponentSuffix.schemas,\n itemSuffix:\n outputOptions.override?.components?.schemas?.itemSuffix ?? 'Item',\n ...outputOptions.override?.components?.schemas,\n },\n responses: {\n suffix: RefComponentSuffix.responses,\n ...outputOptions.override?.components?.responses,\n },\n parameters: {\n suffix: RefComponentSuffix.parameters,\n ...outputOptions.override?.components?.parameters,\n },\n requestBodies: {\n suffix: RefComponentSuffix.requestBodies,\n ...outputOptions.override?.components?.requestBodies,\n },\n },\n hono: normalizeHonoOptions(outputOptions.override?.hono, workspace),\n jsDoc: normalizeJSDocOptions(outputOptions.override?.jsDoc),\n query: globalQueryOptions,\n zod: {\n strict: {\n param: outputOptions.override?.zod?.strict?.param ?? false,\n query: outputOptions.override?.zod?.strict?.query ?? false,\n header: outputOptions.override?.zod?.strict?.header ?? false,\n body: outputOptions.override?.zod?.strict?.body ?? false,\n response: outputOptions.override?.zod?.strict?.response ?? false,\n },\n generate: {\n param: outputOptions.override?.zod?.generate?.param ?? true,\n query: outputOptions.override?.zod?.generate?.query ?? true,\n header: outputOptions.override?.zod?.generate?.header ?? true,\n body: outputOptions.override?.zod?.generate?.body ?? true,\n response: outputOptions.override?.zod?.generate?.response ?? true,\n },\n coerce: {\n param: outputOptions.override?.zod?.coerce?.param ?? false,\n query: outputOptions.override?.zod?.coerce?.query ?? false,\n header: outputOptions.override?.zod?.coerce?.header ?? false,\n body: outputOptions.override?.zod?.coerce?.body ?? false,\n response: outputOptions.override?.zod?.coerce?.response ?? false,\n },\n preprocess: {\n ...(outputOptions.override?.zod?.preprocess?.param\n ? {\n param: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.param,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.query\n ? {\n query: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.query,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.header\n ? {\n header: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.header,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.body\n ? {\n body: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.body,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.response\n ? {\n response: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.response,\n ),\n }\n : {}),\n },\n generateEachHttpStatus:\n outputOptions.override?.zod?.generateEachHttpStatus ?? false,\n dateTimeOptions: outputOptions.override?.zod?.dateTimeOptions ?? {},\n timeOptions: outputOptions.override?.zod?.timeOptions ?? {},\n },\n swr: {\n ...outputOptions.override?.swr,\n },\n angular: {\n provideIn: outputOptions.override?.angular?.provideIn ?? 'root',\n },\n fetch: {\n includeHttpResponseReturnType:\n outputOptions.override?.fetch?.includeHttpResponseReturnType ??\n true,\n forceSuccessResponse:\n outputOptions.override?.fetch?.forceSuccessResponse ?? false,\n explode: outputOptions.override?.fetch?.explode ?? true,\n ...outputOptions.override?.fetch,\n },\n useDates: outputOptions.override?.useDates || false,\n useDeprecatedOperations:\n outputOptions.override?.useDeprecatedOperations ?? true,\n enumGenerationType:\n (outputOptions.override?.useNativeEnums ?? false)\n ? 'enum'\n : (outputOptions.override?.enumGenerationType ?? 'const'),\n suppressReadonlyModifier:\n outputOptions.override?.suppressReadonlyModifier || false,\n },\n allParamsOptional: outputOptions.allParamsOptional ?? false,\n urlEncodeParameters: outputOptions.urlEncodeParameters ?? false,\n optionsParamRequired: outputOptions.optionsParamRequired ?? false,\n propertySortOrder:\n outputOptions.propertySortOrder ?? PropertySortOrder.SPECIFICATION,\n },\n hooks: options.hooks ? normalizeHooks(options.hooks) : {},\n };\n\n if (!normalizedOptions.input.target) {\n throw new Error(chalk.red(`Config require an input target`));\n }\n\n if (!normalizedOptions.output.target && !normalizedOptions.output.schemas) {\n throw new Error(chalk.red(`Config require an output target or schemas`));\n }\n\n return normalizedOptions;\n};\n\nconst parserDefaultOptions = {\n validate: true,\n resolve: { github: githubResolver, http: httpResolver },\n} as SwaggerParserOptions;\n\nconst normalizeMutator = (\n workspace: string,\n mutator?: Mutator,\n): NormalizedMutator | undefined => {\n if (isObject(mutator)) {\n if (!mutator.path) {\n throw new Error(chalk.red(`Mutator need a path`));\n }\n\n return {\n ...mutator,\n path: upath.resolve(workspace, mutator.path),\n default: (mutator.default || !mutator.name) ?? false,\n };\n }\n\n if (isString(mutator)) {\n return {\n path: upath.resolve(workspace, mutator),\n default: true,\n };\n }\n\n return mutator;\n};\n\nconst normalizePathOrUrl = <T>(path: T, workspace: string) => {\n if (isString(path) && !isUrl(path)) {\n return normalizePath(path, workspace);\n }\n\n return path;\n};\n\nexport const normalizePath = <T>(path: T, workspace: string) => {\n if (!isString(path)) {\n return path;\n }\n return upath.resolve(workspace, path);\n};\n\nconst normalizeOperationsAndTags = (\n operationsOrTags: Record<string, OperationOptions>,\n workspace: string,\n global: {\n query: NormalizedQueryOptions;\n },\n): Record<string, NormalizedOperationOptions> => {\n return Object.fromEntries(\n Object.entries(operationsOrTags).map(\n ([\n key,\n {\n transformer,\n mutator,\n formData,\n formUrlEncoded,\n paramsSerializer,\n query,\n zod,\n ...rest\n },\n ]) => {\n return [\n key,\n {\n ...rest,\n ...(query\n ? {\n query: normalizeQueryOptions(query, workspace, global.query),\n }\n : {}),\n ...(zod\n ? {\n zod: {\n strict: {\n param: zod.strict?.param ?? false,\n query: zod.strict?.query ?? false,\n header: zod.strict?.header ?? false,\n body: zod.strict?.body ?? false,\n response: zod.strict?.response ?? false,\n },\n generate: {\n param: zod.generate?.param ?? true,\n query: zod.generate?.query ?? true,\n header: zod.generate?.header ?? true,\n body: zod.generate?.body ?? true,\n response: zod.generate?.response ?? true,\n },\n coerce: {\n param: zod.coerce?.param ?? false,\n query: zod.coerce?.query ?? false,\n header: zod.coerce?.header ?? false,\n body: zod.coerce?.body ?? false,\n response: zod.coerce?.response ?? false,\n },\n preprocess: {\n ...(zod.preprocess?.param\n ? {\n param: normalizeMutator(\n workspace,\n zod.preprocess.param,\n ),\n }\n : {}),\n ...(zod.preprocess?.query\n ? {\n query: normalizeMutator(\n workspace,\n zod.preprocess.query,\n ),\n }\n : {}),\n ...(zod.preprocess?.header\n ? {\n header: normalizeMutator(\n workspace,\n zod.preprocess.header,\n ),\n }\n : {}),\n ...(zod.preprocess?.body\n ? {\n body: normalizeMutator(\n workspace,\n zod.preprocess.body,\n ),\n }\n : {}),\n ...(zod.preprocess?.response\n ? {\n response: normalizeMutator(\n workspace,\n zod.preprocess.response,\n ),\n }\n : {}),\n },\n generateEachHttpStatus:\n zod?.generateEachHttpStatus ?? false,\n dateTimeOptions: zod?.dateTimeOptions ?? {},\n timeOptions: zod?.timeOptions ?? {},\n },\n }\n : {}),\n ...(transformer\n ? { transformer: normalizePath(transformer, workspace) }\n : {}),\n ...(mutator\n ? { mutator: normalizeMutator(workspace, mutator) }\n : {}),\n ...createFormData(workspace, formData),\n ...(formUrlEncoded\n ? {\n formUrlEncoded: isBoolean(formUrlEncoded)\n ? formUrlEncoded\n : normalizeMutator(workspace, formUrlEncoded),\n }\n : {}),\n ...(paramsSerializer\n ? {\n paramsSerializer: normalizeMutator(\n workspace,\n paramsSerializer,\n ),\n }\n : {}),\n },\n ];\n },\n ),\n );\n};\n\nconst normalizeOutputMode = (mode?: OutputMode): OutputMode => {\n if (!mode) {\n return OutputMode.SINGLE;\n }\n\n if (!Object.values(OutputMode).includes(mode)) {\n createLogger().warn(chalk.yellow(`Unknown the provided mode => ${mode}`));\n return OutputMode.SINGLE;\n }\n\n return mode;\n};\n\nconst normalizeHooks = (hooks: HooksOptions): NormalizedHookOptions => {\n const keys = Object.keys(hooks) as unknown as Hook[];\n\n return keys.reduce<NormalizedHookOptions>((acc, key: Hook) => {\n if (isString(hooks[key])) {\n return {\n ...acc,\n [key]: [hooks[key]] as string[],\n };\n } else if (Array.isArray(hooks[key])) {\n return {\n ...acc,\n [key]: hooks[key] as string[],\n };\n } else if (isFunction(hooks[key])) {\n return {\n ...acc,\n [key]: [hooks[key]] as HookFunction[],\n };\n } else if (isObject(hooks[key])) {\n return {\n ...acc,\n [key]: [hooks[key]] as HookOption[],\n };\n }\n\n return acc;\n }, {});\n};\n\nconst normalizeHonoOptions = (\n hono: HonoOptions = {},\n workspace: string,\n): NormalizedHonoOptions => {\n return {\n ...(hono.handlers\n ? { handlers: upath.resolve(workspace, hono.handlers) }\n : {}),\n compositeRoute: hono.compositeRoute ?? '',\n validator: hono.validator ?? true,\n validatorOutputPath: hono.validatorOutputPath\n ? upath.resolve(workspace, hono.validatorOutputPath)\n : '',\n };\n};\n\nconst normalizeJSDocOptions = (\n jsdoc: JsDocOptions = {},\n): NormalizedJsDocOptions => {\n return {\n ...jsdoc,\n };\n};\n\nconst normalizeQueryOptions = (\n queryOptions: QueryOptions = {},\n outputWorkspace: string,\n globalOptions: NormalizedQueryOptions = {},\n): NormalizedQueryOptions => {\n if (queryOptions.options) {\n console.warn(\n '[WARN] Using query options is deprecated and will be removed in a future major release. Please use queryOptions or mutationOptions instead.',\n );\n }\n\n return {\n ...(isUndefined(queryOptions.usePrefetch)\n ? {}\n : { usePrefetch: queryOptions.usePrefetch }),\n ...(isUndefined(queryOptions.useQuery)\n ? {}\n : { useQuery: queryOptions.useQuery }),\n ...(isUndefined(queryOptions.useSuspenseQuery)\n ? {}\n : { useSuspenseQuery: queryOptions.useSuspenseQuery }),\n ...(isUndefined(queryOptions.useMutation)\n ? {}\n : { useMutation: queryOptions.useMutation }),\n ...(isUndefined(queryOptions.useInfinite)\n ? {}\n : { useInfinite: queryOptions.useInfinite }),\n ...(isUndefined(queryOptions.useSuspenseInfiniteQuery)\n ? {}\n : { useSuspenseInfiniteQuery: queryOptions.useSuspenseInfiniteQuery }),\n ...(queryOptions.useInfiniteQueryParam\n ? { useInfiniteQueryParam: queryOptions.useInfiniteQueryParam }\n : {}),\n ...(queryOptions.options ? { options: queryOptions.options } : {}),\n ...(globalOptions.queryKey\n ? {\n queryKey: globalOptions.queryKey,\n }\n : {}),\n ...(queryOptions?.queryKey\n ? {\n queryKey: normalizeMutator(outputWorkspace, queryOptions?.queryKey),\n }\n : {}),\n ...(globalOptions.queryOptions\n ? {\n queryOptions: globalOptions.queryOptions,\n }\n : {}),\n ...(queryOptions?.queryOptions\n ? {\n queryOptions: normalizeMutator(\n outputWorkspace,\n queryOptions?.queryOptions,\n ),\n }\n : {}),\n ...(globalOptions.mutationOptions\n ? {\n mutationOptions: globalOptions.mutationOptions,\n }\n : {}),\n ...(queryOptions?.mutationOptions\n ? {\n mutationOptions: normalizeMutator(\n outputWorkspace,\n queryOptions?.mutationOptions,\n ),\n }\n : {}),\n ...(isUndefined(globalOptions.shouldExportQueryKey)\n ? {}\n : {\n shouldExportQueryKey: globalOptions.shouldExportQueryKey,\n }),\n ...(isUndefined(queryOptions.shouldExportQueryKey)\n ? {}\n : { shouldExportQueryKey: queryOptions.shouldExportQueryKey }),\n ...(isUndefined(globalOptions.shouldExportHttpClient)\n ? {}\n : {\n shouldExportHttpClient: globalOptions.shouldExportHttpClient,\n }),\n ...(isUndefined(queryOptions.shouldExportHttpClient)\n ? {}\n : { shouldExportHttpClient: queryOptions.shouldExportHttpClient }),\n ...(isUndefined(globalOptions.shouldExportMutatorHooks)\n ? {}\n : {\n shouldExportMutatorHooks: globalOptions.shouldExportMutatorHooks,\n }),\n ...(isUndefined(queryOptions.shouldExportMutatorHooks)\n ? {}\n : { shouldExportMutatorHooks: queryOptions.shouldExportMutatorHooks }),\n ...(isUndefined(globalOptions.shouldSplitQueryKey)\n ? {}\n : {\n shouldSplitQueryKey: globalOptions.shouldSplitQueryKey,\n }),\n ...(isUndefined(queryOptions.shouldSplitQueryKey)\n ? {}\n : { shouldSplitQueryKey: queryOptions.shouldSplitQueryKey }),\n ...(isUndefined(globalOptions.signal)\n ? {}\n : {\n signal: globalOptions.signal,\n }),\n ...(isUndefined(globalOptions.useOperationIdAsQueryKey)\n ? {}\n : {\n useOperationIdAsQueryKey: globalOptions.useOperationIdAsQueryKey,\n }),\n ...(isUndefined(queryOptions.useOperationIdAsQueryKey)\n ? {}\n : { useOperationIdAsQueryKey: queryOptions.useOperationIdAsQueryKey }),\n ...(isUndefined(globalOptions.signal)\n ? {}\n : {\n signal: globalOptions.signal,\n }),\n ...(isUndefined(queryOptions.signal)\n ? {}\n : { signal: queryOptions.signal }),\n ...(isUndefined(globalOptions.version)\n ? {}\n : {\n version: globalOptions.version,\n }),\n ...(isUndefined(queryOptions.version)\n ? {}\n : { version: queryOptions.version }),\n };\n};\n\nexport const getDefaultFilesHeader = ({\n title,\n description,\n version,\n}: {\n title?: string;\n description?: string;\n version?: string;\n} = {}) => [\n `Generated by ${pkg.name} v${pkg.version} 🍺`,\n `Do not edit manually.`,\n ...(title ? [title] : []),\n ...(description ? [description] : []),\n ...(version ? [`OpenAPI spec version: ${version}`] : []),\n];\n","import { log, logError } from '@orval/core';\n\nexport const startWatcher = async (\n watchOptions: boolean | string | (string | boolean)[],\n watchFn: () => Promise<any>,\n defaultTarget: string | string[] = '.',\n) => {\n if (!watchOptions) return;\n const { watch } = await import('chokidar');\n\n const ignored = ['**/{.git,node_modules}/**'];\n\n const watchPaths =\n typeof watchOptions === 'boolean'\n ? defaultTarget\n : Array.isArray(watchOptions)\n ? watchOptions.filter(\n (path): path is string => typeof path === 'string',\n )\n : watchOptions;\n\n log(\n `Watching for changes in ${\n Array.isArray(watchPaths)\n ? watchPaths.map((v) => '\"' + v + '\"').join(' | ')\n : '\"' + watchPaths + '\"'\n }`,\n );\n\n const watcher = watch(watchPaths, {\n ignorePermissionErrors: true,\n ignored,\n });\n watcher.on('all', async (type, file) => {\n log(`Change detected: ${type} ${file}`);\n\n try {\n await watchFn();\n } catch (error) {\n logError(error);\n }\n });\n};\n","import {\n type Hook,\n type HookOption,\n isFunction,\n isObject,\n isString,\n log,\n logError,\n type NormalizedHookCommand,\n} from '@orval/core';\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport { parseArgsStringToArgv } from 'string-argv';\n\nexport const executeHook = async (\n name: Hook,\n commands: NormalizedHookCommand = [],\n args: string[] = [],\n) => {\n log(chalk.white(`Running ${name} hook...`));\n\n for (const command of commands) {\n try {\n if (isString(command)) {\n await executeCommand(command, args);\n } else if (isFunction(command)) {\n await command(args);\n } else if (isObject(command)) {\n await executeObjectCommand(command as HookOption, args);\n }\n } catch (error) {\n logError(error, `Failed to run ${name} hook`);\n }\n }\n};\n\nasync function executeCommand(command: string, args: string[]) {\n const [cmd, ..._args] = [...parseArgsStringToArgv(command), ...args];\n\n await execa(cmd, _args);\n}\n\nasync function executeObjectCommand(command: HookOption, args: string[]) {\n if (command.injectGeneratedDirsAndFiles === false) {\n args = [];\n }\n\n if (isString(command.command)) {\n await executeCommand(command.command, args);\n } else if (isFunction(command.command)) {\n await command.command();\n }\n}\n","import {\n createSuccessMessage,\n getFileInfo,\n getMockFileExtensionByTypeName,\n isRootKey,\n jsDoc,\n log,\n type NormalizedOptions,\n OutputMode,\n upath,\n writeSchemas,\n writeSingleMode,\n type WriteSpecsBuilder,\n writeSplitMode,\n writeSplitTagsMode,\n writeTagsMode,\n} from '@orval/core';\nimport chalk from 'chalk';\nimport execa, { type ExecaError } from 'execa';\nimport fs from 'fs-extra';\nimport uniq from 'lodash.uniq';\nimport type { InfoObject } from 'openapi3-ts/oas30';\nimport type { TypeDocOptions } from 'typedoc';\n\nimport { executeHook } from './utils';\n\nconst getHeader = (\n option: false | ((info: InfoObject) => string | string[]),\n info: InfoObject,\n): string => {\n if (!option) {\n return '';\n }\n\n const header = option(info);\n\n return Array.isArray(header) ? jsDoc({ description: header }) : header;\n};\n\nexport const writeSpecs = async (\n builder: WriteSpecsBuilder,\n workspace: string,\n options: NormalizedOptions,\n projectName?: string,\n) => {\n const { info = { title: '', version: 0 }, schemas, target } = builder;\n const { output } = options;\n const projectTitle = projectName || info.title;\n\n const specsName = Object.keys(schemas).reduce<\n Record<keyof typeof schemas, string>\n >((acc, specKey) => {\n const basePath = upath.getSpecName(specKey, target);\n const name = basePath.slice(1).split('/').join('-');\n\n acc[specKey] = name;\n\n return acc;\n }, {});\n\n const header = getHeader(output.override.header, info as InfoObject);\n\n if (output.schemas) {\n const rootSchemaPath = output.schemas;\n\n const fileExtension = ['tags', 'tags-split', 'split'].includes(output.mode)\n ? '.ts'\n : (output.fileExtension ?? '.ts');\n\n await Promise.all(\n Object.entries(schemas).map(([specKey, schemas]) => {\n const schemaPath = isRootKey(specKey, target)\n ? rootSchemaPath\n : upath.join(rootSchemaPath, specsName[specKey]);\n\n return writeSchemas({\n schemaPath,\n schemas,\n target,\n namingConvention: output.namingConvention,\n fileExtension,\n specsName,\n specKey,\n isRootKey: isRootKey(specKey, target),\n header,\n indexFiles: output.indexFiles,\n });\n }),\n );\n }\n\n let implementationPaths: string[] = [];\n\n if (output.target) {\n const writeMode = getWriteMode(output.mode);\n implementationPaths = await writeMode({\n builder,\n workspace,\n output,\n specsName,\n header,\n needSchema: !output.schemas && output.client !== 'zod',\n });\n }\n\n if (output.workspace) {\n const workspacePath = output.workspace;\n const imports = implementationPaths\n .filter(\n (path) =>\n !output.mock ||\n !path.endsWith(`.${getMockFileExtensionByTypeName(output.mock)}.ts`),\n )\n .map((path) =>\n upath.relativeSafe(\n workspacePath,\n getFileInfo(path).pathWithoutExtension,\n ),\n );\n\n if (output.schemas) {\n imports.push(\n upath.relativeSafe(workspacePath, getFileInfo(output.schemas).dirname),\n );\n }\n\n if (output.indexFiles) {\n const indexFile = upath.join(workspacePath, '/index.ts');\n\n if (await fs.pathExists(indexFile)) {\n const data = await fs.readFile(indexFile, 'utf8');\n const importsNotDeclared = imports.filter((imp) => !data.includes(imp));\n await fs.appendFile(\n indexFile,\n uniq(importsNotDeclared)\n .map((imp) => `export * from '${imp}';\\n`)\n .join(''),\n );\n } else {\n await fs.outputFile(\n indexFile,\n uniq(imports)\n .map((imp) => `export * from '${imp}';`)\n .join('\\n') + '\\n',\n );\n }\n\n implementationPaths = [indexFile, ...implementationPaths];\n }\n }\n\n if (builder.extraFiles.length > 0) {\n await Promise.all(\n builder.extraFiles.map(async (file) =>\n fs.outputFile(file.path, file.content),\n ),\n );\n\n implementationPaths = [\n ...implementationPaths,\n ...builder.extraFiles.map((file) => file.path),\n ];\n }\n\n const paths = [\n ...(output.schemas ? [getFileInfo(output.schemas).dirname] : []),\n ...implementationPaths,\n ];\n\n if (options.hooks.afterAllFilesWrite) {\n await executeHook(\n 'afterAllFilesWrite',\n options.hooks.afterAllFilesWrite,\n paths,\n );\n }\n\n if (output.prettier) {\n try {\n await execa('prettier', ['--write', ...paths]);\n } catch {\n log(\n chalk.yellow(\n `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}Globally installed prettier not found`,\n ),\n );\n }\n }\n\n if (output.biome) {\n try {\n await execa('biome', ['check', '--write', ...paths]);\n } catch (error) {\n const errorExeca = error as ExecaError;\n const message =\n errorExeca.exitCode === 1\n ? errorExeca.stdout + errorExeca.stderr\n : `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}biome not found`;\n\n log(chalk.yellow(message));\n }\n }\n\n if (output.docs) {\n try {\n let config: Partial<TypeDocOptions> = {};\n let configPath: string | null = null;\n if (typeof output.docs === 'object') {\n ({ configPath = null, ...config } = output.docs);\n if (configPath) {\n config.options = configPath;\n }\n }\n\n const getTypedocApplication = async () => {\n const { Application } = await import('typedoc');\n return Application;\n };\n\n const Application = await getTypedocApplication();\n const app = await Application.bootstrapWithPlugins({\n entryPoints: paths,\n theme: 'markdown',\n // Set the custom config location if it has been provided.\n ...config,\n plugin: ['typedoc-plugin-markdown', ...(config.plugin ?? [])],\n });\n // Set defaults if the have not been provided by the external config.\n if (!app.options.isSet('readme')) {\n app.options.setValue('readme', 'none');\n }\n if (!app.options.isSet('logLevel')) {\n app.options.setValue('logLevel', 'None');\n }\n const project = await app.convert();\n if (project) {\n await app.generateDocs(project, app.options.getValue('out') as string);\n } else {\n throw new Error('TypeDoc not initialized');\n }\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}Unable to generate docs`;\n\n log(chalk.yellow(message));\n }\n }\n\n createSuccessMessage(projectTitle);\n};\n\nconst getWriteMode = (mode: OutputMode) => {\n switch (mode) {\n case OutputMode.SPLIT: {\n return writeSplitMode;\n }\n case OutputMode.TAGS: {\n return writeTagsMode;\n }\n case OutputMode.TAGS_SPLIT: {\n return writeSplitTagsMode;\n }\n case OutputMode.SINGLE:\n default: {\n return writeSingleMode;\n }\n }\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport process from 'node:process';\nimport url from 'node:url';\n\nimport {\n asyncReduce,\n type ConfigExternal,\n ErrorWithTag,\n getFileInfo,\n type GlobalOptions,\n isFunction,\n isString,\n log,\n logError,\n type NormalizedConfig,\n type NormalizedOptions,\n removeFilesAndEmptyFolders,\n} from '@orval/core';\n\nimport { importSpecs } from './import-specs';\nimport { normalizeOptions } from './utils/options';\nimport { startWatcher } from './utils/watcher';\nimport { writeSpecs } from './write-specs';\n\nexport const generateSpec = async (\n workspace: string,\n options: NormalizedOptions,\n projectName?: string,\n) => {\n if (options.output.clean) {\n const extraPatterns = Array.isArray(options.output.clean)\n ? options.output.clean\n : [];\n\n if (options.output.target) {\n await removeFilesAndEmptyFolders(\n ['**/*', '!**/*.d.ts', ...extraPatterns],\n getFileInfo(options.output.target).dirname,\n );\n }\n if (options.output.schemas) {\n await removeFilesAndEmptyFolders(\n ['**/*', '!**/*.d.ts', ...extraPatterns],\n getFileInfo(options.output.schemas).dirname,\n );\n }\n log(`${projectName ? `${projectName}: ` : ''}Cleaning output folder`);\n }\n\n const writeSpecBuilder = await importSpecs(workspace, options);\n await writeSpecs(writeSpecBuilder, workspace, options, projectName);\n};\n\nexport const generateSpecs = async (\n config: NormalizedConfig,\n workspace: string,\n projectName?: string,\n) => {\n if (projectName) {\n const options = config[projectName];\n\n if (options) {\n try {\n await generateSpec(workspace, options, projectName);\n } catch (error) {\n const errorMsg =\n error instanceof Error ? error.message : 'unknown error';\n throw new ErrorWithTag(errorMsg, projectName, { cause: error });\n }\n } else {\n throw new Error('Project not found');\n }\n return;\n }\n\n let hasErrors: true | undefined;\n for (const [projectName, options] of Object.entries(config)) {\n if (!options) {\n hasErrors = true;\n logError('No options found', projectName);\n continue;\n }\n try {\n await generateSpec(workspace, options, projectName);\n } catch (error) {\n hasErrors = true;\n logError(error, projectName);\n }\n }\n\n if (hasErrors)\n throw new Error('One or more project failed, see above for details');\n};\n\nfunction findConfigFile(configFilePath?: string) {\n if (configFilePath) {\n if (!fs.existsSync(configFilePath))\n throw new Error(`Config file ${configFilePath} does not exist`);\n\n return configFilePath;\n }\n\n const root = process.cwd();\n const exts = ['.ts', '.js', '.mjs', '.cjs'];\n for (const ext of exts) {\n const fullPath = path.resolve(root, `orval.config${ext}`);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n\n throw new Error(`No config file found in ${root}`);\n}\n\nexport const generateConfig = async (\n configFile?: string,\n options?: GlobalOptions,\n) => {\n const configFilePath = findConfigFile(configFile);\n let configExternal: ConfigExternal;\n try {\n const importPath = url.pathToFileURL(configFilePath).href;\n const importedModule = (await import(importPath)) as {\n default?: ConfigExternal;\n };\n if (importedModule.default === undefined) {\n throw new Error(`${configFilePath} doesn't have a default export`);\n }\n configExternal = importedModule.default;\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'unknown error';\n throw new Error(`failed to load from ${configFilePath} => ${errorMsg}`);\n }\n\n const workspace = path.dirname(configFilePath);\n\n const config = await (isFunction(configExternal)\n ? configExternal()\n : configExternal);\n\n const normalizedConfig = await asyncReduce(\n Object.entries(config),\n async (acc, [key, value]) => {\n acc[key] = await normalizeOptions(value, workspace, options);\n\n return acc;\n },\n {} as NormalizedConfig,\n );\n\n const fileToWatch = Object.entries(normalizedConfig)\n .filter(\n ([project]) =>\n options?.projectName === undefined || project === options.projectName,\n )\n .map(([, options]) => options?.input.target)\n .filter((target) => isString(target)) as string[];\n\n await (options?.watch && fileToWatch.length > 0\n ? startWatcher(\n options.watch,\n () => generateSpecs(normalizedConfig, workspace, options.projectName),\n fileToWatch,\n )\n : generateSpecs(normalizedConfig, workspace, options?.projectName));\n};\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, '__esModule', { value: true });
2
- const require_generate = require('./generate-3XUKbpiV.js');
2
+ const require_generate = require('./generate-B5LnJ5C4.js');
3
3
  let __orval_core = require("@orval/core");
4
4
  __orval_core = require_generate.__toESM(__orval_core);
5
5
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "orval",
3
3
  "description": "A swagger client generator for typescript",
4
- "version": "7.13.1",
4
+ "version": "7.14.0",
5
5
  "license": "MIT",
6
6
  "files": [
7
7
  "dist",
@@ -15,6 +15,9 @@
15
15
  "default": "./dist/index.js"
16
16
  }
17
17
  },
18
+ "engines": {
19
+ "node": ">=22.18.0"
20
+ },
18
21
  "keywords": [
19
22
  "rest",
20
23
  "client",
@@ -70,16 +73,16 @@
70
73
  "dependencies": {
71
74
  "@apidevtools/swagger-parser": "^12.0.0",
72
75
  "@commander-js/extra-typings": "^14.0.0",
73
- "@orval/angular": "7.13.1",
74
- "@orval/axios": "7.13.1",
75
- "@orval/core": "7.13.1",
76
- "@orval/fetch": "7.13.1",
77
- "@orval/hono": "7.13.1",
78
- "@orval/mcp": "7.13.1",
79
- "@orval/mock": "7.13.1",
80
- "@orval/query": "7.13.1",
81
- "@orval/swr": "7.13.1",
82
- "@orval/zod": "7.13.1",
76
+ "@orval/angular": "7.14.0",
77
+ "@orval/axios": "7.14.0",
78
+ "@orval/core": "7.14.0",
79
+ "@orval/fetch": "7.14.0",
80
+ "@orval/hono": "7.14.0",
81
+ "@orval/mcp": "7.14.0",
82
+ "@orval/mock": "7.14.0",
83
+ "@orval/query": "7.14.0",
84
+ "@orval/swr": "7.14.0",
85
+ "@orval/zod": "7.14.0",
83
86
  "chalk": "^4.1.2",
84
87
  "chokidar": "^4.0.3",
85
88
  "commander": "^14.0.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-3XUKbpiV.js","names":["OutputClient","GENERATOR_CLIENT: GeneratorClients","generateClientImports: GeneratorClientImports","dependencies","generateClientHeader: GeneratorClientHeader","generateClientFooter: GeneratorClientFooter","implementation: string","generateClientTitle: GeneratorClientTitle","mock","generateExtraFiles","GetterPropType","acc","generateMockImports","context: ContextSpecs","name","upath","SwaggerParser","isUrl","upath","fs","yaml","https","githubToken: string | null","fs","upath","error: any","fs","yaml","dependencies","version","fs","FormDataArrayHandling","mock: GlobalMockOptions | ClientMockBuilder | undefined","DEFAULT_MOCK_OPTIONS","globalQueryOptions: NormalizedQueryOptions","normalizedOptions: NormalizedOptions","NamingConvention","OutputClient","OutputHttpClient","RefComponentSuffix","PropertySortOrder","upath","query","zod","OutputMode","hono","pkg","description","version","type","name","upath","schemas","implementationPaths: string[]","fs","config: Partial<TypeDocOptions>","configPath: string | null","OutputMode","writeSplitMode","writeTagsMode","writeSplitTagsMode","writeSingleMode","ErrorWithTag","hasErrors: true | undefined","projectName","upath","options"],"sources":["../src/client.ts","../src/api.ts","../src/import-open-api.ts","../src/import-specs.ts","../package.json","../src/utils/request.ts","../src/utils/github.ts","../src/utils/package-json.ts","../src/utils/tsconfig.ts","../src/utils/http-resolver.ts","../src/utils/options.ts","../src/utils/watcher.ts","../src/utils/execute-hook.ts","../src/write-specs.ts","../src/generate.ts"],"sourcesContent":["import angular from '@orval/angular';\nimport axios from '@orval/axios';\nimport {\n asyncReduce,\n type ClientFileBuilder,\n type ClientMockGeneratorBuilder,\n type ContextSpecs,\n generateDependencyImports,\n type GeneratorClientFooter,\n type GeneratorClientHeader,\n type GeneratorClientImports,\n type GeneratorClients,\n type GeneratorClientTitle,\n type GeneratorOperations,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n type GeneratorVerbsOptions,\n isFunction,\n type NormalizedOutputOptions,\n OutputClient,\n type OutputClientFunc,\n pascal,\n} from '@orval/core';\nimport fetchClient from '@orval/fetch';\nimport hono from '@orval/hono';\nimport mcp from '@orval/mcp';\nimport * as mock from '@orval/mock';\nimport query from '@orval/query';\nimport swr from '@orval/swr';\nimport zod from '@orval/zod';\n\nconst DEFAULT_CLIENT = OutputClient.AXIOS;\n\nconst getGeneratorClient = (\n outputClient: OutputClient | OutputClientFunc,\n output: NormalizedOutputOptions,\n) => {\n const GENERATOR_CLIENT: GeneratorClients = {\n axios: axios({ type: 'axios' })(),\n 'axios-functions': axios({ type: 'axios-functions' })(),\n angular: angular()(),\n 'react-query': query({ output, type: 'react-query' })(),\n 'svelte-query': query({ output, type: 'svelte-query' })(),\n 'vue-query': query({ output, type: 'vue-query' })(),\n swr: swr()(),\n zod: zod()(),\n hono: hono()(),\n fetch: fetchClient()(),\n mcp: mcp()(),\n };\n\n const generator = isFunction(outputClient)\n ? outputClient(GENERATOR_CLIENT)\n : GENERATOR_CLIENT[outputClient];\n\n if (!generator) {\n throw new Error(`Oups... 🍻. Client not found: ${outputClient}`);\n }\n\n return generator;\n};\n\nexport const generateClientImports: GeneratorClientImports = ({\n client = DEFAULT_CLIENT,\n implementation,\n imports,\n specsName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n hasGlobalMutator,\n hasTagsMutator,\n hasParamsSerializerOptions,\n packageJson,\n output,\n}) => {\n const { dependencies } = getGeneratorClient(client, output);\n return generateDependencyImports(\n implementation,\n dependencies\n ? [\n ...dependencies(\n hasGlobalMutator,\n hasParamsSerializerOptions,\n packageJson,\n output.httpClient,\n hasTagsMutator,\n output.override,\n ),\n ...imports,\n ]\n : imports,\n specsName,\n hasSchemaDir,\n isAllowSyntheticDefaultImports,\n );\n};\n\nexport const generateClientHeader: GeneratorClientHeader = ({\n outputClient = DEFAULT_CLIENT,\n isRequestOptions,\n isGlobalMutator,\n isMutator,\n provideIn,\n hasAwaitedType,\n titles,\n output,\n verbOptions,\n tag,\n clientImplementation,\n}) => {\n const { header } = getGeneratorClient(outputClient, output);\n return {\n implementation: header\n ? header({\n title: titles.implementation,\n isRequestOptions,\n isGlobalMutator,\n isMutator,\n provideIn,\n hasAwaitedType,\n output,\n verbOptions,\n tag,\n clientImplementation,\n })\n : '',\n implementationMock: `export const ${titles.implementationMock} = () => [\\n`,\n };\n};\n\nexport const generateClientFooter: GeneratorClientFooter = ({\n outputClient = DEFAULT_CLIENT,\n operationNames,\n hasMutator,\n hasAwaitedType,\n titles,\n output,\n}) => {\n const { footer } = getGeneratorClient(outputClient, output);\n\n if (!footer) {\n return {\n implementation: '',\n implementationMock: `\\n]\\n`,\n };\n }\n\n let implementation: string;\n try {\n if (isFunction(outputClient)) {\n implementation = (footer as (operationNames: any) => string)(\n operationNames,\n );\n // being here means that the previous call worked\n console.warn(\n '[WARN] Passing an array of strings for operations names to the footer function is deprecated and will be removed in a future major release. Please pass them in an object instead: { operationNames: string[] }.',\n );\n } else {\n implementation = footer({\n operationNames,\n title: titles.implementation,\n hasMutator,\n hasAwaitedType,\n });\n }\n } catch {\n implementation = footer({\n operationNames,\n title: titles.implementation,\n hasMutator,\n hasAwaitedType,\n });\n }\n\n return {\n implementation,\n implementationMock: `]\\n`,\n };\n};\n\nexport const generateClientTitle: GeneratorClientTitle = ({\n outputClient = DEFAULT_CLIENT,\n title,\n customTitleFunc,\n output,\n}) => {\n const { title: generatorTitle } = getGeneratorClient(outputClient, output);\n\n if (!generatorTitle) {\n return {\n implementation: '',\n implementationMock: `get${pascal(title)}Mock`,\n };\n }\n\n if (customTitleFunc) {\n const customTitle = customTitleFunc(title);\n return {\n implementation: generatorTitle(customTitle),\n implementationMock: `get${pascal(customTitle)}Mock`,\n };\n }\n return {\n implementation: generatorTitle(title),\n implementationMock: `get${pascal(title)}Mock`,\n };\n};\n\nconst generateMock = (\n verbOption: GeneratorVerbOptions,\n options: GeneratorOptions,\n): ClientMockGeneratorBuilder => {\n if (!options.mock) {\n return {\n implementation: {\n function: '',\n handler: '',\n handlerName: '',\n },\n imports: [],\n };\n }\n\n if (isFunction(options.mock)) {\n return options.mock(verbOption, options);\n }\n\n return mock.generateMock(\n verbOption,\n options as typeof options & {\n mock: Exclude<(typeof options)['mock'], Function | undefined>;\n },\n );\n};\n\nexport const generateOperations = (\n outputClient: OutputClient | OutputClientFunc = DEFAULT_CLIENT,\n verbsOptions: GeneratorVerbsOptions,\n options: GeneratorOptions,\n output: NormalizedOutputOptions,\n): Promise<GeneratorOperations> => {\n return asyncReduce(\n verbsOptions,\n async (acc, verbOption) => {\n const { client: generatorClient } = getGeneratorClient(\n outputClient,\n output,\n );\n const client = await generatorClient(verbOption, options, outputClient);\n\n if (!client.implementation) {\n return acc;\n }\n\n const generatedMock = generateMock(verbOption, options);\n\n acc[verbOption.operationId] = {\n implementation: verbOption.doc + client.implementation,\n imports: client.imports,\n implementationMock: generatedMock.implementation,\n importsMock: generatedMock.imports,\n tags: verbOption.tags,\n mutator: verbOption.mutator,\n clientMutators: client.mutators,\n formData: verbOption.formData,\n formUrlEncoded: verbOption.formUrlEncoded,\n paramsSerializer: verbOption.paramsSerializer,\n operationName: verbOption.operationName,\n fetchReviver: verbOption.fetchReviver,\n };\n\n return acc;\n },\n {} as GeneratorOperations,\n );\n};\n\nexport const generateExtraFiles = (\n outputClient: OutputClient | OutputClientFunc = DEFAULT_CLIENT,\n verbsOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n): Promise<ClientFileBuilder[]> => {\n const { extraFiles: generateExtraFiles } = getGeneratorClient(\n outputClient,\n output,\n );\n\n if (!generateExtraFiles) {\n return Promise.resolve([]);\n }\n\n return generateExtraFiles(verbsOptions, output, context);\n};\n","import {\n asyncReduce,\n type ContextSpecs,\n generateVerbsOptions,\n type GeneratorApiBuilder,\n type GeneratorApiOperations,\n type GeneratorSchema,\n getFullRoute,\n getRoute,\n GetterPropType,\n isReference,\n type NormalizedInputOptions,\n type NormalizedOutputOptions,\n resolveRef,\n} from '@orval/core';\nimport { generateMockImports } from '@orval/mock';\nimport type { PathItemObject } from 'openapi3-ts/oas30';\n\nimport {\n generateClientFooter,\n generateClientHeader,\n generateClientImports,\n generateClientTitle,\n generateExtraFiles,\n generateOperations,\n} from './client';\n\nexport const getApiBuilder = async ({\n input,\n output,\n context,\n}: {\n input: NormalizedInputOptions;\n output: NormalizedOutputOptions;\n context: ContextSpecs;\n}): Promise<GeneratorApiBuilder> => {\n const api = await asyncReduce(\n Object.entries(context.specs[context.specKey].paths ?? {}),\n async (acc, [pathRoute, verbs]: [string, PathItemObject]) => {\n const route = getRoute(pathRoute);\n\n let resolvedVerbs = verbs;\n let resolvedContext = context;\n\n if (isReference(verbs)) {\n const { schema, imports } = resolveRef<PathItemObject>(verbs, context);\n\n resolvedVerbs = schema;\n\n resolvedContext = {\n ...context,\n ...(imports.length > 0\n ? {\n specKey: imports[0].specKey,\n }\n : {}),\n };\n }\n\n let verbsOptions = await generateVerbsOptions({\n verbs: resolvedVerbs,\n input,\n output,\n route,\n pathRoute,\n context: resolvedContext,\n });\n\n // GitHub #564 check if we want to exclude deprecated operations\n if (output.override.useDeprecatedOperations === false) {\n verbsOptions = verbsOptions.filter((verb) => {\n return !verb.deprecated;\n });\n }\n\n const schemas = verbsOptions.reduce<GeneratorSchema[]>(\n (acc, { queryParams, headers, body, response, props }) => {\n if (props) {\n acc.push(\n ...props.flatMap((param) =>\n param.type === GetterPropType.NAMED_PATH_PARAMS\n ? param.schema\n : [],\n ),\n );\n }\n if (queryParams) {\n acc.push(queryParams.schema, ...queryParams.deps);\n }\n if (headers) {\n acc.push(headers.schema, ...headers.deps);\n }\n\n acc.push(...body.schemas, ...response.schemas);\n\n return acc;\n },\n [],\n );\n\n const fullRoute = getFullRoute(\n route,\n verbs.servers ?? context.specs[context.specKey].servers,\n output.baseUrl,\n );\n if (!output.target) {\n throw new Error('Output does not have a target');\n }\n const pathOperations = await generateOperations(\n output.client,\n verbsOptions,\n {\n route: fullRoute,\n pathRoute,\n override: output.override,\n context: resolvedContext,\n mock: output.mock,\n output: output.target,\n },\n output,\n );\n\n for (const verbOption of verbsOptions) {\n acc.verbOptions[verbOption.operationId] = verbOption;\n }\n acc.schemas.push(...schemas);\n acc.operations = { ...acc.operations, ...pathOperations };\n\n return acc;\n },\n {\n operations: {},\n verbOptions: {},\n schemas: [],\n } as GeneratorApiOperations,\n );\n\n const extraFiles = await generateExtraFiles(\n output.client,\n api.verbOptions,\n output,\n context,\n );\n\n return {\n operations: api.operations,\n schemas: api.schemas,\n verbOptions: api.verbOptions,\n title: generateClientTitle,\n header: generateClientHeader,\n footer: generateClientFooter,\n imports: generateClientImports,\n importsMock: generateMockImports,\n extraFiles,\n };\n};\n","import {\n asyncReduce,\n type ContextSpecs,\n dynamicImport,\n generateComponentDefinition,\n generateParameterDefinition,\n generateSchemasDefinition,\n type GeneratorSchema,\n ibmOpenapiValidator,\n type ImportOpenApi,\n type InputOptions,\n isObject,\n isReference,\n isSchema,\n type NormalizedOutputOptions,\n openApiConverter,\n upath,\n type WriteSpecsBuilder,\n} from '@orval/core';\nimport type { JSONSchema6, JSONSchema7 } from 'json-schema';\nimport type { OpenAPIObject, SchemasObject } from 'openapi3-ts/oas30';\n\nimport { getApiBuilder } from './api';\n\nexport const importOpenApi = async ({\n data,\n input,\n output,\n target,\n workspace,\n}: ImportOpenApi): Promise<WriteSpecsBuilder> => {\n const specs = await generateInputSpecs({ specs: data, input, workspace });\n\n const schemas = getApiSchemas({ input, output, target, workspace, specs });\n\n const api = await getApiBuilder({\n input,\n output,\n context: {\n specKey: target,\n target,\n workspace,\n specs,\n output,\n },\n });\n\n return {\n ...api,\n schemas: {\n ...schemas,\n [target]: [...(schemas[target] ?? []), ...api.schemas],\n },\n target,\n info: specs[target].info,\n };\n};\n\nconst generateInputSpecs = async ({\n specs,\n input,\n workspace,\n}: {\n specs: JSONSchema6 | JSONSchema7 | Record<string, OpenAPIObject | unknown>;\n input: InputOptions;\n workspace: string;\n}): Promise<Record<string, OpenAPIObject>> => {\n const transformerFn = input.override?.transformer\n ? await dynamicImport(input.override.transformer, workspace)\n : undefined;\n\n return asyncReduce(\n Object.entries(specs),\n async (acc, [specKey, value]) => {\n const schema = await openApiConverter(\n value,\n input.converterOptions,\n specKey,\n );\n\n const transfomedSchema = transformerFn ? transformerFn(schema) : schema;\n\n if (input.validation) {\n await ibmOpenapiValidator(transfomedSchema, input.validation);\n }\n\n acc[specKey] = transfomedSchema;\n\n return acc;\n },\n {} as Record<string, OpenAPIObject>,\n );\n};\n\nconst getApiSchemas = ({\n input,\n output,\n target,\n workspace,\n specs,\n}: {\n input: InputOptions;\n output: NormalizedOutputOptions;\n workspace: string;\n target: string;\n specs: Record<string, OpenAPIObject>;\n}) => {\n return Object.entries(specs).reduce<Record<string, GeneratorSchema[]>>(\n (acc, [specKey, spec]) => {\n const context: ContextSpecs = {\n specKey,\n target,\n workspace,\n specs,\n output,\n };\n\n const parsedSchemas = spec.openapi\n ? (spec.components?.schemas as SchemasObject)\n : getAllSchemas(spec, specKey);\n\n const schemaDefinition = generateSchemasDefinition(\n parsedSchemas,\n context,\n output.override.components.schemas.suffix,\n input.filters,\n );\n\n const responseDefinition = generateComponentDefinition(\n spec.components?.responses,\n context,\n output.override.components.responses.suffix,\n );\n\n const bodyDefinition = generateComponentDefinition(\n spec.components?.requestBodies,\n context,\n output.override.components.requestBodies.suffix,\n );\n\n const parameters = generateParameterDefinition(\n spec.components?.parameters,\n context,\n output.override.components.parameters.suffix,\n );\n\n const schemas = [\n ...schemaDefinition,\n ...responseDefinition,\n ...bodyDefinition,\n ...parameters,\n ];\n\n if (schemas.length === 0) {\n return acc;\n }\n\n acc[specKey] = schemas;\n\n return acc;\n },\n {},\n );\n};\n\nconst getAllSchemas = (spec: object, specKey?: string): SchemasObject => {\n const keysToOmit = new Set([\n 'openapi',\n 'info',\n 'servers',\n 'paths',\n 'components',\n 'security',\n 'tags',\n 'externalDocs',\n ]);\n\n const cleanedSpec = Object.fromEntries(\n Object.entries(spec).filter(([key]) => !keysToOmit.has(key)),\n );\n\n if (specKey && isSchema(cleanedSpec)) {\n const name = upath.getSchemaFileName(specKey);\n\n const additionalKeysToOmit = new Set([\n 'type',\n 'properties',\n 'allOf',\n 'oneOf',\n 'anyOf',\n 'items',\n ]);\n\n return {\n [name]: cleanedSpec as SchemasObject,\n ...getAllSchemas(\n Object.fromEntries(\n Object.entries(cleanedSpec).filter(\n ([key]) => !additionalKeysToOmit.has(key),\n ),\n ),\n ),\n };\n }\n\n const schemas = Object.entries(cleanedSpec).reduce<SchemasObject>(\n (acc, [key, value]) => {\n if (!isObject(value)) {\n return acc;\n }\n\n if (!isSchema(value) && !isReference(value)) {\n return { ...acc, ...getAllSchemas(value) };\n }\n\n acc[key] = value;\n\n return acc;\n },\n {},\n );\n\n return {\n ...schemas,\n ...((spec as OpenAPIObject)?.components?.schemas as SchemasObject),\n };\n};\n","import SwaggerParser from '@apidevtools/swagger-parser';\nimport {\n isString,\n isUrl,\n log,\n type NormalizedOptions,\n type SwaggerParserOptions,\n upath,\n type WriteSpecsBuilder,\n} from '@orval/core';\nimport chalk from 'chalk';\nimport fs from 'fs-extra';\nimport yaml from 'js-yaml';\n\nimport { importOpenApi } from './import-open-api';\n\nconst resolveSpecs = async (\n path: string,\n { validate, ...options }: SwaggerParserOptions,\n isUrl: boolean,\n isOnlySchema: boolean,\n) => {\n try {\n if (validate) {\n try {\n await SwaggerParser.validate(path, options);\n } catch (error) {\n if (error instanceof Error && error.name === 'ParserError') {\n throw error;\n }\n\n if (!isOnlySchema) {\n log(`⚠️ ${chalk.yellow(error)}`);\n }\n }\n }\n\n const data = (await SwaggerParser.resolve(path, options)).values();\n\n if (isUrl) {\n return data;\n }\n\n // normalizing slashes after SwaggerParser\n return Object.fromEntries(\n Object.entries(data)\n .sort()\n .map(([key, value]) => [upath.resolve(key), value]),\n );\n } catch {\n const file = await fs.readFile(path, 'utf8');\n\n return {\n [path]: yaml.load(file),\n };\n }\n};\n\nexport const importSpecs = async (\n workspace: string,\n options: NormalizedOptions,\n): Promise<WriteSpecsBuilder> => {\n const { input, output } = options;\n\n if (!isString(input.target)) {\n return importOpenApi({\n data: { [workspace]: input.target },\n input,\n output,\n target: workspace,\n workspace,\n });\n }\n\n const isPathUrl = isUrl(input.target);\n\n const data = await resolveSpecs(\n input.target,\n input.parserOptions,\n isPathUrl,\n !output.target,\n );\n\n return importOpenApi({\n data,\n input,\n output,\n target: input.target,\n workspace,\n });\n};\n","{\n \"name\": \"orval\",\n \"description\": \"A swagger client generator for typescript\",\n \"version\": \"7.13.1\",\n \"license\": \"MIT\",\n \"files\": [\n \"dist\",\n \"!dist/**/*.d.ts.map\"\n ],\n \"bin\": \"./dist/bin/orval.js\",\n \"type\": \"commonjs\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"rest\",\n \"client\",\n \"swagger\",\n \"open-api\",\n \"fetch\",\n \"data fetching\",\n \"code-generation\",\n \"angular\",\n \"react\",\n \"react-query\",\n \"svelte\",\n \"svelte-query\",\n \"vue\",\n \"vue-query\",\n \"msw\",\n \"mock\",\n \"axios\",\n \"vue-query\",\n \"vue\",\n \"swr\",\n \"zod\",\n \"hono\"\n ],\n \"author\": {\n \"name\": \"Victor Bury\",\n \"email\": \"victor@anymaniax.com\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/orval-labs/orval.git\"\n },\n \"scripts\": {\n \"build\": \"tsdown --config-loader unconfig\",\n \"dev\": \"tsdown --config-loader unconfig --watch src --onSuccess 'yarn generate-api'\",\n \"lint\": \"eslint .\",\n \"generate-api\": \"orval --config ../../samples/react-query/basic/orval.config.ts\",\n \"test\": \"tsc --noEmit && vitest\",\n \"clean\": \"rimraf .turbo dist\",\n \"nuke\": \"rimraf .turbo dist node_modules\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/js-yaml\": \"^4.0.9\",\n \"@types/lodash.uniq\": \"^4.5.9\",\n \"eslint\": \"^9.35.0\",\n \"openapi-types\": \"^12.1.3\",\n \"rimraf\": \"^6.0.1\",\n \"tsdown\": \"^0.15.2\",\n \"typescript\": \"^5.9.2\",\n \"vitest\": \"^3.2.4\"\n },\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^12.0.0\",\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@orval/angular\": \"workspace:*\",\n \"@orval/axios\": \"workspace:*\",\n \"@orval/core\": \"workspace:*\",\n \"@orval/fetch\": \"workspace:*\",\n \"@orval/hono\": \"workspace:*\",\n \"@orval/mcp\": \"workspace:*\",\n \"@orval/mock\": \"workspace:*\",\n \"@orval/query\": \"workspace:*\",\n \"@orval/swr\": \"workspace:*\",\n \"@orval/zod\": \"workspace:*\",\n \"chalk\": \"^4.1.2\",\n \"chokidar\": \"^4.0.3\",\n \"commander\": \"^14.0.1\",\n \"enquirer\": \"^2.4.1\",\n \"execa\": \"^5.1.1\",\n \"find-up\": \"5.0.0\",\n \"fs-extra\": \"^11.3.1\",\n \"js-yaml\": \"4.1.0\",\n \"lodash.uniq\": \"^4.5.0\",\n \"openapi3-ts\": \"4.5.0\",\n \"string-argv\": \"^0.3.2\",\n \"tsconfck\": \"^2.1.2\",\n \"typedoc\": \"^0.28.12\",\n \"typedoc-plugin-coverage\": \"^4.0.1\",\n \"typedoc-plugin-markdown\": \"^4.8.1\"\n }\n}\n","import http from 'node:http';\nimport https from 'node:https';\n\nexport type Response<T = Record<string, unknown>> = {\n status: http.IncomingMessage['statusCode'];\n headers: http.IncomingMessage['headers'];\n body: T;\n};\n\nexport const request = <T>(\n urlOptions: string | https.RequestOptions | URL,\n data?: string,\n): Promise<Response<T>> => {\n return new Promise((resolve, reject) => {\n const req = https.request(urlOptions, (res) => {\n let body = '';\n res.on('data', (chunk) => (body += chunk.toString()));\n res.on('error', reject);\n res.on('end', () => {\n const response = {\n status: res.statusCode,\n headers: res.headers,\n body: JSON.parse(body),\n };\n if (res.statusCode && res.statusCode >= 200 && res.statusCode <= 299) {\n resolve(response);\n } else {\n reject(response);\n }\n });\n });\n req.on('error', reject);\n if (data) {\n req.write(data, 'binary');\n }\n req.end();\n });\n};\n","import https from 'node:https';\n\nimport SwaggerParser from '@apidevtools/swagger-parser';\nimport { upath } from '@orval/core';\nimport { prompt } from 'enquirer';\nimport fs from 'fs-extra';\n\nimport { request } from './request';\n\nexport const getGithubSpecReq = ({\n accessToken,\n repo,\n owner,\n branch,\n path,\n}: {\n accessToken: string;\n repo: string;\n owner: string;\n branch: string;\n path: string;\n}): [https.RequestOptions, string] => {\n const payload = JSON.stringify({\n query: `query {\n repository(name: \"${repo}\", owner: \"${owner}\") {\n object(expression: \"${branch}:${path}\") {\n ... on Blob {\n text\n }\n }\n }\n }`,\n });\n\n return [\n {\n method: 'POST',\n hostname: 'api.github.com',\n path: '/graphql',\n headers: {\n 'content-type': 'application/json',\n 'user-agent': 'orval-importer',\n authorization: `bearer ${accessToken}`,\n 'Content-Length': payload.length,\n },\n },\n payload,\n ];\n};\n\nlet githubToken: string | null = null;\n\nexport const getGithubAcessToken = async (githubTokenPath: string) => {\n if (githubToken) {\n return githubToken;\n }\n\n if (await fs.pathExists(githubTokenPath)) {\n return fs.readFile(githubTokenPath, 'utf8');\n } else {\n const answers = await prompt<{\n githubToken: string;\n saveToken: boolean;\n }>([\n {\n type: 'input',\n name: 'githubToken',\n message:\n 'Please provide a GitHub token with `repo` rules checked (https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/)',\n },\n {\n type: 'confirm',\n name: 'saveToken',\n message:\n 'Would you like to store your token for the next time? (stored in your node_modules)',\n },\n ]);\n\n githubToken = answers.githubToken;\n\n if (answers.saveToken) {\n await fs.outputFile(githubTokenPath, answers.githubToken);\n }\n return answers.githubToken;\n }\n};\n\nexport const getGithubOpenApi = async (url: string): Promise<string> => {\n const githubTokenPath = upath.join(__dirname, '.githubToken');\n const accessToken = await getGithubAcessToken(githubTokenPath);\n const [info] = url.split('github.com/').slice(-1);\n\n const [owner, repo, , branch, ...paths] = info.split('/');\n const path = paths.join('/');\n\n try {\n const { body } = await request<{\n data?: { repository: any };\n errors?: { type: string }[];\n }>(...getGithubSpecReq({ accessToken, repo, owner, branch, path }));\n if (body.errors?.length) {\n const isErrorRemoveLink = body.errors?.some(\n (error) => error?.type === 'NOT_FOUND',\n );\n\n if (isErrorRemoveLink) {\n const answers = await prompt<{ removeToken: boolean }>([\n {\n type: 'confirm',\n name: 'removeToken',\n message:\n \"Your token doesn't have the correct permissions, should we remove it?\",\n },\n ]);\n if (answers.removeToken) {\n await fs.unlink(githubTokenPath);\n }\n }\n }\n\n return body.data?.repository?.object.text;\n } catch (error: any) {\n if (!error.body) {\n throw new Error(`Oups... 🍻. ${error}`);\n }\n\n if (error.body.message === 'Bad credentials') {\n const answers = await prompt<{ removeToken: boolean }>([\n {\n type: 'confirm',\n name: 'removeToken',\n message:\n \"Your token doesn't have the correct permissions, should we remove it?\",\n },\n ]);\n if (answers.removeToken) {\n await fs.unlink(githubTokenPath);\n }\n }\n throw new Error(error.body.message || `Oups... 🍻. ${error}`);\n }\n};\n\nexport const githubResolver = {\n order: 199,\n canRead(file: SwaggerParser.FileInfo) {\n return file.url.includes('github.com');\n },\n\n read(file: SwaggerParser.FileInfo) {\n return getGithubOpenApi(file.url);\n },\n};\n","import { dynamicImport, isString, log, type PackageJson } from '@orval/core';\nimport chalk from 'chalk';\nimport findUp from 'find-up';\nimport fs from 'fs-extra';\nimport yaml from 'js-yaml';\n\nimport { normalizePath } from './options';\n\nexport const loadPackageJson = async (\n packageJson?: string,\n workspace = process.cwd(),\n): Promise<PackageJson | undefined> => {\n if (!packageJson) {\n const pkgPath = await findUp(['package.json'], { cwd: workspace });\n if (pkgPath) {\n const pkg = await dynamicImport<unknown>(pkgPath, workspace);\n\n if (isPackageJson(pkg)) {\n return await maybeReplaceCatalog(pkg, workspace);\n } else {\n throw new Error('Invalid package.json file');\n }\n }\n return;\n }\n\n const normalizedPath = normalizePath(packageJson, workspace);\n if (fs.existsSync(normalizedPath)) {\n const pkg = await dynamicImport<unknown>(normalizedPath);\n\n if (isPackageJson(pkg)) {\n return await maybeReplaceCatalog(pkg, workspace);\n } else {\n throw new Error(`Invalid package.json file: ${normalizedPath}`);\n }\n }\n return;\n};\n\nconst isPackageJson = (obj: any): obj is PackageJson =>\n typeof obj === 'object' && obj !== null;\n\nconst maybeReplaceCatalog = async (\n pkg: PackageJson,\n workspace: string,\n): Promise<PackageJson> => {\n if (\n ![\n ...Object.entries(pkg.dependencies ?? {}),\n ...Object.entries(pkg.devDependencies ?? {}),\n ...Object.entries(pkg.peerDependencies ?? {}),\n ].some(([, value]) => isString(value) && value.startsWith('catalog:'))\n ) {\n return pkg;\n }\n\n const filePath = await findUp('pnpm-workspace.yaml', { cwd: workspace });\n if (!filePath) {\n log(\n `⚠️ ${chalk.yellow('package.json contains pnpm catalog: in dependencies, but no pnpm-workspace.yaml was found.')}`,\n );\n return pkg;\n }\n const file = await fs.readFile(filePath, 'utf8');\n\n const pnpmWorkspaceFile = yaml.load(file) as Record<string, any>;\n performSubstitution(pkg.dependencies, pnpmWorkspaceFile);\n performSubstitution(pkg.devDependencies, pnpmWorkspaceFile);\n performSubstitution(pkg.peerDependencies, pnpmWorkspaceFile);\n\n return pkg;\n};\n\nconst performSubstitution = (\n dependencies: Record<string, string> | undefined,\n pnpmWorkspaceFile: Record<string, any>,\n) => {\n if (!dependencies) return;\n for (const [packageName, version] of Object.entries(dependencies)) {\n if (version === 'catalog:' || version === 'catalog:default') {\n if (!pnpmWorkspaceFile.catalog) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, catalog: substitution for the package '${packageName}' failed as there were no default catalog.`)}`,\n );\n continue;\n }\n const sub = pnpmWorkspaceFile.catalog[packageName];\n if (!sub) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, catalog: substitution for the package '${packageName}' failed as there were no matching package in the default catalog.`)}`,\n );\n continue;\n }\n dependencies[packageName] = sub;\n } else if (version.startsWith('catalog:')) {\n const catalogName = version.slice('catalog:'.length);\n const catalog = pnpmWorkspaceFile.catalogs?.[catalogName];\n if (!catalog) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, '${version}' substitution for the package '${packageName}' failed as there were no matching catalog named '${catalogName}'. (available named catalogs are: ${Object.keys(pnpmWorkspaceFile.catalogs ?? {}).join(', ')})`)}`,\n );\n continue;\n }\n const sub = catalog[packageName];\n if (!sub) {\n log(\n `⚠️ ${chalk.yellow(`when reading from pnpm-workspace.yaml, '${version}' substitution for the package '${packageName}' failed as there were no package in the catalog named '${catalogName}'. (packages in the catalog are: ${Object.keys(catalog).join(', ')})`)}`,\n );\n continue;\n }\n dependencies[packageName] = sub;\n }\n }\n};\n","import { isObject, isString, isUndefined, type Tsconfig } from '@orval/core';\nimport findUp from 'find-up';\nimport fs from 'fs-extra';\nimport { parse } from 'tsconfck';\n\nimport { normalizePath } from './options';\n\nexport const loadTsconfig = async (\n tsconfig?: Tsconfig | string,\n workspace = process.cwd(),\n): Promise<Tsconfig | undefined> => {\n if (isUndefined(tsconfig)) {\n const configPath = await findUp(['tsconfig.json', 'jsconfig.json'], {\n cwd: workspace,\n });\n if (configPath) {\n const config = await parse(configPath);\n return config.tsconfig;\n }\n return;\n }\n\n if (isString(tsconfig)) {\n const normalizedPath = normalizePath(tsconfig, workspace);\n if (fs.existsSync(normalizedPath)) {\n const config = await parse(normalizedPath);\n\n const tsconfig =\n config.referenced?.find(\n ({ tsconfigFile }) => tsconfigFile === normalizedPath,\n )?.tsconfig || config.tsconfig;\n\n return tsconfig;\n }\n return;\n }\n\n if (isObject(tsconfig)) {\n return tsconfig;\n }\n return;\n};\n","export const httpResolver = {\n safeUrlResolver: false, // this is merged with the default http resolver in json-schema-ref-parser\n};\n","import {\n type ClientMockBuilder,\n type ConfigExternal,\n createLogger,\n FormDataArrayHandling,\n type GlobalMockOptions,\n type GlobalOptions,\n type HonoOptions,\n type Hook,\n type HookFunction,\n type HookOption,\n type HooksOptions,\n isBoolean,\n isFunction,\n isObject,\n isString,\n isUndefined,\n isUrl,\n type JsDocOptions,\n mergeDeep,\n type Mutator,\n NamingConvention,\n type NormalizedHonoOptions,\n type NormalizedHookOptions,\n type NormalizedJsDocOptions,\n type NormalizedMutator,\n type NormalizedOperationOptions,\n type NormalizedOptions,\n type NormalizedOverrideOutput,\n type NormalizedQueryOptions,\n type OperationOptions,\n type OptionsExport,\n OutputClient,\n OutputHttpClient,\n OutputMode,\n type OverrideOutput,\n PropertySortOrder,\n type QueryOptions,\n RefComponentSuffix,\n type SwaggerParserOptions,\n upath,\n} from '@orval/core';\nimport { DEFAULT_MOCK_OPTIONS } from '@orval/mock';\nimport chalk from 'chalk';\n\nimport pkg from '../../package.json';\nimport { githubResolver } from './github';\nimport { loadPackageJson } from './package-json';\nimport { loadTsconfig } from './tsconfig';\nimport { httpResolver } from './http-resolver';\n\n/**\n * Type helper to make it easier to use orval.config.ts\n * accepts a direct {@link ConfigExternal} object.\n */\nexport function defineConfig(options: ConfigExternal): ConfigExternal {\n return options;\n}\n\nconst createFormData = (\n workspace: string,\n formData: OverrideOutput['formData'],\n): NormalizedOverrideOutput['formData'] => {\n const defaultArrayHandling = FormDataArrayHandling.SERIALIZE;\n if (formData === undefined)\n return { disabled: false, arrayHandling: defaultArrayHandling };\n if (isBoolean(formData))\n return { disabled: !formData, arrayHandling: defaultArrayHandling };\n if (isString(formData))\n return {\n disabled: false,\n mutator: normalizeMutator(workspace, formData),\n arrayHandling: defaultArrayHandling,\n };\n if ('mutator' in formData || 'arrayHandling' in formData)\n return {\n disabled: false,\n mutator: normalizeMutator(workspace, formData.mutator),\n arrayHandling: formData.arrayHandling ?? defaultArrayHandling,\n };\n return {\n disabled: false,\n mutator: normalizeMutator(workspace, formData),\n arrayHandling: defaultArrayHandling,\n };\n};\n\nexport const normalizeOptions = async (\n optionsExport: OptionsExport,\n workspace = process.cwd(),\n globalOptions: GlobalOptions = {},\n) => {\n const options = await (isFunction(optionsExport)\n ? optionsExport()\n : optionsExport);\n\n if (!options.input) {\n throw new Error(chalk.red(`Config require an input`));\n }\n\n if (!options.output) {\n throw new Error(chalk.red(`Config require an output`));\n }\n\n const inputOptions = isString(options.input)\n ? { target: options.input }\n : options.input;\n\n const outputOptions = isString(options.output)\n ? { target: options.output }\n : options.output;\n\n const outputWorkspace = normalizePath(\n outputOptions.workspace || '',\n workspace,\n );\n\n const { clean, prettier, client, httpClient, mode, biome } = globalOptions;\n\n const tsconfig = await loadTsconfig(\n outputOptions.tsconfig || globalOptions.tsconfig,\n workspace,\n );\n\n const packageJson = await loadPackageJson(\n outputOptions.packageJson || globalOptions.packageJson,\n workspace,\n );\n\n const mockOption = outputOptions.mock ?? globalOptions.mock;\n let mock: GlobalMockOptions | ClientMockBuilder | undefined;\n if (typeof mockOption === 'boolean' && mockOption) {\n mock = DEFAULT_MOCK_OPTIONS;\n } else if (isFunction(mockOption)) {\n mock = mockOption;\n } else if (mockOption) {\n mock = {\n ...DEFAULT_MOCK_OPTIONS,\n ...mockOption,\n };\n } else {\n mock = undefined;\n }\n\n const defaultFileExtension = '.ts';\n\n const globalQueryOptions: NormalizedQueryOptions = {\n useQuery: true,\n useMutation: true,\n signal: true,\n shouldExportMutatorHooks: true,\n shouldExportHttpClient: true,\n shouldExportQueryKey: true,\n shouldSplitQueryKey: false,\n ...normalizeQueryOptions(outputOptions.override?.query, workspace),\n };\n\n const normalizedOptions: NormalizedOptions = {\n input: {\n target: globalOptions.input\n ? normalizePathOrUrl(globalOptions.input, process.cwd())\n : normalizePathOrUrl(inputOptions.target, workspace),\n validation: inputOptions.validation || false,\n override: {\n transformer: normalizePath(\n inputOptions.override?.transformer,\n workspace,\n ),\n },\n converterOptions: inputOptions.converterOptions ?? {},\n parserOptions: mergeDeep(\n parserDefaultOptions,\n inputOptions.parserOptions ?? {},\n ),\n filters: inputOptions.filters,\n },\n output: {\n target: globalOptions.output\n ? normalizePath(globalOptions.output, process.cwd())\n : normalizePath(outputOptions.target, outputWorkspace),\n schemas: normalizePath(outputOptions.schemas, outputWorkspace),\n namingConvention:\n outputOptions.namingConvention || NamingConvention.CAMEL_CASE,\n fileExtension: outputOptions.fileExtension || defaultFileExtension,\n workspace: outputOptions.workspace ? outputWorkspace : undefined,\n client: outputOptions.client ?? client ?? OutputClient.AXIOS_FUNCTIONS,\n httpClient:\n outputOptions.httpClient ?? httpClient ?? OutputHttpClient.AXIOS,\n mode: normalizeOutputMode(outputOptions.mode ?? mode),\n mock,\n clean: outputOptions.clean ?? clean ?? false,\n docs: outputOptions.docs ?? false,\n prettier: outputOptions.prettier ?? prettier ?? false,\n biome: outputOptions.biome ?? biome ?? false,\n tsconfig,\n packageJson,\n headers: outputOptions.headers ?? false,\n indexFiles: outputOptions.indexFiles ?? true,\n baseUrl: outputOptions.baseUrl,\n unionAddMissingProperties:\n outputOptions.unionAddMissingProperties ?? false,\n override: {\n ...outputOptions.override,\n mock: {\n arrayMin: outputOptions.override?.mock?.arrayMin ?? 1,\n arrayMax: outputOptions.override?.mock?.arrayMax ?? 10,\n stringMin: outputOptions.override?.mock?.stringMin ?? 10,\n stringMax: outputOptions.override?.mock?.stringMax ?? 20,\n fractionDigits: outputOptions.override?.mock?.fractionDigits ?? 2,\n ...outputOptions.override?.mock,\n },\n operations: normalizeOperationsAndTags(\n outputOptions.override?.operations ?? {},\n outputWorkspace,\n {\n query: globalQueryOptions,\n },\n ),\n tags: normalizeOperationsAndTags(\n outputOptions.override?.tags ?? {},\n outputWorkspace,\n {\n query: globalQueryOptions,\n },\n ),\n mutator: normalizeMutator(\n outputWorkspace,\n outputOptions.override?.mutator,\n ),\n formData: createFormData(\n outputWorkspace,\n outputOptions.override?.formData,\n ),\n formUrlEncoded:\n (isBoolean(outputOptions.override?.formUrlEncoded)\n ? outputOptions.override?.formUrlEncoded\n : normalizeMutator(\n outputWorkspace,\n outputOptions.override?.formUrlEncoded,\n )) ?? true,\n paramsSerializer: normalizeMutator(\n outputWorkspace,\n outputOptions.override?.paramsSerializer,\n ),\n header:\n outputOptions.override?.header === false\n ? false\n : isFunction(outputOptions.override?.header)\n ? outputOptions.override?.header!\n : getDefaultFilesHeader,\n requestOptions: outputOptions.override?.requestOptions ?? true,\n namingConvention: outputOptions.override?.namingConvention ?? {},\n components: {\n schemas: {\n suffix: RefComponentSuffix.schemas,\n itemSuffix:\n outputOptions.override?.components?.schemas?.itemSuffix ?? 'Item',\n ...outputOptions.override?.components?.schemas,\n },\n responses: {\n suffix: RefComponentSuffix.responses,\n ...outputOptions.override?.components?.responses,\n },\n parameters: {\n suffix: RefComponentSuffix.parameters,\n ...outputOptions.override?.components?.parameters,\n },\n requestBodies: {\n suffix: RefComponentSuffix.requestBodies,\n ...outputOptions.override?.components?.requestBodies,\n },\n },\n hono: normalizeHonoOptions(outputOptions.override?.hono, workspace),\n jsDoc: normalizeJSDocOptions(outputOptions.override?.jsDoc),\n query: globalQueryOptions,\n zod: {\n strict: {\n param: outputOptions.override?.zod?.strict?.param ?? false,\n query: outputOptions.override?.zod?.strict?.query ?? false,\n header: outputOptions.override?.zod?.strict?.header ?? false,\n body: outputOptions.override?.zod?.strict?.body ?? false,\n response: outputOptions.override?.zod?.strict?.response ?? false,\n },\n generate: {\n param: outputOptions.override?.zod?.generate?.param ?? true,\n query: outputOptions.override?.zod?.generate?.query ?? true,\n header: outputOptions.override?.zod?.generate?.header ?? true,\n body: outputOptions.override?.zod?.generate?.body ?? true,\n response: outputOptions.override?.zod?.generate?.response ?? true,\n },\n coerce: {\n param: outputOptions.override?.zod?.coerce?.param ?? false,\n query: outputOptions.override?.zod?.coerce?.query ?? false,\n header: outputOptions.override?.zod?.coerce?.header ?? false,\n body: outputOptions.override?.zod?.coerce?.body ?? false,\n response: outputOptions.override?.zod?.coerce?.response ?? false,\n },\n preprocess: {\n ...(outputOptions.override?.zod?.preprocess?.param\n ? {\n param: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.param,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.query\n ? {\n query: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.query,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.header\n ? {\n header: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.header,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.body\n ? {\n body: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.body,\n ),\n }\n : {}),\n ...(outputOptions.override?.zod?.preprocess?.response\n ? {\n response: normalizeMutator(\n workspace,\n outputOptions.override.zod.preprocess.response,\n ),\n }\n : {}),\n },\n generateEachHttpStatus:\n outputOptions.override?.zod?.generateEachHttpStatus ?? false,\n dateTimeOptions: outputOptions.override?.zod?.dateTimeOptions ?? {},\n timeOptions: outputOptions.override?.zod?.timeOptions ?? {},\n },\n swr: {\n ...outputOptions.override?.swr,\n },\n angular: {\n provideIn: outputOptions.override?.angular?.provideIn ?? 'root',\n },\n fetch: {\n includeHttpResponseReturnType:\n outputOptions.override?.fetch?.includeHttpResponseReturnType ??\n true,\n forceSuccessResponse:\n outputOptions.override?.fetch?.forceSuccessResponse ?? false,\n explode: outputOptions.override?.fetch?.explode ?? true,\n ...outputOptions.override?.fetch,\n },\n useDates: outputOptions.override?.useDates || false,\n useDeprecatedOperations:\n outputOptions.override?.useDeprecatedOperations ?? true,\n enumGenerationType:\n (outputOptions.override?.useNativeEnums ?? false)\n ? 'enum'\n : (outputOptions.override?.enumGenerationType ?? 'const'),\n suppressReadonlyModifier:\n outputOptions.override?.suppressReadonlyModifier || false,\n },\n allParamsOptional: outputOptions.allParamsOptional ?? false,\n urlEncodeParameters: outputOptions.urlEncodeParameters ?? false,\n optionsParamRequired: outputOptions.optionsParamRequired ?? false,\n propertySortOrder:\n outputOptions.propertySortOrder ?? PropertySortOrder.SPECIFICATION,\n },\n hooks: options.hooks ? normalizeHooks(options.hooks) : {},\n };\n\n if (!normalizedOptions.input.target) {\n throw new Error(chalk.red(`Config require an input target`));\n }\n\n if (!normalizedOptions.output.target && !normalizedOptions.output.schemas) {\n throw new Error(chalk.red(`Config require an output target or schemas`));\n }\n\n return normalizedOptions;\n};\n\nconst parserDefaultOptions = {\n validate: true,\n resolve: { github: githubResolver, http: httpResolver },\n} as SwaggerParserOptions;\n\nconst normalizeMutator = (\n workspace: string,\n mutator?: Mutator,\n): NormalizedMutator | undefined => {\n if (isObject(mutator)) {\n if (!mutator.path) {\n throw new Error(chalk.red(`Mutator need a path`));\n }\n\n return {\n ...mutator,\n path: upath.resolve(workspace, mutator.path),\n default: (mutator.default || !mutator.name) ?? false,\n };\n }\n\n if (isString(mutator)) {\n return {\n path: upath.resolve(workspace, mutator),\n default: true,\n };\n }\n\n return mutator;\n};\n\nconst normalizePathOrUrl = <T>(path: T, workspace: string) => {\n if (isString(path) && !isUrl(path)) {\n return normalizePath(path, workspace);\n }\n\n return path;\n};\n\nexport const normalizePath = <T>(path: T, workspace: string) => {\n if (!isString(path)) {\n return path;\n }\n return upath.resolve(workspace, path);\n};\n\nconst normalizeOperationsAndTags = (\n operationsOrTags: Record<string, OperationOptions>,\n workspace: string,\n global: {\n query: NormalizedQueryOptions;\n },\n): Record<string, NormalizedOperationOptions> => {\n return Object.fromEntries(\n Object.entries(operationsOrTags).map(\n ([\n key,\n {\n transformer,\n mutator,\n formData,\n formUrlEncoded,\n paramsSerializer,\n query,\n zod,\n ...rest\n },\n ]) => {\n return [\n key,\n {\n ...rest,\n ...(query\n ? {\n query: normalizeQueryOptions(query, workspace, global.query),\n }\n : {}),\n ...(zod\n ? {\n zod: {\n strict: {\n param: zod.strict?.param ?? false,\n query: zod.strict?.query ?? false,\n header: zod.strict?.header ?? false,\n body: zod.strict?.body ?? false,\n response: zod.strict?.response ?? false,\n },\n generate: {\n param: zod.generate?.param ?? true,\n query: zod.generate?.query ?? true,\n header: zod.generate?.header ?? true,\n body: zod.generate?.body ?? true,\n response: zod.generate?.response ?? true,\n },\n coerce: {\n param: zod.coerce?.param ?? false,\n query: zod.coerce?.query ?? false,\n header: zod.coerce?.header ?? false,\n body: zod.coerce?.body ?? false,\n response: zod.coerce?.response ?? false,\n },\n preprocess: {\n ...(zod.preprocess?.param\n ? {\n param: normalizeMutator(\n workspace,\n zod.preprocess.param,\n ),\n }\n : {}),\n ...(zod.preprocess?.query\n ? {\n query: normalizeMutator(\n workspace,\n zod.preprocess.query,\n ),\n }\n : {}),\n ...(zod.preprocess?.header\n ? {\n header: normalizeMutator(\n workspace,\n zod.preprocess.header,\n ),\n }\n : {}),\n ...(zod.preprocess?.body\n ? {\n body: normalizeMutator(\n workspace,\n zod.preprocess.body,\n ),\n }\n : {}),\n ...(zod.preprocess?.response\n ? {\n response: normalizeMutator(\n workspace,\n zod.preprocess.response,\n ),\n }\n : {}),\n },\n generateEachHttpStatus:\n zod?.generateEachHttpStatus ?? false,\n dateTimeOptions: zod?.dateTimeOptions ?? {},\n timeOptions: zod?.timeOptions ?? {},\n },\n }\n : {}),\n ...(transformer\n ? { transformer: normalizePath(transformer, workspace) }\n : {}),\n ...(mutator\n ? { mutator: normalizeMutator(workspace, mutator) }\n : {}),\n ...createFormData(workspace, formData),\n ...(formUrlEncoded\n ? {\n formUrlEncoded: isBoolean(formUrlEncoded)\n ? formUrlEncoded\n : normalizeMutator(workspace, formUrlEncoded),\n }\n : {}),\n ...(paramsSerializer\n ? {\n paramsSerializer: normalizeMutator(\n workspace,\n paramsSerializer,\n ),\n }\n : {}),\n },\n ];\n },\n ),\n );\n};\n\nconst normalizeOutputMode = (mode?: OutputMode): OutputMode => {\n if (!mode) {\n return OutputMode.SINGLE;\n }\n\n if (!Object.values(OutputMode).includes(mode)) {\n createLogger().warn(chalk.yellow(`Unknown the provided mode => ${mode}`));\n return OutputMode.SINGLE;\n }\n\n return mode;\n};\n\nconst normalizeHooks = (hooks: HooksOptions): NormalizedHookOptions => {\n const keys = Object.keys(hooks) as unknown as Hook[];\n\n return keys.reduce<NormalizedHookOptions>((acc, key: Hook) => {\n if (isString(hooks[key])) {\n return {\n ...acc,\n [key]: [hooks[key]] as string[],\n };\n } else if (Array.isArray(hooks[key])) {\n return {\n ...acc,\n [key]: hooks[key] as string[],\n };\n } else if (isFunction(hooks[key])) {\n return {\n ...acc,\n [key]: [hooks[key]] as HookFunction[],\n };\n } else if (isObject(hooks[key])) {\n return {\n ...acc,\n [key]: [hooks[key]] as HookOption[],\n };\n }\n\n return acc;\n }, {});\n};\n\nconst normalizeHonoOptions = (\n hono: HonoOptions = {},\n workspace: string,\n): NormalizedHonoOptions => {\n return {\n ...(hono.handlers\n ? { handlers: upath.resolve(workspace, hono.handlers) }\n : {}),\n compositeRoute: hono.compositeRoute ?? '',\n validator: hono.validator ?? true,\n validatorOutputPath: hono.validatorOutputPath\n ? upath.resolve(workspace, hono.validatorOutputPath)\n : '',\n };\n};\n\nconst normalizeJSDocOptions = (\n jsdoc: JsDocOptions = {},\n): NormalizedJsDocOptions => {\n return {\n ...jsdoc,\n };\n};\n\nconst normalizeQueryOptions = (\n queryOptions: QueryOptions = {},\n outputWorkspace: string,\n globalOptions: NormalizedQueryOptions = {},\n): NormalizedQueryOptions => {\n if (queryOptions.options) {\n console.warn(\n '[WARN] Using query options is deprecated and will be removed in a future major release. Please use queryOptions or mutationOptions instead.',\n );\n }\n\n return {\n ...(isUndefined(queryOptions.usePrefetch)\n ? {}\n : { usePrefetch: queryOptions.usePrefetch }),\n ...(isUndefined(queryOptions.useQuery)\n ? {}\n : { useQuery: queryOptions.useQuery }),\n ...(isUndefined(queryOptions.useSuspenseQuery)\n ? {}\n : { useSuspenseQuery: queryOptions.useSuspenseQuery }),\n ...(isUndefined(queryOptions.useMutation)\n ? {}\n : { useMutation: queryOptions.useMutation }),\n ...(isUndefined(queryOptions.useInfinite)\n ? {}\n : { useInfinite: queryOptions.useInfinite }),\n ...(isUndefined(queryOptions.useSuspenseInfiniteQuery)\n ? {}\n : { useSuspenseInfiniteQuery: queryOptions.useSuspenseInfiniteQuery }),\n ...(queryOptions.useInfiniteQueryParam\n ? { useInfiniteQueryParam: queryOptions.useInfiniteQueryParam }\n : {}),\n ...(queryOptions.options ? { options: queryOptions.options } : {}),\n ...(globalOptions.queryKey\n ? {\n queryKey: globalOptions.queryKey,\n }\n : {}),\n ...(queryOptions?.queryKey\n ? {\n queryKey: normalizeMutator(outputWorkspace, queryOptions?.queryKey),\n }\n : {}),\n ...(globalOptions.queryOptions\n ? {\n queryOptions: globalOptions.queryOptions,\n }\n : {}),\n ...(queryOptions?.queryOptions\n ? {\n queryOptions: normalizeMutator(\n outputWorkspace,\n queryOptions?.queryOptions,\n ),\n }\n : {}),\n ...(globalOptions.mutationOptions\n ? {\n mutationOptions: globalOptions.mutationOptions,\n }\n : {}),\n ...(queryOptions?.mutationOptions\n ? {\n mutationOptions: normalizeMutator(\n outputWorkspace,\n queryOptions?.mutationOptions,\n ),\n }\n : {}),\n ...(isUndefined(globalOptions.shouldExportQueryKey)\n ? {}\n : {\n shouldExportQueryKey: globalOptions.shouldExportQueryKey,\n }),\n ...(isUndefined(queryOptions.shouldExportQueryKey)\n ? {}\n : { shouldExportQueryKey: queryOptions.shouldExportQueryKey }),\n ...(isUndefined(globalOptions.shouldExportHttpClient)\n ? {}\n : {\n shouldExportHttpClient: globalOptions.shouldExportHttpClient,\n }),\n ...(isUndefined(queryOptions.shouldExportHttpClient)\n ? {}\n : { shouldExportHttpClient: queryOptions.shouldExportHttpClient }),\n ...(isUndefined(globalOptions.shouldExportMutatorHooks)\n ? {}\n : {\n shouldExportMutatorHooks: globalOptions.shouldExportMutatorHooks,\n }),\n ...(isUndefined(queryOptions.shouldExportMutatorHooks)\n ? {}\n : { shouldExportMutatorHooks: queryOptions.shouldExportMutatorHooks }),\n ...(isUndefined(globalOptions.shouldSplitQueryKey)\n ? {}\n : {\n shouldSplitQueryKey: globalOptions.shouldSplitQueryKey,\n }),\n ...(isUndefined(queryOptions.shouldSplitQueryKey)\n ? {}\n : { shouldSplitQueryKey: queryOptions.shouldSplitQueryKey }),\n ...(isUndefined(globalOptions.signal)\n ? {}\n : {\n signal: globalOptions.signal,\n }),\n ...(isUndefined(globalOptions.useOperationIdAsQueryKey)\n ? {}\n : {\n useOperationIdAsQueryKey: globalOptions.useOperationIdAsQueryKey,\n }),\n ...(isUndefined(queryOptions.useOperationIdAsQueryKey)\n ? {}\n : { useOperationIdAsQueryKey: queryOptions.useOperationIdAsQueryKey }),\n ...(isUndefined(globalOptions.signal)\n ? {}\n : {\n signal: globalOptions.signal,\n }),\n ...(isUndefined(queryOptions.signal)\n ? {}\n : { signal: queryOptions.signal }),\n ...(isUndefined(globalOptions.version)\n ? {}\n : {\n version: globalOptions.version,\n }),\n ...(isUndefined(queryOptions.version)\n ? {}\n : { version: queryOptions.version }),\n };\n};\n\nexport const getDefaultFilesHeader = ({\n title,\n description,\n version,\n}: {\n title?: string;\n description?: string;\n version?: string;\n} = {}) => [\n `Generated by ${pkg.name} v${pkg.version} 🍺`,\n `Do not edit manually.`,\n ...(title ? [title] : []),\n ...(description ? [description] : []),\n ...(version ? [`OpenAPI spec version: ${version}`] : []),\n];\n","import { log, logError } from '@orval/core';\n\nexport const startWatcher = async (\n watchOptions: boolean | string | (string | boolean)[],\n watchFn: () => Promise<any>,\n defaultTarget: string | string[] = '.',\n) => {\n if (!watchOptions) return;\n const { watch } = await import('chokidar');\n\n const ignored = ['**/{.git,node_modules}/**'];\n\n const watchPaths =\n typeof watchOptions === 'boolean'\n ? defaultTarget\n : Array.isArray(watchOptions)\n ? watchOptions.filter(\n (path): path is string => typeof path === 'string',\n )\n : watchOptions;\n\n log(\n `Watching for changes in ${\n Array.isArray(watchPaths)\n ? watchPaths.map((v) => '\"' + v + '\"').join(' | ')\n : '\"' + watchPaths + '\"'\n }`,\n );\n\n const watcher = watch(watchPaths, {\n ignorePermissionErrors: true,\n ignored,\n });\n watcher.on('all', async (type, file) => {\n log(`Change detected: ${type} ${file}`);\n\n try {\n await watchFn();\n } catch (error) {\n logError(error);\n }\n });\n};\n","import {\n type Hook,\n type HookOption,\n isFunction,\n isObject,\n isString,\n log,\n logError,\n type NormalizedHookCommand,\n} from '@orval/core';\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport { parseArgsStringToArgv } from 'string-argv';\n\nexport const executeHook = async (\n name: Hook,\n commands: NormalizedHookCommand = [],\n args: string[] = [],\n) => {\n log(chalk.white(`Running ${name} hook...`));\n\n for (const command of commands) {\n try {\n if (isString(command)) {\n await executeCommand(command, args);\n } else if (isFunction(command)) {\n await command(args);\n } else if (isObject(command)) {\n await executeObjectCommand(command as HookOption, args);\n }\n } catch (error) {\n logError(error, `Failed to run ${name} hook`);\n }\n }\n};\n\nasync function executeCommand(command: string, args: string[]) {\n const [cmd, ..._args] = [...parseArgsStringToArgv(command), ...args];\n\n await execa(cmd, _args);\n}\n\nasync function executeObjectCommand(command: HookOption, args: string[]) {\n if (command.injectGeneratedDirsAndFiles === false) {\n args = [];\n }\n\n if (isString(command.command)) {\n await executeCommand(command.command, args);\n } else if (isFunction(command.command)) {\n await command.command();\n }\n}\n","import {\n createSuccessMessage,\n getFileInfo,\n getMockFileExtensionByTypeName,\n isRootKey,\n jsDoc,\n log,\n type NormalizedOptions,\n OutputMode,\n upath,\n writeSchemas,\n writeSingleMode,\n type WriteSpecsBuilder,\n writeSplitMode,\n writeSplitTagsMode,\n writeTagsMode,\n} from '@orval/core';\nimport chalk from 'chalk';\nimport execa, { type ExecaError } from 'execa';\nimport fs from 'fs-extra';\nimport uniq from 'lodash.uniq';\nimport type { InfoObject } from 'openapi3-ts/oas30';\nimport type { TypeDocOptions } from 'typedoc';\n\nimport { executeHook } from './utils';\n\nconst getHeader = (\n option: false | ((info: InfoObject) => string | string[]),\n info: InfoObject,\n): string => {\n if (!option) {\n return '';\n }\n\n const header = option(info);\n\n return Array.isArray(header) ? jsDoc({ description: header }) : header;\n};\n\nexport const writeSpecs = async (\n builder: WriteSpecsBuilder,\n workspace: string,\n options: NormalizedOptions,\n projectName?: string,\n) => {\n const { info = { title: '', version: 0 }, schemas, target } = builder;\n const { output } = options;\n const projectTitle = projectName || info.title;\n\n const specsName = Object.keys(schemas).reduce<\n Record<keyof typeof schemas, string>\n >((acc, specKey) => {\n const basePath = upath.getSpecName(specKey, target);\n const name = basePath.slice(1).split('/').join('-');\n\n acc[specKey] = name;\n\n return acc;\n }, {});\n\n const header = getHeader(output.override.header, info as InfoObject);\n\n if (output.schemas) {\n const rootSchemaPath = output.schemas;\n\n const fileExtension = ['tags', 'tags-split', 'split'].includes(output.mode)\n ? '.ts'\n : (output.fileExtension ?? '.ts');\n\n await Promise.all(\n Object.entries(schemas).map(([specKey, schemas]) => {\n const schemaPath = isRootKey(specKey, target)\n ? rootSchemaPath\n : upath.join(rootSchemaPath, specsName[specKey]);\n\n return writeSchemas({\n schemaPath,\n schemas,\n target,\n namingConvention: output.namingConvention,\n fileExtension,\n specsName,\n specKey,\n isRootKey: isRootKey(specKey, target),\n header,\n indexFiles: output.indexFiles,\n });\n }),\n );\n }\n\n let implementationPaths: string[] = [];\n\n if (output.target) {\n const writeMode = getWriteMode(output.mode);\n implementationPaths = await writeMode({\n builder,\n workspace,\n output,\n specsName,\n header,\n needSchema: !output.schemas && output.client !== 'zod',\n });\n }\n\n if (output.workspace) {\n const workspacePath = output.workspace;\n const imports = implementationPaths\n .filter(\n (path) =>\n !output.mock ||\n !path.endsWith(`.${getMockFileExtensionByTypeName(output.mock)}.ts`),\n )\n .map((path) =>\n upath.relativeSafe(\n workspacePath,\n getFileInfo(path).pathWithoutExtension,\n ),\n );\n\n if (output.schemas) {\n imports.push(\n upath.relativeSafe(workspacePath, getFileInfo(output.schemas).dirname),\n );\n }\n\n if (output.indexFiles) {\n const indexFile = upath.join(workspacePath, '/index.ts');\n\n if (await fs.pathExists(indexFile)) {\n const data = await fs.readFile(indexFile, 'utf8');\n const importsNotDeclared = imports.filter((imp) => !data.includes(imp));\n await fs.appendFile(\n indexFile,\n uniq(importsNotDeclared)\n .map((imp) => `export * from '${imp}';\\n`)\n .join(''),\n );\n } else {\n await fs.outputFile(\n indexFile,\n uniq(imports)\n .map((imp) => `export * from '${imp}';`)\n .join('\\n') + '\\n',\n );\n }\n\n implementationPaths = [indexFile, ...implementationPaths];\n }\n }\n\n if (builder.extraFiles.length > 0) {\n await Promise.all(\n builder.extraFiles.map(async (file) =>\n fs.outputFile(file.path, file.content),\n ),\n );\n\n implementationPaths = [\n ...implementationPaths,\n ...builder.extraFiles.map((file) => file.path),\n ];\n }\n\n const paths = [\n ...(output.schemas ? [getFileInfo(output.schemas).dirname] : []),\n ...implementationPaths,\n ];\n\n if (options.hooks.afterAllFilesWrite) {\n await executeHook(\n 'afterAllFilesWrite',\n options.hooks.afterAllFilesWrite,\n paths,\n );\n }\n\n if (output.prettier) {\n try {\n await execa('prettier', ['--write', ...paths]);\n } catch {\n log(\n chalk.yellow(\n `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}Globally installed prettier not found`,\n ),\n );\n }\n }\n\n if (output.biome) {\n try {\n await execa('biome', ['check', '--write', ...paths]);\n } catch (error) {\n const errorExeca = error as ExecaError;\n const message =\n errorExeca.exitCode === 1\n ? errorExeca.stdout + errorExeca.stderr\n : `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}biome not found`;\n\n log(chalk.yellow(message));\n }\n }\n\n if (output.docs) {\n try {\n let config: Partial<TypeDocOptions> = {};\n let configPath: string | null = null;\n if (typeof output.docs === 'object') {\n ({ configPath = null, ...config } = output.docs);\n if (configPath) {\n config.options = configPath;\n }\n }\n\n const getTypedocApplication = async () => {\n const { Application } = await import('typedoc');\n return Application;\n };\n\n const Application = await getTypedocApplication();\n const app = await Application.bootstrapWithPlugins({\n entryPoints: paths,\n theme: 'markdown',\n // Set the custom config location if it has been provided.\n ...config,\n plugin: ['typedoc-plugin-markdown', ...(config.plugin ?? [])],\n });\n // Set defaults if the have not been provided by the external config.\n if (!app.options.isSet('readme')) {\n app.options.setValue('readme', 'none');\n }\n if (!app.options.isSet('logLevel')) {\n app.options.setValue('logLevel', 'None');\n }\n const project = await app.convert();\n if (project) {\n await app.generateDocs(project, app.options.getValue('out') as string);\n } else {\n throw new Error('TypeDoc not initialized');\n }\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}Unable to generate docs`;\n\n log(chalk.yellow(message));\n }\n }\n\n createSuccessMessage(projectTitle);\n};\n\nconst getWriteMode = (mode: OutputMode) => {\n switch (mode) {\n case OutputMode.SPLIT: {\n return writeSplitMode;\n }\n case OutputMode.TAGS: {\n return writeTagsMode;\n }\n case OutputMode.TAGS_SPLIT: {\n return writeSplitTagsMode;\n }\n case OutputMode.SINGLE:\n default: {\n return writeSingleMode;\n }\n }\n};\n","import {\n asyncReduce,\n type ConfigExternal,\n ErrorWithTag,\n getFileInfo,\n type GlobalOptions,\n isFunction,\n isString,\n loadFile,\n log,\n logError,\n type NormalizedConfig,\n type NormalizedOptions,\n removeFilesAndEmptyFolders,\n upath,\n} from '@orval/core';\n\nimport { importSpecs } from './import-specs';\nimport { normalizeOptions } from './utils/options';\nimport { startWatcher } from './utils/watcher';\nimport { writeSpecs } from './write-specs';\n\nexport const generateSpec = async (\n workspace: string,\n options: NormalizedOptions,\n projectName?: string,\n) => {\n if (options.output.clean) {\n const extraPatterns = Array.isArray(options.output.clean)\n ? options.output.clean\n : [];\n\n if (options.output.target) {\n await removeFilesAndEmptyFolders(\n ['**/*', '!**/*.d.ts', ...extraPatterns],\n getFileInfo(options.output.target).dirname,\n );\n }\n if (options.output.schemas) {\n await removeFilesAndEmptyFolders(\n ['**/*', '!**/*.d.ts', ...extraPatterns],\n getFileInfo(options.output.schemas).dirname,\n );\n }\n log(`${projectName ? `${projectName}: ` : ''}Cleaning output folder`);\n }\n\n const writeSpecBuilder = await importSpecs(workspace, options);\n await writeSpecs(writeSpecBuilder, workspace, options, projectName);\n};\n\nexport const generateSpecs = async (\n config: NormalizedConfig,\n workspace: string,\n projectName?: string,\n) => {\n if (projectName) {\n const options = config[projectName];\n\n if (options) {\n try {\n await generateSpec(workspace, options, projectName);\n } catch (error) {\n const errorMsg =\n error instanceof Error ? error.message : 'unknown error';\n throw new ErrorWithTag(errorMsg, projectName, { cause: error });\n }\n } else {\n throw new Error('Project not found');\n }\n return;\n }\n\n let hasErrors: true | undefined;\n for (const [projectName, options] of Object.entries(config)) {\n if (!options) {\n hasErrors = true;\n logError('No options found', projectName);\n continue;\n }\n try {\n await generateSpec(workspace, options, projectName);\n } catch (error) {\n hasErrors = true;\n logError(error, projectName);\n }\n }\n\n if (hasErrors)\n throw new Error('One or more project failed, see above for details');\n};\n\nexport const generateConfig = async (\n configFile?: string,\n options?: GlobalOptions,\n) => {\n const {\n path,\n file: configExternal,\n error,\n } = await loadFile<ConfigExternal>(configFile, {\n defaultFileName: 'orval.config',\n });\n\n if (!configExternal) {\n throw new Error(`failed to load from ${path} => ${error}`);\n }\n\n const workspace = upath.dirname(path);\n\n const config = await (isFunction(configExternal)\n ? configExternal()\n : configExternal);\n\n const normalizedConfig = await asyncReduce(\n Object.entries(config),\n async (acc, [key, value]) => {\n acc[key] = await normalizeOptions(value, workspace, options);\n\n return acc;\n },\n {} as NormalizedConfig,\n );\n\n const fileToWatch = Object.entries(normalizedConfig)\n .filter(\n ([project]) =>\n options?.projectName === undefined || project === options.projectName,\n )\n .map(([, options]) => options?.input.target)\n .filter((target) => isString(target)) as string[];\n\n await (options?.watch && fileToWatch.length > 0\n ? startWatcher(\n options.watch,\n () => generateSpecs(normalizedConfig, workspace, options.projectName),\n fileToWatch,\n )\n : generateSpecs(normalizedConfig, workspace, options?.projectName));\n};\n"],"mappings":"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"}