import { drizzle } from "drizzle-orm/libsql"; import { createClient } from "@libsql/client"; import * as schema from "./schema"; import path from "path"; import fs from "fs"; type Database = ReturnType>; let _db: Database | null = null; function initDb(): Database { if (!_db) { const dataDir = process.env.DATA_DIR ? process.env.DATA_DIR : import.meta.env.DATA_DIR; if (!dataDir) { throw new Error("DATA_DIR environment variable is not set"); } if (!fs.existsSync(dataDir)) { fs.mkdirSync(dataDir, { recursive: true }); } const url = `file:${path.join(dataDir, "chronus.db")}`; const client = createClient({ url, }); _db = drizzle(client, { schema }); } return _db; } export const db = new Proxy({} as Database, { get(_target, prop) { const database = initDb(); return database[prop as keyof Database]; }, });