@@ -41,6 +41,13 @@ interface WriteZodOutputOptions {
4141 strict : {
4242 body : boolean ;
4343 } ;
44+ generate : {
45+ param : boolean ;
46+ query : boolean ;
47+ header : boolean ;
48+ body : boolean ;
49+ response : boolean ;
50+ } ;
4451 coerce : {
4552 body : boolean | ZodCoerceType [ ] ;
4653 } ;
@@ -63,21 +70,28 @@ interface WriteZodVerbResponseType {
6370 originalSchema ?: OpenApiSchemaObject ;
6471}
6572
66- type WriteZodSchemasFromVerbsInput = Record <
67- string ,
68- {
69- operationName : string ;
70- originalOperation : {
71- requestBody ?: OpenApiRequestBodyObject | OpenApiReferenceObject ;
72- parameters ?: ( OpenApiParameterObject | OpenApiReferenceObject ) [ ] ;
73+ interface WriteZodSchemasFromVerbsEntry {
74+ operationName : string ;
75+ originalOperation : {
76+ requestBody ?: OpenApiRequestBodyObject | OpenApiReferenceObject ;
77+ parameters ?: ( OpenApiParameterObject | OpenApiReferenceObject ) [ ] ;
78+ } ;
79+ response : {
80+ types : {
81+ success : WriteZodVerbResponseType [ ] ;
82+ errors : WriteZodVerbResponseType [ ] ;
7383 } ;
74- response : {
75- types : {
76- success : WriteZodVerbResponseType [ ] ;
77- errors : WriteZodVerbResponseType [ ] ;
78- } ;
84+ } ;
85+ override ?: {
86+ zod : {
87+ generate : WriteZodOutputOptions [ 'override' ] [ 'zod' ] [ 'generate' ] ;
7988 } ;
80- }
89+ } ;
90+ }
91+
92+ type WriteZodSchemasFromVerbsInput = Record <
93+ string ,
94+ WriteZodSchemasFromVerbsEntry
8195> ;
8296
8397interface WriteZodSchemasFromVerbsContext {
@@ -365,6 +379,10 @@ export async function writeZodSchemasFromVerbs(
365379
366380 const generateVerbsSchemas = verbOptionsArray . flatMap ( ( verbOption ) => {
367381 const operation = verbOption . originalOperation ;
382+ const shouldGenerate = {
383+ ...output . override . zod . generate ,
384+ ...verbOption . override ?. zod . generate ,
385+ } ;
368386
369387 const requestBody = operation . requestBody ;
370388 const requestBodyContent =
@@ -392,16 +410,17 @@ export async function writeZodSchemasFromVerbs(
392410 : [ undefined , undefined ] ;
393411 const bodySchema = bodyMedia ?. schema as OpenApiSchemaObject | undefined ;
394412
395- const bodySchemas = bodySchema
396- ? [
397- {
398- name : `${ pascal ( verbOption . operationName ) } Body` ,
399- schema : dereference ( bodySchema , zodContext ) ,
400- bodyContentType,
401- encoding : bodyMedia ?. encoding ,
402- } ,
403- ]
404- : [ ] ;
413+ const bodySchemas =
414+ shouldGenerate . body && bodySchema
415+ ? [
416+ {
417+ name : `${ pascal ( verbOption . operationName ) } Body` ,
418+ schema : dereference ( bodySchema , zodContext ) ,
419+ bodyContentType,
420+ encoding : bodyMedia ?. encoding ,
421+ } ,
422+ ]
423+ : [ ] ;
405424
406425 const parameters = operation . parameters ;
407426
@@ -410,7 +429,7 @@ export async function writeZodSchemasFromVerbs(
410429 ) ;
411430
412431 const queryParamsSchemas =
413- queryParams && queryParams . length > 0
432+ shouldGenerate . query && queryParams && queryParams . length > 0
414433 ? [
415434 {
416435 name : `${ pascal ( verbOption . operationName ) } Params` ,
@@ -438,7 +457,7 @@ export async function writeZodSchemasFromVerbs(
438457 ) ;
439458
440459 const headerParamsSchemas =
441- headerParams && headerParams . length > 0
460+ shouldGenerate . header && headerParams && headerParams . length > 0
442461 ? [
443462 {
444463 name : `${ pascal ( verbOption . operationName ) } Headers` ,
@@ -461,25 +480,27 @@ export async function writeZodSchemasFromVerbs(
461480 ]
462481 : [ ] ;
463482
464- const responseSchemas = [
465- ...verbOption . response . types . success ,
466- ...verbOption . response . types . errors ,
467- ]
468- . filter (
469- (
470- responseType ,
471- ) : responseType is typeof responseType & {
472- originalSchema : OpenApiSchemaObject ;
473- } =>
474- ! ! responseType . originalSchema &&
475- ! responseType . isRef &&
476- isValidSchemaIdentifier ( responseType . value ) &&
477- ! isPrimitiveSchemaName ( responseType . value ) ,
478- )
479- . map ( ( responseType ) => ( {
480- name : responseType . value ,
481- schema : dereference ( responseType . originalSchema , zodContext ) ,
482- } ) ) ;
483+ const responseSchemas = shouldGenerate . response
484+ ? [
485+ ...verbOption . response . types . success ,
486+ ...verbOption . response . types . errors ,
487+ ]
488+ . filter (
489+ (
490+ responseType ,
491+ ) : responseType is typeof responseType & {
492+ originalSchema : OpenApiSchemaObject ;
493+ } =>
494+ ! ! responseType . originalSchema &&
495+ ! responseType . isRef &&
496+ isValidSchemaIdentifier ( responseType . value ) &&
497+ ! isPrimitiveSchemaName ( responseType . value ) ,
498+ )
499+ . map ( ( responseType ) => ( {
500+ name : responseType . value ,
501+ schema : dereference ( responseType . originalSchema , zodContext ) ,
502+ } ) )
503+ : [ ] ;
483504
484505 return dedupeSchemasByName ( [
485506 ...bodySchemas ,
0 commit comments