// --------------------------------------------------------------------------- // Local dev Postgres via PGlite — no Docker, no install // --------------------------------------------------------------------------- // // Exposes an in-process PGlite instance over a TCP socket so Hyperdrive's // localConnectionString can connect to it like a real Postgres server. // Runs drizzle migrations on startup so the schema is ready. import { PGlite } from "@electric-sql/pglite"; import { PGLiteSocketServer } from "@electric-sql/pglite-socket"; import { drizzle } from "drizzle-orm/pglite"; import { migrate } from "drizzle-orm/pglite/migrator"; import { resolve, dirname } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = dirname(fileURLToPath(import.meta.url)); const PORT = 5433; const DB_PATH = resolve(__dirname, "../.dev-db"); const MIGRATIONS_FOLDER = resolve(__dirname, "../drizzle"); console.log(`[dev-db] Starting PGlite at ${DB_PATH}`); const db = await PGlite.create(DB_PATH); console.log(`[dev-db] Running migrations from ${MIGRATIONS_FOLDER}`); await migrate(drizzle(db), { migrationsFolder: MIGRATIONS_FOLDER }); const server = new PGLiteSocketServer({ db, port: PORT, host: "127.0.0.1", }); await server.start(); console.log(`[dev-db] Listening on postgresql://postgres:postgres@127.0.0.1:${PORT}/postgres`); const shutdown = async () => { console.log("\n[dev-db] Shutting down"); await server.stop(); await db.close(); process.exit(0); }; process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown);