From 8fe09c83b1abd67161c880bf630d0e6d46c70cf4 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Fri, 27 Jun 2025 16:56:59 +0200 Subject: [PATCH] fix: DATABASE_URL error on setup --- packages/db/src/index.ts | 41 ++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index 91fc841..9ebf611 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -2,18 +2,43 @@ import { drizzle } from "drizzle-orm/postgres-js"; import postgres from "postgres"; import * as schema from "./schema"; -if (!process.env.DATABASE_URL) { - throw new Error("DATABASE_URL is not set"); +// Create a lazy database instance that only initializes when accessed +let _db: ReturnType | null = null; + +function getDb() { + if (!process.env.DATABASE_URL) { + throw new Error("DATABASE_URL is not set"); + } + + if (!_db) { + const client = postgres(process.env.DATABASE_URL); + _db = drizzle(client, { schema }); + } + + return _db; } -// Create the postgres client -const client = postgres(process.env.DATABASE_URL); - -// Create the drizzle instance -export const db = drizzle(client, { schema }); +// Export a proxy that forwards all calls to the actual db instance +export const db = new Proxy({} as ReturnType, { + get(target, prop) { + return getDb()[prop as keyof typeof _db]; + }, +}); // Re-export schema for convenience export * from "./schema"; // Re-export drizzle-orm functions to ensure version consistency -export { eq, and, or, not, isNull, isNotNull, inArray, notInArray, exists, notExists, sql } from "drizzle-orm"; \ No newline at end of file +export { + eq, + and, + or, + not, + isNull, + isNotNull, + inArray, + notInArray, + exists, + notExists, + sql, +} from "drizzle-orm";