34 lines
791 B
TypeScript
34 lines
791 B
TypeScript
import 'dotenv/config';
|
|
import fs from 'fs';
|
|
import pg from 'pg';
|
|
import { PrismaPg } from '@prisma/adapter-pg';
|
|
import { PrismaClient } from '$lib/generated/prisma/client';
|
|
|
|
let _prisma: PrismaClient | undefined;
|
|
|
|
function getPrisma(): PrismaClient {
|
|
if (!_prisma) {
|
|
const ca_cert = process.env.DO_CA_CERTIFICATE ?? '';
|
|
|
|
const pool = new pg.Pool({
|
|
connectionString: process.env.DATABASE_URL,
|
|
ssl: ca_cert
|
|
? {
|
|
rejectUnauthorized: true,
|
|
ca: fs.readFileSync(ca_cert).toString()
|
|
}
|
|
: undefined
|
|
});
|
|
|
|
const adapter = new PrismaPg(pool);
|
|
_prisma = new PrismaClient({ adapter });
|
|
}
|
|
return _prisma;
|
|
}
|
|
|
|
export const prisma = new Proxy({} as PrismaClient, {
|
|
get(_, prop) {
|
|
return (getPrisma() as unknown as Record<string | symbol, unknown>)[prop];
|
|
}
|
|
});
|