import { MongoClient } from "mongodb"; /** * Lazy MongoClient promise. We don't touch `process.env.MONGODB_URI` at module * import time so `next build` / page-data collection doesn't crash when the env * isn't populated (e.g. inside a Docker build with no runtime env). */ declare global { var _mongoClientPromise: Promise | undefined; } function createClientPromise(): Promise { const uri = process.env.MONGODB_URI; if (!uri) { throw new Error("MONGODB_URI is not set"); } const client = new MongoClient(uri, {}); return client.connect(); } function getClientPromise(): Promise { if (process.env.NODE_ENV === "development") { if (!globalThis._mongoClientPromise) { globalThis._mongoClientPromise = createClientPromise(); } return globalThis._mongoClientPromise; } if (!globalThis._mongoClientPromise) { globalThis._mongoClientPromise = createClientPromise(); } return globalThis._mongoClientPromise; } const clientPromise: Promise = { then: (onFulfilled, onRejected) => getClientPromise().then(onFulfilled, onRejected), catch: (onRejected) => getClientPromise().catch(onRejected), finally: (onFinally) => getClientPromise().finally(onFinally), [Symbol.toStringTag]: "Promise", } as Promise; export default clientPromise;