/** * Database connection factory. * Creates Kysely instances for SQLite or PostgreSQL based on configuration. */ import { Kysely, SqliteDialect, PostgresDialect } from 'kysely'; import SqliteDatabase from 'better-sqlite3'; import { Pool } from 'pg'; import type { Database } from './database.js'; import type { DatabaseConfig } from './config.js'; export function createDatabase(config: DatabaseConfig): Kysely { if (config.type === 'sqlite') { if (!config.sqlite) { throw new Error('SQLite configuration required'); } const sqliteDb = new SqliteDatabase(config.sqlite.path); sqliteDb.pragma('journal_mode = WAL'); return new Kysely({ dialect: new SqliteDialect({ database: sqliteDb, }), }); } if (config.type === 'postgres') { if (!config.postgres) { throw new Error('PostgreSQL configuration required'); } // Check if using connection string or individual params if ('connectionString' in config.postgres) { return new Kysely({ dialect: new PostgresDialect({ pool: new Pool({ connectionString: config.postgres.connectionString, }), }), }); } else { return new Kysely({ dialect: new PostgresDialect({ pool: new Pool({ host: config.postgres.host, port: config.postgres.port, database: config.postgres.database, user: config.postgres.user, password: config.postgres.password, }), }), }); } } throw new Error(`Unsupported database type: ${config.type}`); }