import path from "path" import knex, { Knex } from "knex" import { isEmpty, isNil, merge } from "lodash" import { DB_DATABASE, DB_HOST, DB_PASSWORD, DB_PORT, DB_USERNAME, NODE_ENV } from "@/config" if (isEmpty(DB_DATABASE)) throw new Error("database name is unset.") if (isEmpty(DB_USERNAME)) throw new Error("database username is unset.") if (isEmpty(DB_PASSWORD)) throw new Error("database password is unset.") if (isEmpty(DB_HOST)) throw new Error("database host is unset.") if (isNil(DB_PORT) || isNaN(DB_PORT)) throw new Error("database port is unset.") export function buildKnexConfig(options?: Knex.Config): Knex.Config { return merge( { client: "pg", connection: { host: DB_HOST, user: DB_USERNAME, password: DB_PASSWORD, database: DB_DATABASE, port: DB_PORT, ssl: NODE_ENV !== "production" ? false : { require: true, // Enforce SSL rejectUnauthorized: false, // Disable certificate verification (common for Azure) }, /* options: { encrypt: true, trustServerCertificate: DB_TRUST_SERVER_CERTIFICATE, }, */ }, migrations: { directory: path.resolve(__dirname, "./migrations"), extension: "ts", stub: path.resolve(__dirname, "./templates/sample-migration.ts"), }, seeds: { directory: path.resolve(__dirname, `./seeds/${NODE_ENV}`), extension: "ts", stub: path.resolve(__dirname, "./templates/sample-seed.ts"), }, }, options ) } const config = buildKnexConfig() const dbMigrationClient = knex(config) export default dbMigrationClient