diff --git a/packages/schema/src/plugins/zod/generator.ts b/packages/schema/src/plugins/zod/generator.ts index a73c4c442..2054acac5 100644 --- a/packages/schema/src/plugins/zod/generator.ts +++ b/packages/schema/src/plugins/zod/generator.ts @@ -10,6 +10,7 @@ import { isFromStdlib, parseOptionAsStrings, resolvePath, + supportCreateMany, } from '@zenstackhq/sdk'; import { DataModel, EnumField, Model, isDataModel, isEnum } from '@zenstackhq/sdk/ast'; import { addMissingInputObjectTypes, resolveAggregateOperationSupport } from '@zenstackhq/sdk/dmmf-helpers'; @@ -106,6 +107,7 @@ export class ZodSchemaGenerator { aggregateOperationSupport, project: this.project, inputObjectTypes, + zmodel: this.model, }); await transformer.generateInputSchemas(this.options, this.model); this.sourceFiles.push(...transformer.sourceFiles); @@ -200,6 +202,7 @@ export class ZodSchemaGenerator { enumTypes, project: this.project, inputObjectTypes: [], + zmodel: this.model, }); await transformer.generateEnumSchemas(); this.sourceFiles.push(...transformer.sourceFiles); @@ -213,14 +216,21 @@ export class ZodSchemaGenerator { for (let i = 0; i < inputObjectTypes.length; i += 1) { const fields = inputObjectTypes[i]?.fields; const name = inputObjectTypes[i]?.name; + if (!generateUnchecked && name.includes('Unchecked')) { continue; } + + if (name.includes('CreateMany') && !supportCreateMany(this.model)) { + continue; + } + const transformer = new Transformer({ name, fields, project: this.project, inputObjectTypes, + zmodel: this.model, }); const moduleName = transformer.generateObjectSchema(generateUnchecked, this.options); moduleNames.push(moduleName); diff --git a/packages/schema/src/plugins/zod/transformer.ts b/packages/schema/src/plugins/zod/transformer.ts index c81e17024..677fa6284 100644 --- a/packages/schema/src/plugins/zod/transformer.ts +++ b/packages/schema/src/plugins/zod/transformer.ts @@ -27,6 +27,7 @@ export default class Transformer { private project: Project; private inputObjectTypes: PrismaDMMF.InputType[]; public sourceFiles: SourceFile[] = []; + private zmodel: Model; constructor(params: TransformerParams) { this.originalName = params.name ?? ''; @@ -38,6 +39,7 @@ export default class Transformer { this.enumTypes = params.enumTypes ?? []; this.project = params.project; this.inputObjectTypes = params.inputObjectTypes; + this.zmodel = params.zmodel; } static setOutputPath(outPath: string) { @@ -119,6 +121,10 @@ export default class Transformer { return result; } + if (inputType.type.includes('CreateMany') && !supportCreateMany(this.zmodel)) { + return result; + } + // TODO: unify the following with `schema-gen.ts` if (inputType.type === 'String') { diff --git a/packages/schema/src/plugins/zod/types.ts b/packages/schema/src/plugins/zod/types.ts index a53281437..f74d690e4 100644 --- a/packages/schema/src/plugins/zod/types.ts +++ b/packages/schema/src/plugins/zod/types.ts @@ -1,3 +1,4 @@ +import type { Model } from '@zenstackhq/sdk/ast'; import type { DMMF as PrismaDMMF } from '@zenstackhq/sdk/prisma'; import { Project } from 'ts-morph'; @@ -12,6 +13,7 @@ export type TransformerParams = { prismaClientOutputPath?: string; project: Project; inputObjectTypes: PrismaDMMF.InputType[]; + zmodel: Model; }; export type AggregateOperationSupport = {