Skip to content

Commit dd14939

Browse files
committed
fix(zod): avoid importing Prisma enum, recognize enum fields with default
fixes #2291
1 parent dfa6402 commit dd14939

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -396,10 +396,6 @@ export const ${typeDef.name}Schema = ${refineFuncName}(${noRefineSchema});
396396
}
397397
}
398398
}
399-
if (importEnums.size > 0) {
400-
const prismaImport = computePrismaClientImport(path.join(output, 'models'), this.options);
401-
writer.writeLine(`import { ${[...importEnums].join(', ')} } from '${prismaImport}';`);
402-
}
403399

404400
// import enum schemas
405401
const importedEnumSchemas = new Set<string>();
@@ -730,9 +726,7 @@ export const ${upperCaseFirst(model.name)}UpdateSchema = ${updateSchema};
730726
/**
731727
* Schema refinement function for applying \`@@validate\` rules.
732728
*/
733-
export function ${refineFuncName}<T>(schema: z.ZodType<T>) { return schema${refinements.join(
734-
'\n'
735-
)};
729+
export function ${refineFuncName}<T>(schema: z.ZodType<T>) { return schema${refinements.join('\n')};
736730
}
737731
`
738732
);

packages/schema/src/plugins/zod/utils/schema-gen.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { upperCaseFirst } from '@zenstackhq/runtime/local-helpers';
2-
import { getLiteral, hasAttribute, isFromStdlib } from '@zenstackhq/sdk';
2+
import { getLiteral, hasAttribute, isEnumFieldReference, isFromStdlib } from '@zenstackhq/sdk';
33
import {
44
DataModelField,
55
DataModelFieldAttribute,
@@ -246,6 +246,8 @@ export function getFieldSchemaDefault(field: DataModelField | TypeDefField) {
246246
return arg.value.value;
247247
} else if (isBooleanLiteral(arg.value)) {
248248
return arg.value.value;
249+
} else if (isEnumFieldReference(arg.value) && arg.value.target.ref) {
250+
return JSON.stringify(arg.value.target.ref.name);
249251
} else if (
250252
isInvocationExpr(arg.value) &&
251253
isFromStdlib(arg.value.function.ref!) &&
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { loadSchema } from '@zenstackhq/testtools';
2+
3+
describe('Issue 2291', () => {
4+
it('should work', async () => {
5+
const { zodSchemas } = await loadSchema(
6+
`
7+
enum SomeEnum {
8+
Ex1
9+
Ex2
10+
}
11+
12+
/// Post model
13+
model Post {
14+
id String @id @default(cuid())
15+
e SomeEnum @default(Ex1)
16+
}
17+
`,
18+
{ fullZod: true }
19+
);
20+
21+
expect(zodSchemas.models.PostSchema.parse({ id: '1' })).toEqual({ id: '1', e: 'Ex1' });
22+
});
23+
});

0 commit comments

Comments
 (0)