From 349a6c5bf08945ce3e82077d3a5cfead45a9bbc9 Mon Sep 17 00:00:00 2001 From: Aaron Shafovaloff Date: Tue, 22 Jul 2025 16:23:05 -0600 Subject: [PATCH] fix(zod): add explicit type annotations to enum schemas for isolatedDeclarations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change adds explicit z.ZodEnum type annotations to all generated enum schemas to make them compatible with TypeScript's isolatedDeclarations compiler option. - For regular enums: Added z.ZodEnum annotation - For enumsAsTypes: Added z.ZodEnum<{ VALUE: "VALUE"; ... }> annotation Fixes #1187 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/zod/index.ts | 4 ++-- tests/zod.spec.ts | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/zod/index.ts b/src/zod/index.ts index fc77e16d..281f290c 100644 --- a/src/zod/index.ts +++ b/src/zod/index.ts @@ -192,13 +192,13 @@ export class ZodSchemaVisitor extends BaseSchemaVisitor { ? new DeclarationBlock({}) .export() .asKind('const') - .withName(`${enumname}Schema`) + .withName(`${enumname}Schema: z.ZodEnum<{ ${node.values?.map(enumOption => `${enumOption.name.value}: "${enumOption.name.value}"`).join('; ')} }>`) .withContent(`z.enum([${node.values?.map(enumOption => `'${enumOption.name.value}'`).join(', ')}])`) .string : new DeclarationBlock({}) .export() .asKind('const') - .withName(`${enumname}Schema`) + .withName(`${enumname}Schema: z.ZodEnum`) .withContent(`z.nativeEnum(${enumTypeName})`) .string, ); diff --git a/tests/zod.spec.ts b/tests/zod.spec.ts index b025ae04..80d5ef1f 100644 --- a/tests/zod.spec.ts +++ b/tests/zod.spec.ts @@ -227,7 +227,7 @@ describe('zod', () => { const result = await plugin(schema, [], { schema: 'zod', scalars }, {}); expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const PageTypeSchema = z.nativeEnum(PageType); + export const PageTypeSchema: z.ZodEnum = z.nativeEnum(PageType); export function PageInputSchema(): z.ZodObject> { return z.object({ @@ -252,7 +252,7 @@ describe('zod', () => { const result = await plugin(schema, [], { schema: 'zod', scalars, importFrom: './', schemaNamespacedImportName: 't' }, {}); expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const PageTypeSchema = z.nativeEnum(t.PageType); + export const PageTypeSchema: z.ZodEnum = z.nativeEnum(t.PageType); export function PageInputSchema(): z.ZodObject> { return z.object({ @@ -281,7 +281,7 @@ describe('zod', () => { const result = await plugin(schema, [], { schema: 'zod', scalars }, {}); expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const HttpMethodSchema = z.nativeEnum(HttpMethod); + export const HttpMethodSchema: z.ZodEnum = z.nativeEnum(HttpMethod); export function HttpInputSchema(): z.ZodObject> { return z.object({ @@ -443,7 +443,7 @@ describe('zod', () => { ); expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const PageTypeSchema = z.enum(['PUBLIC', 'BASIC_AUTH']); + export const PageTypeSchema: z.ZodEnum<{ PUBLIC: "PUBLIC"; BASIC_AUTH: "BASIC_AUTH" }> = z.enum(['PUBLIC', 'BASIC_AUTH']); " `) }); @@ -468,7 +468,7 @@ describe('zod', () => { ); expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const PageTypeSchema = z.enum(['PUBLIC', 'BASIC_AUTH']); + export const PageTypeSchema: z.ZodEnum<{ PUBLIC: "PUBLIC"; BASIC_AUTH: "BASIC_AUTH" }> = z.enum(['PUBLIC', 'BASIC_AUTH']); " `) }); @@ -711,7 +711,7 @@ describe('zod', () => { }, ); - expect(result.content).toContain('export const PageTypeSchema = z.nativeEnum(PageType)'); + expect(result.content).toContain('export const PageTypeSchema: z.ZodEnum = z.nativeEnum(PageType)'); expect(result.content).toContain('export function PageInputSchema(): z.ZodObject>'); expect(result.content).toContain('pageType: PageTypeSchema.default(PageType.Public)'); @@ -747,7 +747,7 @@ describe('zod', () => { }, ); - expect(result.content).toContain('export const PageTypeSchema = z.nativeEnum(PageType)'); + expect(result.content).toContain('export const PageTypeSchema: z.ZodEnum = z.nativeEnum(PageType)'); expect(result.content).toContain('export function PageInputSchema(): z.ZodObject>'); expect(result.content).toContain('pageType: PageTypeSchema.default(PageType.Basic_Auth)'); @@ -786,7 +786,7 @@ describe('zod', () => { }, ); - expect(result.content).toContain('export const PageTypeSchema = z.nativeEnum(PageType)'); + expect(result.content).toContain('export const PageTypeSchema: z.ZodEnum = z.nativeEnum(PageType)'); expect(result.content).toContain('export function PageInputSchema(): z.ZodObject>'); expect(result.content).toContain('pageType: PageTypeSchema.default(PageType.BasicAuth)'); @@ -823,7 +823,7 @@ describe('zod', () => { expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const PageTypeSchema = z.nativeEnum(PageType); + export const PageTypeSchema: z.ZodEnum = z.nativeEnum(PageType); export function PageInputSchema(): z.ZodObject> { return z.object({ @@ -1369,9 +1369,9 @@ describe('zod', () => { expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const PageTypeSchema = z.nativeEnum(PageType); + export const PageTypeSchema: z.ZodEnum = z.nativeEnum(PageType); - export const MethodTypeSchema = z.nativeEnum(MethodType); + export const MethodTypeSchema: z.ZodEnum = z.nativeEnum(MethodType); export function AnyTypeSchema() { return z.union([PageTypeSchema, MethodTypeSchema]) @@ -1787,7 +1787,7 @@ describe('zod', () => { ); expect(removedInitialEmitValue(result.content)).toMatchInlineSnapshot(` " - export const TestSchema = z.nativeEnum(Test); + export const TestSchema: z.ZodEnum = z.nativeEnum(Test); export function QueryInputSchema(): z.ZodObject> { return z.object({