33 *
44 * Chooses PostgreSQL (node-postgres) for local/development and Neon serverless
55 * for production. Exports { pool, db } for use by services and session store.
6- * Requires DATABASE_PRO_URL and DATABASE_URL in the environment.
6+ * Requires DATABASE_PRO_URL in the environment.
77 *
88 * @module config/database/db
99 */
@@ -18,31 +18,33 @@ import { drizzle as neonDrizzle } from 'drizzle-orm/neon-serverless';
1818
1919dotenv . config ( ) ;
2020
21- if ( ! process . env . DATABASE_PRO_URL || ! process . env . DATABASE_URL ) {
21+ if ( ! process . env . DATABASE_PRO_URL && ! process . env . DATABASE_URL ) {
2222 throw new Error (
23- "DATABASE_URL must be set. Did you forget to provision a database?" ,
23+ "DATABASE_PRO_URL must be set. Did you forget to provision a database?" ,
2424 ) ;
2525}
2626
27- const isLocal = process . env . DATABASE_URL . includes ( 'localhost' ) ||
28- process . env . NODE_ENV === 'development' ;
27+ const connectionString = process . env . DATABASE_PRO_URL || process . env . DATABASE_URL ;
28+ const isNeon = connectionString ?. includes ( 'neon.tech' ) || connectionString ?. includes ( 'neon.azure' ) ;
29+ const isLocal = connectionString ?. includes ( 'localhost' ) ;
2930
3031let pool : PgPool | NeonPool ;
3132let db : ReturnType < typeof pgDrizzle > | ReturnType < typeof neonDrizzle > ;
3233
33- if ( isLocal ) {
34+ if ( isNeon || ! isLocal ) {
35+ // Use Neon driver for Neon URLs or any non-local DB (e.g. production or dev against cloud)
36+ neonConfig . webSocketConstructor = ws ;
37+ pool = new NeonPool ( { connectionString, ssl : true } ) ;
38+ db = neonDrizzle ( pool , { schema } ) ;
39+ } else {
3440 pool = new PgPool ( {
35- connectionString : process . env . DATABASE_PRO_URL ,
41+ connectionString,
3642 max : 20 ,
3743 idleTimeoutMillis : 30000 ,
38- connectionTimeoutMillis : 2000 ,
44+ connectionTimeoutMillis : 10000 ,
3945 ssl : true ,
4046 } ) ;
4147 db = pgDrizzle ( pool as PgPool , { schema } ) ;
42- } else {
43- neonConfig . webSocketConstructor = ws ;
44- pool = new NeonPool ( { connectionString : process . env . DATABASE_PRO_URL , ssl : true } ) ;
45- db = neonDrizzle ( pool , { schema } ) ;
4648}
4749
4850export default { pool, db } ;
0 commit comments