From bc839f9242bf3f03ad7adbef5038433578274bf9 Mon Sep 17 00:00:00 2001 From: ItMaga Date: Wed, 12 Apr 2023 11:34:48 +0300 Subject: [PATCH] fix: intersection union model --- lib/generators/IntersectionGenerator.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/generators/IntersectionGenerator.ts b/lib/generators/IntersectionGenerator.ts index a763d58..f84e268 100644 --- a/lib/generators/IntersectionGenerator.ts +++ b/lib/generators/IntersectionGenerator.ts @@ -4,10 +4,13 @@ import type BaseGenerator from './BaseGenerator'; export default class IntersectionGenerator> implements BaseGenerator { public generate(schema: T) { - if ('typeName' in schema._def.left && 'typeName' in schema._def.right) { - if (schema._def.left.typeName === 'ZodUnion' && schema._def.right.typeName === 'ZodUnion') { - const sharedOptions = schema._def.left._def.options.filter((leftOption: z.ZodTypeAny) => { - return schema._def.right._def.options.some((rightOption: z.ZodTypeAny) => rightOption._def.typeName === leftOption._def.typeName); + const { _def: leftDef } = schema._def.left; + const { _def: rightDef } = schema._def.right; + + if ('typeName' in leftDef && 'typeName' in rightDef) { + if (leftDef.typeName === 'ZodUnion' && rightDef.typeName === 'ZodUnion') { + const sharedOptions = leftDef.options.filter((leftOption: z.ZodTypeAny) => { + return rightDef.options.some((rightOption: z.ZodTypeAny) => rightOption._def.typeName === leftOption._def.typeName); }); const mockGenerator = new MockGenerator(z.union(sharedOptions));