@orval/fetch 8.6.2 → 8.8.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.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { GetterPropType, camel, generateBodyOptions, generateFormDataAndUrlEncodedFunction, generateVerbImports, isObject, pascal, resolveRef, stringify, toObjectString } from "@orval/core";
2
- import { isDereferenced } from "@scalar/openapi-types/helpers";
3
2
 
4
3
  //#region src/index.ts
5
4
  const WILDCARD_STATUS_CODE_REGEX = /^[1-5]XX$/i;
5
+ const resolveSchemaRef = (schema, context) => resolveRef(schema, context);
6
6
  const getStatusCodeType = (key) => {
7
7
  if (WILDCARD_STATUS_CODE_REGEX.test(key)) return `HTTPStatusCode${key[0]}xx`;
8
8
  return key;
@@ -23,18 +23,22 @@ const generateRequestFunction = ({ queryParams, headers, operationName, response
23
23
  const getUrlFnName = camel(`get-${operationName}-url`);
24
24
  const getUrlFnProps = toObjectString(props.filter((prop) => prop.type === GetterPropType.PARAM || prop.type === GetterPropType.NAMED_PATH_PARAMS || prop.type === GetterPropType.QUERY_PARAM), "implementation");
25
25
  const parameters = (context.spec.paths?.[pathRoute])?.[verb]?.parameters ?? [];
26
- const explodeParameters = parameters.filter((parameter) => {
27
- const { schema: parameterObject } = resolveRef(parameter, context);
26
+ const parameterObjects = parameters.map((parameter) => {
27
+ const { schema } = resolveRef(parameter, context);
28
+ return schema;
29
+ });
30
+ const explodeParameters = parameterObjects.filter((parameterObject) => {
28
31
  if (!parameterObject.schema) return false;
29
- const { schema: schemaObject } = resolveRef(parameterObject.schema, context);
30
- const isArrayLike = schemaObject.type === "array" || (schemaObject.oneOf ?? []).some((s) => resolveRef(s, context).schema.type === "array") || (schemaObject.anyOf ?? []).some((s) => resolveRef(s, context).schema.type === "array") || (schemaObject.allOf ?? []).some((s) => resolveRef(s, context).schema.type === "array");
32
+ const { schema: schemaObject } = resolveSchemaRef(parameterObject.schema, context);
33
+ const isArrayLike = 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");
31
34
  return parameterObject.in === "query" && isArrayLike && parameterObject.explode;
32
35
  });
33
- const explodeParametersNames = explodeParameters.map((parameter) => {
34
- const { schema } = resolveRef(parameter, context);
35
- return schema.name;
36
+ const explodeParametersNames = explodeParameters.map((parameter) => parameter.name);
37
+ const hasExplodedDateParams = context.output.override.useDates && explodeParameters.some((parameter) => {
38
+ if (!parameter.schema) return false;
39
+ const { schema } = resolveSchemaRef(parameter.schema, context);
40
+ return schema.format === "date-time";
36
41
  });
37
- const hasExplodedDateParams = context.output.override.useDates && explodeParameters.some((p) => isDereferenced(p) && p.schema?.format === "date-time");
38
42
  const explodeArrayImplementation = explodeParameters.length > 0 ? `const explodeParameters = ${JSON.stringify(explodeParametersNames)};
39
43
 
40
44
  if (Array.isArray(value) && explodeParameters.includes(key)) {
@@ -46,7 +50,11 @@ const generateRequestFunction = ({ queryParams, headers, operationName, response
46
50
  ` : "";
47
51
  const isExplodeParametersOnly = explodeParameters.length === parameters.length;
48
52
  const normalParamsImplementation = `if (value !== undefined) {
49
- normalizedParams.append(key, value === null ? 'null' : ${context.output.override.useDates && parameters.some((p) => isDereferenced(p) && p.schema?.format === "date-time") ? "value instanceof Date ? value.toISOString() : " : ""}value.toString())
53
+ normalizedParams.append(key, value === null ? 'null' : ${context.output.override.useDates && parameterObjects.some((parameter) => {
54
+ if (!parameter.schema) return false;
55
+ const { schema } = resolveSchemaRef(parameter.schema, context);
56
+ return schema.format === "date-time";
57
+ }) ? "value instanceof Date ? value.toISOString() : " : ""}value.toString())
50
58
  }`;
51
59
  const getUrlFnImplementation = `export const ${getUrlFnName} = (${getUrlFnProps}) => {
52
60
  ${queryParams ? ` const normalizedParams = new URLSearchParams();
@@ -120,7 +128,9 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? "" : `export type ${respon
120
128
  const getUrlFnProperties = props.filter((prop) => prop.type === GetterPropType.PARAM || prop.type === GetterPropType.QUERY_PARAM || prop.type === GetterPropType.NAMED_PATH_PARAMS).map((param) => {
121
129
  return param.type === GetterPropType.NAMED_PATH_PARAMS ? param.destructured : param.name;
122
130
  }).join(",");
123
- const args = `${toObjectString(props, "implementation")} ${isRequestOptions ? `options?: RequestInit` : ""}`;
131
+ const useRuntimeFetcher = override.fetch.useRuntimeFetcher;
132
+ const fetchFnParam = useRuntimeFetcher && isRequestOptions && !mutator ? ", fetchFn?: typeof globalThis.fetch" : "";
133
+ const args = `${toObjectString(props, "implementation")} ${isRequestOptions ? `options?: RequestInit` : ""}${fetchFnParam}`;
124
134
  const returnType = override.fetch.forceSuccessResponse && hasSuccess ? `Promise<${successName}>` : `Promise<${responseTypeName}>`;
125
135
  const fetchMethodOption = `method: '${verb.toUpperCase()}'`;
126
136
  const ignoreContentTypes = ["multipart/form-data"];
@@ -151,6 +161,7 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? "" : `export type ${respon
151
161
  `;
152
162
  const reviver = fetchReviver ? `, ${fetchReviver.name}` : "";
153
163
  const schemaValueRef = responseType === "Error" ? "ErrorSchema" : responseType;
164
+ const fetchResponseType = override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName;
154
165
  const throwOnErrorImplementation = `if (!${isNdJson ? "stream" : "res"}.ok) {
155
166
  ${isNdJson ? "const body = [204, 205, 304].includes(stream.status) ? null : await stream.text();" : ""}
156
167
  const err: globalThis.Error & {info?: ${hasError ? `${errorName}${override.fetch.includeHttpResponseReturnType ? "['data']" : ""}` : "any"}, status?: number} = new globalThis.Error();
@@ -159,18 +170,19 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? "" : `export type ${respon
159
170
  err.status = ${isNdJson ? "stream" : "res"}.status;
160
171
  throw err;
161
172
  }`;
162
- const fetchResponseImplementation = isNdJson ? ` const stream = await fetch(${fetchFnOptions});
173
+ const fetchFnCall = useRuntimeFetcher && isRequestOptions ? "(fetchFn ?? fetch)" : "fetch";
174
+ const fetchResponseImplementation = isNdJson ? ` const stream = await ${fetchFnCall}(${fetchFnOptions});
163
175
  ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ""}
164
- ${override.fetch.includeHttpResponseReturnType ? `return { status: stream.status, stream, headers: stream.headers } as ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}` : `return stream`}
165
- ` : `const res = await fetch(${fetchFnOptions})
176
+ ${override.fetch.includeHttpResponseReturnType ? `return { status: stream.status, stream, headers: stream.headers } as ${fetchResponseType}` : `return stream`}
177
+ ` : `const res = await ${fetchFnCall}(${fetchFnOptions})
166
178
 
167
179
  const body = [204, 205, 304].includes(res.status) ? null : await res.text();
168
180
  ${override.fetch.forceSuccessResponse ? throwOnErrorImplementation : ""}
169
181
  ${isValidateResponse ? `const parsedBody = body ? JSON.parse(body${reviver}) : {}
170
- const data = ${schemaValueRef}.parse(parsedBody)` : `const data: ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ""} = body ? JSON.parse(body${reviver}) : {}`}
171
- ${override.fetch.includeHttpResponseReturnType ? `return { data, status: res.status, headers: res.headers } as ${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}` : "return data"}
182
+ const data = ${schemaValueRef}.parse(parsedBody)` : `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ""} = body ? JSON.parse(body${reviver}) : {}`}
183
+ ${override.fetch.includeHttpResponseReturnType ? `return { data, status: res.status, headers: res.headers } as ${fetchResponseType}` : "return data"}
172
184
  `;
173
- let customFetchResponseImplementation = `return ${mutator?.name}<${override.fetch.forceSuccessResponse && hasSuccess ? successName : responseTypeName}>(${fetchFnOptions});`;
185
+ let customFetchResponseImplementation = `return ${mutator?.name}<${fetchResponseType}>(${fetchFnOptions});`;
174
186
  const bodyForm = generateFormDataAndUrlEncodedFunction({
175
187
  formData,
176
188
  formUrlEncoded,
@@ -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 isObject,\n type OpenApiParameterObject,\n type OpenApiReferenceObject,\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\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: parameterObject } = resolveRef<OpenApiParameterObject>(\n parameter,\n context,\n );\n\n if (!parameterObject.schema) {\n return false;\n }\n\n const { schema: schemaObject } = resolveRef<OpenApiSchemaObject>(\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(\n (s) =>\n resolveRef<OpenApiSchemaObject>(s, context).schema.type === 'array',\n ) ||\n (\n (schemaObject.anyOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some(\n (s) =>\n resolveRef<OpenApiSchemaObject>(s, context).schema.type === 'array',\n ) ||\n (\n (schemaObject.allOf as\n | (OpenApiSchemaObject | OpenApiReferenceObject)[]\n | undefined) ?? []\n ).some(\n (s) =>\n resolveRef<OpenApiSchemaObject>(s, context).schema.type === 'array',\n );\n\n return (\n parameterObject.in === 'query' && isArrayLike && parameterObject.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\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 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 schemaValueRef =\n responseType === 'Error' ? 'ErrorSchema' : responseType;\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 = ${schemaValueRef}.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 let 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 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 `${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 };\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 isObject,\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\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 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() : ' : ''}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 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() : ' : ''}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\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 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 schemaValueRef =\n responseType === 'Error' ? 'ErrorSchema' : responseType;\n const fetchResponseType =\n override.fetch.forceSuccessResponse && hasSuccess\n ? successName\n : responseTypeName;\n\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 fetchFnCall =\n useRuntimeFetcher && isRequestOptions ? '(fetchFn ?? fetch)' : 'fetch';\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 : `const res = await ${fetchFnCall}(${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 = ${schemaValueRef}.parse(parsedBody)`\n : `const data: ${fetchResponseType}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? JSON.parse(body${reviver}) : {}`\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 `${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 };\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,7 +1,16 @@
1
1
  {
2
2
  "name": "@orval/fetch",
3
- "version": "8.6.2",
3
+ "version": "8.8.0",
4
4
  "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/orval-labs/orval.git",
8
+ "directory": "packages/fetch"
9
+ },
10
+ "homepage": "https://orval.dev/docs/guides/fetch",
11
+ "bugs": {
12
+ "url": "https://github.com/orval-labs/orval/issues"
13
+ },
5
14
  "type": "module",
6
15
  "types": "./dist/index.d.mts",
7
16
  "exports": {
@@ -26,11 +35,11 @@
26
35
  "nuke": "rimraf .turbo dist node_modules"
27
36
  },
28
37
  "dependencies": {
29
- "@orval/core": "8.6.2",
30
- "@scalar/openapi-types": "0.5.3"
38
+ "@orval/core": "8.8.0",
39
+ "@scalar/openapi-types": "0.6.1"
31
40
  },
32
41
  "devDependencies": {
33
- "eslint": "9.39.2",
42
+ "eslint": "10.1.0",
34
43
  "rimraf": "6.1.2",
35
44
  "tsdown": "0.20.3",
36
45
  "typescript": "5.9.3",