import { PrismaClient } from "@prisma/client"; import { PrismaNeon } from "@prisma/adapter-neon"; import { Pool, neonConfig } from "@neondatabase/serverless"; import ws from "ws"; // https://www.prisma.io/blog/serverless-database-drivers-KML1ehXORxZV#use-neon-with-neondatabaseserverless neonConfig.webSocketConstructor = ws; // creating PrismaClient here prevents next.js from starting too many concurrent prisma instances and exhausting the // number of connection pools available (especially when hot reloading from `next dev`). // https://www.prisma.io/docs/guides/other/troubleshooting-orm/help-articles/nextjs-prisma-client-dev-practices const prismaClientSingleton = () => { const pool = new Pool({ connectionString: process.env.DATABASE_URL, ssl: true, }); const adapter = new PrismaNeon(pool); return new PrismaClient({ adapter }); }; type PrismaClientSingleton = ReturnType; const globalForPrisma = globalThis as unknown as { prisma: PrismaClientSingleton | undefined; }; export const prisma = globalForPrisma.prisma ?? prismaClientSingleton(); if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;