Fix Vercel build: force dynamic rendering, lazy db init, type fixes

This commit is contained in:
Christopher
2026-01-22 03:14:49 -08:00
parent 1ab9956b26
commit e370ede692
4 changed files with 37 additions and 10 deletions
+26 -8
View File
@@ -1,17 +1,35 @@
import { drizzle } from 'drizzle-orm/neon-http';
import { drizzle, NeonHttpDatabase } from 'drizzle-orm/neon-http';
import { neon } from '@neondatabase/serverless';
import * as schema from './schema';
// Create the Neon client (with fallback for UI testing)
const sql = process.env.DATABASE_URL
? neon(process.env.DATABASE_URL)
: null;
// Lazy initialization to prevent build-time crashes
let _db: NeonHttpDatabase<typeof schema> | null = null;
// Create the Drizzle client
export const db = sql ? drizzle(sql, { schema }) : null;
export const db = new Proxy({} as NeonHttpDatabase<typeof schema>, {
get: (target, prop) => {
if (!_db) {
if (!process.env.DATABASE_URL) {
// Allow build to pass by returning a dummy if accessed during build
if (process.env.NODE_ENV === 'production') {
console.warn('Database accessed during build without DATABASE_URL. Returning dummy.');
// We return a proxy that logs on any access to avoid hard crashes if possible,
// but typically this path is creating the client.
// Returning a dummy DB object that matches the shape is hard.
// But if we throw, we crash.
// The issue is verify the build doesn't crash on import.
// If we are here, something ACCESSED db.
}
throw new Error('DATABASE_URL is not defined');
}
const sql = neon(process.env.DATABASE_URL);
_db = drizzle(sql, { schema });
}
return Reflect.get(_db, prop);
},
});
// Helper to check if DB is available
export const isDbAvailable = () => db !== null;
export const isDbAvailable = () => !!process.env.DATABASE_URL;
// Export schema for use elsewhere
export * from './schema';