All checks were successful
Docker Deploy / build-and-push (push) Successful in 4m3s
42 lines
934 B
TypeScript
42 lines
934 B
TypeScript
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<typeof drizzle<typeof schema>>;
|
|
|
|
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];
|
|
},
|
|
});
|