2026-03-19 13:30:52 -06:00
|
|
|
import { drizzle } from "drizzle-orm/neon-http";
|
|
|
|
|
import { neon } from "@neondatabase/serverless";
|
|
|
|
|
import * as schema from "./schema";
|
|
|
|
|
|
2026-03-19 13:33:15 -06:00
|
|
|
type DrizzleDb = ReturnType<typeof createDb>;
|
|
|
|
|
|
|
|
|
|
function createDb() {
|
|
|
|
|
const url = process.env.DATABASE_URL;
|
|
|
|
|
if (!url) {
|
|
|
|
|
throw new Error("DATABASE_URL environment variable is not set");
|
|
|
|
|
}
|
|
|
|
|
const sql = neon(url);
|
|
|
|
|
return drizzle({ client: sql, schema });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Lazy singleton — created on first use, not at module load time
|
|
|
|
|
let _db: DrizzleDb | undefined;
|
|
|
|
|
|
|
|
|
|
export const db = new Proxy({} as DrizzleDb, {
|
|
|
|
|
get(_target, prop: string | symbol) {
|
|
|
|
|
if (!_db) _db = createDb();
|
|
|
|
|
return (_db as unknown as Record<string | symbol, unknown>)[prop];
|
|
|
|
|
},
|
|
|
|
|
});
|