From 42559364e46830b52093d1b6306e44ea03a0c2c7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 31 Aug 2025 20:28:21 +0300 Subject: [PATCH] chore(dx/server): improve asset management for DB init --- apps/server/src/services/assets.ts | 10 ++++++++++ apps/server/src/services/resource_dir.ts | 7 ------- apps/server/src/services/sql_init.ts | 8 ++++---- 3 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 apps/server/src/services/assets.ts diff --git a/apps/server/src/services/assets.ts b/apps/server/src/services/assets.ts new file mode 100644 index 000000000..782ca02d7 --- /dev/null +++ b/apps/server/src/services/assets.ts @@ -0,0 +1,10 @@ +import { join } from "path"; + +const ASSET_ROOT_DIR = process.env.SERVER_ASSET_ROOT_DIR; +if (!ASSET_ROOT_DIR) { + console.error("Missing SERVER_ASSET_ROOT_DIR env."); + process.exit(1); +} + +/** Contains database initialization data such as the demo database and the schema. */ +export const DB_INIT_DIR = join(ASSET_ROOT_DIR, "db") diff --git a/apps/server/src/services/resource_dir.ts b/apps/server/src/services/resource_dir.ts index 35c056af2..c4ecf757f 100644 --- a/apps/server/src/services/resource_dir.ts +++ b/apps/server/src/services/resource_dir.ts @@ -6,15 +6,8 @@ export const RESOURCE_DIR = path.join(getResourceDir(), "assets"); // where the "trilium" executable is const ELECTRON_APP_ROOT_DIR = path.resolve(RESOURCE_DIR, "../.."); -const DB_INIT_DIR = path.resolve(RESOURCE_DIR, "db"); - -if (!fs.existsSync(DB_INIT_DIR)) { - console.error(`Could not find DB initialization directory: ${DB_INIT_DIR}`); - process.exit(1); -} export default { RESOURCE_DIR, - DB_INIT_DIR, ELECTRON_APP_ROOT_DIR }; diff --git a/apps/server/src/services/sql_init.ts b/apps/server/src/services/sql_init.ts index 9fc9ba2e5..0cc7bb255 100644 --- a/apps/server/src/services/sql_init.ts +++ b/apps/server/src/services/sql_init.ts @@ -1,6 +1,5 @@ import log from "./log.js"; import fs from "fs"; -import resourceDir from "./resource_dir.js"; import sql from "./sql.js"; import { isElectron, deferred } from "./utils.js"; import optionService from "./options.js"; @@ -17,6 +16,7 @@ import zipImportService from "./import/zip.js"; import password from "./encryption/password.js"; import backup from "./backup.js"; import eventService from "./events.js"; +import { DB_INIT_DIR } from "./assets.js"; export const dbReady = deferred(); @@ -75,8 +75,8 @@ async function createInitialDatabase(skipDemoDb?: boolean) { throw new Error("DB is already initialized"); } - const schema = fs.readFileSync(`${resourceDir.DB_INIT_DIR}/schema.sql`, "utf-8"); - const demoFile = (!skipDemoDb ? fs.readFileSync(`${resourceDir.DB_INIT_DIR}/demo.zip`) : null); + const schema = fs.readFileSync(`${DB_INIT_DIR}/schema.sql`, "utf-8"); + const demoFile = (!skipDemoDb ? fs.readFileSync(`${DB_INIT_DIR}/demo.zip`) : null); let rootNote!: BNote; @@ -153,7 +153,7 @@ async function createDatabaseForSync(options: OptionRow[], syncServerHost = "", throw new Error("DB is already initialized"); } - const schema = fs.readFileSync(`${resourceDir.DB_INIT_DIR}/schema.sql`, "utf8"); + const schema = fs.readFileSync(`${DB_INIT_DIR}/schema.sql`, "utf8"); // We have to import async since options init requires keyboard actions which require translations. const optionsInitService = (await import("./options_init.js")).default;