diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts index ee9d8176a..1c89e4842 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts @@ -271,7 +271,9 @@ export const zModelWithProperties = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()), @@ -283,14 +285,18 @@ export const zModelWithProperties = z.object({ * This is a model with one property containing a reference */ export const zModelWithReference = z.object({ - prop: z.optional(zModelWithProperties) + get prop(): z.ZodMiniOptional { + return z.optional(zModelWithProperties); + } }); /** * This is a model with one property containing an array */ export const zModelWithArray = z.object({ - prop: z.optional(z.array(zModelWithString)), + get prop(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithString)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -328,7 +334,9 @@ export const zModelWithNestedProperties = z.object({ * This is a model with duplicated properties */ export const zModelWithDuplicateProperties = z.object({ - prop: z.optional(zModelWithString) + get prop(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } }); /** @@ -344,25 +352,39 @@ export const zModelWithOrderedProperties = z.object({ * This is a model with duplicated imports */ export const zModelWithDuplicateImports = z.object({ - propA: z.optional(zModelWithString), - propB: z.optional(zModelWithString), - propC: z.optional(zModelWithString) + get propA(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, + get propB(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, + get propC(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = z.intersection(zModelWithString, z.object({ - propExtendsA: z.optional(z.string()), - propExtendsB: z.optional(zModelWithString) +export const zModelThatExtends = z.intersection(zModelWithString, z.lazy(() => { + return z.object({ + propExtendsA: z.optional(z.string()), + get propExtendsB(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + }); })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = z.intersection(z.intersection(zModelWithString, zModelThatExtends), z.object({ - propExtendsC: z.optional(z.string()), - propExtendsD: z.optional(zModelWithString) +export const zModelThatExtendsExtends = z.intersection(z.intersection(zModelWithString, zModelThatExtends), z.lazy(() => { + return z.object({ + propExtendsC: z.optional(z.string()), + get propExtendsD(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + }); })); export const zDefault = z.object({ @@ -414,7 +436,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()) @@ -678,7 +702,9 @@ export const zCallWithResponsesResponse = z.union([ z.object({ '@namespace.string': z.optional(z.readonly(z.string())), '@namespace.integer': z.optional(z.readonly(z.int())), - value: z.optional(z.readonly(z.array(zModelWithString))) + get value(): z.ZodMiniOptional { + return z.optional(z.readonly(z.array(zModelWithString))); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -772,7 +798,9 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = zNonAsciiStringæøåÆøÅöôêÊ字符串; export const zPostApiVbyApiVersionBodyData = z.object({ - body: zParameterActivityParams, + get body() { + return zParameterActivityParams; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts index 69da954a5..9ebae1d53 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts @@ -265,13 +265,15 @@ export const zModelWithNestedEnums = z.object({ /** * This is a model with one nested property */ -export const zModelWithProperties = z.object({ +export const zModelWithProperties: z.AnyZodObject = z.object({ required: z.string(), requiredAndReadOnly: z.string().readonly(), string: z.string().optional(), number: z.number().optional(), boolean: z.boolean().optional(), - reference: zModelWithString.optional(), + get reference() { + return zModelWithString.optional(); + }, 'property with space': z.string().optional(), default: z.string().optional(), try: z.string().optional(), @@ -282,15 +284,19 @@ export const zModelWithProperties = z.object({ /** * This is a model with one property containing a reference */ -export const zModelWithReference = z.object({ - prop: zModelWithProperties.optional() +export const zModelWithReference: z.AnyZodObject = z.object({ + get prop() { + return zModelWithProperties.optional(); + } }); /** * This is a model with one property containing an array */ -export const zModelWithArray = z.object({ - prop: z.array(zModelWithString).optional(), +export const zModelWithArray: z.AnyZodObject = z.object({ + get prop() { + return z.array(zModelWithString).optional(); + }, propWithFile: z.array(z.string()).optional(), propWithNumber: z.array(z.number()).optional() }); @@ -306,9 +312,11 @@ export const zModelWithDictionary = z.object({ * This is a model with one property containing a circular reference */ export const zModelWithCircularReference: z.AnyZodObject = z.object({ - prop: z.lazy(() => { - return zModelWithCircularReference; - }).optional() + get prop(): z.ZodTypeAny { + return z.lazy(() => { + return zModelWithCircularReference; + }).optional(); + } }); /** @@ -325,8 +333,10 @@ export const zModelWithNestedProperties = z.object({ /** * This is a model with duplicated properties */ -export const zModelWithDuplicateProperties = z.object({ - prop: zModelWithString.optional() +export const zModelWithDuplicateProperties: z.AnyZodObject = z.object({ + get prop() { + return zModelWithString.optional(); + } }); /** @@ -341,26 +351,36 @@ export const zModelWithOrderedProperties = z.object({ /** * This is a model with duplicated imports */ -export const zModelWithDuplicateImports = z.object({ - propA: zModelWithString.optional(), - propB: zModelWithString.optional(), - propC: zModelWithString.optional() +export const zModelWithDuplicateImports: z.AnyZodObject = z.object({ + get propA() { + return zModelWithString.optional(); + }, + get propB() { + return zModelWithString.optional(); + }, + get propC() { + return zModelWithString.optional(); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = zModelWithString.and(z.object({ +export const zModelThatExtends: z.ZodTypeAny = zModelWithString.and(z.object({ propExtendsA: z.string().optional(), - propExtendsB: zModelWithString.optional() + get propExtendsB() { + return zModelWithString.optional(); + } })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.object({ +export const zModelThatExtendsExtends: z.ZodTypeAny = zModelWithString.and(zModelThatExtends).and(z.object({ propExtendsC: z.string().optional(), - propExtendsD: zModelWithString.optional() + get propExtendsD() { + return zModelWithString.optional(); + } })); export const zDefault = z.object({ @@ -407,12 +427,14 @@ export const zFailureFailure = z.object({ /** * This is a model with one nested property */ -export const zModelWithPropertiesWritable = z.object({ +export const zModelWithPropertiesWritable: z.AnyZodObject = z.object({ required: z.string(), string: z.string().optional(), number: z.number().optional(), boolean: z.boolean().optional(), - reference: zModelWithString.optional(), + get reference() { + return zModelWithString.optional(); + }, 'property with space': z.string().optional(), default: z.string().optional(), try: z.string().optional() @@ -672,11 +694,13 @@ export const zCallWithResponsesData = z.object({ query: z.never().optional() }); -export const zCallWithResponsesResponse = z.union([ +export const zCallWithResponsesResponse: z.ZodTypeAny = z.union([ z.object({ '@namespace.string': z.string().readonly().optional(), '@namespace.integer': z.number().int().readonly().optional(), - value: z.array(zModelWithString).readonly().optional() + get value() { + return z.array(zModelWithString).readonly().optional(); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -769,8 +793,10 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ */ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = zNonAsciiStringæøåÆøÅöôêÊ字符串; -export const zPostApiVbyApiVersionBodyData = z.object({ - body: zParameterActivityParams, +export const zPostApiVbyApiVersionBodyData: z.AnyZodObject = z.object({ + get body() { + return zParameterActivityParams; + }, path: z.never().optional(), query: z.never().optional() }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts index fdfcad8c4..7a414fc4a 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts @@ -271,7 +271,9 @@ export const zModelWithProperties = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()), @@ -283,14 +285,18 @@ export const zModelWithProperties = z.object({ * This is a model with one property containing a reference */ export const zModelWithReference = z.object({ - prop: z.optional(zModelWithProperties) + get prop(): z.ZodOptional { + return z.optional(zModelWithProperties); + } }); /** * This is a model with one property containing an array */ export const zModelWithArray = z.object({ - prop: z.optional(z.array(zModelWithString)), + get prop(): z.ZodOptional { + return z.optional(z.array(zModelWithString)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -328,7 +334,9 @@ export const zModelWithNestedProperties = z.object({ * This is a model with duplicated properties */ export const zModelWithDuplicateProperties = z.object({ - prop: z.optional(zModelWithString) + get prop(): z.ZodOptional { + return z.optional(zModelWithString); + } }); /** @@ -344,25 +352,39 @@ export const zModelWithOrderedProperties = z.object({ * This is a model with duplicated imports */ export const zModelWithDuplicateImports = z.object({ - propA: z.optional(zModelWithString), - propB: z.optional(zModelWithString), - propC: z.optional(zModelWithString) + get propA(): z.ZodOptional { + return z.optional(zModelWithString); + }, + get propB(): z.ZodOptional { + return z.optional(zModelWithString); + }, + get propC(): z.ZodOptional { + return z.optional(zModelWithString); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = zModelWithString.and(z.object({ - propExtendsA: z.optional(z.string()), - propExtendsB: z.optional(zModelWithString) +export const zModelThatExtends = zModelWithString.and(z.lazy(() => { + return z.object({ + propExtendsA: z.optional(z.string()), + get propExtendsB(): z.ZodOptional { + return z.optional(zModelWithString); + } + }); })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.object({ - propExtendsC: z.optional(z.string()), - propExtendsD: z.optional(zModelWithString) +export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.lazy(() => { + return z.object({ + propExtendsC: z.optional(z.string()), + get propExtendsD(): z.ZodOptional { + return z.optional(zModelWithString); + } + }); })); export const zDefault = z.object({ @@ -414,7 +436,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()) @@ -678,7 +702,9 @@ export const zCallWithResponsesResponse = z.union([ z.object({ '@namespace.string': z.optional(z.string().readonly()), '@namespace.integer': z.optional(z.int().readonly()), - value: z.optional(z.array(zModelWithString).readonly()) + get value(): z.ZodOptional { + return z.optional(z.array(zModelWithString).readonly()); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -772,7 +798,9 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = zNonAsciiStringæøåÆøÅöôêÊ字符串; export const zPostApiVbyApiVersionBodyData = z.object({ - body: zParameterActivityParams, + get body() { + return zParameterActivityParams; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/array-items-one-of-length-1/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/array-items-one-of-length-1/zod.gen.ts index f7edab532..ff0651395 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/array-items-one-of-length-1/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/array-items-one-of-length-1/zod.gen.ts @@ -5,5 +5,7 @@ import * as z from 'zod/mini'; export const zBar = z.string(); export const zFoo = z.object({ - foo: z.optional(z.array(zBar).check(z.minLength(1), z.maxLength(2147483647))) + get foo(): z.ZodMiniOptional { + return z.optional(z.array(zBar).check(z.minLength(1), z.maxLength(2147483647))); + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/circular/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/circular/zod.gen.ts index c93fc275c..efd028a62 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/circular/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/circular/zod.gen.ts @@ -34,7 +34,9 @@ export const zQuux = z.object({ }); export const zFoo = z.object({ - quux: z.optional(zQuux) + get quux(): z.ZodMiniOptional { + return z.optional(zQuux); + } }); export const zBar = z.object({ diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts index c862f31bb..79b175161 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts @@ -172,7 +172,9 @@ export const zArrayWithArray = z.array(z.array(zModelWithString)); * This is a simple array with properties */ export const zArrayWithProperties = z.array(z.object({ - '16x16': z.optional(zCamelCaseCommentWithBreaks), + get '16x16'(): z.ZodMiniOptional { + return z.optional(zCamelCaseCommentWithBreaks); + }, bar: z.optional(z.string()) })); @@ -367,7 +369,9 @@ export const zModelWithProperties = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()), @@ -379,7 +383,9 @@ export const zModelWithProperties = z.object({ * This is a model with one property containing a reference */ export const zModelWithReference = z.object({ - prop: z.optional(zModelWithProperties) + get prop(): z.ZodMiniOptional { + return z.optional(zModelWithProperties); + } }); export const zModelWithReadOnlyAndWriteOnly = z.object({ @@ -391,7 +397,9 @@ export const zModelWithReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ - prop: z.optional(z.array(zModelWithReadOnlyAndWriteOnly)), + get prop(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithReadOnlyAndWriteOnly)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -400,7 +408,9 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArray = z.object({ - prop: z.optional(z.array(zModelWithString)), + get prop(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithString)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -663,7 +673,9 @@ export const zModelWithNestedProperties = z.object({ * This is a model with duplicated properties */ export const zModelWithDuplicateProperties = z.object({ - prop: z.optional(zModelWithString) + get prop(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } }); /** @@ -679,25 +691,39 @@ export const zModelWithOrderedProperties = z.object({ * This is a model with duplicated imports */ export const zModelWithDuplicateImports = z.object({ - propA: z.optional(zModelWithString), - propB: z.optional(zModelWithString), - propC: z.optional(zModelWithString) + get propA(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, + get propB(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, + get propC(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = z.intersection(zModelWithString, z.object({ - propExtendsA: z.optional(z.string()), - propExtendsB: z.optional(zModelWithString) +export const zModelThatExtends = z.intersection(zModelWithString, z.lazy(() => { + return z.object({ + propExtendsA: z.optional(z.string()), + get propExtendsB(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + }); })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = z.intersection(z.intersection(zModelWithString, zModelThatExtends), z.object({ - propExtendsC: z.optional(z.string()), - propExtendsD: z.optional(zModelWithString) +export const zModelThatExtendsExtends = z.intersection(z.intersection(zModelWithString, zModelThatExtends), z.lazy(() => { + return z.object({ + propExtendsC: z.optional(z.string()), + get propExtendsD(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + }); })); /** @@ -783,10 +809,14 @@ export const zSimpleParameter = z.string(); export const zCompositionWithOneOfAndProperties = z.intersection(z.union([ z.object({ - foo: zSimpleParameter + get foo() { + return zSimpleParameter; + } }), z.object({ - bar: zNonAsciiStringæøåÆøÅöôêÊ字符串 + get bar() { + return zNonAsciiStringæøåÆøÅöôêÊ字符串; + } }) ]), z.object({ baz: z.union([ @@ -812,7 +842,9 @@ export const zNullableObject = z._default(z.union([ export const zCharactersInDescription = z.string(); export const zModelWithNullableObject = z.object({ - data: z.optional(zNullableObject) + get data(): z.ZodMiniOptional { + return z.optional(zNullableObject); + } }); export const zModelWithOneOfEnum = z.union([ @@ -859,17 +891,25 @@ export const zModelWithNestedArrayEnumsDataBar = z.enum([ ]); export const zModelWithNestedArrayEnumsData = z.object({ - foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), - bar: z.optional(z.array(zModelWithNestedArrayEnumsDataBar)) + get foo(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)); + }, + get bar(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataBar)); + } }); export const zModelWithNestedArrayEnums = z.object({ array_strings: z.optional(z.array(z.string())), - data: z.optional(zModelWithNestedArrayEnumsData) + get data(): z.ZodMiniOptional { + return z.optional(zModelWithNestedArrayEnumsData); + } }); export const zModelWithNestedCompositionEnums = z.object({ - foo: z.optional(zModelWithNestedArrayEnumsDataFoo) + get foo(): z.ZodMiniOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + } }); export const zModelWithConstantSizeArray = z.tuple([ @@ -1018,7 +1058,9 @@ export const zIoK8sApimachineryPkgApisMetaV1Preconditions = z.object({ * This schema was giving PascalCase transformations a hard time */ export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions = z.object({ - preconditions: z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions) + get preconditions(): z.ZodMiniOptional { + return z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions); + } }); export const zAdditionalPropertiesUnknownIssue = z.record(z.string(), z.union([ @@ -1081,7 +1123,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()) @@ -1248,9 +1292,13 @@ export const zDeleteFooData3 = z.object({ BarParam: z.string() }), query: z.optional(z.never()), - headers: z.object({ - 'x-Foo-Bar': zModelWithString - }) + get headers() { + return z.object({ + get 'x-Foo-Bar'() { + return zModelWithString; + } + }); + } }); export const zCallWithDescriptionsData = z.object({ @@ -1293,14 +1341,20 @@ export const zCallWithParametersData = z.object({ z.null() ]) }), - query: z.object({ - foo_ref_enum: z.optional(zModelWithNestedArrayEnumsDataFoo), - foo_all_of_enum: zModelWithNestedArrayEnumsDataFoo, - cursor: z.union([ - z.string(), - z.null() - ]) - }), + get query() { + return z.object({ + get foo_ref_enum(): z.ZodMiniOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + }, + get foo_all_of_enum() { + return zModelWithNestedArrayEnumsDataFoo; + }, + cursor: z.union([ + z.string(), + z.null() + ]) + }); + }, headers: z.object({ parameterHeader: z.union([ z.string(), @@ -1339,7 +1393,9 @@ export const zCallWithWeirdParameterNamesData = z.object({ }); export const zGetCallWithOptionalParamData = z.object({ - body: zModelWithOneOfEnum, + get body() { + return zModelWithOneOfEnum; + }, path: z.optional(z.never()), query: z.optional(z.object({ page: z.optional(z.number()) @@ -1354,9 +1410,13 @@ export const zPostCallWithOptionalParamData = z.object({ ])) })), path: z.optional(z.never()), - query: z.object({ - parameter: zPageable - }) + get query() { + return z.object({ + get parameter() { + return zPageable; + } + }); + } }); export const zPostCallWithOptionalParamResponse = z.union([ @@ -1365,7 +1425,9 @@ export const zPostCallWithOptionalParamResponse = z.union([ ]); export const zPostApiVbyApiVersionRequestBodyData = z.object({ - body: z.optional(zSimpleRequestBody), + get body(): z.ZodMiniOptional { + return z.optional(zSimpleRequestBody); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1373,7 +1435,9 @@ export const zPostApiVbyApiVersionRequestBodyData = z.object({ }); export const zPostApiVbyApiVersionFormDataData = z.object({ - body: z.optional(zSimpleFormData), + get body(): z.ZodMiniOptional { + return z.optional(zSimpleFormData); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1411,17 +1475,21 @@ export const zCallWithDefaultParametersData = z.object({ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), - parameterNumber: z._default(z.optional(z.number()), 123), - parameterBoolean: z._default(z.optional(z.boolean()), true), - parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' - ])), - parameterModel: z.optional(zModelWithString) - })) + get query(): z.ZodMiniOptional { + return z.optional(z.object({ + parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterNumber: z._default(z.optional(z.number()), 123), + parameterBoolean: z._default(z.optional(z.boolean()), true), + parameterEnum: z.optional(z.enum([ + 'Success', + 'Warning', + 'Error' + ])), + get parameterModel(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + })); + } }); export const zCallToTestOrderOfParamsData = z.object({ @@ -1539,7 +1607,9 @@ export const zCallWithResponsesResponse = z.union([ z.object({ '@namespace.string': z.optional(z.readonly(z.string())), '@namespace.integer': z.optional(z.readonly(z.int())), - value: z.optional(z.readonly(z.array(zModelWithString))) + get value(): z.ZodMiniOptional { + return z.optional(z.readonly(z.array(zModelWithString))); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -1644,16 +1714,20 @@ export const zFileResponseResponse = z.string(); export const zComplexTypesData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.object({ - parameterObject: z.object({ - first: z.optional(z.object({ - second: z.optional(z.object({ - third: z.optional(z.string()) + get query() { + return z.object({ + parameterObject: z.object({ + first: z.optional(z.object({ + second: z.optional(z.object({ + third: z.optional(z.string()) + })) })) - })) - }), - parameterReference: zModelWithString - }) + }), + get parameterReference() { + return zModelWithString; + } + }); + } }); /** @@ -1768,7 +1842,9 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = z.array(zNonAsciiStringæøåÆøÅöôêÊ字符串); export const zPutWithFormUrlEncodedData = z.object({ - body: zArrayWithStrings, + get body() { + return zArrayWithStrings; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts index 77ab57f60..640cd181f 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts @@ -11,7 +11,9 @@ export const zBar = z.object({ export const zFoo = z._default(z.union([ z.object({ foo: z.optional(z.string().check(z.regex(/^\d{3}-\d{2}-\d{4}$/))), - bar: z.optional(zBar), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, get baz(): z.ZodMiniOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/array-items-one-of-length-1/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/array-items-one-of-length-1/zod.gen.ts index efb23578b..3cb1a4a87 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/array-items-one-of-length-1/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/array-items-one-of-length-1/zod.gen.ts @@ -4,6 +4,8 @@ import { z } from 'zod/v3'; export const zBar = z.string(); -export const zFoo = z.object({ - foo: z.array(zBar).min(1).max(2147483647).optional() +export const zFoo: z.AnyZodObject = z.object({ + get foo() { + return z.array(zBar).min(1).max(2147483647).optional(); + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/circular/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/circular/zod.gen.ts index e73840e1d..fa3b765db 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/circular/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/circular/zod.gen.ts @@ -3,13 +3,17 @@ import { z } from 'zod/v3'; export const zBaz: z.AnyZodObject = z.object({ - quux: z.lazy(() => { - return zQuux; - }).optional() + get quux(): z.ZodTypeAny { + return z.lazy(() => { + return zQuux; + }).optional(); + } }); -export const zCorge = z.object({ - baz: z.array(zBaz).optional() +export const zCorge: z.AnyZodObject = z.object({ + get baz() { + return z.array(zBaz).optional(); + } }); export const zQux: z.ZodTypeAny = z.union([ @@ -23,17 +27,25 @@ export const zQux: z.ZodTypeAny = z.union([ })) ]); -export const zQuux = z.object({ - qux: zQux.optional() +export const zQuux: z.AnyZodObject = z.object({ + get qux() { + return zQux.optional(); + } }); -export const zFoo = z.object({ - quux: zQuux.optional() +export const zFoo: z.AnyZodObject = z.object({ + get quux() { + return zQuux.optional(); + } }); export const zBar: z.AnyZodObject = z.object({ - bar: z.lazy(() => { - return zBar; - }).optional(), - baz: zBaz.optional() + get bar(): z.ZodTypeAny { + return z.lazy(() => { + return zBar; + }).optional(); + }, + get baz(): z.ZodTypeAny { + return zBaz.optional(); + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts index 4e19fcbfb..e667ae4d5 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts @@ -171,8 +171,10 @@ export const zArrayWithArray = z.array(z.array(zModelWithString)); /** * This is a simple array with properties */ -export const zArrayWithProperties = z.array(z.object({ - '16x16': zCamelCaseCommentWithBreaks.optional(), +export const zArrayWithProperties: z.ZodTypeAny = z.array(z.object({ + get '16x16'() { + return zCamelCaseCommentWithBreaks.optional(); + }, bar: z.string().optional() })); @@ -357,7 +359,7 @@ export const zModelWithNestedEnums = z.object({ /** * This is a model with one nested property */ -export const zModelWithProperties = z.object({ +export const zModelWithProperties: z.AnyZodObject = z.object({ required: z.string(), requiredAndReadOnly: z.string().readonly(), requiredAndNullable: z.union([ @@ -367,7 +369,9 @@ export const zModelWithProperties = z.object({ string: z.string().optional(), number: z.number().optional(), boolean: z.boolean().optional(), - reference: zModelWithString.optional(), + get reference() { + return zModelWithString.optional(); + }, 'property with space': z.string().optional(), default: z.string().optional(), try: z.string().optional(), @@ -378,8 +382,10 @@ export const zModelWithProperties = z.object({ /** * This is a model with one property containing a reference */ -export const zModelWithReference = z.object({ - prop: zModelWithProperties.optional() +export const zModelWithReference: z.AnyZodObject = z.object({ + get prop() { + return zModelWithProperties.optional(); + } }); export const zModelWithReadOnlyAndWriteOnly = z.object({ @@ -390,8 +396,10 @@ export const zModelWithReadOnlyAndWriteOnly = z.object({ /** * This is a model with one property containing an array */ -export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ - prop: z.array(zModelWithReadOnlyAndWriteOnly).optional(), +export const zModelWithArrayReadOnlyAndWriteOnly: z.AnyZodObject = z.object({ + get prop() { + return z.array(zModelWithReadOnlyAndWriteOnly).optional(); + }, propWithFile: z.array(z.string()).optional(), propWithNumber: z.array(z.number()).optional() }); @@ -399,8 +407,10 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ /** * This is a model with one property containing an array */ -export const zModelWithArray = z.object({ - prop: z.array(zModelWithString).optional(), +export const zModelWithArray: z.AnyZodObject = z.object({ + get prop() { + return z.array(zModelWithString).optional(); + }, propWithFile: z.array(z.string()).optional(), propWithNumber: z.array(z.number()).optional() }); @@ -424,9 +434,11 @@ export const zDeprecatedModel = z.object({ * This is a model with one property containing a circular reference */ export const zModelWithCircularReference: z.AnyZodObject = z.object({ - prop: z.lazy(() => { - return zModelWithCircularReference; - }).optional() + get prop(): z.ZodTypeAny { + return z.lazy(() => { + return zModelWithCircularReference; + }).optional(); + } }); /** @@ -660,8 +672,10 @@ export const zModelWithNestedProperties = z.object({ /** * This is a model with duplicated properties */ -export const zModelWithDuplicateProperties = z.object({ - prop: zModelWithString.optional() +export const zModelWithDuplicateProperties: z.AnyZodObject = z.object({ + get prop() { + return zModelWithString.optional(); + } }); /** @@ -676,26 +690,36 @@ export const zModelWithOrderedProperties = z.object({ /** * This is a model with duplicated imports */ -export const zModelWithDuplicateImports = z.object({ - propA: zModelWithString.optional(), - propB: zModelWithString.optional(), - propC: zModelWithString.optional() +export const zModelWithDuplicateImports: z.AnyZodObject = z.object({ + get propA() { + return zModelWithString.optional(); + }, + get propB() { + return zModelWithString.optional(); + }, + get propC() { + return zModelWithString.optional(); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = zModelWithString.and(z.object({ +export const zModelThatExtends: z.ZodTypeAny = zModelWithString.and(z.object({ propExtendsA: z.string().optional(), - propExtendsB: zModelWithString.optional() + get propExtendsB() { + return zModelWithString.optional(); + } })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.object({ +export const zModelThatExtendsExtends: z.ZodTypeAny = zModelWithString.and(zModelThatExtends).and(z.object({ propExtendsC: z.string().optional(), - propExtendsD: zModelWithString.optional() + get propExtendsD() { + return zModelWithString.optional(); + } })); /** @@ -779,12 +803,16 @@ export const zNestedAnyOfArraysNullable = z.object({ */ export const zSimpleParameter = z.unknown(); -export const zCompositionWithOneOfAndProperties = z.intersection(z.union([ +export const zCompositionWithOneOfAndProperties: z.ZodTypeAny = z.intersection(z.union([ z.object({ - foo: zSimpleParameter + get foo() { + return zSimpleParameter; + } }), z.object({ - bar: zNonAsciiStringæøåÆøÅöôêÊ字符串 + get bar() { + return zNonAsciiStringæøåÆøÅöôêÊ字符串; + } }) ]), z.object({ baz: z.union([ @@ -809,8 +837,10 @@ export const zNullableObject = z.union([ */ export const zCharactersInDescription = z.string(); -export const zModelWithNullableObject = z.object({ - data: zNullableObject.optional() +export const zModelWithNullableObject: z.AnyZodObject = z.object({ + get data() { + return zNullableObject.optional(); + } }); export const zModelWithOneOfEnum = z.union([ @@ -856,18 +886,26 @@ export const zModelWithNestedArrayEnumsDataBar = z.enum([ 'qux' ]); -export const zModelWithNestedArrayEnumsData = z.object({ - foo: z.array(zModelWithNestedArrayEnumsDataFoo).optional(), - bar: z.array(zModelWithNestedArrayEnumsDataBar).optional() +export const zModelWithNestedArrayEnumsData: z.AnyZodObject = z.object({ + get foo() { + return z.array(zModelWithNestedArrayEnumsDataFoo).optional(); + }, + get bar() { + return z.array(zModelWithNestedArrayEnumsDataBar).optional(); + } }); -export const zModelWithNestedArrayEnums = z.object({ +export const zModelWithNestedArrayEnums: z.AnyZodObject = z.object({ array_strings: z.array(z.string()).optional(), - data: zModelWithNestedArrayEnumsData.optional() + get data() { + return zModelWithNestedArrayEnumsData.optional(); + } }); -export const zModelWithNestedCompositionEnums = z.object({ - foo: zModelWithNestedArrayEnumsDataFoo.optional() +export const zModelWithNestedCompositionEnums: z.AnyZodObject = z.object({ + get foo() { + return zModelWithNestedArrayEnumsDataFoo.optional(); + } }); export const zModelWithConstantSizeArray = z.tuple([ @@ -1015,8 +1053,10 @@ export const zIoK8sApimachineryPkgApisMetaV1Preconditions = z.object({ /** * This schema was giving PascalCase transformations a hard time */ -export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions = z.object({ - preconditions: zIoK8sApimachineryPkgApisMetaV1Preconditions.optional() +export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions: z.AnyZodObject = z.object({ + get preconditions() { + return zIoK8sApimachineryPkgApisMetaV1Preconditions.optional(); + } }); export const zAdditionalPropertiesUnknownIssue = z.record(z.union([ @@ -1070,7 +1110,7 @@ export const zOneOfAllOfIssue = z.union([ /** * This is a model with one nested property */ -export const zModelWithPropertiesWritable = z.object({ +export const zModelWithPropertiesWritable: z.AnyZodObject = z.object({ required: z.string(), requiredAndNullable: z.union([ z.string(), @@ -1079,7 +1119,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.string().optional(), number: z.number().optional(), boolean: z.boolean().optional(), - reference: zModelWithString.optional(), + get reference() { + return zModelWithString.optional(); + }, 'property with space': z.string().optional(), default: z.string().optional(), try: z.string().optional() @@ -1239,7 +1281,7 @@ export const zPutCallWithoutParametersAndResponseData = z.object({ query: z.never().optional() }); -export const zDeleteFooData3 = z.object({ +export const zDeleteFooData3: z.AnyZodObject = z.object({ body: z.never().optional(), path: z.object({ foo_param: z.string(), @@ -1247,7 +1289,9 @@ export const zDeleteFooData3 = z.object({ }), query: z.never().optional(), headers: z.object({ - 'x-Foo-Bar': zModelWithString + get 'x-Foo-Bar'() { + return zModelWithString; + } }) }); @@ -1276,7 +1320,7 @@ export const zDeprecatedCallData = z.object({ }) }); -export const zCallWithParametersData = z.object({ +export const zCallWithParametersData: z.AnyZodObject = z.object({ body: z.union([ z.record(z.unknown()), z.null() @@ -1292,8 +1336,12 @@ export const zCallWithParametersData = z.object({ ]) }), query: z.object({ - foo_ref_enum: zModelWithNestedArrayEnumsDataFoo.optional(), - foo_all_of_enum: zModelWithNestedArrayEnumsDataFoo, + get foo_ref_enum() { + return zModelWithNestedArrayEnumsDataFoo.optional(); + }, + get foo_all_of_enum() { + return zModelWithNestedArrayEnumsDataFoo; + }, cursor: z.union([ z.string(), z.null() @@ -1336,15 +1384,17 @@ export const zCallWithWeirdParameterNamesData = z.object({ }) }); -export const zGetCallWithOptionalParamData = z.object({ - body: zModelWithOneOfEnum, +export const zGetCallWithOptionalParamData: z.AnyZodObject = z.object({ + get body() { + return zModelWithOneOfEnum; + }, path: z.never().optional(), query: z.object({ page: z.number().optional() }).optional() }); -export const zPostCallWithOptionalParamData = z.object({ +export const zPostCallWithOptionalParamData: z.AnyZodObject = z.object({ body: z.object({ offset: z.union([ z.number(), @@ -1353,7 +1403,9 @@ export const zPostCallWithOptionalParamData = z.object({ }).optional(), path: z.never().optional(), query: z.object({ - parameter: zPageable + get parameter() { + return zPageable; + } }) }); @@ -1362,16 +1414,20 @@ export const zPostCallWithOptionalParamResponse = z.union([ z.void() ]); -export const zPostApiVbyApiVersionRequestBodyData = z.object({ - body: zSimpleRequestBody.optional(), +export const zPostApiVbyApiVersionRequestBodyData: z.AnyZodObject = z.object({ + get body() { + return zSimpleRequestBody.optional(); + }, path: z.never().optional(), query: z.object({ parameter: z.string().optional() }).optional() }); -export const zPostApiVbyApiVersionFormDataData = z.object({ - body: zSimpleFormData.optional(), +export const zPostApiVbyApiVersionFormDataData: z.AnyZodObject = z.object({ + get body() { + return zSimpleFormData.optional(); + }, path: z.never().optional(), query: z.object({ parameter: z.string().optional() @@ -1406,7 +1462,7 @@ export const zCallWithDefaultParametersData = z.object({ }).optional() }); -export const zCallWithDefaultOptionalParametersData = z.object({ +export const zCallWithDefaultOptionalParametersData: z.AnyZodObject = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ @@ -1418,7 +1474,9 @@ export const zCallWithDefaultOptionalParametersData = z.object({ 'Warning', 'Error' ]).optional(), - parameterModel: zModelWithString.optional() + get parameterModel() { + return zModelWithString.optional(); + } }).optional() }); @@ -1533,11 +1591,13 @@ export const zCallWithResponsesData = z.object({ query: z.never().optional() }); -export const zCallWithResponsesResponse = z.union([ +export const zCallWithResponsesResponse: z.ZodTypeAny = z.union([ z.object({ '@namespace.string': z.string().readonly().optional(), '@namespace.integer': z.number().int().readonly().optional(), - value: z.array(zModelWithString).readonly().optional() + get value() { + return z.array(zModelWithString).readonly().optional(); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -1639,7 +1699,7 @@ export const zFileResponseData = z.object({ */ export const zFileResponseResponse = z.string(); -export const zComplexTypesData = z.object({ +export const zComplexTypesData: z.AnyZodObject = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ @@ -1650,7 +1710,9 @@ export const zComplexTypesData = z.object({ }).optional() }).optional() }), - parameterReference: zModelWithString + get parameterReference() { + return zModelWithString; + } }) }); @@ -1765,8 +1827,10 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ */ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = z.array(zNonAsciiStringæøåÆøÅöôêÊ字符串); -export const zPutWithFormUrlEncodedData = z.object({ - body: zArrayWithStrings, +export const zPutWithFormUrlEncodedData: z.AnyZodObject = z.object({ + get body() { + return zArrayWithStrings; + }, path: z.never().optional(), query: z.never().optional() }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts index 1b13ab9cb..522944714 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts @@ -3,18 +3,24 @@ import { z } from 'zod/v3'; export const zBar: z.AnyZodObject = z.object({ - foo: z.lazy(() => { - return zFoo; - }).optional() + get foo(): z.ZodTypeAny { + return z.lazy(() => { + return zFoo; + }).optional(); + } }); export const zFoo: z.ZodTypeAny = z.union([ z.object({ foo: z.string().regex(/^\d{3}-\d{2}-\d{4}$/).optional(), - bar: zBar.optional(), - baz: z.array(z.lazy(() => { - return zFoo; - })).optional(), + get bar() { + return zBar.optional(); + }, + get baz(): z.ZodTypeAny { + return z.array(z.lazy(() => { + return zFoo; + })).optional(); + }, qux: z.number().int().gt(0).optional().default(0) }), z.null() diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/array-items-one-of-length-1/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/array-items-one-of-length-1/zod.gen.ts index df10c1422..9ca55fde2 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/array-items-one-of-length-1/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/array-items-one-of-length-1/zod.gen.ts @@ -5,5 +5,7 @@ import { z } from 'zod'; export const zBar = z.string(); export const zFoo = z.object({ - foo: z.optional(z.array(zBar).min(1).max(2147483647)) + get foo(): z.ZodOptional { + return z.optional(z.array(zBar).min(1).max(2147483647)); + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/circular/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/circular/zod.gen.ts index 50b4fafee..989de2cef 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/circular/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/circular/zod.gen.ts @@ -34,7 +34,9 @@ export const zQuux = z.object({ }); export const zFoo = z.object({ - quux: z.optional(zQuux) + get quux(): z.ZodOptional { + return z.optional(zQuux); + } }); export const zBar = z.object({ diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts index ed6c1cefc..cf4c21850 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts @@ -172,7 +172,9 @@ export const zArrayWithArray = z.array(z.array(zModelWithString)); * This is a simple array with properties */ export const zArrayWithProperties = z.array(z.object({ - '16x16': z.optional(zCamelCaseCommentWithBreaks), + get '16x16'(): z.ZodOptional { + return z.optional(zCamelCaseCommentWithBreaks); + }, bar: z.optional(z.string()) })); @@ -367,7 +369,9 @@ export const zModelWithProperties = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()), @@ -379,7 +383,9 @@ export const zModelWithProperties = z.object({ * This is a model with one property containing a reference */ export const zModelWithReference = z.object({ - prop: z.optional(zModelWithProperties) + get prop(): z.ZodOptional { + return z.optional(zModelWithProperties); + } }); export const zModelWithReadOnlyAndWriteOnly = z.object({ @@ -391,7 +397,9 @@ export const zModelWithReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ - prop: z.optional(z.array(zModelWithReadOnlyAndWriteOnly)), + get prop(): z.ZodOptional { + return z.optional(z.array(zModelWithReadOnlyAndWriteOnly)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -400,7 +408,9 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArray = z.object({ - prop: z.optional(z.array(zModelWithString)), + get prop(): z.ZodOptional { + return z.optional(z.array(zModelWithString)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -663,7 +673,9 @@ export const zModelWithNestedProperties = z.object({ * This is a model with duplicated properties */ export const zModelWithDuplicateProperties = z.object({ - prop: z.optional(zModelWithString) + get prop(): z.ZodOptional { + return z.optional(zModelWithString); + } }); /** @@ -679,25 +691,39 @@ export const zModelWithOrderedProperties = z.object({ * This is a model with duplicated imports */ export const zModelWithDuplicateImports = z.object({ - propA: z.optional(zModelWithString), - propB: z.optional(zModelWithString), - propC: z.optional(zModelWithString) + get propA(): z.ZodOptional { + return z.optional(zModelWithString); + }, + get propB(): z.ZodOptional { + return z.optional(zModelWithString); + }, + get propC(): z.ZodOptional { + return z.optional(zModelWithString); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = zModelWithString.and(z.object({ - propExtendsA: z.optional(z.string()), - propExtendsB: z.optional(zModelWithString) +export const zModelThatExtends = zModelWithString.and(z.lazy(() => { + return z.object({ + propExtendsA: z.optional(z.string()), + get propExtendsB(): z.ZodOptional { + return z.optional(zModelWithString); + } + }); })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.object({ - propExtendsC: z.optional(z.string()), - propExtendsD: z.optional(zModelWithString) +export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.lazy(() => { + return z.object({ + propExtendsC: z.optional(z.string()), + get propExtendsD(): z.ZodOptional { + return z.optional(zModelWithString); + } + }); })); /** @@ -783,10 +809,14 @@ export const zSimpleParameter = z.string(); export const zCompositionWithOneOfAndProperties = z.intersection(z.union([ z.object({ - foo: zSimpleParameter + get foo() { + return zSimpleParameter; + } }), z.object({ - bar: zNonAsciiStringæøåÆøÅöôêÊ字符串 + get bar() { + return zNonAsciiStringæøåÆøÅöôêÊ字符串; + } }) ]), z.object({ baz: z.union([ @@ -812,7 +842,9 @@ export const zNullableObject = z.union([ export const zCharactersInDescription = z.string(); export const zModelWithNullableObject = z.object({ - data: z.optional(zNullableObject) + get data(): z.ZodOptional { + return z.optional(zNullableObject); + } }); export const zModelWithOneOfEnum = z.union([ @@ -859,17 +891,25 @@ export const zModelWithNestedArrayEnumsDataBar = z.enum([ ]); export const zModelWithNestedArrayEnumsData = z.object({ - foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), - bar: z.optional(z.array(zModelWithNestedArrayEnumsDataBar)) + get foo(): z.ZodOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)); + }, + get bar(): z.ZodOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataBar)); + } }); export const zModelWithNestedArrayEnums = z.object({ array_strings: z.optional(z.array(z.string())), - data: z.optional(zModelWithNestedArrayEnumsData) + get data(): z.ZodOptional { + return z.optional(zModelWithNestedArrayEnumsData); + } }); export const zModelWithNestedCompositionEnums = z.object({ - foo: z.optional(zModelWithNestedArrayEnumsDataFoo) + get foo(): z.ZodOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + } }); export const zModelWithConstantSizeArray = z.tuple([ @@ -1018,7 +1058,9 @@ export const zIoK8sApimachineryPkgApisMetaV1Preconditions = z.object({ * This schema was giving PascalCase transformations a hard time */ export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions = z.object({ - preconditions: z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions) + get preconditions(): z.ZodOptional { + return z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions); + } }); export const zAdditionalPropertiesUnknownIssue = z.record(z.string(), z.union([ @@ -1081,7 +1123,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()) @@ -1248,9 +1292,13 @@ export const zDeleteFooData3 = z.object({ BarParam: z.string() }), query: z.optional(z.never()), - headers: z.object({ - 'x-Foo-Bar': zModelWithString - }) + get headers() { + return z.object({ + get 'x-Foo-Bar'() { + return zModelWithString; + } + }); + } }); export const zCallWithDescriptionsData = z.object({ @@ -1293,14 +1341,20 @@ export const zCallWithParametersData = z.object({ z.null() ]) }), - query: z.object({ - foo_ref_enum: z.optional(zModelWithNestedArrayEnumsDataFoo), - foo_all_of_enum: zModelWithNestedArrayEnumsDataFoo, - cursor: z.union([ - z.string(), - z.null() - ]) - }), + get query() { + return z.object({ + get foo_ref_enum(): z.ZodOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + }, + get foo_all_of_enum() { + return zModelWithNestedArrayEnumsDataFoo; + }, + cursor: z.union([ + z.string(), + z.null() + ]) + }); + }, headers: z.object({ parameterHeader: z.union([ z.string(), @@ -1339,7 +1393,9 @@ export const zCallWithWeirdParameterNamesData = z.object({ }); export const zGetCallWithOptionalParamData = z.object({ - body: zModelWithOneOfEnum, + get body() { + return zModelWithOneOfEnum; + }, path: z.optional(z.never()), query: z.optional(z.object({ page: z.optional(z.number()) @@ -1354,9 +1410,13 @@ export const zPostCallWithOptionalParamData = z.object({ ])) })), path: z.optional(z.never()), - query: z.object({ - parameter: zPageable - }) + get query() { + return z.object({ + get parameter() { + return zPageable; + } + }); + } }); export const zPostCallWithOptionalParamResponse = z.union([ @@ -1365,7 +1425,9 @@ export const zPostCallWithOptionalParamResponse = z.union([ ]); export const zPostApiVbyApiVersionRequestBodyData = z.object({ - body: z.optional(zSimpleRequestBody), + get body(): z.ZodOptional { + return z.optional(zSimpleRequestBody); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1373,7 +1435,9 @@ export const zPostApiVbyApiVersionRequestBodyData = z.object({ }); export const zPostApiVbyApiVersionFormDataData = z.object({ - body: z.optional(zSimpleFormData), + get body(): z.ZodOptional { + return z.optional(zSimpleFormData); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1411,17 +1475,21 @@ export const zCallWithDefaultParametersData = z.object({ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), - parameterNumber: z.optional(z.number()).default(123), - parameterBoolean: z.optional(z.boolean()).default(true), - parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' - ])), - parameterModel: z.optional(zModelWithString) - })) + get query(): z.ZodOptional { + return z.optional(z.object({ + parameterString: z.optional(z.string()).default('Hello World!'), + parameterNumber: z.optional(z.number()).default(123), + parameterBoolean: z.optional(z.boolean()).default(true), + parameterEnum: z.optional(z.enum([ + 'Success', + 'Warning', + 'Error' + ])), + get parameterModel(): z.ZodOptional { + return z.optional(zModelWithString); + } + })); + } }); export const zCallToTestOrderOfParamsData = z.object({ @@ -1539,7 +1607,9 @@ export const zCallWithResponsesResponse = z.union([ z.object({ '@namespace.string': z.optional(z.string().readonly()), '@namespace.integer': z.optional(z.int().readonly()), - value: z.optional(z.array(zModelWithString).readonly()) + get value(): z.ZodOptional { + return z.optional(z.array(zModelWithString).readonly()); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -1644,16 +1714,20 @@ export const zFileResponseResponse = z.string(); export const zComplexTypesData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.object({ - parameterObject: z.object({ - first: z.optional(z.object({ - second: z.optional(z.object({ - third: z.optional(z.string()) + get query() { + return z.object({ + parameterObject: z.object({ + first: z.optional(z.object({ + second: z.optional(z.object({ + third: z.optional(z.string()) + })) })) - })) - }), - parameterReference: zModelWithString - }) + }), + get parameterReference() { + return zModelWithString; + } + }); + } }); /** @@ -1768,7 +1842,9 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = z.array(zNonAsciiStringæøåÆøÅöôêÊ字符串); export const zPutWithFormUrlEncodedData = z.object({ - body: zArrayWithStrings, + get body() { + return zArrayWithStrings; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts index 7f3ce000b..c61684291 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts @@ -11,7 +11,9 @@ export const zBar = z.object({ export const zFoo = z.union([ z.object({ foo: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)), - bar: z.optional(zBar), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, get baz(): z.ZodOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/array-items-one-of-length-1/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/array-items-one-of-length-1/zod.gen.ts index f7edab532..ff0651395 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/array-items-one-of-length-1/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/array-items-one-of-length-1/zod.gen.ts @@ -5,5 +5,7 @@ import * as z from 'zod/mini'; export const zBar = z.string(); export const zFoo = z.object({ - foo: z.optional(z.array(zBar).check(z.minLength(1), z.maxLength(2147483647))) + get foo(): z.ZodMiniOptional { + return z.optional(z.array(zBar).check(z.minLength(1), z.maxLength(2147483647))); + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts index 67cd9d8bf..4b4885577 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts @@ -178,7 +178,9 @@ export const zArrayWithArray = z.array(z.array(zModelWithString)); * This is a simple array with properties */ export const zArrayWithProperties = z.array(z.object({ - '16x16': z.optional(zCamelCaseCommentWithBreaks), + get '16x16'(): z.ZodMiniOptional { + return z.optional(zCamelCaseCommentWithBreaks); + }, bar: z.optional(z.string()) })); @@ -376,7 +378,9 @@ export const zModelWithProperties = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()), @@ -388,7 +392,9 @@ export const zModelWithProperties = z.object({ * This is a model with one property containing a reference */ export const zModelWithReference = z.object({ - prop: z.optional(zModelWithProperties) + get prop(): z.ZodMiniOptional { + return z.optional(zModelWithProperties); + } }); export const zModelWithReadOnlyAndWriteOnly = z.object({ @@ -400,7 +406,9 @@ export const zModelWithReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ - prop: z.optional(z.array(zModelWithReadOnlyAndWriteOnly)), + get prop(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithReadOnlyAndWriteOnly)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -409,7 +417,9 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArray = z.object({ - prop: z.optional(z.array(zModelWithString)), + get prop(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithString)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -670,7 +680,9 @@ export const zModelWithNestedProperties = z.object({ * This is a model with duplicated properties */ export const zModelWithDuplicateProperties = z.object({ - prop: z.optional(zModelWithString) + get prop(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } }); /** @@ -686,25 +698,39 @@ export const zModelWithOrderedProperties = z.object({ * This is a model with duplicated imports */ export const zModelWithDuplicateImports = z.object({ - propA: z.optional(zModelWithString), - propB: z.optional(zModelWithString), - propC: z.optional(zModelWithString) + get propA(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, + get propB(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, + get propC(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = z.intersection(zModelWithString, z.object({ - propExtendsA: z.optional(z.string()), - propExtendsB: z.optional(zModelWithString) +export const zModelThatExtends = z.intersection(zModelWithString, z.lazy(() => { + return z.object({ + propExtendsA: z.optional(z.string()), + get propExtendsB(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + }); })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = z.intersection(z.intersection(zModelWithString, zModelThatExtends), z.object({ - propExtendsC: z.optional(z.string()), - propExtendsD: z.optional(zModelWithString) +export const zModelThatExtendsExtends = z.intersection(z.intersection(zModelWithString, zModelThatExtends), z.lazy(() => { + return z.object({ + propExtendsC: z.optional(z.string()), + get propExtendsD(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + }); })); /** @@ -786,10 +812,14 @@ export const zSimpleParameter = z.string(); export const zCompositionWithOneOfAndProperties = z.intersection(z.union([ z.object({ - foo: zSimpleParameter + get foo() { + return zSimpleParameter; + } }), z.object({ - bar: zNonAsciiStringæøåÆøÅöôêÊ字符串 + get bar() { + return zNonAsciiStringæøåÆøÅöôêÊ字符串; + } }) ]), z.object({ baz: z.union([ @@ -815,7 +845,9 @@ export const zNullableObject = z._default(z.union([ export const zCharactersInDescription = z.string(); export const zModelWithNullableObject = z.object({ - data: z.optional(zNullableObject) + get data(): z.ZodMiniOptional { + return z.optional(zNullableObject); + } }); export const zModelWithOneOfEnum = z.union([ @@ -862,17 +894,25 @@ export const zModelWithNestedArrayEnumsDataBar = z.enum([ ]); export const zModelWithNestedArrayEnumsData = z.object({ - foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), - bar: z.optional(z.array(zModelWithNestedArrayEnumsDataBar)) + get foo(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)); + }, + get bar(): z.ZodMiniOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataBar)); + } }); export const zModelWithNestedArrayEnums = z.object({ array_strings: z.optional(z.array(z.string())), - data: z.optional(zModelWithNestedArrayEnumsData) + get data(): z.ZodMiniOptional { + return z.optional(zModelWithNestedArrayEnumsData); + } }); export const zModelWithNestedCompositionEnums = z.object({ - foo: z.optional(zModelWithNestedArrayEnumsDataFoo) + get foo(): z.ZodMiniOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + } }); export const zModelWithConstantSizeArray = z.tuple([ @@ -1024,7 +1064,9 @@ export const zIoK8sApimachineryPkgApisMetaV1Preconditions = z.object({ * This schema was giving PascalCase transformations a hard time */ export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions = z.object({ - preconditions: z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions) + get preconditions(): z.ZodMiniOptional { + return z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions); + } }); export const zAdditionalPropertiesUnknownIssue = z.record(z.string(), z.union([ @@ -1087,7 +1129,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodMiniOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()) @@ -1263,9 +1307,13 @@ export const zDeleteFooData3 = z.object({ BarParam: z.string() }), query: z.optional(z.never()), - headers: z.object({ - 'x-Foo-Bar': zModelWithString - }) + get headers() { + return z.object({ + get 'x-Foo-Bar'() { + return zModelWithString; + } + }); + } }); export const zCallWithDescriptionsData = z.object({ @@ -1308,14 +1356,20 @@ export const zCallWithParametersData = z.object({ z.null() ]) }), - query: z.object({ - foo_ref_enum: z.optional(zModelWithNestedArrayEnumsDataFoo), - foo_all_of_enum: zModelWithNestedArrayEnumsDataFoo, - cursor: z.union([ - z.string(), - z.null() - ]) - }), + get query() { + return z.object({ + get foo_ref_enum(): z.ZodMiniOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + }, + get foo_all_of_enum() { + return zModelWithNestedArrayEnumsDataFoo; + }, + cursor: z.union([ + z.string(), + z.null() + ]) + }); + }, headers: z.object({ parameterHeader: z.union([ z.string(), @@ -1354,7 +1408,9 @@ export const zCallWithWeirdParameterNamesData = z.object({ }); export const zGetCallWithOptionalParamData = z.object({ - body: zModelWithOneOfEnum, + get body() { + return zModelWithOneOfEnum; + }, path: z.optional(z.never()), query: z.optional(z.object({ page: z.optional(z.number()) @@ -1369,9 +1425,13 @@ export const zPostCallWithOptionalParamData = z.object({ ])) })), path: z.optional(z.never()), - query: z.object({ - parameter: zPageable - }) + get query() { + return z.object({ + get parameter() { + return zPageable; + } + }); + } }); export const zPostCallWithOptionalParamResponse = z.union([ @@ -1380,7 +1440,9 @@ export const zPostCallWithOptionalParamResponse = z.union([ ]); export const zPostApiVbyApiVersionRequestBodyData = z.object({ - body: z.optional(zSimpleRequestBody), + get body(): z.ZodMiniOptional { + return z.optional(zSimpleRequestBody); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1388,7 +1450,9 @@ export const zPostApiVbyApiVersionRequestBodyData = z.object({ }); export const zPostApiVbyApiVersionFormDataData = z.object({ - body: z.optional(zSimpleFormData), + get body(): z.ZodMiniOptional { + return z.optional(zSimpleFormData); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1426,17 +1490,21 @@ export const zCallWithDefaultParametersData = z.object({ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), - parameterNumber: z._default(z.optional(z.number()), 123), - parameterBoolean: z._default(z.optional(z.boolean()), true), - parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' - ])), - parameterModel: z.optional(zModelWithString) - })) + get query(): z.ZodMiniOptional { + return z.optional(z.object({ + parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterNumber: z._default(z.optional(z.number()), 123), + parameterBoolean: z._default(z.optional(z.boolean()), true), + parameterEnum: z.optional(z.enum([ + 'Success', + 'Warning', + 'Error' + ])), + get parameterModel(): z.ZodMiniOptional { + return z.optional(zModelWithString); + } + })); + } }); export const zCallToTestOrderOfParamsData = z.object({ @@ -1554,7 +1622,9 @@ export const zCallWithResponsesResponse = z.union([ z.object({ '@namespace.string': z.optional(z.readonly(z.string())), '@namespace.integer': z.optional(z.readonly(z.int())), - value: z.optional(z.readonly(z.array(zModelWithString))) + get value(): z.ZodMiniOptional { + return z.optional(z.readonly(z.array(zModelWithString))); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -1660,16 +1730,20 @@ export const zFileResponseResponse = z.string(); export const zComplexTypesData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.object({ - parameterObject: z.object({ - first: z.optional(z.object({ - second: z.optional(z.object({ - third: z.optional(z.string()) + get query() { + return z.object({ + parameterObject: z.object({ + first: z.optional(z.object({ + second: z.optional(z.object({ + third: z.optional(z.string()) + })) })) - })) - }), - parameterReference: zModelWithString - }) + }), + get parameterReference() { + return zModelWithString; + } + }); + } }); /** @@ -1784,7 +1858,9 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = z.array(zNonAsciiStringæøåÆøÅöôêÊ字符串); export const zPutWithFormUrlEncodedData = z.object({ - body: zArrayWithStrings, + get body() { + return zArrayWithStrings; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref-2/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref-2/zod.gen.ts index aed07582c..1c34c6065 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref-2/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref-2/zod.gen.ts @@ -12,5 +12,7 @@ export const zBar = z.object({ }); export const zFoo = z.object({ - foo: zBar + get foo() { + return zBar; + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref/zod.gen.ts index 2e65ce311..284707cf5 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-circular-ref/zod.gen.ts @@ -11,7 +11,9 @@ export const zBar = z.object({ }); export const zFoo = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodMiniOptional { + return z.optional(zBar); + } }); /** diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts index f5db2ce5c..d8c53371a 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts @@ -17,7 +17,9 @@ export const zBar = z.object({ export const zFoo = z._default(z.union([ z.object({ foo: z.optional(z.string().check(z.regex(/^\d{3}-\d{2}-\d{4}$/))), - bar: z.optional(zBar), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, get baz(): z.ZodMiniOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -40,7 +42,9 @@ export const zQux = z.record(z.string(), z.object({ export const zFoo2 = z.string(); export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodMiniOptional { + return z.optional(zBar); + } }); export const zPatchFooData = z.object({ @@ -48,21 +52,27 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string()), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime({ - offset: true - })) - })) + get query(): z.ZodMiniOptional { + return z.optional(z.object({ + foo: z.optional(z.string()), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime({ + offset: true + })) + })); + } }); export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts index 4b4759e2d..04fe0e9b0 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts @@ -21,7 +21,9 @@ export const zFoo = z._default(z.union([ foo: z.optional(z.string().check(z.regex(/^\d{3}-\d{2}-\d{4}$/)).register(z.globalRegistry, { description: 'This is foo property.' })), - bar: z.optional(zBar), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, get baz(): z.ZodMiniOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -50,7 +52,9 @@ export const zFoo2 = z.string().register(z.globalRegistry, { }); export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodMiniOptional { + return z.optional(zBar); + } }); export const zPatchFooData = z.object({ @@ -58,21 +62,27 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string().register(z.globalRegistry, { - description: 'This is Foo parameter.' - })), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime()) - })) + get query(): z.ZodMiniOptional { + return z.optional(z.object({ + foo: z.optional(z.string().register(z.globalRegistry, { + description: 'This is Foo parameter.' + })), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime()) + })); + } }); export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts index 1eb0cfb95..45a4f160e 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts @@ -19,7 +19,9 @@ export type BarZodType = z.infer; export const zFoo = z._default(z.union([ z.object({ foo: z.optional(z.string().check(z.regex(/^\d{3}-\d{2}-\d{4}$/))), - bar: z.optional(zBar), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, get baz(): z.ZodMiniOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -50,7 +52,9 @@ export const zFoo2 = z.string(); export type FooZodType2 = z.infer; export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodMiniOptional { + return z.optional(zBar); + } }); export type FooZodType3 = z.infer; @@ -60,21 +64,27 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string()), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime()) - })) + get query(): z.ZodMiniOptional { + return z.optional(z.object({ + foo: z.optional(z.string()), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime()) + })); + } }); export type PatchFooDataZodType = z.infer; export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts index 0ee090a1a..897ebbe14 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts @@ -17,7 +17,9 @@ export const zBar = z.object({ export const zFoo = z._default(z.union([ z.object({ foo: z.optional(z.string().check(z.regex(/^\d{3}-\d{2}-\d{4}$/))), - bar: z.optional(zBar), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, get baz(): z.ZodMiniOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -40,7 +42,9 @@ export const zQux = z.record(z.string(), z.object({ export const zFoo2 = z.string(); export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodMiniOptional { + return z.optional(zBar); + } }); export const zPatchFooData = z.object({ @@ -48,19 +52,25 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string()), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime()) - })) + get query(): z.ZodMiniOptional { + return z.optional(z.object({ + foo: z.optional(z.string()), + get bar(): z.ZodMiniOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime()) + })); + } }); export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/array-items-one-of-length-1/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/array-items-one-of-length-1/zod.gen.ts index efb23578b..3cb1a4a87 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/array-items-one-of-length-1/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/array-items-one-of-length-1/zod.gen.ts @@ -4,6 +4,8 @@ import { z } from 'zod/v3'; export const zBar = z.string(); -export const zFoo = z.object({ - foo: z.array(zBar).min(1).max(2147483647).optional() +export const zFoo: z.AnyZodObject = z.object({ + get foo() { + return z.array(zBar).min(1).max(2147483647).optional(); + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts index c4a1f074c..9da5250fa 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts @@ -177,8 +177,10 @@ export const zArrayWithArray = z.array(z.array(zModelWithString)); /** * This is a simple array with properties */ -export const zArrayWithProperties = z.array(z.object({ - '16x16': zCamelCaseCommentWithBreaks.optional(), +export const zArrayWithProperties: z.ZodTypeAny = z.array(z.object({ + get '16x16'() { + return zCamelCaseCommentWithBreaks.optional(); + }, bar: z.string().optional() })); @@ -366,7 +368,7 @@ export const zModelWithNestedEnums = z.object({ /** * This is a model with one nested property */ -export const zModelWithProperties = z.object({ +export const zModelWithProperties: z.AnyZodObject = z.object({ required: z.string(), requiredAndReadOnly: z.string().readonly(), requiredAndNullable: z.union([ @@ -376,7 +378,9 @@ export const zModelWithProperties = z.object({ string: z.string().optional(), number: z.number().optional(), boolean: z.boolean().optional(), - reference: zModelWithString.optional(), + get reference() { + return zModelWithString.optional(); + }, 'property with space': z.string().optional(), default: z.string().optional(), try: z.string().optional(), @@ -387,8 +391,10 @@ export const zModelWithProperties = z.object({ /** * This is a model with one property containing a reference */ -export const zModelWithReference = z.object({ - prop: zModelWithProperties.optional() +export const zModelWithReference: z.AnyZodObject = z.object({ + get prop() { + return zModelWithProperties.optional(); + } }); export const zModelWithReadOnlyAndWriteOnly = z.object({ @@ -399,8 +405,10 @@ export const zModelWithReadOnlyAndWriteOnly = z.object({ /** * This is a model with one property containing an array */ -export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ - prop: z.array(zModelWithReadOnlyAndWriteOnly).optional(), +export const zModelWithArrayReadOnlyAndWriteOnly: z.AnyZodObject = z.object({ + get prop() { + return z.array(zModelWithReadOnlyAndWriteOnly).optional(); + }, propWithFile: z.array(z.string()).optional(), propWithNumber: z.array(z.number()).optional() }); @@ -408,8 +416,10 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ /** * This is a model with one property containing an array */ -export const zModelWithArray = z.object({ - prop: z.array(zModelWithString).optional(), +export const zModelWithArray: z.AnyZodObject = z.object({ + get prop() { + return z.array(zModelWithString).optional(); + }, propWithFile: z.array(z.string()).optional(), propWithNumber: z.array(z.number()).optional() }); @@ -433,9 +443,11 @@ export const zDeprecatedModel = z.object({ * This is a model with one property containing a circular reference */ export const zModelWithCircularReference: z.AnyZodObject = z.object({ - prop: z.lazy(() => { - return zModelWithCircularReference; - }).optional() + get prop(): z.ZodTypeAny { + return z.lazy(() => { + return zModelWithCircularReference; + }).optional(); + } }); /** @@ -667,8 +679,10 @@ export const zModelWithNestedProperties = z.object({ /** * This is a model with duplicated properties */ -export const zModelWithDuplicateProperties = z.object({ - prop: zModelWithString.optional() +export const zModelWithDuplicateProperties: z.AnyZodObject = z.object({ + get prop() { + return zModelWithString.optional(); + } }); /** @@ -683,26 +697,36 @@ export const zModelWithOrderedProperties = z.object({ /** * This is a model with duplicated imports */ -export const zModelWithDuplicateImports = z.object({ - propA: zModelWithString.optional(), - propB: zModelWithString.optional(), - propC: zModelWithString.optional() +export const zModelWithDuplicateImports: z.AnyZodObject = z.object({ + get propA() { + return zModelWithString.optional(); + }, + get propB() { + return zModelWithString.optional(); + }, + get propC() { + return zModelWithString.optional(); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = zModelWithString.and(z.object({ +export const zModelThatExtends: z.ZodTypeAny = zModelWithString.and(z.object({ propExtendsA: z.string().optional(), - propExtendsB: zModelWithString.optional() + get propExtendsB() { + return zModelWithString.optional(); + } })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.object({ +export const zModelThatExtendsExtends: z.ZodTypeAny = zModelWithString.and(zModelThatExtends).and(z.object({ propExtendsC: z.string().optional(), - propExtendsD: zModelWithString.optional() + get propExtendsD() { + return zModelWithString.optional(); + } })); /** @@ -782,12 +806,16 @@ export const zNestedAnyOfArraysNullable = z.object({ */ export const zSimpleParameter = z.unknown(); -export const zCompositionWithOneOfAndProperties = z.intersection(z.union([ +export const zCompositionWithOneOfAndProperties: z.ZodTypeAny = z.intersection(z.union([ z.object({ - foo: zSimpleParameter + get foo() { + return zSimpleParameter; + } }), z.object({ - bar: zNonAsciiStringæøåÆøÅöôêÊ字符串 + get bar() { + return zNonAsciiStringæøåÆøÅöôêÊ字符串; + } }) ]), z.object({ baz: z.union([ @@ -812,8 +840,10 @@ export const zNullableObject = z.union([ */ export const zCharactersInDescription = z.string(); -export const zModelWithNullableObject = z.object({ - data: zNullableObject.optional() +export const zModelWithNullableObject: z.AnyZodObject = z.object({ + get data() { + return zNullableObject.optional(); + } }); export const zModelWithOneOfEnum = z.union([ @@ -859,18 +889,26 @@ export const zModelWithNestedArrayEnumsDataBar = z.enum([ 'qux' ]); -export const zModelWithNestedArrayEnumsData = z.object({ - foo: z.array(zModelWithNestedArrayEnumsDataFoo).optional(), - bar: z.array(zModelWithNestedArrayEnumsDataBar).optional() +export const zModelWithNestedArrayEnumsData: z.AnyZodObject = z.object({ + get foo() { + return z.array(zModelWithNestedArrayEnumsDataFoo).optional(); + }, + get bar() { + return z.array(zModelWithNestedArrayEnumsDataBar).optional(); + } }); -export const zModelWithNestedArrayEnums = z.object({ +export const zModelWithNestedArrayEnums: z.AnyZodObject = z.object({ array_strings: z.array(z.string()).optional(), - data: zModelWithNestedArrayEnumsData.optional() + get data() { + return zModelWithNestedArrayEnumsData.optional(); + } }); -export const zModelWithNestedCompositionEnums = z.object({ - foo: zModelWithNestedArrayEnumsDataFoo.optional() +export const zModelWithNestedCompositionEnums: z.AnyZodObject = z.object({ + get foo() { + return zModelWithNestedArrayEnumsDataFoo.optional(); + } }); export const zModelWithConstantSizeArray = z.tuple([ @@ -1021,8 +1059,10 @@ export const zIoK8sApimachineryPkgApisMetaV1Preconditions = z.object({ /** * This schema was giving PascalCase transformations a hard time */ -export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions = z.object({ - preconditions: zIoK8sApimachineryPkgApisMetaV1Preconditions.optional() +export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions: z.AnyZodObject = z.object({ + get preconditions() { + return zIoK8sApimachineryPkgApisMetaV1Preconditions.optional(); + } }); export const zAdditionalPropertiesUnknownIssue = z.record(z.union([ @@ -1076,7 +1116,7 @@ export const zOneOfAllOfIssue = z.union([ /** * This is a model with one nested property */ -export const zModelWithPropertiesWritable = z.object({ +export const zModelWithPropertiesWritable: z.AnyZodObject = z.object({ required: z.string(), requiredAndNullable: z.union([ z.string(), @@ -1085,7 +1125,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.string().optional(), number: z.number().optional(), boolean: z.boolean().optional(), - reference: zModelWithString.optional(), + get reference() { + return zModelWithString.optional(); + }, 'property with space': z.string().optional(), default: z.string().optional(), try: z.string().optional() @@ -1254,7 +1296,7 @@ export const zPutCallWithoutParametersAndResponseData = z.object({ query: z.never().optional() }); -export const zDeleteFooData3 = z.object({ +export const zDeleteFooData3: z.AnyZodObject = z.object({ body: z.never().optional(), path: z.object({ foo_param: z.string(), @@ -1262,7 +1304,9 @@ export const zDeleteFooData3 = z.object({ }), query: z.never().optional(), headers: z.object({ - 'x-Foo-Bar': zModelWithString + get 'x-Foo-Bar'() { + return zModelWithString; + } }) }); @@ -1291,7 +1335,7 @@ export const zDeprecatedCallData = z.object({ }) }); -export const zCallWithParametersData = z.object({ +export const zCallWithParametersData: z.AnyZodObject = z.object({ body: z.union([ z.record(z.unknown()), z.null() @@ -1307,8 +1351,12 @@ export const zCallWithParametersData = z.object({ ]) }), query: z.object({ - foo_ref_enum: zModelWithNestedArrayEnumsDataFoo.optional(), - foo_all_of_enum: zModelWithNestedArrayEnumsDataFoo, + get foo_ref_enum() { + return zModelWithNestedArrayEnumsDataFoo.optional(); + }, + get foo_all_of_enum() { + return zModelWithNestedArrayEnumsDataFoo; + }, cursor: z.union([ z.string(), z.null() @@ -1351,15 +1399,17 @@ export const zCallWithWeirdParameterNamesData = z.object({ }) }); -export const zGetCallWithOptionalParamData = z.object({ - body: zModelWithOneOfEnum, +export const zGetCallWithOptionalParamData: z.AnyZodObject = z.object({ + get body() { + return zModelWithOneOfEnum; + }, path: z.never().optional(), query: z.object({ page: z.number().optional() }).optional() }); -export const zPostCallWithOptionalParamData = z.object({ +export const zPostCallWithOptionalParamData: z.AnyZodObject = z.object({ body: z.object({ offset: z.union([ z.number(), @@ -1368,7 +1418,9 @@ export const zPostCallWithOptionalParamData = z.object({ }).optional(), path: z.never().optional(), query: z.object({ - parameter: zPageable + get parameter() { + return zPageable; + } }) }); @@ -1377,16 +1429,20 @@ export const zPostCallWithOptionalParamResponse = z.union([ z.void() ]); -export const zPostApiVbyApiVersionRequestBodyData = z.object({ - body: zSimpleRequestBody.optional(), +export const zPostApiVbyApiVersionRequestBodyData: z.AnyZodObject = z.object({ + get body() { + return zSimpleRequestBody.optional(); + }, path: z.never().optional(), query: z.object({ parameter: z.string().optional() }).optional() }); -export const zPostApiVbyApiVersionFormDataData = z.object({ - body: zSimpleFormData.optional(), +export const zPostApiVbyApiVersionFormDataData: z.AnyZodObject = z.object({ + get body() { + return zSimpleFormData.optional(); + }, path: z.never().optional(), query: z.object({ parameter: z.string().optional() @@ -1421,7 +1477,7 @@ export const zCallWithDefaultParametersData = z.object({ }).optional() }); -export const zCallWithDefaultOptionalParametersData = z.object({ +export const zCallWithDefaultOptionalParametersData: z.AnyZodObject = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ @@ -1433,7 +1489,9 @@ export const zCallWithDefaultOptionalParametersData = z.object({ 'Warning', 'Error' ]).optional(), - parameterModel: zModelWithString.optional() + get parameterModel() { + return zModelWithString.optional(); + } }).optional() }); @@ -1548,11 +1606,13 @@ export const zCallWithResponsesData = z.object({ query: z.never().optional() }); -export const zCallWithResponsesResponse = z.union([ +export const zCallWithResponsesResponse: z.ZodTypeAny = z.union([ z.object({ '@namespace.string': z.string().readonly().optional(), '@namespace.integer': z.number().int().readonly().optional(), - value: z.array(zModelWithString).readonly().optional() + get value() { + return z.array(zModelWithString).readonly().optional(); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -1655,7 +1715,7 @@ export const zFileResponseData = z.object({ */ export const zFileResponseResponse = z.string(); -export const zComplexTypesData = z.object({ +export const zComplexTypesData: z.AnyZodObject = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ @@ -1666,7 +1726,9 @@ export const zComplexTypesData = z.object({ }).optional() }).optional() }), - parameterReference: zModelWithString + get parameterReference() { + return zModelWithString; + } }) }); @@ -1781,8 +1843,10 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ */ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = z.array(zNonAsciiStringæøåÆøÅöôêÊ字符串); -export const zPutWithFormUrlEncodedData = z.object({ - body: zArrayWithStrings, +export const zPutWithFormUrlEncodedData: z.AnyZodObject = z.object({ + get body() { + return zArrayWithStrings; + }, path: z.never().optional(), query: z.never().optional() }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref-2/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref-2/zod.gen.ts index 15bdeb3e2..a86616f38 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref-2/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref-2/zod.gen.ts @@ -11,6 +11,8 @@ export const zBar: z.AnyZodObject = z.object({ ]) }); -export const zFoo = z.object({ - foo: zBar +export const zFoo: z.AnyZodObject = z.object({ + get foo() { + return zBar; + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref/zod.gen.ts index 7e6cc3c89..f3ebe4419 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-circular-ref/zod.gen.ts @@ -3,13 +3,17 @@ import { z } from 'zod/v3'; export const zBar: z.AnyZodObject = z.object({ - bar: z.array(z.lazy(() => { - return zBar; - })).optional() + get bar(): z.ZodTypeAny { + return z.array(z.lazy(() => { + return zBar; + })).optional(); + } }); -export const zFoo = z.object({ - foo: zBar.optional() +export const zFoo: z.AnyZodObject = z.object({ + get foo() { + return zBar.optional(); + } }); /** diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts index 140dc5e8c..490bac7a9 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts @@ -6,9 +6,11 @@ import { z } from 'zod/v3'; * This is Bar schema. */ export const zBar: z.AnyZodObject = z.object({ - foo: z.lazy(() => { - return zFoo; - }).optional() + get foo(): z.ZodTypeAny { + return z.lazy(() => { + return zFoo; + }).optional(); + } }); /** @@ -17,10 +19,14 @@ export const zBar: z.AnyZodObject = z.object({ export const zFoo: z.ZodTypeAny = z.union([ z.object({ foo: z.string().regex(/^\d{3}-\d{2}-\d{4}$/).optional(), - bar: zBar.optional(), - baz: z.array(z.lazy(() => { - return zFoo; - })).optional(), + get bar() { + return zBar.optional(); + }, + get baz(): z.ZodTypeAny { + return z.array(z.lazy(() => { + return zFoo; + })).optional(); + }, qux: z.number().int().gt(0).optional().default(0) }), z.null() @@ -37,18 +43,22 @@ export const zQux = z.record(z.object({ */ export const zFoo2 = z.string(); -export const zFoo3 = z.object({ - foo: zBar.optional() +export const zFoo3: z.AnyZodObject = z.object({ + get foo() { + return zBar.optional(); + } }); -export const zPatchFooData = z.object({ +export const zPatchFooData: z.AnyZodObject = z.object({ body: z.object({ foo: z.string().optional() }), path: z.never().optional(), query: z.object({ foo: z.string().optional(), - bar: zBar.optional(), + get bar() { + return zBar.optional(); + }, baz: z.object({ baz: z.string().optional() }).optional(), @@ -59,8 +69,10 @@ export const zPatchFooData = z.object({ }).optional() }); -export const zPostFooData = z.object({ - body: zFoo3, +export const zPostFooData: z.AnyZodObject = z.object({ + get body() { + return zFoo3; + }, path: z.never().optional(), query: z.never().optional() }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts index efc9209a2..3b4a64014 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts @@ -6,9 +6,11 @@ import { z } from 'zod/v3'; * This is Bar schema. */ export const zBar: z.AnyZodObject = z.object({ - foo: z.lazy(() => { - return zFoo; - }).optional() + get foo(): z.ZodTypeAny { + return z.lazy(() => { + return zFoo; + }).optional(); + } }).describe('This is Bar schema.'); /** @@ -17,10 +19,14 @@ export const zBar: z.AnyZodObject = z.object({ export const zFoo: z.ZodTypeAny = z.union([ z.object({ foo: z.string().regex(/^\d{3}-\d{2}-\d{4}$/).describe('This is foo property.').optional(), - bar: zBar.optional(), - baz: z.array(z.lazy(() => { - return zFoo; - })).describe('This is baz property.').optional(), + get bar() { + return zBar.optional(); + }, + get baz(): z.ZodTypeAny { + return z.array(z.lazy(() => { + return zFoo; + })).describe('This is baz property.').optional(); + }, qux: z.number().int().gt(0).describe('This is qux property.').optional().default(0) }), z.null() @@ -37,18 +43,22 @@ export const zQux = z.record(z.object({ */ export const zFoo2 = z.string().describe('This is Foo parameter.'); -export const zFoo3 = z.object({ - foo: zBar.optional() +export const zFoo3: z.AnyZodObject = z.object({ + get foo() { + return zBar.optional(); + } }); -export const zPatchFooData = z.object({ +export const zPatchFooData: z.AnyZodObject = z.object({ body: z.object({ foo: z.string().optional() }), path: z.never().optional(), query: z.object({ foo: z.string().describe('This is Foo parameter.').optional(), - bar: zBar.optional(), + get bar() { + return zBar.optional(); + }, baz: z.object({ baz: z.string().optional() }).optional(), @@ -57,8 +67,10 @@ export const zPatchFooData = z.object({ }).optional() }); -export const zPostFooData = z.object({ - body: zFoo3, +export const zPostFooData: z.AnyZodObject = z.object({ + get body() { + return zFoo3; + }, path: z.never().optional(), query: z.never().optional() }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts index 399d2c413..a0a5904d2 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts @@ -6,9 +6,11 @@ import { z } from 'zod/v3'; * This is Bar schema. */ export const zBar: z.AnyZodObject = z.object({ - foo: z.lazy(() => { - return zFoo; - }).optional() + get foo(): z.ZodTypeAny { + return z.lazy(() => { + return zFoo; + }).optional(); + } }); export type BarZodType = z.infer; @@ -19,10 +21,14 @@ export type BarZodType = z.infer; export const zFoo: z.ZodTypeAny = z.union([ z.object({ foo: z.string().regex(/^\d{3}-\d{2}-\d{4}$/).optional(), - bar: zBar.optional(), - baz: z.array(z.lazy(() => { - return zFoo; - })).optional(), + get bar() { + return zBar.optional(); + }, + get baz(): z.ZodTypeAny { + return z.array(z.lazy(() => { + return zFoo; + })).optional(); + }, qux: z.number().int().gt(0).optional().default(0) }), z.null() @@ -47,20 +53,24 @@ export const zFoo2 = z.string(); export type FooZodType2 = z.infer; -export const zFoo3 = z.object({ - foo: zBar.optional() +export const zFoo3: z.AnyZodObject = z.object({ + get foo() { + return zBar.optional(); + } }); export type FooZodType3 = z.infer; -export const zPatchFooData = z.object({ +export const zPatchFooData: z.AnyZodObject = z.object({ body: z.object({ foo: z.string().optional() }), path: z.never().optional(), query: z.object({ foo: z.string().optional(), - bar: zBar.optional(), + get bar() { + return zBar.optional(); + }, baz: z.object({ baz: z.string().optional() }).optional(), @@ -71,8 +81,10 @@ export const zPatchFooData = z.object({ export type PatchFooDataZodType = z.infer; -export const zPostFooData = z.object({ - body: zFoo3, +export const zPostFooData: z.AnyZodObject = z.object({ + get body() { + return zFoo3; + }, path: z.never().optional(), query: z.never().optional() }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts index fcc9c8c55..d4dc399a2 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts @@ -6,9 +6,11 @@ import { z } from 'zod/v3'; * This is Bar schema. */ export const zBar: z.AnyZodObject = z.object({ - foo: z.lazy(() => { - return zFoo; - }).optional() + get foo(): z.ZodTypeAny { + return z.lazy(() => { + return zFoo; + }).optional(); + } }); /** @@ -17,10 +19,14 @@ export const zBar: z.AnyZodObject = z.object({ export const zFoo: z.ZodTypeAny = z.union([ z.object({ foo: z.string().regex(/^\d{3}-\d{2}-\d{4}$/).optional(), - bar: zBar.optional(), - baz: z.array(z.lazy(() => { - return zFoo; - })).optional(), + get bar() { + return zBar.optional(); + }, + get baz(): z.ZodTypeAny { + return z.array(z.lazy(() => { + return zFoo; + })).optional(); + }, qux: z.number().int().gt(0).optional().default(0) }), z.null() @@ -37,18 +43,22 @@ export const zQux = z.record(z.object({ */ export const zFoo2 = z.string(); -export const zFoo3 = z.object({ - foo: zBar.optional() +export const zFoo3: z.AnyZodObject = z.object({ + get foo() { + return zBar.optional(); + } }); -export const zPatchFooData = z.object({ +export const zPatchFooData: z.AnyZodObject = z.object({ body: z.object({ foo: z.string().optional() }), path: z.never().optional(), query: z.object({ foo: z.string().optional(), - bar: zBar.optional(), + get bar() { + return zBar.optional(); + }, baz: z.object({ baz: z.string().optional() }).optional(), @@ -57,8 +67,10 @@ export const zPatchFooData = z.object({ }).optional() }); -export const zPostFooData = z.object({ - body: zFoo3, +export const zPostFooData: z.AnyZodObject = z.object({ + get body() { + return zFoo3; + }, path: z.never().optional(), query: z.never().optional() }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/array-items-one-of-length-1/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/array-items-one-of-length-1/zod.gen.ts index df10c1422..9ca55fde2 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/array-items-one-of-length-1/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/array-items-one-of-length-1/zod.gen.ts @@ -5,5 +5,7 @@ import { z } from 'zod'; export const zBar = z.string(); export const zFoo = z.object({ - foo: z.optional(z.array(zBar).min(1).max(2147483647)) + get foo(): z.ZodOptional { + return z.optional(z.array(zBar).min(1).max(2147483647)); + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts index b74816cd8..3439db237 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts @@ -178,7 +178,9 @@ export const zArrayWithArray = z.array(z.array(zModelWithString)); * This is a simple array with properties */ export const zArrayWithProperties = z.array(z.object({ - '16x16': z.optional(zCamelCaseCommentWithBreaks), + get '16x16'(): z.ZodOptional { + return z.optional(zCamelCaseCommentWithBreaks); + }, bar: z.optional(z.string()) })); @@ -376,7 +378,9 @@ export const zModelWithProperties = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()), @@ -388,7 +392,9 @@ export const zModelWithProperties = z.object({ * This is a model with one property containing a reference */ export const zModelWithReference = z.object({ - prop: z.optional(zModelWithProperties) + get prop(): z.ZodOptional { + return z.optional(zModelWithProperties); + } }); export const zModelWithReadOnlyAndWriteOnly = z.object({ @@ -400,7 +406,9 @@ export const zModelWithReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ - prop: z.optional(z.array(zModelWithReadOnlyAndWriteOnly)), + get prop(): z.ZodOptional { + return z.optional(z.array(zModelWithReadOnlyAndWriteOnly)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -409,7 +417,9 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ * This is a model with one property containing an array */ export const zModelWithArray = z.object({ - prop: z.optional(z.array(zModelWithString)), + get prop(): z.ZodOptional { + return z.optional(z.array(zModelWithString)); + }, propWithFile: z.optional(z.array(z.string())), propWithNumber: z.optional(z.array(z.number())) }); @@ -670,7 +680,9 @@ export const zModelWithNestedProperties = z.object({ * This is a model with duplicated properties */ export const zModelWithDuplicateProperties = z.object({ - prop: z.optional(zModelWithString) + get prop(): z.ZodOptional { + return z.optional(zModelWithString); + } }); /** @@ -686,25 +698,39 @@ export const zModelWithOrderedProperties = z.object({ * This is a model with duplicated imports */ export const zModelWithDuplicateImports = z.object({ - propA: z.optional(zModelWithString), - propB: z.optional(zModelWithString), - propC: z.optional(zModelWithString) + get propA(): z.ZodOptional { + return z.optional(zModelWithString); + }, + get propB(): z.ZodOptional { + return z.optional(zModelWithString); + }, + get propC(): z.ZodOptional { + return z.optional(zModelWithString); + } }); /** * This is a model that extends another model */ -export const zModelThatExtends = zModelWithString.and(z.object({ - propExtendsA: z.optional(z.string()), - propExtendsB: z.optional(zModelWithString) +export const zModelThatExtends = zModelWithString.and(z.lazy(() => { + return z.object({ + propExtendsA: z.optional(z.string()), + get propExtendsB(): z.ZodOptional { + return z.optional(zModelWithString); + } + }); })); /** * This is a model that extends another model */ -export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.object({ - propExtendsC: z.optional(z.string()), - propExtendsD: z.optional(zModelWithString) +export const zModelThatExtendsExtends = zModelWithString.and(zModelThatExtends).and(z.lazy(() => { + return z.object({ + propExtendsC: z.optional(z.string()), + get propExtendsD(): z.ZodOptional { + return z.optional(zModelWithString); + } + }); })); /** @@ -786,10 +812,14 @@ export const zSimpleParameter = z.string(); export const zCompositionWithOneOfAndProperties = z.intersection(z.union([ z.object({ - foo: zSimpleParameter + get foo() { + return zSimpleParameter; + } }), z.object({ - bar: zNonAsciiStringæøåÆøÅöôêÊ字符串 + get bar() { + return zNonAsciiStringæøåÆøÅöôêÊ字符串; + } }) ]), z.object({ baz: z.union([ @@ -815,7 +845,9 @@ export const zNullableObject = z.union([ export const zCharactersInDescription = z.string(); export const zModelWithNullableObject = z.object({ - data: z.optional(zNullableObject) + get data(): z.ZodOptional { + return z.optional(zNullableObject); + } }); export const zModelWithOneOfEnum = z.union([ @@ -862,17 +894,25 @@ export const zModelWithNestedArrayEnumsDataBar = z.enum([ ]); export const zModelWithNestedArrayEnumsData = z.object({ - foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), - bar: z.optional(z.array(zModelWithNestedArrayEnumsDataBar)) + get foo(): z.ZodOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)); + }, + get bar(): z.ZodOptional { + return z.optional(z.array(zModelWithNestedArrayEnumsDataBar)); + } }); export const zModelWithNestedArrayEnums = z.object({ array_strings: z.optional(z.array(z.string())), - data: z.optional(zModelWithNestedArrayEnumsData) + get data(): z.ZodOptional { + return z.optional(zModelWithNestedArrayEnumsData); + } }); export const zModelWithNestedCompositionEnums = z.object({ - foo: z.optional(zModelWithNestedArrayEnumsDataFoo) + get foo(): z.ZodOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + } }); export const zModelWithConstantSizeArray = z.tuple([ @@ -1024,7 +1064,9 @@ export const zIoK8sApimachineryPkgApisMetaV1Preconditions = z.object({ * This schema was giving PascalCase transformations a hard time */ export const zIoK8sApimachineryPkgApisMetaV1DeleteOptions = z.object({ - preconditions: z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions) + get preconditions(): z.ZodOptional { + return z.optional(zIoK8sApimachineryPkgApisMetaV1Preconditions); + } }); export const zAdditionalPropertiesUnknownIssue = z.record(z.string(), z.union([ @@ -1087,7 +1129,9 @@ export const zModelWithPropertiesWritable = z.object({ string: z.optional(z.string()), number: z.optional(z.number()), boolean: z.optional(z.boolean()), - reference: z.optional(zModelWithString), + get reference(): z.ZodOptional { + return z.optional(zModelWithString); + }, 'property with space': z.optional(z.string()), default: z.optional(z.string()), try: z.optional(z.string()) @@ -1263,9 +1307,13 @@ export const zDeleteFooData3 = z.object({ BarParam: z.string() }), query: z.optional(z.never()), - headers: z.object({ - 'x-Foo-Bar': zModelWithString - }) + get headers() { + return z.object({ + get 'x-Foo-Bar'() { + return zModelWithString; + } + }); + } }); export const zCallWithDescriptionsData = z.object({ @@ -1308,14 +1356,20 @@ export const zCallWithParametersData = z.object({ z.null() ]) }), - query: z.object({ - foo_ref_enum: z.optional(zModelWithNestedArrayEnumsDataFoo), - foo_all_of_enum: zModelWithNestedArrayEnumsDataFoo, - cursor: z.union([ - z.string(), - z.null() - ]) - }), + get query() { + return z.object({ + get foo_ref_enum(): z.ZodOptional { + return z.optional(zModelWithNestedArrayEnumsDataFoo); + }, + get foo_all_of_enum() { + return zModelWithNestedArrayEnumsDataFoo; + }, + cursor: z.union([ + z.string(), + z.null() + ]) + }); + }, headers: z.object({ parameterHeader: z.union([ z.string(), @@ -1354,7 +1408,9 @@ export const zCallWithWeirdParameterNamesData = z.object({ }); export const zGetCallWithOptionalParamData = z.object({ - body: zModelWithOneOfEnum, + get body() { + return zModelWithOneOfEnum; + }, path: z.optional(z.never()), query: z.optional(z.object({ page: z.optional(z.number()) @@ -1369,9 +1425,13 @@ export const zPostCallWithOptionalParamData = z.object({ ])) })), path: z.optional(z.never()), - query: z.object({ - parameter: zPageable - }) + get query() { + return z.object({ + get parameter() { + return zPageable; + } + }); + } }); export const zPostCallWithOptionalParamResponse = z.union([ @@ -1380,7 +1440,9 @@ export const zPostCallWithOptionalParamResponse = z.union([ ]); export const zPostApiVbyApiVersionRequestBodyData = z.object({ - body: z.optional(zSimpleRequestBody), + get body(): z.ZodOptional { + return z.optional(zSimpleRequestBody); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1388,7 +1450,9 @@ export const zPostApiVbyApiVersionRequestBodyData = z.object({ }); export const zPostApiVbyApiVersionFormDataData = z.object({ - body: z.optional(zSimpleFormData), + get body(): z.ZodOptional { + return z.optional(zSimpleFormData); + }, path: z.optional(z.never()), query: z.optional(z.object({ parameter: z.optional(z.string()) @@ -1426,17 +1490,21 @@ export const zCallWithDefaultParametersData = z.object({ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), - parameterNumber: z.optional(z.number()).default(123), - parameterBoolean: z.optional(z.boolean()).default(true), - parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' - ])), - parameterModel: z.optional(zModelWithString) - })) + get query(): z.ZodOptional { + return z.optional(z.object({ + parameterString: z.optional(z.string()).default('Hello World!'), + parameterNumber: z.optional(z.number()).default(123), + parameterBoolean: z.optional(z.boolean()).default(true), + parameterEnum: z.optional(z.enum([ + 'Success', + 'Warning', + 'Error' + ])), + get parameterModel(): z.ZodOptional { + return z.optional(zModelWithString); + } + })); + } }); export const zCallToTestOrderOfParamsData = z.object({ @@ -1554,7 +1622,9 @@ export const zCallWithResponsesResponse = z.union([ z.object({ '@namespace.string': z.optional(z.string().readonly()), '@namespace.integer': z.optional(z.int().readonly()), - value: z.optional(z.array(zModelWithString).readonly()) + get value(): z.ZodOptional { + return z.optional(z.array(zModelWithString).readonly()); + } }), zModelThatExtends, zModelThatExtendsExtends @@ -1660,16 +1730,20 @@ export const zFileResponseResponse = z.string(); export const zComplexTypesData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), - query: z.object({ - parameterObject: z.object({ - first: z.optional(z.object({ - second: z.optional(z.object({ - third: z.optional(z.string()) + get query() { + return z.object({ + parameterObject: z.object({ + first: z.optional(z.object({ + second: z.optional(z.object({ + third: z.optional(z.string()) + })) })) - })) - }), - parameterReference: zModelWithString - }) + }), + get parameterReference() { + return zModelWithString; + } + }); + } }); /** @@ -1784,7 +1858,9 @@ export const zNonAsciiæøåÆøÅöôêÊ字符串Data = z.object({ export const zNonAsciiæøåÆøÅöôêÊ字符串Response = z.array(zNonAsciiStringæøåÆøÅöôêÊ字符串); export const zPutWithFormUrlEncodedData = z.object({ - body: zArrayWithStrings, + get body() { + return zArrayWithStrings; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref-2/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref-2/zod.gen.ts index f63841106..1ec91f6c5 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref-2/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref-2/zod.gen.ts @@ -12,5 +12,7 @@ export const zBar = z.object({ }); export const zFoo = z.object({ - foo: zBar + get foo() { + return zBar; + } }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref/zod.gen.ts index 1fa3416dd..8716a69ee 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-circular-ref/zod.gen.ts @@ -11,7 +11,9 @@ export const zBar = z.object({ }); export const zFoo = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodOptional { + return z.optional(zBar); + } }); /** diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts index 9b0132631..4290cd00d 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts @@ -17,7 +17,9 @@ export const zBar = z.object({ export const zFoo = z.union([ z.object({ foo: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)), - bar: z.optional(zBar), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, get baz(): z.ZodOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -40,7 +42,9 @@ export const zQux = z.record(z.string(), z.object({ export const zFoo2 = z.string(); export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodOptional { + return z.optional(zBar); + } }); export const zPatchFooData = z.object({ @@ -48,21 +52,27 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string()), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime({ - offset: true - })) - })) + get query(): z.ZodOptional { + return z.optional(z.object({ + foo: z.optional(z.string()), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime({ + offset: true + })) + })); + } }); export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts index 34e6fe096..10c1d5b4b 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts @@ -21,7 +21,9 @@ export const zFoo = z.union([ foo: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/).register(z.globalRegistry, { description: 'This is foo property.' })), - bar: z.optional(zBar), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, get baz(): z.ZodOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -50,7 +52,9 @@ export const zFoo2 = z.string().register(z.globalRegistry, { }); export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodOptional { + return z.optional(zBar); + } }); export const zPatchFooData = z.object({ @@ -58,21 +62,27 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string().register(z.globalRegistry, { - description: 'This is Foo parameter.' - })), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime()) - })) + get query(): z.ZodOptional { + return z.optional(z.object({ + foo: z.optional(z.string().register(z.globalRegistry, { + description: 'This is Foo parameter.' + })), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime()) + })); + } }); export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts index 649cd0534..a47cddff1 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts @@ -19,7 +19,9 @@ export type BarZodType = z.infer; export const zFoo = z.union([ z.object({ foo: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)), - bar: z.optional(zBar), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, get baz(): z.ZodOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -50,7 +52,9 @@ export const zFoo2 = z.string(); export type FooZodType2 = z.infer; export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodOptional { + return z.optional(zBar); + } }); export type FooZodType3 = z.infer; @@ -60,21 +64,27 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string()), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime()) - })) + get query(): z.ZodOptional { + return z.optional(z.object({ + foo: z.optional(z.string()), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime()) + })); + } }); export type PatchFooDataZodType = z.infer; export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts index 921e41c46..cdf1d55be 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts @@ -17,7 +17,9 @@ export const zBar = z.object({ export const zFoo = z.union([ z.object({ foo: z.optional(z.string().regex(/^\d{3}-\d{2}-\d{4}$/)), - bar: z.optional(zBar), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, get baz(): z.ZodOptional { return z.optional(z.array(z.lazy((): any => { return zFoo; @@ -40,7 +42,9 @@ export const zQux = z.record(z.string(), z.object({ export const zFoo2 = z.string(); export const zFoo3 = z.object({ - foo: z.optional(zBar) + get foo(): z.ZodOptional { + return z.optional(zBar); + } }); export const zPatchFooData = z.object({ @@ -48,19 +52,25 @@ export const zPatchFooData = z.object({ foo: z.optional(z.string()) }), path: z.optional(z.never()), - query: z.optional(z.object({ - foo: z.optional(z.string()), - bar: z.optional(zBar), - baz: z.optional(z.object({ - baz: z.optional(z.string()) - })), - qux: z.optional(z.iso.date()), - quux: z.optional(z.iso.datetime()) - })) + get query(): z.ZodOptional { + return z.optional(z.object({ + foo: z.optional(z.string()), + get bar(): z.ZodOptional { + return z.optional(zBar); + }, + baz: z.optional(z.object({ + baz: z.optional(z.string()) + })), + qux: z.optional(z.iso.date()), + quux: z.optional(z.iso.datetime()) + })); + } }); export const zPostFooData = z.object({ - body: zFoo3, + get body() { + return zFoo3; + }, path: z.optional(z.never()), query: z.optional(z.never()) }); diff --git a/packages/openapi-ts/src/plugins/zod/mini/plugin.ts b/packages/openapi-ts/src/plugins/zod/mini/plugin.ts index 1fdb02e02..0c374c322 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/plugin.ts @@ -978,26 +978,24 @@ const schemaToZodSchema = ({ symbol = plugin.referenceSymbol(selector); } - if (isSelfReference) { - zodSchema.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: zSymbol.placeholder, - name: identifiers.lazy, + // Always wrap circular references in z.lazy() to avoid + // "Block-scoped variable used before its declaration" errors + zodSchema.expression = tsc.callExpression({ + functionName: tsc.propertyAccessExpression({ + expression: zSymbol.placeholder, + name: identifiers.lazy, + }), + parameters: [ + tsc.arrowFunction({ + returnType: tsc.keywordTypeNode({ keyword: 'any' }), + statements: [ + tsc.returnStatement({ + expression: tsc.identifier({ text: symbol.placeholder }), + }), + ], }), - parameters: [ - tsc.arrowFunction({ - returnType: tsc.keywordTypeNode({ keyword: 'any' }), - statements: [ - tsc.returnStatement({ - expression: tsc.identifier({ text: symbol.placeholder }), - }), - ], - }), - ], - }); - } else { - zodSchema.expression = tsc.identifier({ text: symbol.placeholder }); - } + ], + }); zodSchema.hasCircularReference = schema.circular; } else { if (!symbol) { diff --git a/packages/openapi-ts/src/plugins/zod/v3/plugin.ts b/packages/openapi-ts/src/plugins/zod/v3/plugin.ts index 1562be1db..20695f267 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/plugin.ts @@ -400,7 +400,7 @@ const objectTypeToZodSchema = ({ let hasCircularReference = false; // TODO: parser - handle constants - const properties: Array = []; + const properties: Array = []; const required = schema.required ?? []; @@ -438,12 +438,34 @@ const objectTypeToZodSchema = ({ ) { propertyName = `'${name}'`; } - properties.push( - tsc.propertyAssignment({ - initializer: propertyExpression.expression, - name: propertyName, - }), - ); + + // Use getter for properties with circular references to avoid "used before declaration" errors + if (propertyExpression.hasCircularReference) { + properties.push( + tsc.getAccessorDeclaration({ + name: propertyName, + // @ts-expect-error + returnType: propertyExpression.typeName + ? tsc.propertyAccessExpression({ + expression: zSymbol.placeholder, + name: propertyExpression.typeName, + }) + : undefined, + statements: [ + tsc.returnStatement({ + expression: propertyExpression.expression, + }), + ], + }), + ); + } else { + properties.push( + tsc.propertyAssignment({ + initializer: propertyExpression.expression, + name: propertyName, + }), + ); + } } if ( @@ -897,6 +919,8 @@ const schemaToZodSchema = ({ symbol = plugin.referenceSymbol(selector); } + // Always wrap circular references in z.lazy() to avoid + // "Block-scoped variable used before its declaration" errors zodSchema.expression = tsc.callExpression({ functionName: tsc.propertyAccessExpression({ expression: zSymbol.placeholder, diff --git a/packages/openapi-ts/src/plugins/zod/v4/plugin.ts b/packages/openapi-ts/src/plugins/zod/v4/plugin.ts index e6c89a417..3c26d25cb 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/plugin.ts @@ -937,26 +937,24 @@ const schemaToZodSchema = ({ symbol = plugin.referenceSymbol(selector); } - if (isSelfReference) { - zodSchema.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: zSymbol.placeholder, - name: identifiers.lazy, + // Always wrap circular references in z.lazy() to avoid + // "Block-scoped variable used before its declaration" errors + zodSchema.expression = tsc.callExpression({ + functionName: tsc.propertyAccessExpression({ + expression: zSymbol.placeholder, + name: identifiers.lazy, + }), + parameters: [ + tsc.arrowFunction({ + returnType: tsc.keywordTypeNode({ keyword: 'any' }), + statements: [ + tsc.returnStatement({ + expression: tsc.identifier({ text: symbol.placeholder }), + }), + ], }), - parameters: [ - tsc.arrowFunction({ - returnType: tsc.keywordTypeNode({ keyword: 'any' }), - statements: [ - tsc.returnStatement({ - expression: tsc.identifier({ text: symbol.placeholder }), - }), - ], - }), - ], - }); - } else { - zodSchema.expression = tsc.identifier({ text: symbol.placeholder }); - } + ], + }); zodSchema.hasCircularReference = schema.circular; } else { if (!symbol) {