mirror of
https://github.com/linsa-io/linsa.git
synced 2026-03-29 21:31:53 +02:00
35 lines
859 B
TypeScript
35 lines
859 B
TypeScript
import postgres from "postgres"
|
|
import { drizzle } from "drizzle-orm/postgres-js"
|
|
import * as schema from "../../web/src/db/schema"
|
|
|
|
export type Hyperdrive = {
|
|
connectionString: string
|
|
}
|
|
|
|
export type WorkerEnv = {
|
|
DATABASE_URL?: string
|
|
HYPERDRIVE?: Hyperdrive
|
|
}
|
|
|
|
const getConnectionString = (env?: WorkerEnv): string => {
|
|
if (env?.DATABASE_URL) {
|
|
return env.DATABASE_URL
|
|
}
|
|
|
|
if (env?.HYPERDRIVE?.connectionString) {
|
|
return env.HYPERDRIVE.connectionString
|
|
}
|
|
|
|
if (process.env.DATABASE_URL) {
|
|
return process.env.DATABASE_URL
|
|
}
|
|
|
|
throw new Error("No database connection available. Set DATABASE_URL or HYPERDRIVE.")
|
|
}
|
|
|
|
export const getDb = (env?: WorkerEnv) => {
|
|
const connectionString = getConnectionString(env)
|
|
const sql = postgres(connectionString, { prepare: false })
|
|
return drizzle(sql, { schema, casing: "snake_case" })
|
|
}
|