From bde1407b158d0d8a87647fa863557cb19c91d07a Mon Sep 17 00:00:00 2001 From: Ammar Elbehery Date: Thu, 16 Jan 2025 11:29:46 +0200 Subject: [PATCH] cli(fix): add bigint type to generators (#1217) --- packages/cli/src/generators/drizzle.ts | 12 +++++++++--- packages/cli/src/generators/prisma.ts | 7 +++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/generators/drizzle.ts b/packages/cli/src/generators/drizzle.ts index b34dfc1388..35e04924af 100644 --- a/packages/cli/src/generators/drizzle.ts +++ b/packages/cli/src/generators/drizzle.ts @@ -18,8 +18,14 @@ export const generateDrizzleSchema: SchemaGenerator = async ({ const timestampAndBoolean = databaseType !== "sqlite" ? "timestamp, boolean" : ""; const int = databaseType === "mysql" ? "int" : "integer"; + const hasBigint = Object.values(tables).some((table) => + Object.values(table.fields).some((field) => field.bigint), + ); + const bigint = databaseType !== "sqlite" ? "bigint" : ""; const text = databaseType === "mysql" ? "varchar, text" : "text"; - let code = `import { ${databaseType}Table, ${text}, ${int}, ${timestampAndBoolean} } from "drizzle-orm/${databaseType}-core"; + let code = `import { ${databaseType}Table, ${text}, ${int}${hasBigint ? + `, ${bigint}` : "" + }, ${timestampAndBoolean} } from "drizzle-orm/${databaseType}-core"; `; const fileExist = existsSync(filePath); @@ -49,8 +55,8 @@ export const generateDrizzleSchema: SchemaGenerator = async ({ }, number: { sqlite: `integer('${name}')`, - pg: `integer('${name}')`, - mysql: `int('${name}')`, + pg: field.bigint ? `bigint('${name}', { mode: 'number' })` : `integer('${name}')`, + mysql: field.bigint ? `bigint('${name}', { mode: 'number' })` : `int('${name}')`, }, date: { sqlite: `integer('${name}', { mode: 'timestamp' })`, diff --git a/packages/cli/src/generators/prisma.ts b/packages/cli/src/generators/prisma.ts index 0c5abf1209..a4ba98bf45 100644 --- a/packages/cli/src/generators/prisma.ts +++ b/packages/cli/src/generators/prisma.ts @@ -51,10 +51,13 @@ export const generatePrismaSchema: SchemaGenerator = async ({ const originalTable = tables[table]?.modelName; const modelName = capitalizeFirstLetter(originalTable || ""); - function getType(type: FieldType, isOptional: boolean) { + function getType(type: FieldType, isOptional: boolean, isBigint: boolean) { if (type === "string") { return isOptional ? "String?" : "String"; } + if (type === "number" && isBigint) { + return isOptional ? "BigInt?" : "BigInt"; + } if (type === "number") { return isOptional ? "Int?" : "Int"; } @@ -103,7 +106,7 @@ export const generatePrismaSchema: SchemaGenerator = async ({ builder .model(modelName) - .field(field, getType(attr.type, !attr?.required)); + .field(field, getType(attr.type, !attr?.required, attr?.bigint || false)); if (attr.unique) { builder.model(modelName).blockAttribute(`unique([${field}])`); }