@orval/fetch 8.18.0 → 8.19.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 +17 -1
- package/dist/index.mjs +80 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -4
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { ClientBuilder, ClientGeneratorsBuilder, ClientHeaderBuilder, GeneratorDependency, GeneratorOptions, GeneratorVerbOptions } from "@orval/core";
|
|
2
2
|
|
|
3
3
|
//#region src/index.d.ts
|
|
4
|
+
/** Returns the list of generator dependencies required by the fetch client (e.g. zod). */
|
|
4
5
|
declare const getFetchDependencies: () => GeneratorDependency[];
|
|
6
|
+
/**
|
|
7
|
+
* Generates the URL helper function and the fetch request function for a single
|
|
8
|
+
* OpenAPI operation. Handles query-param serialization (explode, arrayFormat,
|
|
9
|
+
* paramsSerializer), request body encoding, response parsing, and optional
|
|
10
|
+
* runtime Zod validation.
|
|
11
|
+
*/
|
|
5
12
|
declare const generateRequestFunction: ({
|
|
6
13
|
queryParams,
|
|
7
14
|
headers,
|
|
@@ -15,15 +22,24 @@ declare const generateRequestFunction: ({
|
|
|
15
22
|
formData,
|
|
16
23
|
formUrlEncoded,
|
|
17
24
|
override,
|
|
18
|
-
doc
|
|
25
|
+
doc,
|
|
26
|
+
paramsSerializer
|
|
19
27
|
}: GeneratorVerbOptions, {
|
|
20
28
|
route: _route,
|
|
21
29
|
context,
|
|
22
30
|
pathRoute
|
|
23
31
|
}: GeneratorOptions) => string;
|
|
32
|
+
/**
|
|
33
|
+
* Derives the TypeScript response type name for a fetch operation.
|
|
34
|
+
* Returns the operation-scoped name when `includeHttpResponseReturnType` is
|
|
35
|
+
* enabled, otherwise falls back to the success response definition name.
|
|
36
|
+
*/
|
|
24
37
|
declare const fetchResponseTypeName: (includeHttpResponseReturnType: boolean | undefined, definitionSuccessResponse: string, operationName: string) => string;
|
|
38
|
+
/** Builds the full fetch client output (imports + implementation) for one verb. */
|
|
25
39
|
declare const generateClient: ClientBuilder;
|
|
40
|
+
/** Emits HTTP status-code union types at the top of the generated file when they are needed. */
|
|
26
41
|
declare const generateFetchHeader: ClientHeaderBuilder;
|
|
42
|
+
/** Returns the fetch client builder factory used by orval's plugin system. */
|
|
27
43
|
declare const builder: () => () => ClientGeneratorsBuilder;
|
|
28
44
|
//#endregion
|
|
29
45
|
export { builder, builder as default, fetchResponseTypeName, generateClient, generateFetchHeader, generateRequestFunction, getFetchDependencies };
|
package/dist/index.mjs
CHANGED
|
@@ -14,9 +14,16 @@ const FETCH_DEPENDENCIES = [{
|
|
|
14
14
|
}],
|
|
15
15
|
dependency: "zod"
|
|
16
16
|
}];
|
|
17
|
+
/** Returns the list of generator dependencies required by the fetch client (e.g. zod). */
|
|
17
18
|
const getFetchDependencies = () => FETCH_DEPENDENCIES;
|
|
18
19
|
const isRawRequestBodyContentType = (contentType) => contentType === "text/plain" || isBinaryContentType(contentType);
|
|
19
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Generates the URL helper function and the fetch request function for a single
|
|
22
|
+
* OpenAPI operation. Handles query-param serialization (explode, arrayFormat,
|
|
23
|
+
* paramsSerializer), request body encoding, response parsing, and optional
|
|
24
|
+
* runtime Zod validation.
|
|
25
|
+
*/
|
|
26
|
+
const generateRequestFunction = ({ queryParams, headers, operationName, response, mutator, body, props, verb, fetchReviver, formData, formUrlEncoded, override, doc, paramsSerializer }, { route: _route, context, pathRoute }) => {
|
|
20
27
|
let route = _route;
|
|
21
28
|
if (context.output.urlEncodeParameters) route = makeRouteSafe(route);
|
|
22
29
|
const isRequestOptions = override.requestOptions !== false;
|
|
@@ -24,23 +31,30 @@ const generateRequestFunction = ({ queryParams, headers, operationName, response
|
|
|
24
31
|
const isFormUrlEncoded = override.formUrlEncoded !== false;
|
|
25
32
|
const getUrlFnName = camel(`get-${operationName}-url`);
|
|
26
33
|
const getUrlFnProps = toObjectString(props.filter((prop) => prop.type === GetterPropType.PARAM || prop.type === GetterPropType.NAMED_PATH_PARAMS || prop.type === GetterPropType.QUERY_PARAM), "implementation");
|
|
27
|
-
const
|
|
28
|
-
const parameterObjects = parameters.map((parameter) => {
|
|
34
|
+
const parameterObjects = ((context.spec.paths?.[pathRoute])?.[verb]?.parameters ?? []).map((parameter) => {
|
|
29
35
|
const { schema } = resolveRef(parameter, context);
|
|
30
36
|
return schema;
|
|
31
37
|
});
|
|
32
|
-
const
|
|
38
|
+
const arrayFormat = override.fetch.arrayFormat;
|
|
39
|
+
const isArrayLikeParam = (parameterObject) => {
|
|
33
40
|
if (!parameterObject.schema) return false;
|
|
34
41
|
const { schema: schemaObject } = resolveSchemaRef(parameterObject.schema, context);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
return schemaObject.type === "array" || (schemaObject.oneOf ?? []).some((s) => resolveSchemaRef(s, context).schema.type === "array") || (schemaObject.anyOf ?? []).some((s) => resolveSchemaRef(s, context).schema.type === "array") || (schemaObject.allOf ?? []).some((s) => resolveSchemaRef(s, context).schema.type === "array");
|
|
43
|
+
};
|
|
44
|
+
const explodeParameters = parameterObjects.filter((parameterObject) => parameterObject.in === "query" && isArrayLikeParam(parameterObject) && parameterObject.explode);
|
|
45
|
+
const arrayFormatParameters = arrayFormat ? parameterObjects.filter((parameterObject) => parameterObject.in === "query" && isArrayLikeParam(parameterObject) && parameterObject.explode === void 0) : [];
|
|
38
46
|
const explodeParametersNames = explodeParameters.map((parameter) => parameter.name);
|
|
47
|
+
const arrayFormatParametersNames = arrayFormatParameters.map((parameter) => parameter.name);
|
|
39
48
|
const hasExplodedDateParams = context.output.override.useDates && explodeParameters.some((parameter) => {
|
|
40
49
|
if (!parameter.schema) return false;
|
|
41
50
|
const { schema } = resolveSchemaRef(parameter.schema, context);
|
|
42
51
|
return schema.format === "date-time";
|
|
43
52
|
});
|
|
53
|
+
const hasArrayFormatDateParams = context.output.override.useDates && arrayFormatParameters.some((parameter) => {
|
|
54
|
+
if (!parameter.schema) return false;
|
|
55
|
+
const { schema } = resolveSchemaRef(parameter.schema, context);
|
|
56
|
+
return schema.format === "date-time";
|
|
57
|
+
});
|
|
44
58
|
const explodeArrayImplementation = explodeParameters.length > 0 ? `const explodeParameters = ${JSON.stringify(explodeParametersNames)};
|
|
45
59
|
|
|
46
60
|
if (Array.isArray(value) && explodeParameters.includes(key)) {
|
|
@@ -50,7 +64,14 @@ const generateRequestFunction = ({ queryParams, headers, operationName, response
|
|
|
50
64
|
return;
|
|
51
65
|
}
|
|
52
66
|
` : "";
|
|
53
|
-
const
|
|
67
|
+
const arrayFormatImplementation = arrayFormatParameters.length > 0 ? `const arrayFormatParameters = ${JSON.stringify(arrayFormatParametersNames)};
|
|
68
|
+
|
|
69
|
+
if (Array.isArray(value) && arrayFormatParameters.includes(key)) {
|
|
70
|
+
${arrayFormat === "repeat" ? `value.forEach((v) => { normalizedParams.append(key, v === null ? 'null' : ${hasArrayFormatDateParams ? "v instanceof Date ? v.toISOString() : " : ""}String(v)); });` : arrayFormat === "brackets" ? `value.forEach((v) => { normalizedParams.append(key + '[]', v === null ? 'null' : ${hasArrayFormatDateParams ? "v instanceof Date ? v.toISOString() : " : ""}String(v)); });` : `normalizedParams.append(key, value.map((v) => v === null ? 'null' : ${hasArrayFormatDateParams ? "v instanceof Date ? v.toISOString() : " : ""}String(v)).join(','));`}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
` : "";
|
|
74
|
+
const isExplodeParametersOnly = explodeParameters.length + arrayFormatParameters.length === parameterObjects.filter((p) => p.in === "query").length;
|
|
54
75
|
const normalParamsImplementation = `if (value !== undefined) {
|
|
55
76
|
normalizedParams.append(key, value === null ? 'null' : ${context.output.override.useDates && parameterObjects.some((parameter) => {
|
|
56
77
|
if (!parameter.schema) return false;
|
|
@@ -58,11 +79,15 @@ const generateRequestFunction = ({ queryParams, headers, operationName, response
|
|
|
58
79
|
return schema.format === "date-time";
|
|
59
80
|
}) ? "value instanceof Date ? value.toISOString() : " : ""}String(value))
|
|
60
81
|
}`;
|
|
61
|
-
const getUrlFnImplementation = `export const ${getUrlFnName} = (${getUrlFnProps}) => {
|
|
82
|
+
const getUrlFnImplementation = paramsSerializer ? `export const ${getUrlFnName} = (${getUrlFnProps}) => {
|
|
83
|
+
${queryParams ? ` const stringifiedParams = ${paramsSerializer.name}(params);` : ""}
|
|
84
|
+
|
|
85
|
+
${queryParams ? `return stringifiedParams.length > 0 ? \`${route}?\${stringifiedParams}\` : \`${route}\`` : `return \`${route}\``}
|
|
86
|
+
}\n` : `export const ${getUrlFnName} = (${getUrlFnProps}) => {
|
|
62
87
|
${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
63
88
|
|
|
64
89
|
Object.entries(params || {}).forEach(([key, value]) => {
|
|
65
|
-
${explodeArrayImplementation}
|
|
90
|
+
${explodeArrayImplementation}${arrayFormatImplementation}
|
|
66
91
|
${isExplodeParametersOnly ? "" : normalParamsImplementation}
|
|
67
92
|
});` : ""}
|
|
68
93
|
|
|
@@ -243,9 +268,15 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? "" : `export type ${respon
|
|
|
243
268
|
`;
|
|
244
269
|
return responseTypeImplementation + `${getUrlFnImplementation}\n${doc}${fetchImplementation}\n`;
|
|
245
270
|
};
|
|
271
|
+
/**
|
|
272
|
+
* Derives the TypeScript response type name for a fetch operation.
|
|
273
|
+
* Returns the operation-scoped name when `includeHttpResponseReturnType` is
|
|
274
|
+
* enabled, otherwise falls back to the success response definition name.
|
|
275
|
+
*/
|
|
246
276
|
const fetchResponseTypeName = (includeHttpResponseReturnType, definitionSuccessResponse, operationName) => {
|
|
247
277
|
return includeHttpResponseReturnType ? `${operationName}Response` : definitionSuccessResponse;
|
|
248
278
|
};
|
|
279
|
+
/** Builds the full fetch client output (imports + implementation) for one verb. */
|
|
249
280
|
const generateClient = (verbOptions, options) => {
|
|
250
281
|
const isZodOutput = typeof options.context.output.schemas === "object" && options.context.output.schemas.type === "zod";
|
|
251
282
|
const responseType = verbOptions.response.definition.success;
|
|
@@ -273,23 +304,52 @@ const generateClient = (verbOptions, options) => {
|
|
|
273
304
|
docComment: ""
|
|
274
305
|
};
|
|
275
306
|
};
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
307
|
+
const HTTP_STATUS_CODE_SHARED_TYPES = [
|
|
308
|
+
{
|
|
309
|
+
name: "HTTPStatusCode1xx",
|
|
310
|
+
exported: true,
|
|
311
|
+
code: "type HTTPStatusCode1xx = 100 | 101 | 102 | 103;"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: "HTTPStatusCode2xx",
|
|
315
|
+
exported: true,
|
|
316
|
+
code: "type HTTPStatusCode2xx = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207;"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: "HTTPStatusCode3xx",
|
|
320
|
+
exported: true,
|
|
321
|
+
code: "type HTTPStatusCode3xx = 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308;"
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
name: "HTTPStatusCode4xx",
|
|
325
|
+
exported: true,
|
|
326
|
+
code: "type HTTPStatusCode4xx = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451;"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
name: "HTTPStatusCode5xx",
|
|
330
|
+
exported: true,
|
|
331
|
+
code: "type HTTPStatusCode5xx = 500 | 501 | 502 | 503 | 504 | 505 | 507 | 511;"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: "HTTPStatusCodes",
|
|
335
|
+
exported: true,
|
|
336
|
+
code: "type HTTPStatusCodes = HTTPStatusCode1xx | HTTPStatusCode2xx | HTTPStatusCode3xx | HTTPStatusCode4xx | HTTPStatusCode5xx;"
|
|
337
|
+
}
|
|
338
|
+
];
|
|
339
|
+
/** Emits HTTP status-code union types at the top of the generated file when they are needed. */
|
|
285
340
|
const generateFetchHeader = ({ clientImplementation }) => {
|
|
286
|
-
|
|
341
|
+
if (!/HTTPStatusCode[1-5]xx|<HTTPStatusCodes,/.test(clientImplementation)) return "";
|
|
342
|
+
return {
|
|
343
|
+
implementation: "",
|
|
344
|
+
sharedTypes: HTTP_STATUS_CODE_SHARED_TYPES
|
|
345
|
+
};
|
|
287
346
|
};
|
|
288
347
|
const fetchClientBuilder = {
|
|
289
348
|
client: generateClient,
|
|
290
349
|
header: generateFetchHeader,
|
|
291
350
|
dependencies: getFetchDependencies
|
|
292
351
|
};
|
|
352
|
+
/** Returns the fetch client builder factory used by orval's plugin system. */
|
|
293
353
|
const builder = () => () => fetchClientBuilder;
|
|
294
354
|
//#endregion
|
|
295
355
|
export { builder, builder as default, fetchResponseTypeName, generateClient, generateFetchHeader, generateRequestFunction, getFetchDependencies };
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n camel,\n type ClientBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n generateBodyOptions,\n generateFormDataAndUrlEncodedFunction,\n generateVerbImports,\n type GeneratorDependency,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n GetterPropType,\n isBinaryContentType,\n isObject,\n makeRouteSafe,\n type OpenApiParameterObject,\n type OpenApiReferenceObject,\n type OpenApiSchemaObject,\n pascal,\n resolveRef,\n stringify,\n toObjectString,\n} from '@orval/core';\n\nconst WILDCARD_STATUS_CODE_REGEX = /^[1-5]XX$/i;\nconst resolveSchemaRef = (\n schema: OpenApiSchemaObject | OpenApiReferenceObject,\n context: GeneratorOptions['context'],\n) =>\n resolveRef(schema, context) as {\n schema: OpenApiSchemaObject;\n };\n\nconst getStatusCodeType = (key: string): string => {\n if (WILDCARD_STATUS_CODE_REGEX.test(key)) {\n const prefix = key[0];\n return `HTTPStatusCode${prefix}xx`;\n }\n return key;\n};\n\nconst FETCH_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'z',\n alias: 'zod',\n values: true,\n },\n ],\n dependency: 'zod',\n },\n];\n\nexport const getFetchDependencies = () => FETCH_DEPENDENCIES;\n\nconst isRawRequestBodyContentType = (contentType: string) =>\n contentType === 'text/plain' || isBinaryContentType(contentType);\n\nexport const generateRequestFunction = (\n {\n queryParams,\n headers,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n fetchReviver,\n formData,\n formUrlEncoded,\n override,\n doc,\n }: GeneratorVerbOptions,\n { route: _route, context, pathRoute }: GeneratorOptions,\n) => {\n let route = _route;\n\n if (context.output.urlEncodeParameters) {\n route = makeRouteSafe(route);\n }\n\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n\n const getUrlFnName = camel(`get-${operationName}-url`);\n const getUrlFnProps = toObjectString(\n props.filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS ||\n prop.type === GetterPropType.QUERY_PARAM,\n ),\n 'implementation',\n );\n\n const spec = context.spec.paths?.[pathRoute];\n const parameters = spec?.[verb]?.parameters ?? [];\n const parameterObjects = parameters.map((parameter) => {\n const { schema } = resolveRef(parameter, context);\n return schema as OpenApiParameterObject;\n });\n\n const explodeParameters = parameterObjects.filter((parameterObject) => {\n if (!parameterObject.schema) {\n return false;\n }\n\n const { schema: schemaObject } = resolveSchemaRef(\n parameterObject.schema,\n context,\n );\n\n const isArrayLike =\n schemaObject.type === 'array' ||\n (\n (schemaObject.oneOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some((s) => resolveSchemaRef(s, context).schema.type === 'array') ||\n (\n (schemaObject.anyOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some((s) => resolveSchemaRef(s, context).schema.type === 'array') ||\n (\n (schemaObject.allOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some((s) => resolveSchemaRef(s, context).schema.type === 'array');\n\n return (\n parameterObject.in === 'query' && isArrayLike && parameterObject.explode\n );\n });\n\n const explodeParametersNames = explodeParameters.map(\n (parameter) => parameter.name,\n );\n const hasExplodedDateParams =\n context.output.override.useDates &&\n explodeParameters.some((parameter) => {\n if (!parameter.schema) {\n return false;\n }\n\n const { schema } = resolveSchemaRef(parameter.schema, context);\n return schema.format === 'date-time';\n });\n\n const explodeArrayImplementation =\n explodeParameters.length > 0\n ? `const explodeParameters = ${JSON.stringify(explodeParametersNames)};\n\n if (Array.isArray(value) && explodeParameters.includes(key)) {\n value.forEach((v) => {\n normalizedParams.append(key, v === null ? 'null' : ${hasExplodedDateParams ? 'v instanceof Date ? v.toISOString() : ' : ''}String(v));\n });\n return;\n }\n `\n : '';\n\n const isExplodeParametersOnly =\n explodeParameters.length === parameters.length;\n\n const hasDateParams =\n context.output.override.useDates &&\n parameterObjects.some((parameter) => {\n if (!parameter.schema) {\n return false;\n }\n\n const { schema } = resolveSchemaRef(parameter.schema, context);\n return schema.format === 'date-time';\n });\n\n const normalParamsImplementation = `if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : ${hasDateParams ? 'value instanceof Date ? value.toISOString() : ' : ''}String(value))\n }`;\n\n const getUrlFnImplementation = `export const ${getUrlFnName} = (${getUrlFnProps}) => {\n${\n queryParams\n ? ` const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n ${explodeArrayImplementation}\n ${isExplodeParametersOnly ? '' : normalParamsImplementation}\n });`\n : ''\n}\n\n ${queryParams ? `const stringifiedParams = normalizedParams.toString();` : ``}\n\n ${\n queryParams\n ? `return stringifiedParams.length > 0 ? \\`${route}?\\${stringifiedParams}\\` : \\`${route}\\``\n : `return \\`${route}\\``\n }\n}\\n`;\n\n const isContentTypeNdJson = (contentType: string) =>\n contentType === 'application/nd-json' ||\n contentType === 'application/x-ndjson';\n\n const isContentTypeJson = (contentType: string) =>\n contentType.toLowerCase().includes('json');\n\n const isNdJson = response.contentTypes.some((contentType) =>\n isContentTypeNdJson(contentType),\n );\n const isBlob = response.isBlob;\n\n const successContentTypes = response.types.success\n .map((t) => t.contentType)\n .filter(Boolean);\n const errorContentTypes = response.types.errors\n .map((t) => t.contentType)\n .filter(Boolean);\n\n // Resolve parsing strategy at generation time based on spec-declared content types.\n // Only emit a runtime Content-Type check when responses have mixed types.\n //\n // When `forceSuccessResponse` is false the same parse block handles both 2xx\n // and error status codes, so its strategy must cover error content types too\n // (otherwise e.g. 200 application/json + 429 text/plain still JSON.parses text).\n const parseTimeContentTypes = override.fetch.forceSuccessResponse\n ? successContentTypes\n : [...successContentTypes, ...errorContentTypes];\n const successHasJson = parseTimeContentTypes.some((ct) =>\n isContentTypeJson(ct),\n );\n const successHasNonJson = parseTimeContentTypes.some(\n (ct) => !isContentTypeJson(ct),\n );\n const hasMixedSuccessContentTypes = successHasJson && successHasNonJson;\n // No declared content types → fall back to JSON (preserve original behaviour)\n const successAlwaysJson =\n parseTimeContentTypes.length === 0 ||\n (successHasJson && !successHasNonJson);\n\n const errorHasJson = errorContentTypes.some((ct) => isContentTypeJson(ct));\n const errorHasNonJson = errorContentTypes.some(\n (ct) => !isContentTypeJson(ct),\n );\n const hasMixedErrorContentTypes = errorHasJson && errorHasNonJson;\n const errorAlwaysJson =\n errorContentTypes.length === 0 || (errorHasJson && !errorHasNonJson);\n const responseTypeName = fetchResponseTypeName(\n override.fetch.includeHttpResponseReturnType,\n isNdJson ? 'Response' : response.definition.success,\n operationName,\n );\n\n const responseType = response.definition.success;\n const isVoidResponse = responseType === 'void';\n\n const isPrimitiveType = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const hasSchema = response.imports.some((imp) => imp.name === responseType);\n\n const isValidateResponse =\n override.fetch.runtimeValidation &&\n !isPrimitiveType &&\n hasSchema &&\n !isNdJson;\n\n const allResponses = [...response.types.success, ...response.types.errors];\n if (allResponses.length === 0) {\n allResponses.push({\n contentType: '',\n hasReadonlyProps: false,\n imports: [],\n isEnum: false,\n isRef: false,\n key: 'default',\n schemas: [],\n type: 'unknown',\n value: 'unknown',\n dependencies: [],\n });\n }\n const nonDefaultStatuses = allResponses\n .filter((r) => r.key !== 'default')\n .map((r) => getStatusCodeType(r.key));\n const uniqueNonDefaultStatuses = [...new Set(nonDefaultStatuses)];\n const responseDataTypes = allResponses\n .map((r) =>\n allResponses.filter((r2) => r2.key === r.key).length > 1\n ? { ...r, suffix: pascal(r.contentType) }\n : r,\n )\n .map((r) => {\n const name = `${responseTypeName}${pascal(r.key)}${'suffix' in r ? r.suffix : ''}`;\n const dataType = r.value || 'unknown';\n\n return {\n name,\n success: response.types.success.some((s) => s.key === r.key),\n value: `export type ${name} = {\n ${isContentTypeNdJson(r.contentType) ? `stream: TypedResponse<${dataType}>` : `data: ${dataType}`}\n status: ${\n r.key === 'default'\n ? uniqueNonDefaultStatuses.length > 0\n ? `Exclude<HTTPStatusCodes, ${uniqueNonDefaultStatuses.join(' | ')}>`\n : 'number'\n : getStatusCodeType(r.key)\n }\n}`,\n };\n });\n\n const successName = `${responseTypeName}Success`;\n const errorName = `${responseTypeName}Error`;\n const hasSuccess = responseDataTypes.some((r) => r.success);\n const hasError = responseDataTypes.some((r) => !r.success);\n\n const responseTypeImplementation = override.fetch\n .includeHttpResponseReturnType\n ? `${responseDataTypes.map((r) => r.value).join('\\n\\n')}\n\n${\n hasSuccess\n ? `export type ${successName} = (${responseDataTypes\n .filter((r) => r.success)\n .map((r) => r.name)\n .join(' | ')}) & {\n headers: Headers;\n}`\n : ''\n};\n${\n hasError\n ? `export type ${errorName} = (${responseDataTypes\n .filter((r) => !r.success)\n .map((r) => r.name)\n .join(' | ')}) & {\n headers: Headers;\n}`\n : ''\n};\n\n${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${responseTypeName} = (${hasError && hasSuccess ? `${successName} | ${errorName}` : hasSuccess ? successName : errorName})\\n\\n`}`\n : '';\n\n const getUrlFnProperties = props\n .filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.QUERY_PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS,\n )\n .map((param) => {\n return param.type === GetterPropType.NAMED_PATH_PARAMS\n ? param.destructured\n : param.name;\n })\n .join(',');\n\n const useRuntimeFetcher = override.fetch.useRuntimeFetcher;\n const fetchFnParam =\n useRuntimeFetcher && isRequestOptions && !mutator\n ? ', fetchFn?: typeof globalThis.fetch'\n : '';\n const args = `${toObjectString(props, 'implementation')} ${isRequestOptions ? `options?: RequestInit` : ''}${fetchFnParam}`;\n const returnType =\n override.fetch.forceSuccessResponse && hasSuccess\n ? `Promise<${successName}>`\n : `Promise<${responseTypeName}>`;\n\n const fetchMethodOption = `method: '${verb.toUpperCase()}'`;\n const ignoreContentTypes = ['multipart/form-data'];\n const overrideHeaders =\n isObject(override.requestOptions) && override.requestOptions.headers\n ? Object.entries(override.requestOptions.headers).map(\n ([key, value]) => `'${key}': \\`${value}\\``,\n )\n : [];\n\n const headersToAdd: string[] = [\n ...(body.contentType && !ignoreContentTypes.includes(body.contentType)\n ? [`'Content-Type': '${body.contentType}'`]\n : []),\n ...(isNdJson && response.contentTypes.length === 1\n ? [\n `Accept: ${\n response.contentTypes[0] === 'application/x-ndjson'\n ? \"'application/x-ndjson'\"\n : \"'application/nd-json'\"\n }`,\n ]\n : []),\n ...overrideHeaders,\n ...(headers ? ['...headers'] : []),\n ];\n\n let globalFetchOptions;\n if (isObject(override.requestOptions)) {\n // If both requestOptions and fetchHeadersOptions will be adding a header, we must merge them to avoid multiple properties with the same name\n const shouldMergeFetchOptionHeaders =\n headersToAdd.length > 0 && 'headers' in override.requestOptions;\n const globalFetchOptionsObject = { ...override.requestOptions };\n if (shouldMergeFetchOptionHeaders && override.requestOptions.headers) {\n // Remove the headers from the object going into globalFetchOptions\n delete globalFetchOptionsObject.headers;\n // Add it to the dedicated headers object\n }\n globalFetchOptions = stringify(globalFetchOptionsObject)\n ?.slice(1, -1)\n .trim();\n } else {\n globalFetchOptions = '';\n }\n const fetchHeadersOption =\n headersToAdd.length > 0\n ? `headers: { ${headersToAdd.join(',')}, ...options?.headers }`\n : '';\n const requestBodyParams = generateBodyOptions(\n body,\n isFormData,\n isFormUrlEncoded,\n );\n const fetchBodyOption = requestBodyParams\n ? (isFormData && body.formData) ||\n (isFormUrlEncoded && body.formUrlEncoded) ||\n isRawRequestBodyContentType(body.contentType)\n ? `body: ${requestBodyParams}`\n : `body: JSON.stringify(${requestBodyParams})`\n : '';\n const fetchFnOptions = `${getUrlFnName}(${getUrlFnProperties}),\n {${globalFetchOptions ? '\\n' : ''} ${globalFetchOptions}\n ${isRequestOptions ? '...options,' : ''}\n ${fetchMethodOption}${fetchHeadersOption ? ',' : ''}\n ${fetchHeadersOption}${fetchBodyOption ? ',' : ''}\n ${fetchBodyOption}\n }\n`;\n const reviver = fetchReviver ? `, ${fetchReviver.name}` : '';\n const schemaValueRef =\n responseType === 'Error' ? 'ErrorSchema' : responseType;\n const fetchResponseType =\n override.fetch.forceSuccessResponse && hasSuccess\n ? successName\n : responseTypeName;\n\n // Error response fallback always uses {} — error data types vary (e.g. `Error`)\n // and {} satisfies them all without a type error, matching prior behaviour.\n // Use truthy `body` check before JSON.parse so empty string bodies fall back\n // instead of throwing (`JSON.parse('')` is invalid).\n const errorBodyExpression = hasMixedErrorContentTypes\n ? `errorBody ? (errorContentType.includes('json') ? JSON.parse(errorBody${reviver}) : errorBody) : {}`\n : errorAlwaysJson\n ? `errorBody ? JSON.parse(errorBody${reviver}) : {}`\n : `errorBody !== null ? errorBody : {}`;\n\n const throwOnErrorBodyExpression = hasMixedErrorContentTypes\n ? `body ? (errorContentType.includes('json') ? JSON.parse(body${reviver}) : body) : {}`\n : errorAlwaysJson\n ? `body ? JSON.parse(body${reviver}) : {}`\n : `body !== null ? body : ''`;\n\n const throwOnErrorDataExpression = isNdJson\n ? `body ? JSON.parse(body${reviver}) : {}`\n : isBlob\n ? errorBodyExpression\n : throwOnErrorBodyExpression;\n\n // In the forceSuccessResponse path, throwOnErrorImplementation is emitted AFTER\n // `contentType` and `body` are already declared in the outer scope, so we must\n // NOT redeclare them here.\n const throwOnErrorInnerDeclarations = isNdJson\n ? 'const body = [204, 205, 304].includes(stream.status) ? null : await stream.text();'\n : isBlob\n ? `const errorBody = [204, 205, 304].includes(res.status) ? null : await res.text();\n ${hasMixedErrorContentTypes ? `const errorContentType = (res.headers.get('content-type') ?? '').toLowerCase();` : ''}`\n : override.fetch.forceSuccessResponse\n ? hasMixedErrorContentTypes\n ? `const errorContentType = (res.headers.get('content-type') ?? '').toLowerCase();`\n : ''\n : hasMixedErrorContentTypes\n ? `const errorContentType = (res.headers.get('content-type') ?? '').toLowerCase();\n const body = [204, 205, 304].includes(res.status) ? null : await res.text();`\n : 'const body = [204, 205, 304].includes(res.status) ? null : await res.text();';\n\n const throwOnErrorImplementation = `if (!${isNdJson ? 'stream' : 'res'}.ok) {\n ${throwOnErrorInnerDeclarations}\n const err: globalThis.Error & {info?: ${hasError ? `${errorName}${override.fetch.includeHttpResponseReturnType ? \"['data']\" : ''}` : 'any'}, status?: number} = new globalThis.Error();\n const data ${hasError ? `: ${errorName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''}` : ''} = ${throwOnErrorDataExpression}\n err.info = data;\n err.status = ${isNdJson ? 'stream' : 'res'}.status;\n throw err;\n }`;\n const fetchFnCall =\n useRuntimeFetcher && isRequestOptions ? '(fetchFn ?? fetch)' : 'fetch';\n const blobFetchResponseImplementation = `const res = await ${fetchFnCall}(${fetchFnOptions})\n\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n const body = [204, 205, 304].includes(res.status) ? null : await res.blob();\n const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body as ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''}\n ${\n override.fetch.includeHttpResponseReturnType\n ? `return { data, status: res.status, headers: res.headers } as ${fetchResponseType}`\n : 'return data'\n }\n`;\n const fetchResponseImplementation = isNdJson\n ? ` const stream = await ${fetchFnCall}(${fetchFnOptions});\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n ${\n override.fetch.includeHttpResponseReturnType\n ? `return { status: stream.status, stream, headers: stream.headers } as ${fetchResponseType}`\n : `return stream`\n }\n `\n : isBlob\n ? blobFetchResponseImplementation\n : `const res = await ${fetchFnCall}(${fetchFnOptions})\n\n ${hasMixedSuccessContentTypes || (isValidateResponse && successAlwaysJson) ? `const contentType = (res.headers.get('content-type') ?? '').toLowerCase();` : ''}\n const body = [204, 205, 304].includes(res.status) ? null : await res.text();\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n ${\n isValidateResponse\n ? hasMixedSuccessContentTypes\n ? `const parsedBody = body ? (contentType.includes('json') ? JSON.parse(body${reviver}) : body) : {}\n const data = contentType.includes('json') ? ${schemaValueRef}.parse(parsedBody) : parsedBody`\n : successAlwaysJson\n ? `const parsedBody = body ? (contentType.includes('json') ? JSON.parse(body${reviver}) : body) : {}\n const data = contentType.includes('json') ? ${schemaValueRef}.parse(parsedBody) : parsedBody`\n : `const parsedBody = body !== null ? body : ''\n const data = parsedBody`\n : hasMixedSuccessContentTypes\n ? `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? (contentType.includes('json') ? JSON.parse(body${reviver}) : body) : ${isVoidResponse ? 'undefined' : '{}'}`\n : successAlwaysJson\n ? `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? JSON.parse(body${reviver}) : ${isVoidResponse ? 'undefined' : '{}'}`\n : `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body !== null ? body : ${isVoidResponse ? 'undefined' : \"''\"}`\n }\n ${\n override.fetch.includeHttpResponseReturnType\n ? `return { data, status: res.status, headers: res.headers } as ${fetchResponseType}`\n : 'return data'\n }\n`;\n let customFetchResponseImplementation = `return ${mutator?.name}<${fetchResponseType}>(${fetchFnOptions});`;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n if (mutator?.isHook) {\n const hasDefaultName = !mutator.path.includes('#');\n const fetchExportName = hasDefaultName\n ? 'customFetcher'\n : mutator.path.split('#')[1];\n const formattedDeconstructor = hasDefaultName\n ? `customFetcher`\n : `{${fetchExportName}}`;\n customFetchResponseImplementation = `\n const ${formattedDeconstructor} = ${mutator.name}();\n return (${args}) => {\n ${bodyForm}\n return ${fetchExportName}(${fetchFnOptions});\n }\n `;\n }\n\n const fetchImplementationBody = mutator\n ? customFetchResponseImplementation\n : fetchResponseImplementation;\n\n let fetchImplementation = `export const ${operationName} = async (${args}): ${returnType} => {\n ${bodyForm ? ` ${bodyForm}` : ''}\n ${fetchImplementationBody}}\n `;\n if (mutator?.isHook) {\n fetchImplementation = `export const use${pascal(operationName)}Hook = (): (${args}) => ${returnType} => {\n ${fetchImplementationBody}}\n `;\n }\n\n return (\n responseTypeImplementation +\n `${getUrlFnImplementation}\\n` +\n `${doc}${fetchImplementation}\\n`\n );\n};\n\nexport const fetchResponseTypeName = (\n includeHttpResponseReturnType: boolean | undefined,\n definitionSuccessResponse: string,\n operationName: string,\n) => {\n return includeHttpResponseReturnType\n ? `${operationName}Response`\n : definitionSuccessResponse;\n};\n\nexport const generateClient: ClientBuilder = (verbOptions, options) => {\n const isZodOutput =\n typeof options.context.output.schemas === 'object' &&\n options.context.output.schemas.type === 'zod';\n const responseType = verbOptions.response.definition.success;\n const isPrimitiveResponse = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const shouldUseRuntimeValidation =\n verbOptions.override.fetch.runtimeValidation && isZodOutput;\n\n const normalizedVerbOptions =\n shouldUseRuntimeValidation &&\n !isPrimitiveResponse &&\n verbOptions.response.imports.some((imp) => imp.name === responseType)\n ? {\n ...verbOptions,\n response: {\n ...verbOptions.response,\n imports: verbOptions.response.imports.map((imp) =>\n imp.name === responseType ? { ...imp, values: true } : imp,\n ),\n },\n }\n : verbOptions;\n\n const imports = generateVerbImports(normalizedVerbOptions);\n const functionImplementation = generateRequestFunction(\n normalizedVerbOptions,\n options,\n );\n\n return {\n implementation: `${functionImplementation}\\n`,\n imports,\n docComment: '',\n };\n};\n\nconst getHTTPStatusCodes = () => `\nexport type HTTPStatusCode1xx = 100 | 101 | 102 | 103;\nexport type HTTPStatusCode2xx = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207;\nexport type HTTPStatusCode3xx = 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308;\nexport type HTTPStatusCode4xx = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451;\nexport type HTTPStatusCode5xx = 500 | 501 | 502 | 503 | 504 | 505 | 507 | 511;\nexport type HTTPStatusCodes = HTTPStatusCode1xx | HTTPStatusCode2xx | HTTPStatusCode3xx | HTTPStatusCode4xx | HTTPStatusCode5xx;\n\n`;\n\nexport const generateFetchHeader: ClientHeaderBuilder = ({\n clientImplementation,\n}) => {\n const needsStatusCodeTypes = /HTTPStatusCode[1-5]xx|<HTTPStatusCodes,/.test(\n clientImplementation,\n );\n return needsStatusCodeTypes ? getHTTPStatusCodes() : '';\n};\n\nconst fetchClientBuilder: ClientGeneratorsBuilder = {\n client: generateClient,\n header: generateFetchHeader,\n dependencies: getFetchDependencies,\n};\n\nexport const builder = () => () => fetchClientBuilder;\n\nexport default builder;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n camel,\n type ClientBuilder,\n type ClientGeneratorsBuilder,\n type ClientHeaderBuilder,\n generateBodyOptions,\n generateFormDataAndUrlEncodedFunction,\n generateVerbImports,\n type GeneratorDependency,\n type GeneratorOptions,\n type GeneratorVerbOptions,\n GetterPropType,\n isBinaryContentType,\n isObject,\n makeRouteSafe,\n type OpenApiParameterObject,\n type OpenApiReferenceObject,\n type OpenApiSchemaObject,\n pascal,\n resolveRef,\n type SharedTypeDeclaration,\n stringify,\n toObjectString,\n} from '@orval/core';\n\nconst WILDCARD_STATUS_CODE_REGEX = /^[1-5]XX$/i;\nconst resolveSchemaRef = (\n schema: OpenApiSchemaObject | OpenApiReferenceObject,\n context: GeneratorOptions['context'],\n) =>\n resolveRef(schema, context) as {\n schema: OpenApiSchemaObject;\n };\n\nconst getStatusCodeType = (key: string): string => {\n if (WILDCARD_STATUS_CODE_REGEX.test(key)) {\n const prefix = key[0];\n return `HTTPStatusCode${prefix}xx`;\n }\n return key;\n};\n\nconst FETCH_DEPENDENCIES: GeneratorDependency[] = [\n {\n exports: [\n {\n name: 'z',\n alias: 'zod',\n values: true,\n },\n ],\n dependency: 'zod',\n },\n];\n\n/** Returns the list of generator dependencies required by the fetch client (e.g. zod). */\nexport const getFetchDependencies = () => FETCH_DEPENDENCIES;\n\nconst isRawRequestBodyContentType = (contentType: string) =>\n contentType === 'text/plain' || isBinaryContentType(contentType);\n\n/**\n * Generates the URL helper function and the fetch request function for a single\n * OpenAPI operation. Handles query-param serialization (explode, arrayFormat,\n * paramsSerializer), request body encoding, response parsing, and optional\n * runtime Zod validation.\n */\nexport const generateRequestFunction = (\n {\n queryParams,\n headers,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n fetchReviver,\n formData,\n formUrlEncoded,\n override,\n doc,\n paramsSerializer,\n }: GeneratorVerbOptions,\n { route: _route, context, pathRoute }: GeneratorOptions,\n) => {\n let route = _route;\n\n if (context.output.urlEncodeParameters) {\n route = makeRouteSafe(route);\n }\n\n const isRequestOptions = override.requestOptions !== false;\n const isFormData = !override.formData.disabled;\n const isFormUrlEncoded = override.formUrlEncoded !== false;\n\n const getUrlFnName = camel(`get-${operationName}-url`);\n const getUrlFnProps = toObjectString(\n props.filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS ||\n prop.type === GetterPropType.QUERY_PARAM,\n ),\n 'implementation',\n );\n\n const spec = context.spec.paths?.[pathRoute];\n const parameters = spec?.[verb]?.parameters ?? [];\n const parameterObjects = parameters.map((parameter) => {\n const { schema } = resolveRef(parameter, context);\n return schema as OpenApiParameterObject;\n });\n\n const arrayFormat = override.fetch.arrayFormat;\n\n const isArrayLikeParam = (parameterObject: OpenApiParameterObject) => {\n if (!parameterObject.schema) return false;\n const { schema: schemaObject } = resolveSchemaRef(\n parameterObject.schema,\n context,\n );\n return (\n schemaObject.type === 'array' ||\n (\n (schemaObject.oneOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some((s) => resolveSchemaRef(s, context).schema.type === 'array') ||\n (\n (schemaObject.anyOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some((s) => resolveSchemaRef(s, context).schema.type === 'array') ||\n (\n (schemaObject.allOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some((s) => resolveSchemaRef(s, context).schema.type === 'array')\n );\n };\n\n const explodeParameters = parameterObjects.filter(\n (parameterObject) =>\n parameterObject.in === 'query' &&\n isArrayLikeParam(parameterObject) &&\n parameterObject.explode,\n );\n\n // Array params where the spec does not explicitly set explode — arrayFormat applies here.\n const arrayFormatParameters = arrayFormat\n ? parameterObjects.filter(\n (parameterObject) =>\n parameterObject.in === 'query' &&\n isArrayLikeParam(parameterObject) &&\n parameterObject.explode === undefined,\n )\n : [];\n\n const explodeParametersNames = explodeParameters.map(\n (parameter) => parameter.name,\n );\n const arrayFormatParametersNames = arrayFormatParameters.map(\n (parameter) => parameter.name,\n );\n\n const hasExplodedDateParams =\n context.output.override.useDates &&\n explodeParameters.some((parameter) => {\n if (!parameter.schema) {\n return false;\n }\n\n const { schema } = resolveSchemaRef(parameter.schema, context);\n return schema.format === 'date-time';\n });\n\n const hasArrayFormatDateParams =\n context.output.override.useDates &&\n arrayFormatParameters.some((parameter) => {\n if (!parameter.schema) {\n return false;\n }\n\n const { schema } = resolveSchemaRef(parameter.schema, context);\n return schema.format === 'date-time';\n });\n\n const explodeArrayImplementation =\n explodeParameters.length > 0\n ? `const explodeParameters = ${JSON.stringify(explodeParametersNames)};\n\n if (Array.isArray(value) && explodeParameters.includes(key)) {\n value.forEach((v) => {\n normalizedParams.append(key, v === null ? 'null' : ${hasExplodedDateParams ? 'v instanceof Date ? v.toISOString() : ' : ''}String(v));\n });\n return;\n }\n `\n : '';\n\n const arrayFormatImplementation =\n arrayFormatParameters.length > 0\n ? `const arrayFormatParameters = ${JSON.stringify(arrayFormatParametersNames)};\n\n if (Array.isArray(value) && arrayFormatParameters.includes(key)) {\n ${\n arrayFormat === 'repeat'\n ? `value.forEach((v) => { normalizedParams.append(key, v === null ? 'null' : ${hasArrayFormatDateParams ? 'v instanceof Date ? v.toISOString() : ' : ''}String(v)); });`\n : arrayFormat === 'brackets'\n ? `value.forEach((v) => { normalizedParams.append(key + '[]', v === null ? 'null' : ${hasArrayFormatDateParams ? 'v instanceof Date ? v.toISOString() : ' : ''}String(v)); });`\n : `normalizedParams.append(key, value.map((v) => v === null ? 'null' : ${hasArrayFormatDateParams ? 'v instanceof Date ? v.toISOString() : ' : ''}String(v)).join(','));`\n }\n return;\n }\n `\n : '';\n\n const isExplodeParametersOnly =\n explodeParameters.length + arrayFormatParameters.length ===\n parameterObjects.filter((p) => p.in === 'query').length;\n\n const hasDateParams =\n context.output.override.useDates &&\n parameterObjects.some((parameter) => {\n if (!parameter.schema) {\n return false;\n }\n\n const { schema } = resolveSchemaRef(parameter.schema, context);\n return schema.format === 'date-time';\n });\n\n const normalParamsImplementation = `if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : ${hasDateParams ? 'value instanceof Date ? value.toISOString() : ' : ''}String(value))\n }`;\n\n const getUrlFnImplementation = paramsSerializer\n ? `export const ${getUrlFnName} = (${getUrlFnProps}) => {\n${\n queryParams\n ? ` const stringifiedParams = ${paramsSerializer.name}(params);`\n : ''\n}\n\n ${\n queryParams\n ? `return stringifiedParams.length > 0 ? \\`${route}?\\${stringifiedParams}\\` : \\`${route}\\``\n : `return \\`${route}\\``\n }\n}\\n`\n : `export const ${getUrlFnName} = (${getUrlFnProps}) => {\n${\n queryParams\n ? ` const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n ${explodeArrayImplementation}${arrayFormatImplementation}\n ${isExplodeParametersOnly ? '' : normalParamsImplementation}\n });`\n : ''\n}\n\n ${queryParams ? `const stringifiedParams = normalizedParams.toString();` : ``}\n\n ${\n queryParams\n ? `return stringifiedParams.length > 0 ? \\`${route}?\\${stringifiedParams}\\` : \\`${route}\\``\n : `return \\`${route}\\``\n }\n}\\n`;\n\n const isContentTypeNdJson = (contentType: string) =>\n contentType === 'application/nd-json' ||\n contentType === 'application/x-ndjson';\n\n const isContentTypeJson = (contentType: string) =>\n contentType.toLowerCase().includes('json');\n\n const isNdJson = response.contentTypes.some((contentType) =>\n isContentTypeNdJson(contentType),\n );\n const isBlob = response.isBlob;\n\n const successContentTypes = response.types.success\n .map((t) => t.contentType)\n .filter(Boolean);\n const errorContentTypes = response.types.errors\n .map((t) => t.contentType)\n .filter(Boolean);\n\n // Resolve parsing strategy at generation time based on spec-declared content types.\n // Only emit a runtime Content-Type check when responses have mixed types.\n //\n // When `forceSuccessResponse` is false the same parse block handles both 2xx\n // and error status codes, so its strategy must cover error content types too\n // (otherwise e.g. 200 application/json + 429 text/plain still JSON.parses text).\n const parseTimeContentTypes = override.fetch.forceSuccessResponse\n ? successContentTypes\n : [...successContentTypes, ...errorContentTypes];\n const successHasJson = parseTimeContentTypes.some((ct) =>\n isContentTypeJson(ct),\n );\n const successHasNonJson = parseTimeContentTypes.some(\n (ct) => !isContentTypeJson(ct),\n );\n const hasMixedSuccessContentTypes = successHasJson && successHasNonJson;\n // No declared content types → fall back to JSON (preserve original behaviour)\n const successAlwaysJson =\n parseTimeContentTypes.length === 0 ||\n (successHasJson && !successHasNonJson);\n\n const errorHasJson = errorContentTypes.some((ct) => isContentTypeJson(ct));\n const errorHasNonJson = errorContentTypes.some(\n (ct) => !isContentTypeJson(ct),\n );\n const hasMixedErrorContentTypes = errorHasJson && errorHasNonJson;\n const errorAlwaysJson =\n errorContentTypes.length === 0 || (errorHasJson && !errorHasNonJson);\n const responseTypeName = fetchResponseTypeName(\n override.fetch.includeHttpResponseReturnType,\n isNdJson ? 'Response' : response.definition.success,\n operationName,\n );\n\n const responseType = response.definition.success;\n const isVoidResponse = responseType === 'void';\n\n const isPrimitiveType = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const hasSchema = response.imports.some((imp) => imp.name === responseType);\n\n const isValidateResponse =\n override.fetch.runtimeValidation &&\n !isPrimitiveType &&\n hasSchema &&\n !isNdJson;\n\n const allResponses = [...response.types.success, ...response.types.errors];\n if (allResponses.length === 0) {\n allResponses.push({\n contentType: '',\n hasReadonlyProps: false,\n imports: [],\n isEnum: false,\n isRef: false,\n key: 'default',\n schemas: [],\n type: 'unknown',\n value: 'unknown',\n dependencies: [],\n });\n }\n const nonDefaultStatuses = allResponses\n .filter((r) => r.key !== 'default')\n .map((r) => getStatusCodeType(r.key));\n const uniqueNonDefaultStatuses = [...new Set(nonDefaultStatuses)];\n const responseDataTypes = allResponses\n .map((r) =>\n allResponses.filter((r2) => r2.key === r.key).length > 1\n ? { ...r, suffix: pascal(r.contentType) }\n : r,\n )\n .map((r) => {\n const name = `${responseTypeName}${pascal(r.key)}${'suffix' in r ? r.suffix : ''}`;\n const dataType = r.value || 'unknown';\n\n return {\n name,\n success: response.types.success.some((s) => s.key === r.key),\n value: `export type ${name} = {\n ${isContentTypeNdJson(r.contentType) ? `stream: TypedResponse<${dataType}>` : `data: ${dataType}`}\n status: ${\n r.key === 'default'\n ? uniqueNonDefaultStatuses.length > 0\n ? `Exclude<HTTPStatusCodes, ${uniqueNonDefaultStatuses.join(' | ')}>`\n : 'number'\n : getStatusCodeType(r.key)\n }\n}`,\n };\n });\n\n const successName = `${responseTypeName}Success`;\n const errorName = `${responseTypeName}Error`;\n const hasSuccess = responseDataTypes.some((r) => r.success);\n const hasError = responseDataTypes.some((r) => !r.success);\n\n const responseTypeImplementation = override.fetch\n .includeHttpResponseReturnType\n ? `${responseDataTypes.map((r) => r.value).join('\\n\\n')}\n\n${\n hasSuccess\n ? `export type ${successName} = (${responseDataTypes\n .filter((r) => r.success)\n .map((r) => r.name)\n .join(' | ')}) & {\n headers: Headers;\n}`\n : ''\n};\n${\n hasError\n ? `export type ${errorName} = (${responseDataTypes\n .filter((r) => !r.success)\n .map((r) => r.name)\n .join(' | ')}) & {\n headers: Headers;\n}`\n : ''\n};\n\n${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${responseTypeName} = (${hasError && hasSuccess ? `${successName} | ${errorName}` : hasSuccess ? successName : errorName})\\n\\n`}`\n : '';\n\n const getUrlFnProperties = props\n .filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.QUERY_PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS,\n )\n .map((param) => {\n return param.type === GetterPropType.NAMED_PATH_PARAMS\n ? param.destructured\n : param.name;\n })\n .join(',');\n\n const useRuntimeFetcher = override.fetch.useRuntimeFetcher;\n const fetchFnParam =\n useRuntimeFetcher && isRequestOptions && !mutator\n ? ', fetchFn?: typeof globalThis.fetch'\n : '';\n const args = `${toObjectString(props, 'implementation')} ${isRequestOptions ? `options?: RequestInit` : ''}${fetchFnParam}`;\n const returnType =\n override.fetch.forceSuccessResponse && hasSuccess\n ? `Promise<${successName}>`\n : `Promise<${responseTypeName}>`;\n\n const fetchMethodOption = `method: '${verb.toUpperCase()}'`;\n const ignoreContentTypes = ['multipart/form-data'];\n const overrideHeaders =\n isObject(override.requestOptions) && override.requestOptions.headers\n ? Object.entries(override.requestOptions.headers).map(\n ([key, value]) => `'${key}': \\`${value}\\``,\n )\n : [];\n\n const headersToAdd: string[] = [\n ...(body.contentType && !ignoreContentTypes.includes(body.contentType)\n ? [`'Content-Type': '${body.contentType}'`]\n : []),\n ...(isNdJson && response.contentTypes.length === 1\n ? [\n `Accept: ${\n response.contentTypes[0] === 'application/x-ndjson'\n ? \"'application/x-ndjson'\"\n : \"'application/nd-json'\"\n }`,\n ]\n : []),\n ...overrideHeaders,\n ...(headers ? ['...headers'] : []),\n ];\n\n let globalFetchOptions;\n if (isObject(override.requestOptions)) {\n // If both requestOptions and fetchHeadersOptions will be adding a header, we must merge them to avoid multiple properties with the same name\n const shouldMergeFetchOptionHeaders =\n headersToAdd.length > 0 && 'headers' in override.requestOptions;\n const globalFetchOptionsObject = { ...override.requestOptions };\n if (shouldMergeFetchOptionHeaders && override.requestOptions.headers) {\n // Remove the headers from the object going into globalFetchOptions\n delete globalFetchOptionsObject.headers;\n // Add it to the dedicated headers object\n }\n globalFetchOptions = stringify(globalFetchOptionsObject)\n ?.slice(1, -1)\n .trim();\n } else {\n globalFetchOptions = '';\n }\n const fetchHeadersOption =\n headersToAdd.length > 0\n ? `headers: { ${headersToAdd.join(',')}, ...options?.headers }`\n : '';\n const requestBodyParams = generateBodyOptions(\n body,\n isFormData,\n isFormUrlEncoded,\n );\n const fetchBodyOption = requestBodyParams\n ? (isFormData && body.formData) ||\n (isFormUrlEncoded && body.formUrlEncoded) ||\n isRawRequestBodyContentType(body.contentType)\n ? `body: ${requestBodyParams}`\n : `body: JSON.stringify(${requestBodyParams})`\n : '';\n const fetchFnOptions = `${getUrlFnName}(${getUrlFnProperties}),\n {${globalFetchOptions ? '\\n' : ''} ${globalFetchOptions}\n ${isRequestOptions ? '...options,' : ''}\n ${fetchMethodOption}${fetchHeadersOption ? ',' : ''}\n ${fetchHeadersOption}${fetchBodyOption ? ',' : ''}\n ${fetchBodyOption}\n }\n`;\n const reviver = fetchReviver ? `, ${fetchReviver.name}` : '';\n const schemaValueRef =\n responseType === 'Error' ? 'ErrorSchema' : responseType;\n const fetchResponseType =\n override.fetch.forceSuccessResponse && hasSuccess\n ? successName\n : responseTypeName;\n\n // Error response fallback always uses {} — error data types vary (e.g. `Error`)\n // and {} satisfies them all without a type error, matching prior behaviour.\n // Use truthy `body` check before JSON.parse so empty string bodies fall back\n // instead of throwing (`JSON.parse('')` is invalid).\n const errorBodyExpression = hasMixedErrorContentTypes\n ? `errorBody ? (errorContentType.includes('json') ? JSON.parse(errorBody${reviver}) : errorBody) : {}`\n : errorAlwaysJson\n ? `errorBody ? JSON.parse(errorBody${reviver}) : {}`\n : `errorBody !== null ? errorBody : {}`;\n\n const throwOnErrorBodyExpression = hasMixedErrorContentTypes\n ? `body ? (errorContentType.includes('json') ? JSON.parse(body${reviver}) : body) : {}`\n : errorAlwaysJson\n ? `body ? JSON.parse(body${reviver}) : {}`\n : `body !== null ? body : ''`;\n\n const throwOnErrorDataExpression = isNdJson\n ? `body ? JSON.parse(body${reviver}) : {}`\n : isBlob\n ? errorBodyExpression\n : throwOnErrorBodyExpression;\n\n // In the forceSuccessResponse path, throwOnErrorImplementation is emitted AFTER\n // `contentType` and `body` are already declared in the outer scope, so we must\n // NOT redeclare them here.\n const throwOnErrorInnerDeclarations = isNdJson\n ? 'const body = [204, 205, 304].includes(stream.status) ? null : await stream.text();'\n : isBlob\n ? `const errorBody = [204, 205, 304].includes(res.status) ? null : await res.text();\n ${hasMixedErrorContentTypes ? `const errorContentType = (res.headers.get('content-type') ?? '').toLowerCase();` : ''}`\n : override.fetch.forceSuccessResponse\n ? hasMixedErrorContentTypes\n ? `const errorContentType = (res.headers.get('content-type') ?? '').toLowerCase();`\n : ''\n : hasMixedErrorContentTypes\n ? `const errorContentType = (res.headers.get('content-type') ?? '').toLowerCase();\n const body = [204, 205, 304].includes(res.status) ? null : await res.text();`\n : 'const body = [204, 205, 304].includes(res.status) ? null : await res.text();';\n\n const throwOnErrorImplementation = `if (!${isNdJson ? 'stream' : 'res'}.ok) {\n ${throwOnErrorInnerDeclarations}\n const err: globalThis.Error & {info?: ${hasError ? `${errorName}${override.fetch.includeHttpResponseReturnType ? \"['data']\" : ''}` : 'any'}, status?: number} = new globalThis.Error();\n const data ${hasError ? `: ${errorName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''}` : ''} = ${throwOnErrorDataExpression}\n err.info = data;\n err.status = ${isNdJson ? 'stream' : 'res'}.status;\n throw err;\n }`;\n const fetchFnCall =\n useRuntimeFetcher && isRequestOptions ? '(fetchFn ?? fetch)' : 'fetch';\n const blobFetchResponseImplementation = `const res = await ${fetchFnCall}(${fetchFnOptions})\n\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n const body = [204, 205, 304].includes(res.status) ? null : await res.blob();\n const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body as ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''}\n ${\n override.fetch.includeHttpResponseReturnType\n ? `return { data, status: res.status, headers: res.headers } as ${fetchResponseType}`\n : 'return data'\n }\n`;\n const fetchResponseImplementation = isNdJson\n ? ` const stream = await ${fetchFnCall}(${fetchFnOptions});\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n ${\n override.fetch.includeHttpResponseReturnType\n ? `return { status: stream.status, stream, headers: stream.headers } as ${fetchResponseType}`\n : `return stream`\n }\n `\n : isBlob\n ? blobFetchResponseImplementation\n : `const res = await ${fetchFnCall}(${fetchFnOptions})\n\n ${hasMixedSuccessContentTypes || (isValidateResponse && successAlwaysJson) ? `const contentType = (res.headers.get('content-type') ?? '').toLowerCase();` : ''}\n const body = [204, 205, 304].includes(res.status) ? null : await res.text();\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n ${\n isValidateResponse\n ? hasMixedSuccessContentTypes\n ? `const parsedBody = body ? (contentType.includes('json') ? JSON.parse(body${reviver}) : body) : {}\n const data = contentType.includes('json') ? ${schemaValueRef}.parse(parsedBody) : parsedBody`\n : successAlwaysJson\n ? `const parsedBody = body ? (contentType.includes('json') ? JSON.parse(body${reviver}) : body) : {}\n const data = contentType.includes('json') ? ${schemaValueRef}.parse(parsedBody) : parsedBody`\n : `const parsedBody = body !== null ? body : ''\n const data = parsedBody`\n : hasMixedSuccessContentTypes\n ? `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? (contentType.includes('json') ? JSON.parse(body${reviver}) : body) : ${isVoidResponse ? 'undefined' : '{}'}`\n : successAlwaysJson\n ? `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? JSON.parse(body${reviver}) : ${isVoidResponse ? 'undefined' : '{}'}`\n : `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body !== null ? body : ${isVoidResponse ? 'undefined' : \"''\"}`\n }\n ${\n override.fetch.includeHttpResponseReturnType\n ? `return { data, status: res.status, headers: res.headers } as ${fetchResponseType}`\n : 'return data'\n }\n`;\n let customFetchResponseImplementation = `return ${mutator?.name}<${fetchResponseType}>(${fetchFnOptions});`;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n if (mutator?.isHook) {\n const hasDefaultName = !mutator.path.includes('#');\n const fetchExportName = hasDefaultName\n ? 'customFetcher'\n : mutator.path.split('#')[1];\n const formattedDeconstructor = hasDefaultName\n ? `customFetcher`\n : `{${fetchExportName}}`;\n customFetchResponseImplementation = `\n const ${formattedDeconstructor} = ${mutator.name}();\n return (${args}) => {\n ${bodyForm}\n return ${fetchExportName}(${fetchFnOptions});\n }\n `;\n }\n\n const fetchImplementationBody = mutator\n ? customFetchResponseImplementation\n : fetchResponseImplementation;\n\n let fetchImplementation = `export const ${operationName} = async (${args}): ${returnType} => {\n ${bodyForm ? ` ${bodyForm}` : ''}\n ${fetchImplementationBody}}\n `;\n if (mutator?.isHook) {\n fetchImplementation = `export const use${pascal(operationName)}Hook = (): (${args}) => ${returnType} => {\n ${fetchImplementationBody}}\n `;\n }\n\n return (\n responseTypeImplementation +\n `${getUrlFnImplementation}\\n` +\n `${doc}${fetchImplementation}\\n`\n );\n};\n\n/**\n * Derives the TypeScript response type name for a fetch operation.\n * Returns the operation-scoped name when `includeHttpResponseReturnType` is\n * enabled, otherwise falls back to the success response definition name.\n */\nexport const fetchResponseTypeName = (\n includeHttpResponseReturnType: boolean | undefined,\n definitionSuccessResponse: string,\n operationName: string,\n) => {\n return includeHttpResponseReturnType\n ? `${operationName}Response`\n : definitionSuccessResponse;\n};\n\n/** Builds the full fetch client output (imports + implementation) for one verb. */\nexport const generateClient: ClientBuilder = (verbOptions, options) => {\n const isZodOutput =\n typeof options.context.output.schemas === 'object' &&\n options.context.output.schemas.type === 'zod';\n const responseType = verbOptions.response.definition.success;\n const isPrimitiveResponse = [\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n ].includes(responseType);\n const shouldUseRuntimeValidation =\n verbOptions.override.fetch.runtimeValidation && isZodOutput;\n\n const normalizedVerbOptions =\n shouldUseRuntimeValidation &&\n !isPrimitiveResponse &&\n verbOptions.response.imports.some((imp) => imp.name === responseType)\n ? {\n ...verbOptions,\n response: {\n ...verbOptions.response,\n imports: verbOptions.response.imports.map((imp) =>\n imp.name === responseType ? { ...imp, values: true } : imp,\n ),\n },\n }\n : verbOptions;\n\n const imports = generateVerbImports(normalizedVerbOptions);\n const functionImplementation = generateRequestFunction(\n normalizedVerbOptions,\n options,\n );\n\n return {\n implementation: `${functionImplementation}\\n`,\n imports,\n docComment: '',\n };\n};\n\nconst HTTP_STATUS_CODE_SHARED_TYPES: SharedTypeDeclaration[] = [\n {\n name: 'HTTPStatusCode1xx',\n exported: true,\n code: 'type HTTPStatusCode1xx = 100 | 101 | 102 | 103;',\n },\n {\n name: 'HTTPStatusCode2xx',\n exported: true,\n code: 'type HTTPStatusCode2xx = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207;',\n },\n {\n name: 'HTTPStatusCode3xx',\n exported: true,\n code: 'type HTTPStatusCode3xx = 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308;',\n },\n {\n name: 'HTTPStatusCode4xx',\n exported: true,\n code: 'type HTTPStatusCode4xx = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451;',\n },\n {\n name: 'HTTPStatusCode5xx',\n exported: true,\n code: 'type HTTPStatusCode5xx = 500 | 501 | 502 | 503 | 504 | 505 | 507 | 511;',\n },\n {\n name: 'HTTPStatusCodes',\n exported: true,\n code: 'type HTTPStatusCodes = HTTPStatusCode1xx | HTTPStatusCode2xx | HTTPStatusCode3xx | HTTPStatusCode4xx | HTTPStatusCode5xx;',\n },\n];\n\n/** Emits HTTP status-code union types at the top of the generated file when they are needed. */\nexport const generateFetchHeader: ClientHeaderBuilder = ({\n clientImplementation,\n}) => {\n const needsStatusCodeTypes = /HTTPStatusCode[1-5]xx|<HTTPStatusCodes,/.test(\n clientImplementation,\n );\n if (!needsStatusCodeTypes) return '';\n\n return {\n implementation: '',\n sharedTypes: HTTP_STATUS_CODE_SHARED_TYPES,\n };\n};\n\nconst fetchClientBuilder: ClientGeneratorsBuilder = {\n client: generateClient,\n header: generateFetchHeader,\n dependencies: getFetchDependencies,\n};\n\n/** Returns the fetch client builder factory used by orval's plugin system. */\nexport const builder = () => () => fetchClientBuilder;\n\nexport default builder;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orval/fetch",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.19.0",
|
|
4
4
|
"homepage": "https://orval.dev/docs/guides/fetch",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/orval-labs/orval/issues"
|
|
@@ -23,12 +23,11 @@
|
|
|
23
23
|
"./package.json": "./package.json"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@orval/core": "8.
|
|
27
|
-
"@scalar/openapi-types": "0.8.0"
|
|
26
|
+
"@orval/core": "8.19.0"
|
|
28
27
|
},
|
|
29
28
|
"devDependencies": {
|
|
30
29
|
"rimraf": "6.1.2",
|
|
31
|
-
"typescript": "
|
|
30
|
+
"typescript": "6.0.3",
|
|
32
31
|
"vitest": "4.0.18"
|
|
33
32
|
}
|
|
34
33
|
}
|