diff --git a/packages/schema/src/plugins/zod/utils/schema-gen.ts b/packages/schema/src/plugins/zod/utils/schema-gen.ts index 5f3321b94..3df90bd95 100644 --- a/packages/schema/src/plugins/zod/utils/schema-gen.ts +++ b/packages/schema/src/plugins/zod/utils/schema-gen.ts @@ -152,7 +152,13 @@ export function makeFieldSchema(field: DataModelField) { } else { const schemaDefault = getFieldSchemaDefault(field); if (schemaDefault !== undefined) { - schema += `.default(${schemaDefault})`; + if (field.type.type === 'BigInt') { + // we can't use the `n` BigInt literal notation, since it needs + // ES2020 or later, which TypeScript doesn't use by default + schema += `.default(BigInt("${schemaDefault}"))`; + } else { + schema += `.default(${schemaDefault})`; + } } if (field.type.optional) { diff --git a/tests/integration/tests/plugins/zod.test.ts b/tests/integration/tests/plugins/zod.test.ts index 00d40b755..5b896416d 100644 --- a/tests/integration/tests/plugins/zod.test.ts +++ b/tests/integration/tests/plugins/zod.test.ts @@ -61,6 +61,7 @@ describe('Zod plugin tests', () => { authorId Int? published Boolean @default(false) viewCount Int @default(0) + viewMilliseconds BigInt @default(0) } `, { addPrelude: false, pushDb: false } @@ -188,11 +189,13 @@ describe('Zod plugin tests', () => { expect(schemas.PostPrismaCreateSchema.safeParse({ title: 'a' }).success).toBeFalsy(); expect(schemas.PostPrismaCreateSchema.safeParse({ title: 'abcde' }).success).toBeTruthy(); expect(schemas.PostPrismaCreateSchema.safeParse({ viewCount: 1 }).success).toBeTruthy(); + expect(schemas.PostPrismaCreateSchema.safeParse({ viewMilliseconds: 1n }).success).toBeTruthy(); expect(schemas.PostPrismaUpdateSchema.safeParse({ title: 'a' }).success).toBeFalsy(); expect(schemas.PostPrismaUpdateSchema.safeParse({ title: 'abcde' }).success).toBeTruthy(); expect(schemas.PostPrismaUpdateSchema.safeParse({ viewCount: 1 }).success).toBeTruthy(); expect(schemas.PostPrismaUpdateSchema.safeParse({ viewCount: { increment: 1 } }).success).toBeTruthy(); + expect(schemas.PostPrismaUpdateSchema.safeParse({ viewMilliseconds: 1n }).success).toBeTruthy(); }); it('mixed casing', async () => {