29 lines
985 B
TypeScript
29 lines
985 B
TypeScript
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
|
import { env } from "@/env";
|
|
import { PrismaClient } from "@/generated/prisma/client";
|
|
|
|
const globalForPrisma = globalThis as unknown as { prisma?: PrismaClient };
|
|
|
|
function createPrismaClient(): PrismaClient {
|
|
const url = new URL(env.DATABASE_URL);
|
|
const adapter = new PrismaMariaDb({
|
|
host: url.hostname,
|
|
port: Number(url.port) || 3306,
|
|
user: decodeURIComponent(url.username),
|
|
password: decodeURIComponent(url.password),
|
|
database: url.pathname.replace(/^\//, ""),
|
|
connectionLimit: env.DATABASE_POOL_SIZE,
|
|
connectTimeout: env.DATABASE_CONNECT_TIMEOUT_MS,
|
|
acquireTimeout: env.DATABASE_CONNECT_TIMEOUT_MS,
|
|
idleTimeout: env.DATABASE_IDLE_TIMEOUT_MS,
|
|
});
|
|
return new PrismaClient({
|
|
adapter,
|
|
log: env.NODE_ENV === "development" ? ["error", "warn"] : ["error"],
|
|
});
|
|
}
|
|
|
|
export const prisma = globalForPrisma.prisma ?? createPrismaClient();
|
|
|
|
if (env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
|