mirror of
https://github.com/kjanat/livedash-node.git
synced 2026-02-13 12:55:42 +01:00
fix: lazy-load Prisma client to fix build-time URL parsing
- Make Prisma client initialization lazy via Proxy - Defer database-pool import until runtime - Add guard for empty DATABASE_URL - Build now succeeds with Next.js 16.1.4
This commit is contained in:
@@ -8,6 +8,9 @@ import { env } from "./env";
|
||||
// Enhanced connection pool configuration
|
||||
const createConnectionPool = () => {
|
||||
// Parse DATABASE_URL to get connection parameters
|
||||
if (!env.DATABASE_URL) {
|
||||
throw new Error("DATABASE_URL environment variable is required");
|
||||
}
|
||||
const databaseUrl = new URL(env.DATABASE_URL);
|
||||
|
||||
const pool = new Pool({
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
// Enhanced Prisma client setup with connection pooling
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
import { createEnhancedPrismaClient } from "./database-pool";
|
||||
import { env } from "./env";
|
||||
|
||||
// Add prisma to the NodeJS global type
|
||||
declare const global: {
|
||||
prisma: PrismaClient | undefined;
|
||||
};
|
||||
|
||||
// Connection pooling configuration
|
||||
// Lazy-load createEnhancedPrismaClient to avoid build-time URL parsing
|
||||
const createPrismaClient = () => {
|
||||
// Use enhanced pooling in production or when explicitly enabled
|
||||
const useEnhancedPooling =
|
||||
@@ -17,6 +15,8 @@ const createPrismaClient = () => {
|
||||
|
||||
if (useEnhancedPooling) {
|
||||
console.log("Using enhanced database connection pooling with PG adapter");
|
||||
// Dynamic import to defer URL parsing until runtime
|
||||
const { createEnhancedPrismaClient } = require("./database-pool");
|
||||
return createEnhancedPrismaClient();
|
||||
}
|
||||
|
||||
@@ -26,21 +26,29 @@ const createPrismaClient = () => {
|
||||
process.env.NODE_ENV === "development"
|
||||
? ["query", "error", "warn"]
|
||||
: ["error"],
|
||||
datasources: {
|
||||
db: {
|
||||
url: env.DATABASE_URL,
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
// Initialize Prisma Client with singleton pattern
|
||||
const prisma = global.prisma || createPrismaClient();
|
||||
// Lazy initialization - only create when first accessed
|
||||
let _prisma: PrismaClient | undefined;
|
||||
|
||||
// Save in global if we're in development to prevent multiple instances
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
global.prisma = prisma;
|
||||
}
|
||||
const getPrisma = (): PrismaClient => {
|
||||
if (!_prisma) {
|
||||
_prisma = global.prisma || createPrismaClient();
|
||||
// Save in global if we're in development to prevent multiple instances
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
global.prisma = _prisma;
|
||||
}
|
||||
}
|
||||
return _prisma!;
|
||||
};
|
||||
|
||||
// Export a proxy that lazily initializes the client
|
||||
export const prisma = new Proxy({} as PrismaClient, {
|
||||
get(_target, prop) {
|
||||
return getPrisma()[prop as keyof PrismaClient];
|
||||
},
|
||||
});
|
||||
|
||||
// Graceful shutdown handling
|
||||
const gracefulShutdown = async () => {
|
||||
@@ -63,5 +71,3 @@ export const checkDatabaseConnection = async (): Promise<boolean> => {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export { prisma };
|
||||
|
||||
Reference in New Issue
Block a user