diff --git a/spec/routes/parameters.spec.ts b/spec/routes/parameters.spec.ts index 9ea55f6..cdd7e88 100644 --- a/spec/routes/parameters.spec.ts +++ b/spec/routes/parameters.spec.ts @@ -21,14 +21,15 @@ describe('parameters', () => { ]); }); - it('generates query parameter for route from object with refine', () => { + it('generates query parameter for route from object with effects', () => { const { parameters } = generateDataForRoute({ request: { query: z .object({ filter: z.string(), }) - .refine(({ filter }) => filter.length > 3), + .refine(({ filter }) => filter.length > 3) + .transform(d => d), }, }); @@ -142,14 +143,15 @@ describe('parameters', () => { ]); }); - it('generates path parameter for route from object with refine', () => { + it('generates path parameter for route from object with effects', () => { const { parameters } = generateDataForRoute({ request: { params: z .object({ filter: z.string(), }) - .refine(({ filter }) => filter.length > 3), + .refine(({ filter }) => filter.length > 3) + .transform(d => d), }, }); @@ -244,14 +246,15 @@ describe('parameters', () => { ]); }); - it('generates cookie parameter for route from object with refine', () => { + it('generates cookie parameter for route from object with effects', () => { const { parameters } = generateDataForRoute({ request: { cookies: z .object({ filter: z.string(), }) - .refine(({ filter }) => filter.length > 3), + .refine(({ filter }) => filter.length > 3) + .transform(d => d), }, }); @@ -367,14 +370,15 @@ describe('parameters', () => { ]); }); - it('generates header parameter for route from object with refine', () => { + it('generates header parameter for route from object with effects', () => { const { parameters } = generateDataForRoute({ request: { headers: z .object({ filter: z.string(), }) - .refine(({ filter }) => filter.length > 3), + .refine(({ filter }) => filter.length > 3) + .transform(d => d), }, }); diff --git a/src/openapi-generator.ts b/src/openapi-generator.ts index c4b2b27..66d29d9 100644 --- a/src/openapi-generator.ts +++ b/src/openapi-generator.ts @@ -545,12 +545,14 @@ export class OpenAPIGenerator { ]; } - private cleanParameter(schema: RouteParameter) { + private cleanParameter(schema: RouteParameter): AnyZodObject | undefined { if (!schema) { return undefined; } - return isZodType(schema, 'ZodEffects') ? schema._def.schema : schema; + return isZodType(schema, 'ZodEffects') + ? this.cleanParameter(schema._def.schema) + : schema; } generatePath(route: RouteConfig): PathItemObject { diff --git a/src/openapi-registry.ts b/src/openapi-registry.ts index 4e6e6e8..f92dcb4 100644 --- a/src/openapi-registry.ts +++ b/src/openapi-registry.ts @@ -102,10 +102,11 @@ export interface ResponseConfig { content?: ZodContentObject; } -export type RouteParameter = +type ZodObjectWithEffect = | AnyZodObject - | ZodEffects - | undefined; + | ZodEffects; + +export type RouteParameter = ZodObjectWithEffect | undefined; export type RouteConfig = Omit & { method: Method;