@orval/axios 8.0.3 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -3,19 +3,22 @@ import { ClientBuilder, ClientDependenciesBuilder, ClientFooterBuilder, ClientGe
3
3
 
4
4
  //#region src/index.d.ts
5
5
  declare const getAxiosDependencies: ClientDependenciesBuilder;
6
+ declare const getAxiosFactoryDependencies: ClientDependenciesBuilder;
6
7
  declare const generateAxiosTitle: ClientTitleBuilder;
7
8
  declare const generateAxiosHeader: ClientHeaderBuilder;
8
9
  declare const generateAxiosFooter: ClientFooterBuilder;
9
- declare const generateAxios: (verbOptions: GeneratorVerbOptions, options: GeneratorOptions) => {
10
+ declare const generateAxios: (verbOptions: GeneratorVerbOptions, options: GeneratorOptions, isFactoryMode?: boolean) => {
10
11
  implementation: string;
11
12
  imports: _orval_core0.GeneratorImport[];
12
13
  };
14
+ declare const generateAxiosFactory: ClientBuilder;
13
15
  declare const generateAxiosFunctions: ClientBuilder;
16
+ type AxiosBuilderOptions = {
17
+ type?: 'axios' | 'axios-functions';
18
+ };
14
19
  declare const builder: ({
15
20
  type
16
- }?: {
17
- type?: "axios" | "axios-functions";
18
- }) => () => ClientGeneratorsBuilder;
21
+ }?: AxiosBuilderOptions) => () => ClientGeneratorsBuilder;
19
22
  //#endregion
20
- export { builder, builder as default, generateAxios, generateAxiosFooter, generateAxiosFunctions, generateAxiosHeader, generateAxiosTitle, getAxiosDependencies };
23
+ export { AxiosBuilderOptions, builder, builder as default, generateAxios, generateAxiosFactory, generateAxiosFooter, generateAxiosFunctions, generateAxiosHeader, generateAxiosTitle, getAxiosDependencies, getAxiosFactoryDependencies };
21
24
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -25,7 +25,20 @@ const PARAMS_SERIALIZER_DEPENDENCIES = [{
25
25
  }];
26
26
  const returnTypesToWrite = /* @__PURE__ */ new Map();
27
27
  const getAxiosDependencies = (hasGlobalMutator, hasParamsSerializerOptions) => [...hasGlobalMutator ? [] : AXIOS_DEPENDENCIES, ...hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []];
