Skip to content

Commit 9556d52

Browse files
committed
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
1 parent 6eefbf6 commit 9556d52

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
packages/openapi-ts/README.md
1+
packages/openapi-ts/README.md

packages/openapi-ts/src/plugins/zod/mini/plugin.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,7 @@ const objectTypeToZodSchema = ({
469469

470470
if (
471471
schema.additionalProperties &&
472-
schema.additionalProperties.type === 'object' &&
473-
!Object.keys(properties).length
472+
(!schema.properties || !Object.keys(schema.properties).length)
474473
) {
475474
const zodSchema = schemaToZodSchema({
476475
plugin,

packages/openapi-ts/src/plugins/zod/v3/plugin.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,7 @@ const objectTypeToZodSchema = ({
391391

392392
if (
393393
schema.additionalProperties &&
394-
schema.additionalProperties.type === 'object' &&
395-
!Object.keys(properties).length
394+
(!schema.properties || !Object.keys(schema.properties).length)
396395
) {
397396
const zodSchema = schemaToZodSchema({
398397
plugin,

packages/openapi-ts/src/plugins/zod/v4/plugin.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,8 +431,7 @@ const objectTypeToZodSchema = ({
431431

432432
if (
433433
schema.additionalProperties &&
434-
schema.additionalProperties.type === 'object' &&
435-
!Object.keys(properties).length
434+
(!schema.properties || !Object.keys(schema.properties).length)
436435
) {
437436
const zodSchema = schemaToZodSchema({
438437
plugin,
@@ -458,6 +457,15 @@ const objectTypeToZodSchema = ({
458457
if (zodSchema.hasCircularReference) {
459458
result.hasCircularReference = true;
460459
}
460+
461+
// Return with typeName for circular references
462+
if (result.hasCircularReference) {
463+
return {
464+
...result,
465+
typeName: 'ZodType',
466+
} as ZodSchema;
467+
}
468+
461469
return result as Omit<ZodSchema, 'typeName'>;
462470
}
463471

@@ -469,6 +477,14 @@ const objectTypeToZodSchema = ({
469477
parameters: [ts.factory.createObjectLiteralExpression(properties, true)],
470478
});
471479

480+
// Return with typeName for circular references (AnyZodObject doesn't exist in Zod v4, use ZodType)
481+
if (result.hasCircularReference) {
482+
return {
483+
...result,
484+
typeName: 'ZodType',
485+
} as ZodSchema;
486+
}
487+
472488
return result as Omit<ZodSchema, 'typeName'>;
473489
};
474490

0 commit comments

Comments
 (0)