import { drizzle, type NodePgDatabase } from "drizzle-orm/node-postgres"; import { Pool } from "pg"; import * as schema from "./schema/index.js"; export type Db = NodePgDatabase; export type Tx = Parameters[0]>[0]; let pool: Pool | undefined; let db: Db | undefined; export function getPool(connectionString = process.env.DATABASE_URL): Pool { if (!connectionString) throw new Error("DATABASE_URL is not set"); if (!pool) { pool = new Pool({ connectionString, max: Number(process.env.PG_POOL_MAX ?? 10), idleTimeoutMillis: 30_000, }); pool.on("error", (err) => console.error("[db] pool error", err.message)); } return pool; } export function getDb(connectionString?: string): Db { if (!db) db = drizzle(getPool(connectionString), { schema }); return db; } export async function closeDb(): Promise { await pool?.end(); pool = undefined; db = undefined; } export { schema };