mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 04:12:10 +03:00
38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
import fs from "node:fs";
|
|
import { resolveDataDir, resolveStoragePath } from "./data-dir.mjs";
|
|
import { ensureProviderSchema } from "./provider-store.mjs";
|
|
import { ensureSettingsSchema } from "./settings-store.mjs";
|
|
|
|
export async function openOmniRouteDb() {
|
|
const dataDir = resolveDataDir();
|
|
const dbPath = resolveStoragePath(dataDir);
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
|
|
let Database;
|
|
try {
|
|
Database = (await import("better-sqlite3")).default;
|
|
} catch {
|
|
throw new Error("better-sqlite3 is not installed. Run npm install before using setup.");
|
|
}
|
|
|
|
let db;
|
|
try {
|
|
db = new Database(dbPath);
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : String(error);
|
|
if (message.includes("NODE_MODULE_VERSION") || message.includes("ERR_DLOPEN_FAILED")) {
|
|
throw new Error(
|
|
"better-sqlite3 native binding is incompatible with this Node.js runtime. " +
|
|
"Run `npm rebuild better-sqlite3` in the OmniRoute project and try again."
|
|
);
|
|
}
|
|
throw error;
|
|
}
|
|
|
|
db.pragma("journal_mode = WAL");
|
|
ensureSettingsSchema(db);
|
|
ensureProviderSchema(db);
|
|
|
|
return { db, dataDir, dbPath };
|
|
}
|