connection.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { drizzle } from "drizzle-orm/postgres-js";
  2. import postgres from "postgres";
  3. import * as schema from "./schema";
  4. // Lazy initialization to allow builds without DATABASE_URL
  5. let _db: ReturnType<typeof drizzle<typeof schema>> | null = null;
  6. let _migrationClient: ReturnType<typeof postgres> | null = null;
  7. function getConnectionString(): string {
  8. const connectionString = process.env.DATABASE_URL;
  9. if (!connectionString) {
  10. throw new Error("DATABASE_URL environment variable is not set");
  11. }
  12. return connectionString;
  13. }
  14. // For query purposes - lazily initialized
  15. export const db = new Proxy({} as ReturnType<typeof drizzle<typeof schema>>, {
  16. get(_target, prop) {
  17. if (!_db) {
  18. const connectionString = getConnectionString();
  19. const queryClient = postgres(connectionString);
  20. _db = drizzle(queryClient, { schema });
  21. }
  22. return Reflect.get(_db, prop);
  23. },
  24. });
  25. // For migrations - lazily initialized
  26. export function getMigrationClient() {
  27. if (!_migrationClient) {
  28. const connectionString = getConnectionString();
  29. _migrationClient = postgres(connectionString, { max: 1 });
  30. }
  31. return _migrationClient;
  32. }