28
- const generateAxiosImplementation = ({ headers, queryParams, operationName, response, mutator, body, props, verb, override, formData, formUrlEncoded, paramsSerializer }, { route, context }) => {
28
+ const getAxiosFactoryDependencies = (hasGlobalMutator, hasParamsSerializerOptions, _packageJson, _httpClient, hasTagsMutator) => [{
29
+ exports: [
30
+ {
31
+ name: "axios",
32
+ default: true,
33
+ values: true,
34
+ syntheticDefaultImport: true
35
+ },
36
+ ...!hasGlobalMutator && !hasTagsMutator ? [{ name: "AxiosInstance" }] : [],
37
+ ...hasGlobalMutator ? [] : [{ name: "AxiosRequestConfig" }, { name: "AxiosResponse" }]
38
+ ],
39
+ dependency: "axios"
40
+ }, ...hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []];
41
+ const generateAxiosImplementation = ({ headers, queryParams, operationName, response, mutator, body, props, verb, override, formData, formUrlEncoded, paramsSerializer }, { route, context }, isFactoryMode = false) => {
29
42
  const isRequestOptions = override.requestOptions !== false;
30
43
  const isFormData = !override.formData.disabled;
31
44
  const isFormUrlEncoded = override.formUrlEncoded !== false;
@@ -76,17 +89,22 @@ const generateAxiosImplementation = ({ headers, queryParams, operationName, resp
76
89
  hasSignal: false
77
90
  });
78
91
  returnTypesToWrite.set(operationName, () => `export type ${pascal(operationName)}Result = AxiosResponse<${response.definition.success || "unknown"}>`);
79
- return `const ${operationName} = <TData = AxiosResponse<${response.definition.success || "unknown"}>>(\n ${toObjectString(props, "implementation")} ${isRequestOptions ? `options?: AxiosRequestConfig\n` : ""} ): Promise<TData> => {${bodyForm}
80
- return axios${isSyntheticDefaultImportsAllowed ? "" : ".default"}.${verb}(${options});
92
+ const axiosRef = isFactoryMode ? "axiosInstance" : `axios${isSyntheticDefaultImportsAllowed ? "" : ".default"}`;
93
+ return `const ${operationName} = (\n ${toObjectString(props, "implementation")} ${isRequestOptions ? `options${context.output.optionsParamRequired ? "" : "?"}: AxiosRequestConfig\n` : ""} ): Promise<AxiosResponse<${response.definition.success || "unknown"}>> => {${bodyForm}
94
+ return ${axiosRef}.${verb}(${options});
81
95
  }
82
96
  `;
83
97
  };
84
98
  const generateAxiosTitle = (title) => {
85
99
  return `get${pascal(sanitize(title))}`;
86
100
  };
87
- const generateAxiosHeader = ({ title, isRequestOptions, isMutator, noFunction }) => `
101
+ const generateAxiosHeader = ({ title, isRequestOptions, isMutator, isGlobalMutator, noFunction, output, verbOptions }) => {
102
+ const axiosDefault = isSyntheticDefaultImportsAllow(output.tsconfig) ? "axios" : "axios.default";
103
+ const hasAnyMutator = isGlobalMutator || Object.values(verbOptions).some((verbOption) => !!verbOption.mutator);
104
+ return `
88
105
  ${isRequestOptions && isMutator ? `type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\n\n` : ""}
89
- ${noFunction ? "" : `export const ${title} = () => {\n`}`;
106
+ ${noFunction ? "" : hasAnyMutator ? `export const ${title} = () => {\n` : `export const ${title} = (axiosInstance: AxiosInstance = ${axiosDefault}) => {\n`}`;
107
+ };
90
108
  const generateAxiosFooter = ({ operationNames, title, noFunction, hasMutator, hasAwaitedType }) => {
91
109
  let footer = "";
92
110
  if (!noFunction) footer += `return {${operationNames.join(",")}}};\n`;
@@ -99,10 +117,17 @@ const generateAxiosFooter = ({ operationNames, title, noFunction, hasMutator, ha
99
117
  }
100
118
  return footer;
101
119
  };
102
- const generateAxios = (verbOptions, options) => {
120
+ const generateAxios = (verbOptions, options, isFactoryMode = false) => {
103
121
  const imports = generateVerbImports(verbOptions);
104
122
  return {
105
- implementation: generateAxiosImplementation(verbOptions, options),
123
+ implementation: generateAxiosImplementation(verbOptions, options, isFactoryMode),
124
+ imports
125
+ };
126
+ };
127
+ const generateAxiosFactory = (verbOptions, options) => {
128
+ const { implementation, imports } = generateAxios(verbOptions, options, true);
129
+ return {
130
+ implementation,
106
131
  imports
107
132
  };
108
133
  };
@@ -114,9 +139,9 @@ const generateAxiosFunctions = (verbOptions, options) => {
114
139
  };
115
140
  };
116
141
  const axiosClientBuilder = {
117
- client: generateAxios,
142
+ client: generateAxiosFactory,
118
143
  header: generateAxiosHeader,
119
- dependencies: getAxiosDependencies,
144
+ dependencies: getAxiosFactoryDependencies,
120
145
  footer: generateAxiosFooter,
121
146
  title: generateAxiosTitle
122
147
  };
@@ -133,13 +158,12 @@ const axiosFunctionsClientBuilder = {
133
158
  }),
134
159
  title: generateAxiosTitle
135
160
  };
136
- const builders = {
137
- axios: axiosClientBuilder,
138
- "axios-functions": axiosFunctionsClientBuilder
161
+ const builder = ({ type = "axios-functions" } = {}) => () => {
162
+ if (type === "axios-functions") return axiosFunctionsClientBuilder;
163
+ return axiosClientBuilder;
139
164
  };
140
- const builder = ({ type = "axios-functions" } = {}) => () => builders[type];
141
165
  var src_default = builder;
142
166
 
143
167
  //#endregion
144
- export { builder, src_default as default, generateAxios, generateAxiosFooter, generateAxiosFunctions, generateAxiosHeader, generateAxiosTitle, getAxiosDependencies };
168
+ export { builder, src_default as default, generateAxios, generateAxiosFactory, generateAxiosFooter, generateAxiosFunctions, generateAxiosHeader, generateAxiosTitle, getAxiosDependencies, getAxiosFactoryDependencies };
145
169
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["AXIOS_DEPENDENCIES: GeneratorDependency[]","PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[]","getAxiosDependencies: ClientDependenciesBuilder","generateAxiosTitle: ClientTitleBuilder","generateAxiosHeader: ClientHeaderBuilder","generateAxiosFooter: ClientFooterBuilder","generateAxiosFunctions: ClientBuilder","axiosClientBuilder: ClientGeneratorsBuilder","axiosFunctionsClientBuilder: ClientGeneratorsBuilder","builders: Record<'axios' | 'axios-functions', ClientGeneratorsBuilder>"],"sources":["../src/index.ts"],"sourcesContent":["import {\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientFooterBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n type ClientTitleBuilder,\n generateFormDataAndUrlEncodedFunction,\n generateMutatorConfig,\n generateMutatorRequestOptions,\n generateOptions,\n generateVerbImports,\n type GeneratorDependency,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n isSyntheticDefaultImportsAllow,\n pascal,\n sanitize,\n toObjectString,\n} from '@orval/core';\n\nconst AXIOS_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'axios',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n { name: 'AxiosRequestConfig' },\n { name: 'AxiosResponse' },\n ],\n dependency: 'axios',\n },\n];\n\nconst PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'qs',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n ],\n dependency: 'qs',\n },\n];\n\nconst returnTypesToWrite = new Map<string, (title?: string) => string>();\n\nexport const getAxiosDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions: boolean,\n) => [\n ...(hasGlobalMutator ? [] : AXIOS_DEPENDENCIES),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n];\n\nconst generateAxiosImplementation = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n override,\n formData,\n formUrlEncoded,\n paramsSerializer,\n }: GeneratorVerbOptions,\n { route, context }: GeneratorOptions,\n) => {\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const isSyntheticDefaultImportsAllowed = isSyntheticDefaultImportsAllow(\n context.output.tsconfig,\n );\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n if (mutator) {\n const mutatorConfig = generateMutatorConfig({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n isFormData,\n isFormUrlEncoded,\n hasSignal: false,\n isExactOptionalPropertyTypes,\n });\n\n const requestOptions = isRequestOptions\n ? generateMutatorRequestOptions(\n override.requestOptions,\n mutator.hasSecondArg,\n )\n : '';\n\n returnTypesToWrite.set(\n operationName,\n (title?: string) =>\n `export type ${pascal(\n operationName,\n )}Result = NonNullable<Awaited<ReturnType<${\n title\n ? `ReturnType<typeof ${title}>['${operationName}']`\n : `typeof ${operationName}`\n }>>>`,\n );\n\n const propsImplementation =\n mutator.bodyTypeName && body.definition\n ? toObjectString(props, 'implementation').replace(\n new RegExp(String.raw`(\\w*):\\s?${body.definition}`),\n `$1: ${mutator.bodyTypeName}<${body.definition}>`,\n )\n : toObjectString(props, 'implementation');\n\n return `const ${operationName} = (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<typeof ${mutator.name}<${response.definition.success || 'unknown'}>>,`\n : ''\n }) => {${bodyForm}\n return ${mutator.name}<${response.definition.success || 'unknown'}>(\n ${mutatorConfig},\n ${requestOptions});\n }\n `;\n }\n\n const options = generateOptions({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n requestOptions: override.requestOptions,\n isFormData,\n isFormUrlEncoded,\n paramsSerializer,\n paramsSerializerOptions: override.paramsSerializerOptions,\n isExactOptionalPropertyTypes,\n hasSignal: false,\n });\n\n returnTypesToWrite.set(\n operationName,\n () =>\n `export type ${pascal(operationName)}Result = AxiosResponse<${\n response.definition.success || 'unknown'\n }>`,\n );\n\n return `const ${operationName} = <TData = AxiosResponse<${\n response.definition.success || 'unknown'\n }>>(\\n ${toObjectString(props, 'implementation')} ${\n isRequestOptions ? `options?: AxiosRequestConfig\\n` : ''\n } ): Promise<TData> => {${bodyForm}\n return axios${\n isSyntheticDefaultImportsAllowed ? '' : '.default'\n }.${verb}(${options});\n }\n`;\n};\n\nexport const generateAxiosTitle: ClientTitleBuilder = (title) => {\n const sanTitle = sanitize(title);\n return `get${pascal(sanTitle)}`;\n};\n\nexport const generateAxiosHeader: ClientHeaderBuilder = ({\n title,\n isRequestOptions,\n isMutator,\n noFunction,\n}) => `\n${\n isRequestOptions && isMutator\n ? `type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\\n\\n`\n : ''\n}\n ${noFunction ? '' : `export const ${title} = () => {\\n`}`;\n\nexport const generateAxiosFooter: ClientFooterBuilder = ({\n operationNames,\n title,\n noFunction,\n hasMutator,\n hasAwaitedType,\n}) => {\n let footer = '';\n\n if (!noFunction) {\n footer += `return {${operationNames.join(',')}}};\\n`;\n }\n\n if (hasMutator && !hasAwaitedType) {\n footer += `\\ntype AwaitedInput<T> = PromiseLike<T> | T;\\n\n type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;\n\\n`;\n }\n\n for (const operationName of operationNames) {\n if (returnTypesToWrite.has(operationName)) {\n // Map.has ensures Map.get will not return undefined, but TS still complains\n // bug https://github.com/microsoft/TypeScript/issues/13086\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const func = returnTypesToWrite.get(operationName)!;\n footer += func(noFunction ? undefined : title) + '\\n';\n }\n }\n\n return footer;\n};\n\nexport const generateAxios = (\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n) => {\n const imports = generateVerbImports(verbOptions);\n const implementation = generateAxiosImplementation(verbOptions, options);\n\n return { implementation, imports };\n};\n\nexport const generateAxiosFunctions: ClientBuilder = (verbOptions, options) => {\n const { implementation, imports } = generateAxios(verbOptions, options);\n\n return {\n implementation: 'export ' + implementation,\n imports,\n };\n};\n\nconst axiosClientBuilder: ClientGeneratorsBuilder = {\n client: generateAxios,\n header: generateAxiosHeader,\n dependencies: getAxiosDependencies,\n footer: generateAxiosFooter,\n title: generateAxiosTitle,\n};\n\nconst axiosFunctionsClientBuilder: ClientGeneratorsBuilder = {\n client: generateAxiosFunctions,\n header: (options) => generateAxiosHeader({ ...options, noFunction: true }),\n dependencies: getAxiosDependencies,\n footer: (options) => generateAxiosFooter({ ...options, noFunction: true }),\n title: generateAxiosTitle,\n};\n\nconst builders: Record<'axios' | 'axios-functions', ClientGeneratorsBuilder> = {\n axios: axiosClientBuilder,\n 'axios-functions': axiosFunctionsClientBuilder,\n};\n\nexport const builder =\n ({ type = 'axios-functions' }: { type?: 'axios' | 'axios-functions' } = {}) =>\n () =>\n builders[type];\n\nexport default builder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["AXIOS_DEPENDENCIES: GeneratorDependency[]","PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[]","getAxiosDependencies: ClientDependenciesBuilder","getAxiosFactoryDependencies: ClientDependenciesBuilder","generateAxiosTitle: ClientTitleBuilder","generateAxiosHeader: ClientHeaderBuilder","generateAxiosFooter: ClientFooterBuilder","generateAxiosFactory: ClientBuilder","generateAxiosFunctions: ClientBuilder","axiosClientBuilder: ClientGeneratorsBuilder","axiosFunctionsClientBuilder: ClientGeneratorsBuilder"],"sources":["../src/index.ts"],"sourcesContent":["import {\n type ClientBuilder,\n type ClientDependenciesBuilder,\n type ClientFooterBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n type ClientTitleBuilder,\n generateFormDataAndUrlEncodedFunction,\n generateMutatorConfig,\n generateMutatorRequestOptions,\n generateOptions,\n generateVerbImports,\n type GeneratorDependency,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n isSyntheticDefaultImportsAllow,\n pascal,\n sanitize,\n toObjectString,\n} from '@orval/core';\n\nconst AXIOS_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'axios',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n { name: 'AxiosRequestConfig' },\n { name: 'AxiosResponse' },\n ],\n dependency: 'axios',\n },\n];\n\nconst PARAMS_SERIALIZER_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'qs',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n ],\n dependency: 'qs',\n },\n];\n\nconst returnTypesToWrite = new Map<string, (title?: string) => string>();\n\nexport const getAxiosDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions: boolean,\n) => [\n ...(hasGlobalMutator ? [] : AXIOS_DEPENDENCIES),\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n];\n\n// Factory mode needs axios default import (for optional parameter default value)\n// plus AxiosInstance type for the parameter type\n// When using mutator, AxiosInstance is not needed as the mutator handles the axios instance\nexport const getAxiosFactoryDependencies: ClientDependenciesBuilder = (\n hasGlobalMutator,\n hasParamsSerializerOptions: boolean,\n _packageJson,\n _httpClient,\n hasTagsMutator,\n) => [\n {\n exports: [\n {\n name: 'axios',\n default: true,\n values: true,\n syntheticDefaultImport: true,\n },\n // Only include AxiosInstance if we're not using a mutator (global or tags)\n ...(!hasGlobalMutator && !hasTagsMutator\n ? [{ name: 'AxiosInstance' }]\n : []),\n ...(hasGlobalMutator\n ? []\n : [{ name: 'AxiosRequestConfig' }, { name: 'AxiosResponse' }]),\n ],\n dependency: 'axios',\n },\n ...(hasParamsSerializerOptions ? PARAMS_SERIALIZER_DEPENDENCIES : []),\n];\n\nconst generateAxiosImplementation = (\n {\n headers,\n queryParams,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n override,\n formData,\n formUrlEncoded,\n paramsSerializer,\n }: GeneratorVerbOptions,\n { route, context }: GeneratorOptions,\n isFactoryMode = false,\n) => {\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n const isExactOptionalPropertyTypes =\n !!context.output.tsconfig?.compilerOptions?.exactOptionalPropertyTypes;\n\n const isSyntheticDefaultImportsAllowed = isSyntheticDefaultImportsAllow(\n context.output.tsconfig,\n );\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n if (mutator) {\n const mutatorConfig = generateMutatorConfig({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n isFormData,\n isFormUrlEncoded,\n hasSignal: false,\n isExactOptionalPropertyTypes,\n });\n\n const requestOptions = isRequestOptions\n ? generateMutatorRequestOptions(\n override.requestOptions,\n mutator.hasSecondArg,\n )\n : '';\n\n returnTypesToWrite.set(\n operationName,\n (title?: string) =>\n `export type ${pascal(\n operationName,\n )}Result = NonNullable<Awaited<ReturnType<${\n title\n ? `ReturnType<typeof ${title}>['${operationName}']`\n : `typeof ${operationName}`\n }>>>`,\n );\n\n const propsImplementation =\n mutator.bodyTypeName && body.definition\n ? toObjectString(props, 'implementation').replace(\n new RegExp(String.raw`(\\w*):\\s?${body.definition}`),\n `$1: ${mutator.bodyTypeName}<${body.definition}>`,\n )\n : toObjectString(props, 'implementation');\n\n return `const ${operationName} = (\\n ${propsImplementation}\\n ${\n isRequestOptions && mutator.hasSecondArg\n ? `options${context.output.optionsParamRequired ? '' : '?'}: SecondParameter<typeof ${mutator.name}<${response.definition.success || 'unknown'}>>,`\n : ''\n }) => {${bodyForm}\n return ${mutator.name}<${response.definition.success || 'unknown'}>(\n ${mutatorConfig},\n ${requestOptions});\n }\n `;\n }\n\n const options = generateOptions({\n route,\n body,\n headers,\n queryParams,\n response,\n verb,\n requestOptions: override.requestOptions,\n isFormData,\n isFormUrlEncoded,\n paramsSerializer,\n paramsSerializerOptions: override.paramsSerializerOptions,\n isExactOptionalPropertyTypes,\n hasSignal: false,\n });\n\n returnTypesToWrite.set(\n operationName,\n () =>\n `export type ${pascal(operationName)}Result = AxiosResponse<${\n response.definition.success || 'unknown'\n }>`,\n );\n\n // In factory mode, use the axiosInstance parameter\n // In functions mode with global import, .default may be needed based on tsconfig\n const axiosRef = isFactoryMode\n ? 'axiosInstance'\n : `axios${isSyntheticDefaultImportsAllowed ? '' : '.default'}`;\n\n return `const ${operationName} = (\\n ${toObjectString(props, 'implementation')} ${\n isRequestOptions\n ? `options${context.output.optionsParamRequired ? '' : '?'}: AxiosRequestConfig\\n`\n : ''\n } ): Promise<AxiosResponse<${response.definition.success || 'unknown'}>> => {${bodyForm}\n return ${axiosRef}.${verb}(${options});\n }\n`;\n};\n\nexport const generateAxiosTitle: ClientTitleBuilder = (title) => {\n const sanTitle = sanitize(title);\n return `get${pascal(sanTitle)}`;\n};\n\n// Header for factory mode - axios is optional parameter with default value\n// When using mutator (global or tags-level), axiosInstance parameter is not needed\nexport const generateAxiosHeader: ClientHeaderBuilder = ({\n title,\n isRequestOptions,\n isMutator,\n isGlobalMutator,\n noFunction,\n output,\n verbOptions,\n}) => {\n const isSyntheticDefaultImportsAllowed = isSyntheticDefaultImportsAllow(\n output.tsconfig,\n );\n const axiosDefault = isSyntheticDefaultImportsAllowed\n ? 'axios'\n : 'axios.default';\n\n // Check if any operation uses a mutator (either global or tags-level)\n const hasAnyMutator =\n isGlobalMutator ||\n Object.values(verbOptions).some((verbOption) => !!verbOption.mutator);\n\n return `\n${\n isRequestOptions && isMutator\n ? `type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];\\n\\n`\n : ''\n}\n ${noFunction ? '' : hasAnyMutator ? `export const ${title} = () => {\\n` : `export const ${title} = (axiosInstance: AxiosInstance = ${axiosDefault}) => {\\n`}`;\n};\n\nexport const generateAxiosFooter: ClientFooterBuilder = ({\n operationNames,\n title,\n noFunction,\n hasMutator,\n hasAwaitedType,\n}) => {\n let footer = '';\n\n if (!noFunction) {\n footer += `return {${operationNames.join(',')}}};\\n`;\n }\n\n if (hasMutator && !hasAwaitedType) {\n footer += `\\ntype AwaitedInput<T> = PromiseLike<T> | T;\\n\n type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;\n\\n`;\n }\n\n for (const operationName of operationNames) {\n if (returnTypesToWrite.has(operationName)) {\n // Map.has ensures Map.get will not return undefined, but TS still complains\n // bug https://github.com/microsoft/TypeScript/issues/13086\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const func = returnTypesToWrite.get(operationName)!;\n footer += func(noFunction ? undefined : title) + '\\n';\n }\n }\n\n return footer;\n};\n\nexport const generateAxios = (\n verbOptions: GeneratorVerbOptions,\n options: GeneratorOptions,\n isFactoryMode = false,\n) => {\n const imports = generateVerbImports(verbOptions);\n const implementation = generateAxiosImplementation(\n verbOptions,\n options,\n isFactoryMode,\n );\n\n return { implementation, imports };\n};\n\n// Factory mode generator - axios is optional parameter\nexport const generateAxiosFactory: ClientBuilder = (verbOptions, options) => {\n const { implementation, imports } = generateAxios(verbOptions, options, true);\n return { implementation, imports };\n};\n\nexport const generateAxiosFunctions: ClientBuilder = (verbOptions, options) => {\n const { implementation, imports } = generateAxios(verbOptions, options);\n\n return {\n implementation: 'export ' + implementation,\n imports,\n };\n};\n\n// axios client with factory pattern (axios as optional parameter)\nconst axiosClientBuilder: ClientGeneratorsBuilder = {\n client: generateAxiosFactory,\n header: generateAxiosHeader,\n dependencies: getAxiosFactoryDependencies,\n footer: generateAxiosFooter,\n title: generateAxiosTitle,\n};\n\nconst axiosFunctionsClientBuilder: ClientGeneratorsBuilder = {\n client: generateAxiosFunctions,\n header: (options) => generateAxiosHeader({ ...options, noFunction: true }),\n dependencies: getAxiosDependencies,\n footer: (options) => generateAxiosFooter({ ...options, noFunction: true }),\n title: generateAxiosTitle,\n};\n\nexport type AxiosBuilderOptions = {\n type?: 'axios' | 'axios-functions';\n};\n\nexport const builder =\n ({ type = 'axios-functions' }: AxiosBuilderOptions = {}) =>\n () => {\n if (type === 'axios-functions') {\n return axiosFunctionsClientBuilder;\n }\n return axiosClientBuilder;\n };\n\nexport default builder;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orval/axios",
3
- "version": "8.0.3",
3
+ "version": "8.2.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -18,16 +18,18 @@
18
18
  "build": "tsdown --config-loader unrun",
19
19
  "dev": "tsdown --config-loader unrun --watch src",
20
20
  "lint": "eslint .",
21
+ "test": "vitest",
21
22
  "clean": "rimraf .turbo dist",
22
23
  "nuke": "rimraf .turbo dist node_modules"
23
24
  },
24
25
  "dependencies": {
25
- "@orval/core": "8.0.3"
26
+ "@orval/core": "8.2.0"
26
27
  },
27
28
  "devDependencies": {
28
29
  "eslint": "9.39.2",
29
30
  "rimraf": "6.1.2",
30
31
  "tsdown": "0.18.2",
31
- "typescript": "5.9.3"
32
+ "typescript": "5.9.3",
33
+ "vitest": "4.0.16"
32
34
  }
33
35
  }