diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 0b5564f9aa..78d5ea9612 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -171,6 +171,7 @@ export interface NormalizedOverrideOutput { * @default false */ useNullForOptional?: boolean; + includeZodSchemaInArguments?: boolean; } export interface NormalizedMutator { @@ -633,6 +634,7 @@ export interface OverrideOutput { * @default false */ useNullForOptional?: boolean; + includeZodSchemaInArguments?: boolean; } export interface JsDocOptions { diff --git a/packages/fetch/src/index.ts b/packages/fetch/src/index.ts index 8676968d9a..80537ff4d6 100644 --- a/packages/fetch/src/index.ts +++ b/packages/fetch/src/index.ts @@ -435,17 +435,27 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${respon ? `body: ${requestBodyParams}` : `body: JSON.stringify(${requestBodyParams})` : ''; - const fetchFnOptions = `${getUrlFnName}(${getUrlFnProperties}), + const rawFetchFnOptions = `${getUrlFnName}(${getUrlFnProperties}), {${globalFetchOptions ? '\n' : ''} ${globalFetchOptions} ${isRequestOptions ? '...options,' : ''} ${fetchMethodOption}${fetchHeadersOption ? ',' : ''} ${fetchHeadersOption}${fetchBodyOption ? ',' : ''} - ${fetchBodyOption} + ${fetchBodyOption}`; + const fetchFnOptions = `${rawFetchFnOptions} } `; - const reviver = fetchReviver ? `, ${fetchReviver.name}` : ''; const schemaValueRef = responseType === 'Error' ? 'ErrorSchema' : responseType; + const includeZodSchema = + context.output.override.includeZodSchemaInArguments && + schemaValueRef !== 'void' && + typeof context.output.schemas === 'object' && + context.output.schemas.type === 'zod'; + const validateFetchFnOptions = `${rawFetchFnOptions}${includeZodSchema ? ',' : ''} + ${includeZodSchema ? `schema: ${schemaValueRef}` : ''} + } +`; + const reviver = fetchReviver ? `, ${fetchReviver.name}` : ''; const fetchResponseType = override.fetch.forceSuccessResponse && hasSuccess ? successName @@ -549,7 +559,7 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${respon : 'return data' } `; - let customFetchResponseImplementation = `return ${mutator?.name}<${fetchResponseType}>(${fetchFnOptions});`; + let customFetchResponseImplementation = `return ${mutator?.name}<${fetchResponseType}>(${validateFetchFnOptions});`; const bodyForm = generateFormDataAndUrlEncodedFunction({ formData, @@ -571,7 +581,7 @@ ${override.fetch.forceSuccessResponse && hasSuccess ? '' : `export type ${respon const ${formattedDeconstructor} = ${mutator.name}(); return (${args}) => { ${bodyForm} - return ${fetchExportName}(${fetchFnOptions}); + return ${fetchExportName}(${validateFetchFnOptions}); } `; }