From 9556d52f91a5abb680e74534534f92dfb0e6e542 Mon Sep 17 00:00:00 2001 From: MaxwellAt Date: Tue, 5 Aug 2025 21:01:16 -0300 Subject: [PATCH] fix: correct additionalProperties condition in all Zod plugin versions - Changed from Object.keys(properties) to Object.keys(schema.properties) - Added ZodType for circular references in v4 plugin - Removed type === 'object' restriction for additionalProperties - Applied consistent fixes across v3, v4, and mini plugin versions --- README.md | 2 +- .../openapi-ts/src/plugins/zod/mini/plugin.ts | 3 +-- .../openapi-ts/src/plugins/zod/v3/plugin.ts | 3 +-- .../openapi-ts/src/plugins/zod/v4/plugin.ts | 20 +++++++++++++++++-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f5c4d7a3c..6b53016ec 120000 --- a/README.md +++ b/README.md @@ -1 +1 @@ -packages/openapi-ts/README.md \ No newline at end of file +packages/openapi-ts/README.md diff --git a/packages/openapi-ts/src/plugins/zod/mini/plugin.ts b/packages/openapi-ts/src/plugins/zod/mini/plugin.ts index 4a8da7cef..bc6549dde 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/plugin.ts @@ -469,8 +469,7 @@ const objectTypeToZodSchema = ({ if ( schema.additionalProperties && - schema.additionalProperties.type === 'object' && - !Object.keys(properties).length + (!schema.properties || !Object.keys(schema.properties).length) ) { const zodSchema = schemaToZodSchema({ plugin, diff --git a/packages/openapi-ts/src/plugins/zod/v3/plugin.ts b/packages/openapi-ts/src/plugins/zod/v3/plugin.ts index a370c991a..fcd2412d3 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/plugin.ts @@ -391,8 +391,7 @@ const objectTypeToZodSchema = ({ if ( schema.additionalProperties && - schema.additionalProperties.type === 'object' && - !Object.keys(properties).length + (!schema.properties || !Object.keys(schema.properties).length) ) { const zodSchema = schemaToZodSchema({ plugin, diff --git a/packages/openapi-ts/src/plugins/zod/v4/plugin.ts b/packages/openapi-ts/src/plugins/zod/v4/plugin.ts index 305c9ea9e..4114a2480 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/plugin.ts @@ -431,8 +431,7 @@ const objectTypeToZodSchema = ({ if ( schema.additionalProperties && - schema.additionalProperties.type === 'object' && - !Object.keys(properties).length + (!schema.properties || !Object.keys(schema.properties).length) ) { const zodSchema = schemaToZodSchema({ plugin, @@ -458,6 +457,15 @@ const objectTypeToZodSchema = ({ if (zodSchema.hasCircularReference) { result.hasCircularReference = true; } + + // Return with typeName for circular references + if (result.hasCircularReference) { + return { + ...result, + typeName: 'ZodType', + } as ZodSchema; + } + return result as Omit; } @@ -469,6 +477,14 @@ const objectTypeToZodSchema = ({ parameters: [ts.factory.createObjectLiteralExpression(properties, true)], }); + // Return with typeName for circular references (AnyZodObject doesn't exist in Zod v4, use ZodType) + if (result.hasCircularReference) { + return { + ...result, + typeName: 'ZodType', + } as ZodSchema; + } + return result as Omit; }; -- 2.51.2