import { Kysely, ParseJSONResultsPlugin, SqliteDialect } from "kysely"; import SqliteDatabase from "better-sqlite3"; import type { db } from "dbtype"; type DB = db.DB; export function createSqliteDialect() { const url = process.env.DATABASE_URL; if (!url) { throw new Error("DATABASE_URL is not set"); } const db = new SqliteDatabase(url); return new SqliteDialect({ database: db, }); } // Create a new Kysely instance with a new SqliteDatabase instance let kysely: Kysely | null = null; export function getKysely() { if (!kysely) { kysely = new Kysely({ dialect: createSqliteDialect(), // plugins: [new ParseJSONResultsPlugin()], log: (event) => { if (event.level === "error") { console.error("Query failed : ", { durationMs: event.queryDurationMillis, error: event.error, sql: event.query.sql, params: event.query.parameters, }); } } }); } return kysely; }