import type { Config } from "drizzle-kit" export type { Config } export type VariantConfigKeys = "dialect" | "driver" | "dbCredentials" export type FixedConfigKeys = Exclude export type CommonConfig = Pick export type PartialCommonConfig = Partial export const getCommonConfig = (config: PartialCommonConfig): CommonConfig => { return { schema: "./src/database/schema/*", out: "./drizzle/migrations", migrations: { table: "__drizzle_migrations", schema: "public", }, introspect: { casing: "camel", }, tablesFilter: ["*"], schemaFilter: ["public"], extensionsFilters: ["postgis"], entities: { roles: false, }, strict: true, verbose: true, breakpoints: true, casing: "camelCase", ...config, } } export interface DefinePostgresqlConfigOptions extends PartialCommonConfig { databaseUrl: string } export const definePostgresqlConfig = (config: DefinePostgresqlConfigOptions): Config => { const { databaseUrl, ...restConfig } = config const commonConfig = getCommonConfig(restConfig) return { ...commonConfig, dialect: "postgresql", dbCredentials: { url: databaseUrl, }, } } export interface DefinePgliteFileConfigOptions extends PartialCommonConfig { databaseUrl: string } export const definePgliteFileConfig = (config: DefinePgliteFileConfigOptions): Config => { const { databaseUrl, ...restConfig } = config const commonConfig = getCommonConfig(restConfig) return { ...commonConfig, dialect: "postgresql", driver: "pglite", dbCredentials: { url: databaseUrl, }, } } export interface DefineMemoryPgliteConfigOptions extends PartialCommonConfig {} export const defineMemoryPgliteConfig = (config: DefineMemoryPgliteConfigOptions): Config => { const commonConfig = getCommonConfig(config) return { ...commonConfig, dialect: "postgresql", driver: "pglite", dbCredentials: { url: "memory://", }, } }