Spaces:
Sleeping
Sleeping
File size: 1,443 Bytes
f75d7fa |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import path from 'node:path';
import * as schema from '@/models/Schema';
import { PGlite } from '@electric-sql/pglite';
import { drizzle as drizzlePg } from 'drizzle-orm/node-postgres';
import { migrate as migratePg } from 'drizzle-orm/node-postgres/migrator';
import { drizzle as drizzlePglite, type PgliteDatabase } from 'drizzle-orm/pglite';
import { migrate as migratePglite } from 'drizzle-orm/pglite/migrator';
import { PHASE_PRODUCTION_BUILD } from 'next/dist/shared/lib/constants';
import { Client } from 'pg';
import { Env } from './Env';
let client;
let drizzle;
if (process.env.NEXT_PHASE !== PHASE_PRODUCTION_BUILD && Env.DATABASE_URL) {
client = new Client({
connectionString: Env.DATABASE_URL,
});
await client.connect();
drizzle = drizzlePg(client, { schema });
await migratePg(drizzle, {
migrationsFolder: path.join(process.cwd(), 'migrations'),
});
} else {
// Stores the db connection in the global scope to prevent multiple instances due to hot reloading with Next.js
const global = globalThis as unknown as { client: PGlite; drizzle: PgliteDatabase<typeof schema> };
if (!global.client) {
global.client = new PGlite();
await global.client.waitReady;
global.drizzle = drizzlePglite(global.client, { schema });
}
drizzle = global.drizzle;
await migratePglite(global.drizzle, {
migrationsFolder: path.join(process.cwd(), 'migrations'),
});
}
export const db = drizzle;
|