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; };