@orval/fetch 8.0.0-rc.3 → 8.0.0-rc.4
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 +3 -2
- package/dist/index.mjs +61 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { ClientBuilder, ClientGeneratorsBuilder, ClientHeaderBuilder, GeneratorOptions, GeneratorVerbOptions } from "@orval/core";
|
|
1
|
+
import { ClientBuilder, ClientGeneratorsBuilder, ClientHeaderBuilder, GeneratorDependency, GeneratorOptions, GeneratorVerbOptions } from "@orval/core";
|
|
2
2
|
|
|
3
3
|
//#region src/index.d.ts
|
|
4
|
+
declare const getFetchDependencies: () => GeneratorDependency[];
|
|
4
5
|
declare const generateRequestFunction: ({
|
|
5
6
|
queryParams,
|
|
6
7
|
headers,
|
|
@@ -24,5 +25,5 @@ declare const generateClient: ClientBuilder;
|
|
|
24
25
|
declare const generateFetchHeader: ClientHeaderBuilder;
|
|
25
26
|
declare const builder: () => () => ClientGeneratorsBuilder;
|
|
26
27
|
//#endregion
|
|
27
|
-
export { builder, builder as default, fetchResponseTypeName, generateClient, generateFetchHeader, generateRequestFunction };
|
|
28
|
+
export { builder, builder as default, fetchResponseTypeName, generateClient, generateFetchHeader, generateRequestFunction, getFetchDependencies };
|
|
28
29
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -2,6 +2,27 @@ import { GetterPropType, camel, generateBodyOptions, generateFormDataAndUrlEncod
|
|
|
2
2
|
import { isDereferenced } from "@scalar/openapi-types/helpers";
|
|
3
3
|
|
|
4
4
|
//#region src/index.ts
|
|
5
|
+
const WILDCARD_STATUS_CODE_REGEX = /^[1-5]XX$/i;
|
|
6
|
+
const getStatusCodeType = (key) => {
|
|
7
|
+
if (WILDCARD_STATUS_CODE_REGEX.test(key)) return `HTTPStatusCode${key[0]}xx`;
|
|
8
|
+
return key;
|
|
9
|
+
};
|
|
10
|
+
const FETCH_DEPENDENCIES = [{
|
|
11
|
+
exports: [{
|
|
12
|
+
name: "z",
|
|
13
|
+
alias: "zod",
|
|
14
|
+
values: true
|
|
15
|
+
}],
|
|
16
|
+
dependency: "zod"
|
|
17
|
+
}];
|
|
18
|
+
const getFetchDependencies = () => FETCH_DEPENDENCIES;
|
|
19
|
+
const PRIMITIVE_TYPES = new Set([
|
|
20
|
+
"string",
|
|
21
|
+
"number",
|
|
22
|
+
"boolean",
|
|
23
|
+
"void",
|
|
24
|
+
"unknown"
|
|
25
|
+
]);
|
|
5
26
|
const generateRequestFunction = ({ queryParams, headers, operationName, response, mutator, body, props, verb, fetchReviver, formData, formUrlEncoded, override }, { route, context, pathRoute }) => {
|
|
6
27
|
const isRequestOptions = override.requestOptions !== false;
|
|
7
28
|
const isFormData = !override.formData.disabled;
|
|
@@ -47,6 +68,10 @@ ${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
|
47
68
|
const isContentTypeNdJson = (contentType) => contentType === "application/nd-json" || contentType === "application/x-ndjson";
|
|
48
69
|
const isNdJson = response.contentTypes.some((contentType) => isContentTypeNdJson(contentType));
|
|
49
70
|
const responseTypeName = fetchResponseTypeName(override.fetch.includeHttpResponseReturnType, isNdJson ? "Response" : response.definition.success, operationName);
|
|
71
|
+
const responseType = response.definition.success;
|
|
72
|
+
const isPrimitiveType = PRIMITIVE_TYPES.has(responseType);
|
|
73
|
+
const hasSchema = response.imports.some((imp) => imp.name === responseType);
|
|
74
|
+
const isValidateResponse = override.fetch.runtimeValidation && !isPrimitiveType && hasSchema && !isNdJson;
|
|
50
75
|
const allResponses = [...response.types.success, ...response.types.errors];
|
|
51
76
|
if (allResponses.length === 0) allResponses.push({
|
|
52
77
|
contentType: "",
|
|
@@ -57,20 +82,23 @@ ${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
|
57
82
|
key: "default",
|
|
58
83
|
schemas: [],
|
|
59
84
|
type: "unknown",
|
|
60
|
-
value: "unknown"
|
|
85
|
+
value: "unknown",
|
|
86
|
+
dependencies: []
|
|
61
87
|
});
|
|
62
|
-
const nonDefaultStatuses = allResponses.filter((r) => r.key !== "default").map((r) => r.key);
|
|
88
|
+
const nonDefaultStatuses = allResponses.filter((r) => r.key !== "default").map((r) => getStatusCodeType(r.key));
|
|
63
89
|
const responseDataTypes = allResponses.map((r) => allResponses.filter((r2) => r2.key === r.key).length > 1 ? {
|
|
64
90
|
...r,
|
|
65
91
|
suffix: pascal(r.contentType)
|
|
66
92
|
} : r).map((r) => {
|
|
67
93
|
const name = `${responseTypeName}${pascal(r.key)}${"suffix" in r ? r.suffix : ""}`;
|
|
94
|
+
const hasValidZodSchema = r.value && !PRIMITIVE_TYPES.has(r.value);
|
|
95
|
+
const dataType = override.fetch.useZodSchemaResponse && hasValidZodSchema ? `zod.infer<typeof ${r.value}>` : r.value || "unknown";
|
|
68
96
|
return {
|
|
69
97
|
name,
|
|
70
98
|
success: response.types.success.some((s) => s.key === r.key),
|
|
71
99
|
value: `export type ${name} = {
|
|
72
|
-
${isContentTypeNdJson(r.contentType) ? `stream: TypedResponse<${
|
|
73
|
-
status: ${r.key === "default" ? nonDefaultStatuses.length > 0 ? `Exclude<HTTPStatusCodes, ${nonDefaultStatuses.join(" | ")}>` : "number" : r.key}
|
|
100
|
+
${isContentTypeNdJson(r.contentType) ? `stream: TypedResponse<${dataType}>` : `data: ${dataType}`}
|
|
101
|
+
status: ${r.key === "default" ? nonDefaultStatuses.length > 0 ? `Exclude<HTTPStatusCodes, ${nonDefaultStatuses.join(" | ")}>` : "number" : getStatusCodeType(r.key)}
|
|
74
102
|
}`
|
|
75
103
|
};
|
|
76
104
|
});
|
|
@@ -136,7 +164,8 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? "" : `export type ${respon
|
|
|
136
164
|
|
|
137
165
|
const body = [204, 205, 304].includes(res.status) ? null : await res.text();
|
|
138
166
|
${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ""}
|
|
139
|
-
|
|
167
|
+
${isValidateResponse ? `const parsedBody = body ? JSON.parse(body${reviver}) : {}
|
|
168
|
+
const data = ${responseType}.parse(parsedBody)` : `const data: ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ""} = body ? JSON.parse(body${reviver}) : {}`}
|
|
140
169
|
${override.fetch.includeHttpResponseReturnType ? `return { data, status: res.status, headers: res.headers } as ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}` : "return data"}
|
|
141
170
|
`;
|
|
142
171
|
const customFetchResponseImplementation = `return ${mutator?.name}<${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}>(${fetchFnOptions});`;
|
|
@@ -156,11 +185,32 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? "" : `export type ${respon
|
|
|
156
185
|
const fetchResponseTypeName = (includeHttpResponseReturnType, definitionSuccessResponse, operationName) => {
|
|
157
186
|
return includeHttpResponseReturnType ? `${operationName}Response` : definitionSuccessResponse;
|
|
158
187
|
};
|
|
159
|
-
const generateClient = (verbOptions, options) => {
|
|
188
|
+
const generateClient = (verbOptions, options, outputClient, output) => {
|
|
160
189
|
const imports = generateVerbImports(verbOptions);
|
|
190
|
+
const functionImplementation = generateRequestFunction(verbOptions, options);
|
|
191
|
+
const isZodSchemaImportsRequired = verbOptions.override.fetch.useZodSchemaResponse || verbOptions.override.fetch.runtimeValidation;
|
|
192
|
+
const responseImports = isZodSchemaImportsRequired ? [...verbOptions.response.types.success, ...verbOptions.response.types.errors].flatMap((response) => response.imports.map((imp) => ({
|
|
193
|
+
name: imp.name,
|
|
194
|
+
schemaName: imp.name,
|
|
195
|
+
isZodSchema: true,
|
|
196
|
+
values: true
|
|
197
|
+
}))) : [];
|
|
198
|
+
const requestImports = isZodSchemaImportsRequired ? [
|
|
199
|
+
...verbOptions.body.imports,
|
|
200
|
+
...verbOptions.queryParams ? [{ name: `${pascal(verbOptions.operationName)}QueryParams` }] : [],
|
|
201
|
+
...verbOptions.headers ? [{ name: `${pascal(verbOptions.operationName)}Header` }] : []
|
|
202
|
+
].map((imp) => ({
|
|
203
|
+
name: imp.name,
|
|
204
|
+
schemaName: imp.name,
|
|
205
|
+
isZodSchema: true,
|
|
206
|
+
values: true
|
|
207
|
+
})) : [];
|
|
208
|
+
const zodSchemaImports = [...responseImports, ...requestImports];
|
|
209
|
+
const zodSchemaNames = new Set(zodSchemaImports.map((imp) => imp.name));
|
|
210
|
+
const filteredImports = imports.filter((imp) => !zodSchemaNames.has(imp.name));
|
|
161
211
|
return {
|
|
162
|
-
implementation: `${
|
|
163
|
-
imports
|
|
212
|
+
implementation: `${functionImplementation}\n`,
|
|
213
|
+
imports: [...filteredImports, ...zodSchemaImports]
|
|
164
214
|
};
|
|
165
215
|
};
|
|
166
216
|
const getHTTPStatusCodes = () => `
|
|
@@ -173,16 +223,16 @@ export type HTTPStatusCodes = HTTPStatusCode1xx | HTTPStatusCode2xx | HTTPStatus
|
|
|
173
223
|
|
|
174
224
|
`;
|
|
175
225
|
const generateFetchHeader = ({ clientImplementation }) => {
|
|
176
|
-
return clientImplementation
|
|
226
|
+
return /HTTPStatusCode[1-5]xx|<HTTPStatusCodes,/.test(clientImplementation) ? getHTTPStatusCodes() : "";
|
|
177
227
|
};
|
|
178
228
|
const fetchClientBuilder = {
|
|
179
229
|
client: generateClient,
|
|
180
230
|
header: generateFetchHeader,
|
|
181
|
-
dependencies:
|
|
231
|
+
dependencies: getFetchDependencies
|
|
182
232
|
};
|
|
183
233
|
const builder = () => () => fetchClientBuilder;
|
|
184
234
|
var src_default = builder;
|
|
185
235
|
|
|
186
236
|
//#endregion
|
|
187
|
-
export { builder, src_default as default, fetchResponseTypeName, generateClient, generateFetchHeader, generateRequestFunction };
|
|
237
|
+
export { builder, src_default as default, fetchResponseTypeName, generateClient, generateFetchHeader, generateRequestFunction, getFetchDependencies };
|
|
188
238
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["headersToAdd: string[]","generateClient: ClientBuilder","generateFetchHeader: ClientHeaderBuilder","fetchClientBuilder: ClientGeneratorsBuilder"],"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 GeneratorOptions,\n type GeneratorVerbOptions,\n GetterPropType,\n isObject,\n type OpenApiParameterObject,\n type OpenApiSchemaObject,\n pascal,\n resolveRef,\n stringify,\n toObjectString,\n} from '@orval/core';\nimport { isDereferenced } from '@scalar/openapi-types/helpers';\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 }: GeneratorVerbOptions,\n { route, context, pathRoute }: GeneratorOptions,\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\n const explodeParameters = parameters.filter((parameter) => {\n const { schema } = resolveRef<OpenApiParameterObject>(parameter, context);\n const schemaObject = schema.schema as OpenApiSchemaObject;\n\n return (\n schema.in === 'query' && schemaObject.type === 'array' && schema.explode\n );\n });\n\n const explodeParametersNames = explodeParameters.map((parameter) => {\n const { schema } = resolveRef<OpenApiParameterObject>(parameter, context);\n\n return schema.name;\n });\n const hasExplodedDateParams =\n context.output.override.useDates &&\n explodeParameters.some(\n (p) => isDereferenced(p) && p.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() : ' : ''}v.toString());\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 parameters.some(\n (p) => isDereferenced(p) && p.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() : ' : ''}value.toString())\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 isNdJson = response.contentTypes.some((contentType) =>\n isContentTypeNdJson(contentType),\n );\n const responseTypeName = fetchResponseTypeName(\n override.fetch.includeHttpResponseReturnType,\n isNdJson ? 'Response' : response.definition.success,\n operationName,\n );\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 });\n }\n const nonDefaultStatuses = allResponses\n .filter((r) => r.key !== 'default')\n .map((r) => r.key);\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 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<${r.value}>` : `data: ${r.value || 'unknown'}`}\n status: ${\n r.key === 'default'\n ? nonDefaultStatuses.length > 0\n ? `Exclude<HTTPStatusCodes, ${nonDefaultStatuses.join(' | ')}>`\n : 'number'\n : 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 args = `${toObjectString(props, 'implementation')} ${isRequestOptions ? `options?: RequestInit` : ''}`;\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 body.contentType === 'text/plain'\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 throwOnErrorImplementation = `if (!${isNdJson ? 'stream' : 'res'}.ok) {\n ${isNdJson ? 'const body = [204, 205, 304].includes(stream.status) ? null : await stream.text();' : ''}\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']` : ''}` : ''} = body ? JSON.parse(body${reviver}) : {}\n err.info = data;\n err.status = ${isNdJson ? 'stream' : 'res'}.status;\n throw err;\n }`;\n const fetchResponseImplementation = isNdJson\n ? ` const stream = await fetch(${fetchFnOptions});\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n ${override.fetch.includeHttpResponseReturnType ? `return { status: stream.status, stream, headers: stream.headers } as ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}` : `return stream`}\n `\n : `const res = await fetch(${fetchFnOptions})\n\n const body = [204, 205, 304].includes(res.status) ? null : await res.text();\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n const data: ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? JSON.parse(body${reviver}) : {}\n ${override.fetch.includeHttpResponseReturnType ? `return { data, status: res.status, headers: res.headers } as ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}` : 'return data'}\n`;\n const customFetchResponseImplementation = `return ${mutator?.name}<${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}>(${fetchFnOptions});`;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n const fetchImplementationBody = mutator\n ? customFetchResponseImplementation\n : fetchResponseImplementation;\n\n const fetchImplementation = `export const ${operationName} = async (${args}): ${returnType} => {\n ${bodyForm ? ` ${bodyForm}` : ''}\n ${fetchImplementationBody}}\n`;\n\n const implementation =\n responseTypeImplementation +\n `${getUrlFnImplementation}\\n` +\n `${fetchImplementation}\\n`;\n\n return implementation;\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 imports = generateVerbImports(verbOptions);\n const functionImplementation = generateRequestFunction(verbOptions, options);\n\n return {\n implementation: `${functionImplementation}\\n`,\n imports,\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 return clientImplementation.includes('<HTTPStatusCodes,')\n ? getHTTPStatusCodes()\n : '';\n};\n\nconst fetchClientBuilder: ClientGeneratorsBuilder = {\n client: generateClient,\n header: generateFetchHeader,\n dependencies: () => [],\n};\n\nexport const builder = () => () => fetchClientBuilder;\n\nexport default builder;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["FETCH_DEPENDENCIES: GeneratorDependency[]","headersToAdd: string[]","generateClient: ClientBuilder","generateFetchHeader: ClientHeaderBuilder","fetchClientBuilder: ClientGeneratorsBuilder"],"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 isObject,\n type OpenApiParameterObject,\n type OpenApiSchemaObject,\n pascal,\n resolveRef,\n stringify,\n toObjectString,\n} from '@orval/core';\nimport { isDereferenced } from '@scalar/openapi-types/helpers';\n\nconst WILDCARD_STATUS_CODE_REGEX = /^[1-5]XX$/i;\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 PRIMITIVE_TYPES = new Set([\n 'string',\n 'number',\n 'boolean',\n 'void',\n 'unknown',\n]);\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 }: GeneratorVerbOptions,\n { route, context, pathRoute }: GeneratorOptions,\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\n const explodeParameters = parameters.filter((parameter) => {\n const { schema } = resolveRef<OpenApiParameterObject>(parameter, context);\n const schemaObject = schema.schema as OpenApiSchemaObject;\n\n return (\n schema.in === 'query' && schemaObject.type === 'array' && schema.explode\n );\n });\n\n const explodeParametersNames = explodeParameters.map((parameter) => {\n const { schema } = resolveRef<OpenApiParameterObject>(parameter, context);\n\n return schema.name;\n });\n const hasExplodedDateParams =\n context.output.override.useDates &&\n explodeParameters.some(\n (p) => isDereferenced(p) && p.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() : ' : ''}v.toString());\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 parameters.some(\n (p) => isDereferenced(p) && p.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() : ' : ''}value.toString())\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 isNdJson = response.contentTypes.some((contentType) =>\n isContentTypeNdJson(contentType),\n );\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 isPrimitiveType = PRIMITIVE_TYPES.has(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 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\n const hasValidZodSchema = r.value && !PRIMITIVE_TYPES.has(r.value);\n const dataType =\n override.fetch.useZodSchemaResponse && hasValidZodSchema\n ? `zod.infer<typeof ${r.value}>`\n : 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 ? nonDefaultStatuses.length > 0\n ? `Exclude<HTTPStatusCodes, ${nonDefaultStatuses.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 args = `${toObjectString(props, 'implementation')} ${isRequestOptions ? `options?: RequestInit` : ''}`;\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 body.contentType === 'text/plain'\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 throwOnErrorImplementation = `if (!${isNdJson ? 'stream' : 'res'}.ok) {\n ${isNdJson ? 'const body = [204, 205, 304].includes(stream.status) ? null : await stream.text();' : ''}\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']` : ''}` : ''} = body ? JSON.parse(body${reviver}) : {}\n err.info = data;\n err.status = ${isNdJson ? 'stream' : 'res'}.status;\n throw err;\n }`;\n const fetchResponseImplementation = isNdJson\n ? ` const stream = await fetch(${fetchFnOptions});\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n ${override.fetch.includeHttpResponseReturnType ? `return { status: stream.status, stream, headers: stream.headers } as ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}` : `return stream`}\n `\n : `const res = await fetch(${fetchFnOptions})\n\n const body = [204, 205, 304].includes(res.status) ? null : await res.text();\n ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ''}\n ${\n isValidateResponse\n ? `const parsedBody = body ? JSON.parse(body${reviver}) : {}\n const data = ${responseType}.parse(parsedBody)`\n : `const data: ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? JSON.parse(body${reviver}) : {}`\n }\n ${override.fetch.includeHttpResponseReturnType ? `return { data, status: res.status, headers: res.headers } as ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}` : 'return data'}\n`;\n const customFetchResponseImplementation = `return ${mutator?.name}<${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}>(${fetchFnOptions});`;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n const fetchImplementationBody = mutator\n ? customFetchResponseImplementation\n : fetchResponseImplementation;\n\n const fetchImplementation = `export const ${operationName} = async (${args}): ${returnType} => {\n ${bodyForm ? ` ${bodyForm}` : ''}\n ${fetchImplementationBody}}\n`;\n\n const implementation =\n responseTypeImplementation +\n `${getUrlFnImplementation}\\n` +\n `${fetchImplementation}\\n`;\n\n return implementation;\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 = (\n verbOptions,\n options,\n outputClient,\n output,\n) => {\n const imports = generateVerbImports(verbOptions);\n const functionImplementation = generateRequestFunction(verbOptions, options);\n\n const isZodSchemaImportsRequired =\n verbOptions.override.fetch.useZodSchemaResponse ||\n verbOptions.override.fetch.runtimeValidation;\n\n const responseImports = isZodSchemaImportsRequired\n ? [\n ...verbOptions.response.types.success,\n ...verbOptions.response.types.errors,\n ].flatMap((response) =>\n response.imports.map((imp) => ({\n name: imp.name,\n schemaName: imp.name,\n isZodSchema: true,\n values: true,\n })),\n )\n : [];\n\n const requestImports = isZodSchemaImportsRequired\n ? [\n ...verbOptions.body.imports,\n ...(verbOptions.queryParams\n ? [{ name: `${pascal(verbOptions.operationName)}QueryParams` }]\n : []),\n ...(verbOptions.headers\n ? [{ name: `${pascal(verbOptions.operationName)}Header` }]\n : []),\n ].map((imp) => ({\n name: imp.name,\n schemaName: imp.name,\n isZodSchema: true,\n values: true,\n }))\n : [];\n\n const zodSchemaImports = [...responseImports, ...requestImports];\n\n const zodSchemaNames = new Set(zodSchemaImports.map((imp) => imp.name));\n const filteredImports = imports.filter(\n (imp) => !zodSchemaNames.has(imp.name),\n );\n\n return {\n implementation: `${functionImplementation}\\n`,\n imports: [...filteredImports, ...zodSchemaImports],\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orval/fetch",
|
|
3
|
-
"version": "8.0.0-rc.
|
|
3
|
+
"version": "8.0.0-rc.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"nuke": "rimraf .turbo dist node_modules"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@orval/core": "8.0.0-rc.
|
|
25
|
+
"@orval/core": "8.0.0-rc.4",
|
|
26
26
|
"@scalar/openapi-types": "0.5.2"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"tsdown": "0.16.4",
|
|
32
32
|
"typescript": "5.9.3"
|
|
33
33
|
},
|
|
34
|
-
"stableVersion": "8.0.0-rc.
|
|
34
|
+
"stableVersion": "8.0.0-rc.4"
|
|
35
35
|
}
|