orval 8.0.0-rc.0 → 8.0.0-rc.1
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
|
-
import { a as normalizeOptions, c as version, n as generateSpec, o as description, r as startWatcher, s as name, t as generateConfig } from "../generate-
|
|
2
|
+
import { a as normalizeOptions, c as version, n as generateSpec, o as description, r as startWatcher, s as name, t as generateConfig } from "../generate-6oT76j_W.js";
|
|
3
3
|
import { ErrorWithTag, OutputClient, OutputMode, isString, log, logError, startMessage } from "@orval/core";
|
|
4
4
|
import { Option, program } from "@commander-js/extra-typings";
|
|
5
5
|
|
|
@@ -2,7 +2,7 @@ import { ErrorWithTag, FormDataArrayHandling, GetterPropType, NamingConvention,
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import process$1 from "node:process";
|
|
5
|
-
import
|
|
5
|
+
import { createJiti } from "jiti";
|
|
6
6
|
import SwaggerParser from "@apidevtools/swagger-parser";
|
|
7
7
|
import chalk from "chalk";
|
|
8
8
|
import fs$1 from "fs-extra";
|
|
@@ -22,7 +22,7 @@ import enquirer from "enquirer";
|
|
|
22
22
|
import { findUp } from "find-up";
|
|
23
23
|
import { parse } from "tsconfck";
|
|
24
24
|
import { ExecaError, execa } from "execa";
|
|
25
|
-
import
|
|
25
|
+
import { unique } from "remeda";
|
|
26
26
|
import { parseArgsStringToArgv } from "string-argv";
|
|
27
27
|
|
|
28
28
|
//#region src/client.ts
|
|
@@ -386,7 +386,7 @@ const importSpecs = async (workspace, options) => {
|
|
|
386
386
|
//#region package.json
|
|
387
387
|
var name = "orval";
|
|
388
388
|
var description = "A swagger client generator for typescript";
|
|
389
|
-
var version = "8.0.0-rc.
|
|
389
|
+
var version = "8.0.0-rc.1";
|
|
390
390
|
|
|
391
391
|
//#endregion
|
|
392
392
|
//#region src/utils/request.ts
|
|
@@ -455,10 +455,10 @@ const getGithubAcessToken = async (githubTokenPath) => {
|
|
|
455
455
|
return answers.githubToken;
|
|
456
456
|
}
|
|
457
457
|
};
|
|
458
|
-
const getGithubOpenApi = async (url
|
|
458
|
+
const getGithubOpenApi = async (url) => {
|
|
459
459
|
const githubTokenPath = upath.join(import.meta.dirname, ".githubToken");
|
|
460
460
|
const accessToken = await getGithubAcessToken(githubTokenPath);
|
|
461
|
-
const [info] = url
|
|
461
|
+
const [info] = url.split("github.com/").slice(-1);
|
|
462
462
|
const [owner, repo, , branch, ...paths] = info.split("/");
|
|
463
463
|
const path$1 = paths.join("/");
|
|
464
464
|
try {
|
|
@@ -1043,8 +1043,8 @@ const writeSpecs = async (builder, workspace, options, projectName) => {
|
|
|
1043
1043
|
if (await fs$1.pathExists(indexFile)) {
|
|
1044
1044
|
const data = await fs$1.readFile(indexFile, "utf8");
|
|
1045
1045
|
const importsNotDeclared = imports.filter((imp) => !data.includes(imp));
|
|
1046
|
-
await fs$1.appendFile(indexFile,
|
|
1047
|
-
} else await fs$1.outputFile(indexFile,
|
|
1046
|
+
await fs$1.appendFile(indexFile, unique(importsNotDeclared).map((imp) => `export * from '${imp}';\n`).join(""));
|
|
1047
|
+
} else await fs$1.outputFile(indexFile, unique(imports).map((imp) => `export * from '${imp}';`).join("\n") + "\n");
|
|
1048
1048
|
implementationPaths = [indexFile, ...implementationPaths];
|
|
1049
1049
|
}
|
|
1050
1050
|
}
|
|
@@ -1156,27 +1156,32 @@ const generateSpecs = async (config, workspace, projectName) => {
|
|
|
1156
1156
|
};
|
|
1157
1157
|
function findConfigFile(configFilePath) {
|
|
1158
1158
|
if (configFilePath) {
|
|
1159
|
-
|
|
1160
|
-
|
|
1159
|
+
const absolutePath = path.isAbsolute(configFilePath) ? configFilePath : path.resolve(process$1.cwd(), configFilePath);
|
|
1160
|
+
if (!fs.existsSync(absolutePath)) throw new Error(`Config file ${configFilePath} does not exist`);
|
|
1161
|
+
return absolutePath;
|
|
1161
1162
|
}
|
|
1162
1163
|
const root = process$1.cwd();
|
|
1163
1164
|
for (const ext of [
|
|
1164
1165
|
".ts",
|
|
1165
1166
|
".js",
|
|
1166
|
-
".mjs"
|
|
1167
|
+
".mjs",
|
|
1168
|
+
".mts"
|
|
1167
1169
|
]) {
|
|
1168
1170
|
const fullPath = path.resolve(root, `orval.config${ext}`);
|
|
1169
1171
|
if (fs.existsSync(fullPath)) return fullPath;
|
|
1170
1172
|
}
|
|
1171
1173
|
throw new Error(`No config file found in ${root}`);
|
|
1172
1174
|
}
|
|
1175
|
+
async function loadConfigFile(configFilePath) {
|
|
1176
|
+
const module = await createJiti(import.meta.url, { interopDefault: true }).import(configFilePath, { default: true });
|
|
1177
|
+
if (module === void 0) throw new Error(`${configFilePath} doesn't have a default export`);
|
|
1178
|
+
return await Promise.resolve(module);
|
|
1179
|
+
}
|
|
1173
1180
|
const generateConfig = async (configFile, options) => {
|
|
1174
1181
|
const configFilePath = findConfigFile(configFile);
|
|
1175
1182
|
let configExternal;
|
|
1176
1183
|
try {
|
|
1177
|
-
|
|
1178
|
-
if (importedModule.default === void 0) throw new Error(`${configFilePath} doesn't have a default export`);
|
|
1179
|
-
configExternal = importedModule.default;
|
|
1184
|
+
configExternal = await loadConfigFile(configFilePath);
|
|
1180
1185
|
} catch (error) {
|
|
1181
1186
|
const errorMsg = error instanceof Error ? error.message : "unknown error";
|
|
1182
1187
|
throw new Error(`failed to load from ${configFilePath} => ${errorMsg}`);
|
|
@@ -1193,4 +1198,4 @@ const generateConfig = async (configFile, options) => {
|
|
|
1193
1198
|
|
|
1194
1199
|
//#endregion
|
|
1195
1200
|
export { normalizeOptions as a, version as c, defineConfig as i, generateSpec as n, description as o, startWatcher as r, name as s, generateConfig as t };
|
|
1196
|
-
//# sourceMappingURL=generate-
|
|
1201
|
+
//# sourceMappingURL=generate-6oT76j_W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-6oT76j_W.js","names":["GENERATOR_CLIENT: GeneratorClients","generateClientImports: GeneratorClientImports","generateClientHeader: GeneratorClientHeader","generateClientFooter: GeneratorClientFooter","implementation: string","generateClientTitle: GeneratorClientTitle","generateExtraFiles","acc","context: ContextSpecs","name","path","fs","path","githubToken: string | null","fs","error: any","fs","version","fs","mock: GlobalMockOptions | ClientMockBuilder | undefined","globalQueryOptions: NormalizedQueryOptions","normalizedOptions: NormalizedOptions","path","query","zod","hono","pkg.name","pkg.version","description","version","path","name","schemas","implementationPaths: string[]","path","fs","config: Partial<TypeDocOptions>","configPath: string | null","hasErrors: true | undefined","projectName","process","configExternal: ConfigExternal","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/http-resolver.ts","../src/utils/package-json.ts","../src/utils/tsconfig.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\": \"8.0.0-rc.1\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"files\": [\n \"dist\",\n \"!dist/**/*.d.ts.map\"\n ],\n \"bin\": \"./dist/bin/orval.js\",\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 \"eslint\": \"^9.38.0\",\n \"openapi-types\": \"^12.1.3\",\n \"rimraf\": \"^6.0.1\",\n \"tsdown\": \"^0.15.9\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.3\"\n },\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^12.1.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\": \"^5.6.2\",\n \"chokidar\": \"^4.0.3\",\n \"commander\": \"^14.0.1\",\n \"enquirer\": \"^2.4.1\",\n \"execa\": \"^9.6.0\",\n \"find-up\": \"8.0.0\",\n \"fs-extra\": \"^11.3.2\",\n \"jiti\": \"^2.6.1\",\n \"js-yaml\": \"4.1.0\",\n \"openapi3-ts\": \"4.5.0\",\n \"remeda\": \"^2.32.0\",\n \"string-argv\": \"^0.3.2\",\n \"tsconfck\": \"^3.1.6\",\n \"typedoc\": \"^0.28.14\",\n \"typedoc-plugin-coverage\": \"^4.0.2\",\n \"typedoc-plugin-markdown\": \"^4.9.0\"\n },\n \"stableVersion\": \"8.0.0-rc.0\"\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 enquirer 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 enquirer.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(import.meta.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 enquirer.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 enquirer.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","export const httpResolver = {\n safeUrlResolver: false, // this is merged with the default http resolver in json-schema-ref-parser\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","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 { httpResolver } from './http-resolver';\nimport { loadPackageJson } from './package-json';\nimport { loadTsconfig } from './tsconfig';\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.FETCH,\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 ...outputOptions.override?.fetch,\n },\n useDates: outputOptions.override?.useDates || false,\n useDeprecatedOperations:\n outputOptions.override?.useDeprecatedOperations ?? true,\n enumGenerationType:\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.useInvalidate)\n ? {}\n : { useInvalidate: queryOptions.useInvalidate }),\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, ExecaError } from 'execa';\nimport fs from 'fs-extra';\nimport type { InfoObject } from 'openapi3-ts/oas30';\nimport { unique } from 'remeda';\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 unique(importsNotDeclared)\n .map((imp) => `export * from '${imp}';\\n`)\n .join(''),\n );\n } else {\n await fs.outputFile(\n indexFile,\n unique(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 let message = `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}biome not found`;\n if (error instanceof ExecaError && error.exitCode === 1)\n message = error.message;\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';\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';\nimport { createJiti } from 'jiti';\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 const absolutePath = path.isAbsolute(configFilePath)\n ? configFilePath\n : path.resolve(process.cwd(), configFilePath);\n\n if (!fs.existsSync(absolutePath))\n throw new Error(`Config file ${configFilePath} does not exist`);\n\n return absolutePath;\n }\n\n const root = process.cwd();\n const exts = ['.ts', '.js', '.mjs', '.mts'];\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\nasync function loadConfigFile(configFilePath: string): Promise<ConfigExternal> {\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n });\n\n const module = await jiti.import(configFilePath, { default: true });\n\n if (module === undefined) {\n throw new Error(`${configFilePath} doesn't have a default export`);\n }\n\n return await Promise.resolve(module as ConfigExternal);\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 configExternal = await loadConfigFile(configFilePath);\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,4 +1,4 @@
|
|
|
1
|
-
import { a as normalizeOptions, i as defineConfig, n as generateSpec, r as startWatcher, t as generateConfig } from "./generate-
|
|
1
|
+
import { a as normalizeOptions, i as defineConfig, n as generateSpec, r as startWatcher, t as generateConfig } from "./generate-6oT76j_W.js";
|
|
2
2
|
import { isString, logError } from "@orval/core";
|
|
3
3
|
|
|
4
4
|
export * from "@orval/core"
|
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": "8.0.0-rc.
|
|
4
|
+
"version": "8.0.0-rc.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"files": [
|
|
@@ -62,7 +62,6 @@
|
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@types/fs-extra": "^11.0.4",
|
|
64
64
|
"@types/js-yaml": "^4.0.9",
|
|
65
|
-
"@types/lodash.uniq": "^4.5.9",
|
|
66
65
|
"eslint": "^9.38.0",
|
|
67
66
|
"openapi-types": "^12.1.3",
|
|
68
67
|
"rimraf": "^6.0.1",
|
|
@@ -73,16 +72,16 @@
|
|
|
73
72
|
"dependencies": {
|
|
74
73
|
"@apidevtools/swagger-parser": "^12.1.0",
|
|
75
74
|
"@commander-js/extra-typings": "^14.0.0",
|
|
76
|
-
"@orval/angular": "8.0.0-rc.
|
|
77
|
-
"@orval/axios": "8.0.0-rc.
|
|
78
|
-
"@orval/core": "8.0.0-rc.
|
|
79
|
-
"@orval/fetch": "8.0.0-rc.
|
|
80
|
-
"@orval/hono": "8.0.0-rc.
|
|
81
|
-
"@orval/mcp": "8.0.0-rc.
|
|
82
|
-
"@orval/mock": "8.0.0-rc.
|
|
83
|
-
"@orval/query": "8.0.0-rc.
|
|
84
|
-
"@orval/swr": "8.0.0-rc.
|
|
85
|
-
"@orval/zod": "8.0.0-rc.
|
|
75
|
+
"@orval/angular": "8.0.0-rc.1",
|
|
76
|
+
"@orval/axios": "8.0.0-rc.1",
|
|
77
|
+
"@orval/core": "8.0.0-rc.1",
|
|
78
|
+
"@orval/fetch": "8.0.0-rc.1",
|
|
79
|
+
"@orval/hono": "8.0.0-rc.1",
|
|
80
|
+
"@orval/mcp": "8.0.0-rc.1",
|
|
81
|
+
"@orval/mock": "8.0.0-rc.1",
|
|
82
|
+
"@orval/query": "8.0.0-rc.1",
|
|
83
|
+
"@orval/swr": "8.0.0-rc.1",
|
|
84
|
+
"@orval/zod": "8.0.0-rc.1",
|
|
86
85
|
"chalk": "^5.6.2",
|
|
87
86
|
"chokidar": "^4.0.3",
|
|
88
87
|
"commander": "^14.0.1",
|
|
@@ -90,14 +89,15 @@
|
|
|
90
89
|
"execa": "^9.6.0",
|
|
91
90
|
"find-up": "8.0.0",
|
|
92
91
|
"fs-extra": "^11.3.2",
|
|
92
|
+
"jiti": "^2.6.1",
|
|
93
93
|
"js-yaml": "4.1.0",
|
|
94
|
-
"lodash.uniq": "^4.5.0",
|
|
95
94
|
"openapi3-ts": "4.5.0",
|
|
95
|
+
"remeda": "^2.32.0",
|
|
96
96
|
"string-argv": "^0.3.2",
|
|
97
97
|
"tsconfck": "^3.1.6",
|
|
98
98
|
"typedoc": "^0.28.14",
|
|
99
99
|
"typedoc-plugin-coverage": "^4.0.2",
|
|
100
100
|
"typedoc-plugin-markdown": "^4.9.0"
|
|
101
101
|
},
|
|
102
|
-
"stableVersion": "
|
|
102
|
+
"stableVersion": "8.0.0-rc.0"
|
|
103
103
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-Cg1NHQEp.js","names":["GENERATOR_CLIENT: GeneratorClients","generateClientImports: GeneratorClientImports","generateClientHeader: GeneratorClientHeader","generateClientFooter: GeneratorClientFooter","implementation: string","generateClientTitle: GeneratorClientTitle","generateExtraFiles","acc","context: ContextSpecs","name","path","fs","path","githubToken: string | null","fs","url","error: any","fs","version","fs","mock: GlobalMockOptions | ClientMockBuilder | undefined","globalQueryOptions: NormalizedQueryOptions","normalizedOptions: NormalizedOptions","path","query","zod","hono","pkg.name","pkg.version","description","version","path","name","schemas","implementationPaths: string[]","path","fs","config: Partial<TypeDocOptions>","configPath: string | null","hasErrors: true | undefined","projectName","process","configExternal: ConfigExternal","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/http-resolver.ts","../src/utils/package-json.ts","../src/utils/tsconfig.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\": \"8.0.0-rc.0\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"files\": [\n \"dist\",\n \"!dist/**/*.d.ts.map\"\n ],\n \"bin\": \"./dist/bin/orval.js\",\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.38.0\",\n \"openapi-types\": \"^12.1.3\",\n \"rimraf\": \"^6.0.1\",\n \"tsdown\": \"^0.15.9\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.3\"\n },\n \"dependencies\": {\n \"@apidevtools/swagger-parser\": \"^12.1.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\": \"^5.6.2\",\n \"chokidar\": \"^4.0.3\",\n \"commander\": \"^14.0.1\",\n \"enquirer\": \"^2.4.1\",\n \"execa\": \"^9.6.0\",\n \"find-up\": \"8.0.0\",\n \"fs-extra\": \"^11.3.2\",\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\": \"^3.1.6\",\n \"typedoc\": \"^0.28.14\",\n \"typedoc-plugin-coverage\": \"^4.0.2\",\n \"typedoc-plugin-markdown\": \"^4.9.0\"\n },\n \"stableVersion\": \"7.15.0\"\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 enquirer 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 enquirer.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(import.meta.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 enquirer.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 enquirer.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","export const httpResolver = {\n safeUrlResolver: false, // this is merged with the default http resolver in json-schema-ref-parser\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","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 { httpResolver } from './http-resolver';\nimport { loadPackageJson } from './package-json';\nimport { loadTsconfig } from './tsconfig';\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.FETCH,\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 ...outputOptions.override?.fetch,\n },\n useDates: outputOptions.override?.useDates || false,\n useDeprecatedOperations:\n outputOptions.override?.useDeprecatedOperations ?? true,\n enumGenerationType:\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.useInvalidate)\n ? {}\n : { useInvalidate: queryOptions.useInvalidate }),\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, 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 let message = `⚠️ ${projectTitle ? `${projectTitle} - ` : ''}biome not found`;\n if (error instanceof ExecaError && error.exitCode === 1)\n message = error.message;\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'];\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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"}
|