Skip to content

Commit 273c107

Browse files
authored
fix(zod): createMany types shouldn't be generated when Prisma version doesn't support it (#1434)
1 parent 2c7c82b commit 273c107

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

packages/schema/src/plugins/zod/generator.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
isFromStdlib,
1111
parseOptionAsStrings,
1212
resolvePath,
13+
supportCreateMany,
1314
} from '@zenstackhq/sdk';
1415
import { DataModel, EnumField, Model, isDataModel, isEnum } from '@zenstackhq/sdk/ast';
1516
import { addMissingInputObjectTypes, resolveAggregateOperationSupport } from '@zenstackhq/sdk/dmmf-helpers';
@@ -106,6 +107,7 @@ export class ZodSchemaGenerator {
106107
aggregateOperationSupport,
107108
project: this.project,
108109
inputObjectTypes,
110+
zmodel: this.model,
109111
});
110112
await transformer.generateInputSchemas(this.options, this.model);
111113
this.sourceFiles.push(...transformer.sourceFiles);
@@ -200,6 +202,7 @@ export class ZodSchemaGenerator {
200202
enumTypes,
201203
project: this.project,
202204
inputObjectTypes: [],
205+
zmodel: this.model,
203206
});
204207
await transformer.generateEnumSchemas();
205208
this.sourceFiles.push(...transformer.sourceFiles);
@@ -213,14 +216,21 @@ export class ZodSchemaGenerator {
213216
for (let i = 0; i < inputObjectTypes.length; i += 1) {
214217
const fields = inputObjectTypes[i]?.fields;
215218
const name = inputObjectTypes[i]?.name;
219+
216220
if (!generateUnchecked && name.includes('Unchecked')) {
217221
continue;
218222
}
223+
224+
if (name.includes('CreateMany') && !supportCreateMany(this.model)) {
225+
continue;
226+
}
227+
219228
const transformer = new Transformer({
220229
name,
221230
fields,
222231
project: this.project,
223232
inputObjectTypes,
233+
zmodel: this.model,
224234
});
225235
const moduleName = transformer.generateObjectSchema(generateUnchecked, this.options);
226236
moduleNames.push(moduleName);

packages/schema/src/plugins/zod/transformer.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export default class Transformer {
2727
private project: Project;
2828
private inputObjectTypes: PrismaDMMF.InputType[];
2929
public sourceFiles: SourceFile[] = [];
30+
private zmodel: Model;
3031

3132
constructor(params: TransformerParams) {
3233
this.originalName = params.name ?? '';
@@ -38,6 +39,7 @@ export default class Transformer {
3839
this.enumTypes = params.enumTypes ?? [];
3940
this.project = params.project;
4041
this.inputObjectTypes = params.inputObjectTypes;
42+
this.zmodel = params.zmodel;
4143
}
4244

4345
static setOutputPath(outPath: string) {
@@ -119,6 +121,10 @@ export default class Transformer {
119121
return result;
120122
}
121123

124+
if (inputType.type.includes('CreateMany') && !supportCreateMany(this.zmodel)) {
125+
return result;
126+
}
127+
122128
// TODO: unify the following with `schema-gen.ts`
123129

124130
if (inputType.type === 'String') {

packages/schema/src/plugins/zod/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Model } from '@zenstackhq/sdk/ast';
12
import type { DMMF as PrismaDMMF } from '@zenstackhq/sdk/prisma';
23
import { Project } from 'ts-morph';
34

@@ -12,6 +13,7 @@ export type TransformerParams = {
1213
prismaClientOutputPath?: string;
1314
project: Project;
1415
inputObjectTypes: PrismaDMMF.InputType[];
16+
zmodel: Model;
1517
};
1618

1719
export type AggregateOperationSupport = {

0 commit comments

Comments
 (0)