From 8e47f333294730554d5a6c95b4a033d497937e6e Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 10 Jan 2026 11:44:54 -0800 Subject: [PATCH] Refactor edit-docs to use edit-docs-config.yaml This removes hardcoded configuration from edit-docs.ts and replaces it with dynamic loading from edit-docs-config.yaml. Changes: - Removed BASE_URL and NOTE_MAPPINGS constants - Removed DOCS_ROOT and USER_GUIDE_ROOT environment variable dependencies - Added js-yaml for YAML parsing - Config paths are resolved relative to repository root The tool now reads configuration from edit-docs-config.yaml, making it easier to customize without code changes. The pnpm script is simplified since it no longer needs to pass complex environment variables. --- apps/edit-docs/package.json | 2 +- apps/edit-docs/src/edit-docs.ts | 64 ++++++++++++++++----------------- edit-docs-config.yaml | 24 +++++++++++++ package.json | 2 ++ pnpm-lock.yaml | 43 ++++++++++------------ 5 files changed, 76 insertions(+), 59 deletions(-) create mode 100644 edit-docs-config.yaml diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index 30df95734..d62727532 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -16,7 +16,7 @@ "fs-extra": "11.3.3" }, "scripts": { - "edit-docs": "cross-env TRILIUM_PORT=37741 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-docs.ts", + "edit-docs": "cross-env TRILIUM_PORT=37741 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store tsx ../../scripts/electron-start.mts src/edit-docs.ts", "edit-demo": "cross-env TRILIUM_PORT=37744 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-demo.ts" } } \ No newline at end of file diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index 762dacc5b..86c56ed27 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -1,14 +1,16 @@ -import fs from "fs/promises"; -import fsExtra from "fs-extra"; -import path from "path"; -import type { NoteMetaFile } from "@triliumnext/server/src/services/meta/note_meta.js"; -import { initializeTranslations } from "@triliumnext/server/src/services/i18n.js"; import debounce from "@triliumnext/client/src/services/debounce.js"; -import { extractZip, importData, initializeDatabase, startElectron } from "./utils.js"; import cls from "@triliumnext/server/src/services/cls.js"; import type { AdvancedExportOptions, ExportFormat } from "@triliumnext/server/src/services/export/zip/abstract_provider.js"; +import { initializeTranslations } from "@triliumnext/server/src/services/i18n.js"; import { parseNoteMetaFile } from "@triliumnext/server/src/services/in_app_help.js"; +import type { NoteMetaFile } from "@triliumnext/server/src/services/meta/note_meta.js"; import type NoteMeta from "@triliumnext/server/src/services/meta/note_meta.js"; +import fs from "fs/promises"; +import fsExtra from "fs-extra"; +import yaml from "js-yaml"; +import path from "path"; + +import { extractZip, importData, initializeDatabase, startElectron } from "./utils.js"; interface NoteMapping { rootNoteId: string; @@ -18,39 +20,33 @@ interface NoteMapping { exportOnly?: boolean; } -const { DOCS_ROOT, USER_GUIDE_ROOT } = process.env; -if (!DOCS_ROOT || !USER_GUIDE_ROOT) { - throw new Error("Missing DOCS_ROOT or USER_GUIDE_ROOT environment variable."); +interface Config { + baseUrl: string; + noteMappings: NoteMapping[]; } -const BASE_URL = "https://docs.triliumnotes.org"; +// Configuration variables +let BASE_URL: string; +let NOTE_MAPPINGS: NoteMapping[]; + +// Load configuration from edit-docs-config.yaml +async function loadConfig() { + const CONFIG_PATH = path.join(__dirname, "../../../edit-docs-config.yaml"); + const configContent = await fs.readFile(CONFIG_PATH, "utf-8"); + const config = yaml.load(configContent) as Config; + + BASE_URL = config.baseUrl; + // Resolve all paths relative to the repository root + const REPO_ROOT = path.join(__dirname, "../../.."); + NOTE_MAPPINGS = config.noteMappings.map((mapping) => ({ + ...mapping, + path: path.join(REPO_ROOT, mapping.path) + })); +} -const NOTE_MAPPINGS: NoteMapping[] = [ - { - rootNoteId: "pOsGYCXsbNQG", - path: path.join(__dirname, DOCS_ROOT, "User Guide"), - format: "markdown" - }, - { - rootNoteId: "pOsGYCXsbNQG", - path: path.join(__dirname, USER_GUIDE_ROOT), - format: "html", - ignoredFiles: ["index.html", "navigation.html", "style.css", "User Guide.html"], - exportOnly: true - }, - { - rootNoteId: "jdjRLhLV3TtI", - path: path.join(__dirname, DOCS_ROOT, "Developer Guide"), - format: "markdown" - }, - { - rootNoteId: "hD3V4hiu2VW4", - path: path.join(__dirname, DOCS_ROOT, "Release Notes"), - format: "markdown" - } -]; async function main() { + await loadConfig(); const initializedPromise = startElectron(() => { // Wait for the import to be finished and the application to be loaded before we listen to changes. setTimeout(() => registerHandlers(), 10_000); diff --git a/edit-docs-config.yaml b/edit-docs-config.yaml new file mode 100644 index 000000000..728523c5c --- /dev/null +++ b/edit-docs-config.yaml @@ -0,0 +1,24 @@ +baseUrl: "https://docs.triliumnotes.org" + +noteMappings: + - rootNoteId: "pOsGYCXsbNQG" + path: "docs/User Guide" + format: "markdown" + + - rootNoteId: "pOsGYCXsbNQG" + path: "apps/server/src/assets/doc_notes/en/User Guide" + format: "html" + ignoredFiles: + - "index.html" + - "navigation.html" + - "style.css" + - "User Guide.html" + exportOnly: true + + - rootNoteId: "jdjRLhLV3TtI" + path: "docs/Developer Guide" + format: "markdown" + + - rootNoteId: "hD3V4hiu2VW4" + path: "docs/Release Notes" + format: "markdown" diff --git a/package.json b/package.json index 251595a85..95b5c1345 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@playwright/test": "1.57.0", "@triliumnext/server": "workspace:*", "@types/express": "5.0.6", + "@types/js-yaml": "4.0.9", "@types/node": "24.10.7", "@vitest/browser-webdriverio": "4.0.16", "@vitest/coverage-v8": "4.0.16", @@ -64,6 +65,7 @@ "happy-dom": "~20.1.0", "http-server": "14.1.1", "jiti": "2.6.1", + "js-yaml": "4.1.1", "jsonc-eslint-parser": "2.4.2", "react-refresh": "0.18.0", "rollup-plugin-webpack-stats": "2.1.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30b925c5b..7ca1bdb55 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,6 +49,9 @@ importers: '@types/express': specifier: 5.0.6 version: 5.0.6 + '@types/js-yaml': + specifier: 4.0.9 + version: 4.0.9 '@types/node': specifier: 24.10.7 version: 24.10.7 @@ -97,6 +100,9 @@ importers: jiti: specifier: 2.6.1 version: 2.6.1 + js-yaml: + specifier: 4.1.1 + version: 4.1.1 jsonc-eslint-parser: specifier: 2.4.2 version: 2.4.2 @@ -5376,6 +5382,9 @@ packages: '@types/jquery@3.5.33': resolution: {integrity: sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g==} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -15022,6 +15031,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15160,6 +15171,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15360,6 +15373,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15369,6 +15384,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15612,8 +15629,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-import-word@47.3.0': dependencies: @@ -15639,8 +15654,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15650,8 +15663,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-line-height@47.3.0': dependencies: @@ -15676,8 +15687,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15701,8 +15710,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.3.0': dependencies: @@ -15831,8 +15838,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15940,8 +15945,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15954,8 +15957,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -16003,8 +16004,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16129,8 +16128,6 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16150,8 +16147,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -20005,6 +20000,8 @@ snapshots: dependencies: '@types/sizzle': 2.3.9 + '@types/js-yaml@4.0.9': {} + '@types/json-schema@7.0.15': {} '@types/jsonfile@6.1.4': @@ -21675,8 +21672,6 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - transitivePeerDependencies: - - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: