From 2c6ba9ba2cbc8b7eff96560f25919f8ffa64010e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 13 Jun 2025 17:42:11 +0300 Subject: [PATCH 001/367] refactor(share): extract note rendering logic --- apps/server/src/share/content_renderer.ts | 91 +++++++++++++++++- apps/server/src/share/routes.ts | 108 +++------------------- 2 files changed, 102 insertions(+), 97 deletions(-) diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index c1c16e48d..e94eb4297 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -1,10 +1,18 @@ import { JSDOM } from "jsdom"; import shaca from "./shaca/shaca.js"; -import assetPath from "../services/asset_path.js"; +import assetPath, { assetUrlFragment } from "../services/asset_path.js"; import shareRoot from "./share_root.js"; import escapeHtml from "escape-html"; import type SNote from "./shaca/entities/snote.js"; import { t } from "i18next"; +import SBranch from "./shaca/entities/sbranch.js"; +import options from "../services/options.js"; +import { getResourceDir, isDev, safeExtractMessageAndStackFromError } from "../services/utils.js"; +import app_path from "../services/app_path.js"; +import ejs from "ejs"; +import log from "../services/log.js"; +import { join } from "path"; +import { readFileSync } from "fs"; /** * Represents the output of the content renderer. @@ -16,6 +24,87 @@ export interface Result { isEmpty?: boolean; } +function getSharedSubTreeRoot(note: SNote): { note?: SNote; branch?: SBranch } { + if (note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) { + // share root itself is not shared + return {}; + } + + // every path leads to share root, but which one to choose? + // for the sake of simplicity, URLs are not note paths + const parentBranch = note.getParentBranches()[0]; + + if (parentBranch.parentNoteId === shareRoot.SHARE_ROOT_NOTE_ID) { + return { + note, + branch: parentBranch + }; + } + + return getSharedSubTreeRoot(parentBranch.getParentNote()); +} + +export function renderNoteContent(note: SNote) { + const { header, content, isEmpty } = getContent(note); + const subRoot = getSharedSubTreeRoot(note); + const showLoginInShareTheme = options.getOption("showLoginInShareTheme"); + const opts = { + note, + header, + content, + isEmpty, + subRoot, + assetPath: isDev ? assetPath : `../${assetPath}`, + assetUrlFragment, + appPath: isDev ? app_path : `../${app_path}`, + showLoginInShareTheme, + t, + isDev + }; + + // Check if the user has their own template. + if (note.hasRelation("shareTemplate")) { + // Get the template note and content + const templateId = note.getRelation("shareTemplate")?.value; + const templateNote = templateId && shaca.getNote(templateId); + + // Make sure the note type is correct + if (templateNote && templateNote.type === "code" && templateNote.mime === "application/x-ejs") { + // EJS caches the result of this so we don't need to pre-cache + const includer = (path: string) => { + const childNote = templateNote.children.find((n) => path === n.title); + if (!childNote) throw new Error(`Unable to find child note: ${path}.`); + if (childNote.type !== "code" || childNote.mime !== "application/x-ejs") throw new Error("Incorrect child note type."); + + const template = childNote.getContent(); + if (typeof template !== "string") throw new Error("Invalid template content type."); + + return { template }; + }; + + // Try to render user's template, w/ fallback to default view + try { + const content = templateNote.getContent(); + if (typeof content === "string") { + return ejs.render(content, opts, { includer }); + } + } catch (e: unknown) { + const [errMessage, errStack] = safeExtractMessageAndStackFromError(e); + log.error(`Rendering user provided share template (${templateId}) threw exception ${errMessage} with stacktrace: ${errStack}`); + } + } + } + + // Render with the default view otherwise. + const templatePath = join(getResourceDir(), "share-theme", "templates", "page.ejs"); + return ejs.render(readFileSync(templatePath, "utf-8"), opts, { + includer: (path) => { + const templatePath = join(getResourceDir(), "share-theme", "templates", `${path}.ejs`); + return { filename: templatePath } + } + }); +} + function getContent(note: SNote) { if (note.isProtected) { return { diff --git a/apps/server/src/share/routes.ts b/apps/server/src/share/routes.ts index 7e18ca505..4b0281ec5 100644 --- a/apps/server/src/share/routes.ts +++ b/apps/server/src/share/routes.ts @@ -4,40 +4,12 @@ import type { Request, Response, Router } from "express"; import shaca from "./shaca/shaca.js"; import shacaLoader from "./shaca/shaca_loader.js"; -import shareRoot from "./share_root.js"; -import contentRenderer from "./content_renderer.js"; -import assetPath, { assetUrlFragment } from "../services/asset_path.js"; -import appPath from "../services/app_path.js"; import searchService from "../services/search/services/search.js"; import SearchContext from "../services/search/search_context.js"; -import log from "../services/log.js"; import type SNote from "./shaca/entities/snote.js"; -import type SBranch from "./shaca/entities/sbranch.js"; import type SAttachment from "./shaca/entities/sattachment.js"; -import utils, { isDev, safeExtractMessageAndStackFromError } from "../services/utils.js"; -import options from "../services/options.js"; -import { t } from "i18next"; -import ejs from "ejs"; - -function getSharedSubTreeRoot(note: SNote): { note?: SNote; branch?: SBranch } { - if (note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) { - // share root itself is not shared - return {}; - } - - // every path leads to share root, but which one to choose? - // for the sake of simplicity, URLs are not note paths - const parentBranch = note.getParentBranches()[0]; - - if (parentBranch.parentNoteId === shareRoot.SHARE_ROOT_NOTE_ID) { - return { - note, - branch: parentBranch - }; - } - - return getSharedSubTreeRoot(parentBranch.getParentNote()); -} +import utils from "../services/utils.js"; +import { renderNoteContent } from "./content_renderer.js"; function addNoIndexHeader(note: SNote, res: Response) { if (note.isLabelTruthy("shareDisallowRobotIndexing")) { @@ -108,8 +80,7 @@ function renderImageAttachment(image: SNote, res: Response, attachmentName: stri let svgString = ""; const attachment = image.getAttachmentByTitle(attachmentName); if (!attachment) { - res.status(404); - renderDefault(res, "404"); + return; } const content = attachment.getContent(); @@ -137,12 +108,19 @@ function renderImageAttachment(image: SNote, res: Response, attachmentName: stri res.send(svg); } +function render404(res: Response) { + res.status(404); + const shareThemePath = `../../share-theme/templates/404.ejs`; + res.render(shareThemePath); +} + function register(router: Router) { + function renderNote(note: SNote, req: Request, res: Response) { if (!note) { console.log("Unable to find note ", note); res.status(404); - renderDefault(res, "404"); + render404(res); return; } @@ -159,63 +137,7 @@ function register(router: Router) { return; } - - const { header, content, isEmpty } = contentRenderer.getContent(note); - const subRoot = getSharedSubTreeRoot(note); - const showLoginInShareTheme = options.getOption("showLoginInShareTheme"); - const opts = { - note, - header, - content, - isEmpty, - subRoot, - assetPath: isDev ? assetPath : `../${assetPath}`, - assetUrlFragment, - appPath: isDev ? appPath : `../${appPath}`, - showLoginInShareTheme, - t, - isDev - }; - let useDefaultView = true; - - // Check if the user has their own template - if (note.hasRelation("shareTemplate")) { - // Get the template note and content - const templateId = note.getRelation("shareTemplate")?.value; - const templateNote = templateId && shaca.getNote(templateId); - - // Make sure the note type is correct - if (templateNote && templateNote.type === "code" && templateNote.mime === "application/x-ejs") { - // EJS caches the result of this so we don't need to pre-cache - const includer = (path: string) => { - const childNote = templateNote.children.find((n) => path === n.title); - if (!childNote) throw new Error(`Unable to find child note: ${path}.`); - if (childNote.type !== "code" || childNote.mime !== "application/x-ejs") throw new Error("Incorrect child note type."); - - const template = childNote.getContent(); - if (typeof template !== "string") throw new Error("Invalid template content type."); - - return { template }; - }; - - // Try to render user's template, w/ fallback to default view - try { - const content = templateNote.getContent(); - if (typeof content === "string") { - const ejsResult = ejs.render(content, opts, { includer }); - res.send(ejsResult); - useDefaultView = false; // Rendering went okay, don't use default view - } - } catch (e: unknown) { - const [errMessage, errStack] = safeExtractMessageAndStackFromError(e); - log.error(`Rendering user provided share template (${templateId}) threw exception ${errMessage} with stacktrace: ${errStack}`); - } - } - } - - if (useDefaultView) { - renderDefault(res, "page", opts); - } + res.send(renderNoteContent(note)); } router.get("/share/", (req, res) => { @@ -399,12 +321,6 @@ function register(router: Router) { }); } -function renderDefault(res: Response>, template: "page" | "404", opts: any = {}) { - // Path is relative to apps/server/dist/assets/views - const shareThemePath = `../../share-theme/templates/${template}.ejs`; - res.render(shareThemePath, opts); -} - export default { register }; From 9c460dbc87791a3ecbe36d54b3784f261ef40926 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 13 Jun 2025 23:10:11 +0300 Subject: [PATCH 002/367] feat(export/zip): get same rendering engine as share --- apps/server/src/becca/entities/bbranch.ts | 5 +++++ apps/server/src/becca/entities/bnote.ts | 16 +++++++++++++++ apps/server/src/services/export/zip.ts | 16 ++++++++++----- apps/server/src/share/content_renderer.ts | 25 +++++++++++++++-------- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/apps/server/src/becca/entities/bbranch.ts b/apps/server/src/becca/entities/bbranch.ts index 00e3ec4b7..b31cadd71 100644 --- a/apps/server/src/becca/entities/bbranch.ts +++ b/apps/server/src/becca/entities/bbranch.ts @@ -278,6 +278,11 @@ class BBranch extends AbstractBeccaEntity { }); } } + + getParentNote() { + return this.parentNote; + } + } export default BBranch; diff --git a/apps/server/src/becca/entities/bnote.ts b/apps/server/src/becca/entities/bnote.ts index 419c9bdfe..650316777 100644 --- a/apps/server/src/becca/entities/bnote.ts +++ b/apps/server/src/becca/entities/bnote.ts @@ -1758,6 +1758,22 @@ class BNote extends AbstractBeccaEntity { return childBranches; } + get encodedTitle() { + return encodeURIComponent(this.title); + } + + getVisibleChildBranches() { + return this.getChildBranches().filter((branch) => !branch.getNote().isLabelTruthy("shareHiddenFromTree")); + } + + getVisibleChildNotes() { + return this.getVisibleChildBranches().map((branch) => branch.getNote()); + } + + hasVisibleChildren() { + return this.getVisibleChildNotes().length > 0; + } + } export default BNote; diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 81c67a21b..f544f2a73 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -19,9 +19,11 @@ import type NoteMeta from "../meta/note_meta.js"; import type AttachmentMeta from "../meta/attachment_meta.js"; import type AttributeMeta from "../meta/attribute_meta.js"; import type BBranch from "../../becca/entities/bbranch.js"; +import type BNote from "../../becca/entities/bnote.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import cssContent from "@triliumnext/ckeditor5/content.css"; +import { renderNoteContent } from "../../share/content_renderer.js"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -314,7 +316,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h } } - function prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { + function prepareContent(note: BNote | undefined, title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { if (["html", "markdown"].includes(noteMeta?.format || "")) { content = content.toString(); content = rewriteFn(content, noteMeta); @@ -329,8 +331,11 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h const cssUrl = `${"../".repeat(noteMeta.notePath.length - 1)}style.css`; const htmlTitle = escapeHtml(title); - // element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 - content = ` + if (note) { + content = renderNoteContent(note); + } else { + // element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 + content = ` @@ -346,6 +351,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h `; + } } return content.length < 100_000 ? html.prettyPrint(content, { indent_size: 2 }) : content; @@ -375,7 +381,7 @@ ${markdownContent}`; let content: string | Buffer = `

This is a clone of a note. Go to its primary location.

`; - content = prepareContent(noteMeta.title, content, noteMeta); + content = prepareContent(undefined, noteMeta.title, content, noteMeta); archive.append(content, { name: filePathPrefix + noteMeta.dataFileName }); @@ -391,7 +397,7 @@ ${markdownContent}`; } if (noteMeta.dataFileName) { - const content = prepareContent(noteMeta.title, note.getContent(), noteMeta); + const content = prepareContent(note, noteMeta.title, note.getContent(), noteMeta); archive.append(content, { name: filePathPrefix + noteMeta.dataFileName, diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index e94eb4297..aad3ab9d2 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -4,6 +4,8 @@ import assetPath, { assetUrlFragment } from "../services/asset_path.js"; import shareRoot from "./share_root.js"; import escapeHtml from "escape-html"; import type SNote from "./shaca/entities/snote.js"; +import BNote from "../becca/entities/bnote.js"; +import type BBranch from "../becca/entities/bbranch.js"; import { t } from "i18next"; import SBranch from "./shaca/entities/sbranch.js"; import options from "../services/options.js"; @@ -24,8 +26,8 @@ export interface Result { isEmpty?: boolean; } -function getSharedSubTreeRoot(note: SNote): { note?: SNote; branch?: SBranch } { - if (note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) { +function getSharedSubTreeRoot(note: SNote | BNote | undefined): { note?: SNote | BNote; branch?: SBranch | BBranch } { + if (!note || note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) { // share root itself is not shared return {}; } @@ -34,6 +36,13 @@ function getSharedSubTreeRoot(note: SNote): { note?: SNote; branch?: SBranch } { // for the sake of simplicity, URLs are not note paths const parentBranch = note.getParentBranches()[0]; + if (note instanceof BNote) { + return { + note, + branch: parentBranch + } + } + if (parentBranch.parentNoteId === shareRoot.SHARE_ROOT_NOTE_ID) { return { note, @@ -44,7 +53,7 @@ function getSharedSubTreeRoot(note: SNote): { note?: SNote; branch?: SBranch } { return getSharedSubTreeRoot(parentBranch.getParentNote()); } -export function renderNoteContent(note: SNote) { +export function renderNoteContent(note: SNote | BNote) { const { header, content, isEmpty } = getContent(note); const subRoot = getSharedSubTreeRoot(note); const showLoginInShareTheme = options.getOption("showLoginInShareTheme"); @@ -105,7 +114,7 @@ export function renderNoteContent(note: SNote) { }); } -function getContent(note: SNote) { +function getContent(note: SNote | BNote) { if (note.isProtected) { return { header: "", @@ -154,7 +163,7 @@ function renderIndex(result: Result) { result.content += ""; } -function renderText(result: Result, note: SNote) { +function renderText(result: Result, note: SNote | BNote) { const document = new JSDOM(result.content || "").window.document; result.isEmpty = document.body.textContent?.trim().length === 0 && document.querySelectorAll("img").length === 0; @@ -247,7 +256,7 @@ export function renderCode(result: Result) { } } -function renderMermaid(result: Result, note: SNote) { +function renderMermaid(result: Result, note: SNote | BNote) { if (typeof result.content !== "string") { return; } @@ -261,11 +270,11 @@ function renderMermaid(result: Result, note: SNote) { `; } -function renderImage(result: Result, note: SNote) { +function renderImage(result: Result, note: SNote | BNote) { result.content = ``; } -function renderFile(note: SNote, result: Result) { +function renderFile(note: SNote | BNote, result: Result) { if (note.mime === "application/pdf") { result.content = ``; } else { From f189deb415e4ee2b67d9a9480c56634ede1c5d20 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 13 Jun 2025 23:22:44 +0300 Subject: [PATCH 003/367] feat(export/zip): get tree to render --- apps/server/src/services/export/zip.ts | 4 ++-- apps/server/src/share/content_renderer.ts | 26 +++++++++++++++++---- packages/share-theme/src/templates/page.ejs | 2 +- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index f544f2a73..a175241d8 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -23,7 +23,7 @@ import type BNote from "../../becca/entities/bnote.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import cssContent from "@triliumnext/ckeditor5/content.css"; -import { renderNoteContent } from "../../share/content_renderer.js"; +import { renderNoteForExport } from "../../share/content_renderer.js"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -332,7 +332,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h const htmlTitle = escapeHtml(title); if (note) { - content = renderNoteContent(note); + content = renderNoteForExport(note, branch); } else { // element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 content = ` diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index aad3ab9d2..465c605ca 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -26,7 +26,12 @@ export interface Result { isEmpty?: boolean; } -function getSharedSubTreeRoot(note: SNote | BNote | undefined): { note?: SNote | BNote; branch?: SBranch | BBranch } { +interface Subroot { + note?: SNote | BNote; + branch?: SBranch | BBranch +} + +function getSharedSubTreeRoot(note: SNote | BNote | undefined): Subroot { if (!note || note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) { // share root itself is not shared return {}; @@ -53,9 +58,21 @@ function getSharedSubTreeRoot(note: SNote | BNote | undefined): { note?: SNote | return getSharedSubTreeRoot(parentBranch.getParentNote()); } -export function renderNoteContent(note: SNote | BNote) { - const { header, content, isEmpty } = getContent(note); +export function renderNoteForExport(note: BNote, parentBranch: BBranch) { + const subRoot: Subroot = { + branch: parentBranch, + note: parentBranch.getNote() + }; + return renderNoteContentInternal(note, subRoot, note.getParentNotes()[0].noteId); +} + +export function renderNoteContent(note: SNote) { const subRoot = getSharedSubTreeRoot(note); + return renderNoteContentInternal(note, subRoot, "_share"); +} + +function renderNoteContentInternal(note: SNote | BNote, subRoot: Subroot, rootNoteId: string) { + const { header, content, isEmpty } = getContent(note); const showLoginInShareTheme = options.getOption("showLoginInShareTheme"); const opts = { note, @@ -68,7 +85,8 @@ export function renderNoteContent(note: SNote | BNote) { appPath: isDev ? app_path : `../${app_path}`, showLoginInShareTheme, t, - isDev + isDev, + rootNoteId }; // Check if the user has their own template. diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index 5c39051eb..ba3d45b44 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -108,7 +108,7 @@ content = content.replaceAll(headingRe, (...match) => { <% const ancestors = []; let notePointer = note; - while (notePointer.parents[0].noteId !== "_share") { + while (notePointer.parents[0].noteId !== rootNoteId) { const pointerParent = notePointer.parents[0]; ancestors.push(pointerParent.noteId); notePointer = pointerParent; From 4d5e866db6f1d526a4f1b5e1947e4cc227fed1d8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 13 Jun 2025 23:47:04 +0300 Subject: [PATCH 004/367] feat(export/zip): get CSS to load --- apps/server/src/services/export/zip.ts | 25 +++++++++--- apps/server/src/share/content_renderer.ts | 45 +++++++++++++++++---- packages/share-theme/src/templates/page.ejs | 10 +---- 3 files changed, 60 insertions(+), 20 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index a175241d8..8d8d2de07 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -2,11 +2,11 @@ import html from "html"; import dateUtils from "../date_utils.js"; -import path from "path"; +import path, { join } from "path"; import mimeTypes from "mime-types"; import mdService from "./markdown.js"; import packageInfo from "../../../package.json" with { type: "json" }; -import { getContentDisposition, escapeHtml, getResourceDir } from "../utils.js"; +import { getContentDisposition, escapeHtml, getResourceDir, isDev } from "../utils.js"; import protectedSessionService from "../protected_session.js"; import sanitize from "sanitize-filename"; import fs from "fs"; @@ -22,7 +22,7 @@ import type BBranch from "../../becca/entities/bbranch.js"; import type BNote from "../../becca/entities/bnote.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; -import cssContent from "@triliumnext/ckeditor5/content.css"; +//import cssContent from "@triliumnext/ckeditor5/content.css"; import { renderNoteForExport } from "../../share/content_renderer.js"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -328,12 +328,13 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h throw new Error("Missing note path."); } - const cssUrl = `${"../".repeat(noteMeta.notePath.length - 1)}style.css`; + const basePath = "../".repeat(noteMeta.notePath.length - 1); const htmlTitle = escapeHtml(title); if (note) { - content = renderNoteForExport(note, branch); + content = renderNoteForExport(note, branch, basePath); } else { + const cssUrl = basePath + "style.css"; // element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 content = ` @@ -518,6 +519,7 @@ ${markdownContent}`; return; } + let cssContent = getShareThemeAssets("css"); archive.append(cssContent, { name: cssMeta.dataFileName }); } @@ -629,6 +631,19 @@ async function exportToZipFile(noteId: string, format: "markdown" | "html", zipF log.info(`Exported '${noteId}' with format '${format}' to '${zipFilePath}'`); } +function getShareThemeAssets(extension: string) { + let path: string | undefined; + if (isDev) { + path = join(getResourceDir(), "..", "..", "client", "dist", "src", `share.${extension}`); + } + + if (!path) { + throw new Error("Not yet defined."); + } + + return fs.readFileSync(path, "utf-8"); +} + export default { exportToZip, exportToZipFile diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 465c605ca..4fbae0586 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -16,6 +16,8 @@ import log from "../services/log.js"; import { join } from "path"; import { readFileSync } from "fs"; +const shareAdjustedAssetPath = isDev ? assetPath : `../${assetPath}`; + /** * Represents the output of the content renderer. */ @@ -58,20 +60,50 @@ function getSharedSubTreeRoot(note: SNote | BNote | undefined): Subroot { return getSharedSubTreeRoot(parentBranch.getParentNote()); } -export function renderNoteForExport(note: BNote, parentBranch: BBranch) { +export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath: string) { const subRoot: Subroot = { branch: parentBranch, note: parentBranch.getNote() }; - return renderNoteContentInternal(note, subRoot, note.getParentNotes()[0].noteId); + + return renderNoteContentInternal(note, { + subRoot, + rootNoteId: note.getParentNotes()[0].noteId, + cssToLoad: [ + `${basePath}style.css` + ] + }); } export function renderNoteContent(note: SNote) { const subRoot = getSharedSubTreeRoot(note); - return renderNoteContentInternal(note, subRoot, "_share"); + + // Determine CSS to load. + const cssToLoad: string[] = []; + if (!isDev && !note.isLabelTruthy("shareOmitDefaultCss")) { + cssToLoad.push(`${shareAdjustedAssetPath}/src/share.css`); + cssToLoad.push(`${shareAdjustedAssetPath}/src/boxicons.css`); + } + + // Support custom CSS too. + for (const cssRelation of note.getRelations("shareCss")) { + cssToLoad.push(`api/notes/${cssRelation.value}/download`); + } + + return renderNoteContentInternal(note, { + subRoot, + rootNoteId: "_share", + cssToLoad + }); } -function renderNoteContentInternal(note: SNote | BNote, subRoot: Subroot, rootNoteId: string) { +interface RenderArgs { + subRoot: Subroot; + rootNoteId: string; + cssToLoad: string[]; +} + +function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) { const { header, content, isEmpty } = getContent(note); const showLoginInShareTheme = options.getOption("showLoginInShareTheme"); const opts = { @@ -79,14 +111,13 @@ function renderNoteContentInternal(note: SNote | BNote, subRoot: Subroot, rootNo header, content, isEmpty, - subRoot, - assetPath: isDev ? assetPath : `../${assetPath}`, + assetPath: shareAdjustedAssetPath, assetUrlFragment, appPath: isDev ? app_path : `../${app_path}`, showLoginInShareTheme, t, isDev, - rootNoteId + ...renderArgs }; // Check if the user has their own template. diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index ba3d45b44..820e32ad5 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -6,14 +6,8 @@ api/notes/<%= note.getRelation("shareFavicon").value %>/download<% } else { %>../favicon.ico<% } %>"> - - <% if (!isDev && !note.isLabelTruthy("shareOmitDefaultCss")) { %> - - - <% } %> - - <% for (const cssRelation of note.getRelations("shareCss")) { %> - + <% for (const url of cssToLoad) { %> + <% } %> <% for (const jsRelation of note.getRelations("shareJs")) { %> From d8958adea5c13ced699db18fff9dace3db7689dd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 14 Jun 2025 00:07:55 +0300 Subject: [PATCH 005/367] feat(export/zip): basic tree navigation --- apps/server/src/services/export/zip.ts | 3 +++ packages/share-theme/src/templates/tree_item.ejs | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 8d8d2de07..bb3e382be 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -333,6 +333,9 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h if (note) { content = renderNoteForExport(note, branch, basePath); + + // TODO: Fix double rewrite. + content = rewriteFn(content, noteMeta); } else { const cssUrl = basePath + "style.css"; // element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 diff --git a/packages/share-theme/src/templates/tree_item.ejs b/packages/share-theme/src/templates/tree_item.ejs index b033ad2bc..99da978fa 100644 --- a/packages/share-theme/src/templates/tree_item.ejs +++ b/packages/share-theme/src/templates/tree_item.ejs @@ -1,7 +1,16 @@ <% const linkClass = `type-${note.type}` + (activeNote.noteId === note.noteId ? " active" : ""); const isExternalLink = note.hasLabel("shareExternal"); -const linkHref = isExternalLink ? note.getLabelValue("shareExternal") : `./${note.shareId}`; +let linkHref; + +if (isExternalLink) { + linkHref = note.getLabelValue("shareExternal"); +} else if (note.shareId) { + linkHref = `./${note.shareId}`; +} else { + linkHref = `#${note.getBestNotePath().join("/")}`; +} + const target = isExternalLink ? ` target="_blank" rel="noopener noreferrer"` : ""; %> From 01a552ceb515ff62fd7ec17f9367ed52fac3c2ed Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 14 Jun 2025 00:52:56 +0300 Subject: [PATCH 006/367] feat(export/zip): get boxicons to work --- apps/server/src/services/export/zip.ts | 53 +++++++++++++++-------- apps/server/src/share/content_renderer.ts | 3 +- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index bb3e382be..62a1be37e 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -517,13 +517,15 @@ ${markdownContent}`; archive.append(fullHtml, { name: indexMeta.dataFileName }); } - function saveCss(rootMeta: NoteMeta, cssMeta: NoteMeta) { - if (!cssMeta.dataFileName) { - return; - } + function saveAssets(rootMeta: NoteMeta, assetsMeta: NoteMeta[]) { + for (const assetMeta of assetsMeta) { + if (!assetMeta.dataFileName) { + continue; + } - let cssContent = getShareThemeAssets("css"); - archive.append(cssContent, { name: cssMeta.dataFileName }); + let cssContent = getShareThemeAssets(assetMeta.dataFileName); + archive.append(cssContent, { name: assetMeta.dataFileName }); + } } const existingFileNames: Record = format === "html" ? { navigation: 0, index: 1 } : {}; @@ -540,7 +542,7 @@ ${markdownContent}`; let navigationMeta: NoteMeta | null = null; let indexMeta: NoteMeta | null = null; - let cssMeta: NoteMeta | null = null; + let assetsMeta: NoteMeta[] = []; if (format === "html") { navigationMeta = { @@ -557,12 +559,24 @@ ${markdownContent}`; metaFile.files.push(indexMeta); - cssMeta = { - noImport: true, - dataFileName: "style.css" - }; + const assets = [ + "style.css", + "boxicons.css", + "boxicons.eot", + "boxicons.woff2", + "boxicons.woff", + "boxicons.ttf", + "boxicons.svg", + ]; - metaFile.files.push(cssMeta); + for (const asset of assets) { + const assetMeta = { + noImport: true, + dataFileName: asset + }; + assetsMeta.push(assetMeta); + metaFile.files.push(assetMeta); + } } for (const noteMeta of Object.values(noteIdToMeta)) { @@ -596,13 +610,13 @@ ${markdownContent}`; saveNote(rootMeta, ""); if (format === "html") { - if (!navigationMeta || !indexMeta || !cssMeta) { + if (!navigationMeta || !indexMeta || !assetsMeta) { throw new Error("Missing meta."); } saveNavigation(rootMeta, navigationMeta); saveIndex(rootMeta, indexMeta); - saveCss(rootMeta, cssMeta); + saveAssets(rootMeta, assetsMeta); } const note = branch.getNote(); @@ -634,17 +648,22 @@ async function exportToZipFile(noteId: string, format: "markdown" | "html", zipF log.info(`Exported '${noteId}' with format '${format}' to '${zipFilePath}'`); } -function getShareThemeAssets(extension: string) { +function getShareThemeAssets(nameWithExtension: string) { + // Rename share.css to style.css. + if (nameWithExtension === "style.css") { + nameWithExtension = "share.css"; + } + let path: string | undefined; if (isDev) { - path = join(getResourceDir(), "..", "..", "client", "dist", "src", `share.${extension}`); + path = join(getResourceDir(), "..", "..", "client", "dist", "src", nameWithExtension); } if (!path) { throw new Error("Not yet defined."); } - return fs.readFileSync(path, "utf-8"); + return fs.readFileSync(path); } export default { diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 4fbae0586..0a85f17d2 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -70,7 +70,8 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath subRoot, rootNoteId: note.getParentNotes()[0].noteId, cssToLoad: [ - `${basePath}style.css` + `${basePath}style.css`, + `${basePath}boxicons.css` ] }); } From d3115e834ad808071d3c52ac4f7bce0f2d4520bb Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 14 Jun 2025 01:01:12 +0300 Subject: [PATCH 007/367] feat(export/zip): get logo to work --- apps/server/src/services/export/zip.ts | 6 +++++- apps/server/src/share/content_renderer.ts | 10 ++++++++-- packages/share-theme/src/templates/page.ejs | 2 -- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 62a1be37e..046b7369c 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -24,6 +24,7 @@ import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; //import cssContent from "@triliumnext/ckeditor5/content.css"; import { renderNoteForExport } from "../../share/content_renderer.js"; +import { RESOURCE_DIR } from "../resource_dir.js"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -567,6 +568,7 @@ ${markdownContent}`; "boxicons.woff", "boxicons.ttf", "boxicons.svg", + "icon-color.svg" ]; for (const asset of assets) { @@ -655,7 +657,9 @@ function getShareThemeAssets(nameWithExtension: string) { } let path: string | undefined; - if (isDev) { + if (nameWithExtension === "icon-color.svg") { + path = join(RESOURCE_DIR, "images", nameWithExtension); + } else if (isDev) { path = join(getResourceDir(), "..", "..", "client", "dist", "src", nameWithExtension); } diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 0a85f17d2..346d9743e 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -72,7 +72,8 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath cssToLoad: [ `${basePath}style.css`, `${basePath}boxicons.css` - ] + ], + logoUrl: `${basePath}icon-color.svg` }); } @@ -91,10 +92,14 @@ export function renderNoteContent(note: SNote) { cssToLoad.push(`api/notes/${cssRelation.value}/download`); } + const customLogoId = note.getRelation("shareLogo")?.value; + const logoUrl = customLogoId ? `api/images/${customLogoId}/image.png` : `../${assetUrlFragment}/images/icon-color.svg`; + return renderNoteContentInternal(note, { subRoot, rootNoteId: "_share", - cssToLoad + cssToLoad, + logoUrl }); } @@ -102,6 +107,7 @@ interface RenderArgs { subRoot: Subroot; rootNoteId: string; cssToLoad: string[]; + logoUrl: string; } function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) { diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index 820e32ad5..8b4609020 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -49,8 +49,6 @@ <% -const customLogoId = subRoot.note.getRelation("shareLogo")?.value; -const logoUrl = customLogoId ? `api/images/${customLogoId}/image.png` : `../${assetUrlFragment}/images/icon-color.svg`; const logoWidth = subRoot.note.getLabelValue("shareLogoWidth") ?? 53; const logoHeight = subRoot.note.getLabelValue("shareLogoHeight") ?? 40; const mobileLogoHeight = logoHeight && logoWidth ? 32 / (logoWidth / logoHeight) : ""; From 01beebf660c8f11c0b0fe576b72a535524e0b107 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 14 Jun 2025 01:23:02 +0300 Subject: [PATCH 008/367] feat(export/zip): load script as well --- apps/server/src/services/export/zip.ts | 3 +++ apps/server/src/share/content_renderer.ts | 18 +++++++++++++++--- packages/share-theme/src/templates/page.ejs | 4 ++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 046b7369c..7034f8e18 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -562,6 +562,7 @@ ${markdownContent}`; const assets = [ "style.css", + "script.js", "boxicons.css", "boxicons.eot", "boxicons.woff2", @@ -654,6 +655,8 @@ function getShareThemeAssets(nameWithExtension: string) { // Rename share.css to style.css. if (nameWithExtension === "style.css") { nameWithExtension = "share.css"; + } else if (nameWithExtension === "script.js") { + nameWithExtension = "share.js"; } let path: string | undefined; diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 346d9743e..041e5cc17 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -17,6 +17,7 @@ import { join } from "path"; import { readFileSync } from "fs"; const shareAdjustedAssetPath = isDev ? assetPath : `../${assetPath}`; +const shareAdjustedAppPath = isDev ? app_path : `../${app_path}`; /** * Represents the output of the content renderer. @@ -73,6 +74,9 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath `${basePath}style.css`, `${basePath}boxicons.css` ], + jsToLoad: [ + `${basePath}script.js` + ], logoUrl: `${basePath}icon-color.svg` }); } @@ -86,12 +90,18 @@ export function renderNoteContent(note: SNote) { cssToLoad.push(`${shareAdjustedAssetPath}/src/share.css`); cssToLoad.push(`${shareAdjustedAssetPath}/src/boxicons.css`); } - - // Support custom CSS too. for (const cssRelation of note.getRelations("shareCss")) { cssToLoad.push(`api/notes/${cssRelation.value}/download`); } + // Determine JS to load. + const jsToLoad: string[] = [ + `${shareAdjustedAppPath}/share.js` + ]; + for (const jsRelation of note.getRelations("shareJs")) { + jsToLoad.push(`api/notes/${jsRelation.value}/download`); + } + const customLogoId = note.getRelation("shareLogo")?.value; const logoUrl = customLogoId ? `api/images/${customLogoId}/image.png` : `../${assetUrlFragment}/images/icon-color.svg`; @@ -99,6 +109,7 @@ export function renderNoteContent(note: SNote) { subRoot, rootNoteId: "_share", cssToLoad, + jsToLoad, logoUrl }); } @@ -107,6 +118,7 @@ interface RenderArgs { subRoot: Subroot; rootNoteId: string; cssToLoad: string[]; + jsToLoad: string[]; logoUrl: string; } @@ -120,7 +132,7 @@ function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) isEmpty, assetPath: shareAdjustedAssetPath, assetUrlFragment, - appPath: isDev ? app_path : `../${app_path}`, + appPath: shareAdjustedAppPath, showLoginInShareTheme, t, isDev, diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index 8b4609020..243f788a1 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -9,8 +9,8 @@ <% for (const url of cssToLoad) { %> <% } %> - <% for (const jsRelation of note.getRelations("shareJs")) { %> - + <% for (const url of jsToLoad) { %> + <% } %> <% if (note.hasLabel("shareDisallowRobotIndexing")) { %> From c5196721d4ffe3ad0c05d99c5f85b5ee0ac022dd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 15:36:10 +0300 Subject: [PATCH 009/367] chore(nx): sync tsconfig --- apps/server/tsconfig.app.json | 3 --- apps/server/tsconfig.json | 3 --- 2 files changed, 6 deletions(-) diff --git a/apps/server/tsconfig.app.json b/apps/server/tsconfig.app.json index eb7f102aa..61f4a77fe 100644 --- a/apps/server/tsconfig.app.json +++ b/apps/server/tsconfig.app.json @@ -34,9 +34,6 @@ "src/**/*.spec.jsx" ], "references": [ - { - "path": "../../packages/ckeditor5/tsconfig.lib.json" - }, { "path": "../../packages/turndown-plugin-gfm/tsconfig.lib.json" }, diff --git a/apps/server/tsconfig.json b/apps/server/tsconfig.json index 6bc224295..baacd3fa5 100644 --- a/apps/server/tsconfig.json +++ b/apps/server/tsconfig.json @@ -3,9 +3,6 @@ "files": [], "include": [], "references": [ - { - "path": "../../packages/ckeditor5" - }, { "path": "../../packages/turndown-plugin-gfm" }, From dfd575b6ebb0be9d2c0b2aae962478eed634dcbf Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 16:08:31 +0300 Subject: [PATCH 010/367] refactor(export/zip): extract into separate provider --- apps/server/src/services/export/zip.ts | 207 +++--------------- .../services/export/zip/abstract_provider.ts | 27 +++ apps/server/src/services/export/zip/html.ts | 135 ++++++++++++ 3 files changed, 188 insertions(+), 181 deletions(-) create mode 100644 apps/server/src/services/export/zip/abstract_provider.ts create mode 100644 apps/server/src/services/export/zip/html.ts diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 7034f8e18..6caffac86 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -2,11 +2,11 @@ import html from "html"; import dateUtils from "../date_utils.js"; -import path, { join } from "path"; +import path from "path"; import mimeTypes from "mime-types"; import mdService from "./markdown.js"; import packageInfo from "../../../package.json" with { type: "json" }; -import { getContentDisposition, escapeHtml, getResourceDir, isDev } from "../utils.js"; +import { getContentDisposition, escapeHtml } from "../utils.js"; import protectedSessionService from "../protected_session.js"; import sanitize from "sanitize-filename"; import fs from "fs"; @@ -19,12 +19,10 @@ import type NoteMeta from "../meta/note_meta.js"; import type AttachmentMeta from "../meta/attachment_meta.js"; import type AttributeMeta from "../meta/attribute_meta.js"; import type BBranch from "../../becca/entities/bbranch.js"; -import type BNote from "../../becca/entities/bnote.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; -//import cssContent from "@triliumnext/ckeditor5/content.css"; -import { renderNoteForExport } from "../../share/content_renderer.js"; -import { RESOURCE_DIR } from "../resource_dir.js"; +import HtmlExportProvider from "./zip/html.js"; +import { ZipExportProvider } from "./zip/abstract_provider.js"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -317,7 +315,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h } } - function prepareContent(note: BNote | undefined, title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { + function prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { if (["html", "markdown"].includes(noteMeta?.format || "")) { content = content.toString(); content = rewriteFn(content, noteMeta); @@ -329,18 +327,11 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h throw new Error("Missing note path."); } - const basePath = "../".repeat(noteMeta.notePath.length - 1); + const cssUrl = `${"../".repeat(noteMeta.notePath.length - 1)}style.css`; const htmlTitle = escapeHtml(title); - if (note) { - content = renderNoteForExport(note, branch, basePath); - - // TODO: Fix double rewrite. - content = rewriteFn(content, noteMeta); - } else { - const cssUrl = basePath + "style.css"; - // element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 - content = ` + // element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 + content = ` @@ -356,7 +347,6 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h `; - } } return content.length < 100_000 ? html.prettyPrint(content, { indent_size: 2 }) : content; @@ -386,7 +376,7 @@ ${markdownContent}`; let content: string | Buffer = `

This is a clone of a note. Go to its primary location.

`; - content = prepareContent(undefined, noteMeta.title, content, noteMeta); + content = prepareContent(noteMeta.title, content, noteMeta); archive.append(content, { name: filePathPrefix + noteMeta.dataFileName }); @@ -402,7 +392,7 @@ ${markdownContent}`; } if (noteMeta.dataFileName) { - const content = prepareContent(note, noteMeta.title, note.getContent(), noteMeta); + const content = prepareContent(noteMeta.title, note.getContent(), noteMeta); archive.append(content, { name: filePathPrefix + noteMeta.dataFileName, @@ -438,97 +428,6 @@ ${markdownContent}`; } } - function saveNavigation(rootMeta: NoteMeta, navigationMeta: NoteMeta) { - if (!navigationMeta.dataFileName) { - return; - } - - function saveNavigationInner(meta: NoteMeta) { - let html = "
  • "; - - const escapedTitle = escapeHtml(`${meta.prefix ? `${meta.prefix} - ` : ""}${meta.title}`); - - if (meta.dataFileName && meta.noteId) { - const targetUrl = getNoteTargetUrl(meta.noteId, rootMeta); - - html += `${escapedTitle}`; - } else { - html += escapedTitle; - } - - if (meta.children && meta.children.length > 0) { - html += "
      "; - - for (const child of meta.children) { - html += saveNavigationInner(child); - } - - html += "
    "; - } - - return `${html}
  • `; - } - - const fullHtml = ` - - - - - -
      ${saveNavigationInner(rootMeta)}
    - -`; - const prettyHtml = fullHtml.length < 100_000 ? html.prettyPrint(fullHtml, { indent_size: 2 }) : fullHtml; - - archive.append(prettyHtml, { name: navigationMeta.dataFileName }); - } - - function saveIndex(rootMeta: NoteMeta, indexMeta: NoteMeta) { - let firstNonEmptyNote; - let curMeta = rootMeta; - - if (!indexMeta.dataFileName) { - return; - } - - while (!firstNonEmptyNote) { - if (curMeta.dataFileName && curMeta.noteId) { - firstNonEmptyNote = getNoteTargetUrl(curMeta.noteId, rootMeta); - } - - if (curMeta.children && curMeta.children.length > 0) { - curMeta = curMeta.children[0]; - } else { - break; - } - } - - const fullHtml = ` - - - - - - - - - -`; - - archive.append(fullHtml, { name: indexMeta.dataFileName }); - } - - function saveAssets(rootMeta: NoteMeta, assetsMeta: NoteMeta[]) { - for (const assetMeta of assetsMeta) { - if (!assetMeta.dataFileName) { - continue; - } - - let cssContent = getShareThemeAssets(assetMeta.dataFileName); - archive.append(cssContent, { name: assetMeta.dataFileName }); - } - } - const existingFileNames: Record = format === "html" ? { navigation: 0, index: 1 } : {}; const rootMeta = createNoteMeta(branch, { notePath: [] }, existingFileNames); if (!rootMeta) { @@ -541,47 +440,23 @@ ${markdownContent}`; files: [rootMeta] }; - let navigationMeta: NoteMeta | null = null; - let indexMeta: NoteMeta | null = null; - let assetsMeta: NoteMeta[] = []; - - if (format === "html") { - navigationMeta = { - noImport: true, - dataFileName: "navigation.html" - }; - - metaFile.files.push(navigationMeta); - - indexMeta = { - noImport: true, - dataFileName: "index.html" - }; - - metaFile.files.push(indexMeta); - - const assets = [ - "style.css", - "script.js", - "boxicons.css", - "boxicons.eot", - "boxicons.woff2", - "boxicons.woff", - "boxicons.ttf", - "boxicons.svg", - "icon-color.svg" - ]; - - for (const asset of assets) { - const assetMeta = { - noImport: true, - dataFileName: asset - }; - assetsMeta.push(assetMeta); - metaFile.files.push(assetMeta); - } + let provider: ZipExportProvider; + switch (format) { + case "html": + provider = new HtmlExportProvider({ + getNoteTargetUrl, + metaFile, + archive, + rootMeta + }); + break; + case "markdown": + default: + throw new Error(); } + provider.prepareMeta(); + for (const noteMeta of Object.values(noteIdToMeta)) { // filter out relations which are not inside this export noteMeta.attributes = (noteMeta.attributes || []).filter((attr) => { @@ -612,15 +487,7 @@ ${markdownContent}`; saveNote(rootMeta, ""); - if (format === "html") { - if (!navigationMeta || !indexMeta || !assetsMeta) { - throw new Error("Missing meta."); - } - - saveNavigation(rootMeta, navigationMeta); - saveIndex(rootMeta, indexMeta); - saveAssets(rootMeta, assetsMeta); - } + provider.afterDone(); const note = branch.getNote(); const zipFileName = `${branch.prefix ? `${branch.prefix} - ` : ""}${note.getTitleOrProtected()}.zip`; @@ -651,28 +518,6 @@ async function exportToZipFile(noteId: string, format: "markdown" | "html", zipF log.info(`Exported '${noteId}' with format '${format}' to '${zipFilePath}'`); } -function getShareThemeAssets(nameWithExtension: string) { - // Rename share.css to style.css. - if (nameWithExtension === "style.css") { - nameWithExtension = "share.css"; - } else if (nameWithExtension === "script.js") { - nameWithExtension = "share.js"; - } - - let path: string | undefined; - if (nameWithExtension === "icon-color.svg") { - path = join(RESOURCE_DIR, "images", nameWithExtension); - } else if (isDev) { - path = join(getResourceDir(), "..", "..", "client", "dist", "src", nameWithExtension); - } - - if (!path) { - throw new Error("Not yet defined."); - } - - return fs.readFileSync(path); -} - export default { exportToZip, exportToZipFile diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts new file mode 100644 index 000000000..264dde0a7 --- /dev/null +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -0,0 +1,27 @@ +import { Archiver } from "archiver"; +import type { default as NoteMeta, NoteMetaFile } from "../../meta/note_meta.js"; + +interface ZipExportProviderData { + getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; + metaFile: NoteMetaFile; + rootMeta: NoteMeta; + archive: Archiver; +} + +export abstract class ZipExportProvider { + + metaFile: NoteMetaFile; + getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; + rootMeta: NoteMeta; + archive: Archiver; + + constructor(data: ZipExportProviderData) { + this.metaFile = data.metaFile; + this.getNoteTargetUrl = data.getNoteTargetUrl; + this.rootMeta = data.rootMeta; + this.archive = data.archive; + } + + abstract prepareMeta(): void; + abstract afterDone(): void; +} diff --git a/apps/server/src/services/export/zip/html.ts b/apps/server/src/services/export/zip/html.ts new file mode 100644 index 000000000..517552e1d --- /dev/null +++ b/apps/server/src/services/export/zip/html.ts @@ -0,0 +1,135 @@ +import type NoteMeta from "../../meta/note_meta.js"; +import { escapeHtml } from "../../utils"; +import cssContent from "@triliumnext/ckeditor5/content.css"; +import html from "html"; +import { ZipExportProvider } from "./abstract_provider.js"; + +export default class HtmlExportProvider extends ZipExportProvider { + + private navigationMeta: NoteMeta | null = null; + private indexMeta: NoteMeta | null = null; + private cssMeta: NoteMeta | null = null; + + prepareMeta() { + this.navigationMeta = { + noImport: true, + dataFileName: "navigation.html" + }; + + this.metaFile.files.push(this.navigationMeta); + + this.indexMeta = { + noImport: true, + dataFileName: "index.html" + }; + + this.metaFile.files.push(this.indexMeta); + + this.cssMeta = { + noImport: true, + dataFileName: "style.css" + }; + + this.metaFile.files.push(this.cssMeta); + } + + afterDone() { + if (!this.navigationMeta || !this.indexMeta || !this.cssMeta) { + throw new Error("Missing meta."); + } + + this.#saveNavigation(this.rootMeta, this.navigationMeta); + this.#saveIndex(this.rootMeta, this.indexMeta); + this.#saveCss(this.rootMeta, this.cssMeta); + } + + #saveNavigationInner(meta: NoteMeta) { + let html = "
  • "; + + const escapedTitle = escapeHtml(`${meta.prefix ? `${meta.prefix} - ` : ""}${meta.title}`); + + if (meta.dataFileName && meta.noteId) { + const targetUrl = this.getNoteTargetUrl(meta.noteId, this.rootMeta); + + html += `${escapedTitle}`; + } else { + html += escapedTitle; + } + + if (meta.children && meta.children.length > 0) { + html += "
      "; + + for (const child of meta.children) { + html += this.#saveNavigationInner(child); + } + + html += "
    "; + } + + return `${html}
  • `; + } + + #saveNavigation(rootMeta: NoteMeta, navigationMeta: NoteMeta) { + if (!navigationMeta.dataFileName) { + return; + } + + const fullHtml = ` + + + + + +
      ${this.#saveNavigationInner(rootMeta)}
    + + `; + const prettyHtml = fullHtml.length < 100_000 ? html.prettyPrint(fullHtml, { indent_size: 2 }) : fullHtml; + + this.archive.append(prettyHtml, { name: navigationMeta.dataFileName }); + } + + #saveIndex(rootMeta: NoteMeta, indexMeta: NoteMeta) { + let firstNonEmptyNote; + let curMeta = rootMeta; + + if (!indexMeta.dataFileName) { + return; + } + + while (!firstNonEmptyNote) { + if (curMeta.dataFileName && curMeta.noteId) { + firstNonEmptyNote = this.getNoteTargetUrl(curMeta.noteId, rootMeta); + } + + if (curMeta.children && curMeta.children.length > 0) { + curMeta = curMeta.children[0]; + } else { + break; + } + } + + const fullHtml = ` + + + + + + + + + +`; + + this.archive.append(fullHtml, { name: indexMeta.dataFileName }); + } + + #saveCss(rootMeta: NoteMeta, cssMeta: NoteMeta) { + if (!cssMeta.dataFileName) { + return; + } + + this.archive.append(cssContent, { name: cssMeta.dataFileName }); + } + +} + From e529633b8bde4a36b83c982d24c1c397dcfb6bf1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 16:17:29 +0300 Subject: [PATCH 011/367] chore(export/zip): bring back markdown exporter --- apps/server/src/services/export/zip.ts | 18 +++++++++++------- .../services/export/zip/abstract_provider.ts | 2 +- .../server/src/services/export/zip/markdown.ts | 8 ++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 apps/server/src/services/export/zip/markdown.ts diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 6caffac86..f6c131d87 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -22,7 +22,8 @@ import type BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import HtmlExportProvider from "./zip/html.js"; -import { ZipExportProvider } from "./zip/abstract_provider.js"; +import { ZipExportProvider, ZipExportProviderData } from "./zip/abstract_provider.js"; +import MarkdownExportProvider from "./zip/markdown.js"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -441,16 +442,19 @@ ${markdownContent}`; }; let provider: ZipExportProvider; + const providerData: ZipExportProviderData = { + getNoteTargetUrl, + metaFile, + archive, + rootMeta + }; switch (format) { case "html": - provider = new HtmlExportProvider({ - getNoteTargetUrl, - metaFile, - archive, - rootMeta - }); + provider = new HtmlExportProvider(providerData); break; case "markdown": + provider = new MarkdownExportProvider(providerData); + break; default: throw new Error(); } diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index 264dde0a7..5f3502107 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -1,7 +1,7 @@ import { Archiver } from "archiver"; import type { default as NoteMeta, NoteMetaFile } from "../../meta/note_meta.js"; -interface ZipExportProviderData { +export interface ZipExportProviderData { getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; metaFile: NoteMetaFile; rootMeta: NoteMeta; diff --git a/apps/server/src/services/export/zip/markdown.ts b/apps/server/src/services/export/zip/markdown.ts new file mode 100644 index 000000000..2f8ac13bc --- /dev/null +++ b/apps/server/src/services/export/zip/markdown.ts @@ -0,0 +1,8 @@ +import { ZipExportProvider } from "./abstract_provider" + +export default class MarkdownExportProvider extends ZipExportProvider { + + prepareMeta() { } + afterDone() { } + +} From 55bb2fdb9b855e68a1df6006e9858b8eb5287052 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 16:22:42 +0300 Subject: [PATCH 012/367] refactor(export/zip): extract prepare content into providers --- apps/server/src/services/export/zip.ts | 64 +------------------ .../services/export/zip/abstract_provider.ts | 22 +++++++ apps/server/src/services/export/zip/html.ts | 35 ++++++++++ .../src/services/export/zip/markdown.ts | 18 ++++++ 4 files changed, 77 insertions(+), 62 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index f6c131d87..84d84871c 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -1,10 +1,8 @@ "use strict"; -import html from "html"; import dateUtils from "../date_utils.js"; import path from "path"; import mimeTypes from "mime-types"; -import mdService from "./markdown.js"; import packageInfo from "../../../package.json" with { type: "json" }; import { getContentDisposition, escapeHtml } from "../utils.js"; import protectedSessionService from "../protected_session.js"; @@ -22,27 +20,9 @@ import type BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import HtmlExportProvider from "./zip/html.js"; -import { ZipExportProvider, ZipExportProviderData } from "./zip/abstract_provider.js"; +import { AdvancedExportOptions, ZipExportProvider, ZipExportProviderData } from "./zip/abstract_provider.js"; import MarkdownExportProvider from "./zip/markdown.js"; -type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; - -export interface AdvancedExportOptions { - /** - * If `true`, then only the note's content will be kept. If `false` (default), then each page will have its own template. - */ - skipHtmlTemplate?: boolean; - - /** - * Provides a custom function to rewrite the links found in HTML or Markdown notes. This method is called for every note imported, if it's of the right type. - * - * @param originalRewriteLinks the original rewrite links function. Can be used to access the default behaviour without having to reimplement it. - * @param getNoteTargetUrl the method to obtain a note's target URL, used internally by `originalRewriteLinks` but can be used here as well. - * @returns a function to rewrite the links in HTML or Markdown notes. - */ - customRewriteLinks?: (originalRewriteLinks: RewriteLinksFn, getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null) => RewriteLinksFn; -} - async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "html" | "markdown", res: Response | fs.WriteStream, setHeaders = true, zipExportOptions?: AdvancedExportOptions) { if (!["html", "markdown"].includes(format)) { throw new ValidationError(`Only 'html' and 'markdown' allowed as export format, '${format}' given`); @@ -322,47 +302,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h content = rewriteFn(content, noteMeta); } - if (noteMeta.format === "html" && typeof content === "string") { - if (!content.substr(0, 100).toLowerCase().includes(" element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 - content = ` - - - - - - ${htmlTitle} - - -
    -

    ${htmlTitle}

    - -
    ${content}
    -
    - -`; - } - - return content.length < 100_000 ? html.prettyPrint(content, { indent_size: 2 }) : content; - } else if (noteMeta.format === "markdown" && typeof content === "string") { - let markdownContent = mdService.toMarkdown(content); - - if (markdownContent.trim().length > 0 && !markdownContent.startsWith("# ")) { - markdownContent = `# ${title}\r -${markdownContent}`; - } - - return markdownContent; - } else { - return content; - } + return provider.prepareContent(title, content, noteMeta); } function saveNote(noteMeta: NoteMeta, filePathPrefix: string) { diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index 5f3502107..ceadc0ec1 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -1,11 +1,30 @@ import { Archiver } from "archiver"; import type { default as NoteMeta, NoteMetaFile } from "../../meta/note_meta.js"; +type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; + +export interface AdvancedExportOptions { + /** + * If `true`, then only the note's content will be kept. If `false` (default), then each page will have its own template. + */ + skipHtmlTemplate?: boolean; + + /** + * Provides a custom function to rewrite the links found in HTML or Markdown notes. This method is called for every note imported, if it's of the right type. + * + * @param originalRewriteLinks the original rewrite links function. Can be used to access the default behaviour without having to reimplement it. + * @param getNoteTargetUrl the method to obtain a note's target URL, used internally by `originalRewriteLinks` but can be used here as well. + * @returns a function to rewrite the links in HTML or Markdown notes. + */ + customRewriteLinks?: (originalRewriteLinks: RewriteLinksFn, getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null) => RewriteLinksFn; +} + export interface ZipExportProviderData { getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; metaFile: NoteMetaFile; rootMeta: NoteMeta; archive: Archiver; + zipExportOptions?: AdvancedExportOptions; } export abstract class ZipExportProvider { @@ -14,14 +33,17 @@ export abstract class ZipExportProvider { getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; rootMeta: NoteMeta; archive: Archiver; + zipExportOptions?: AdvancedExportOptions; constructor(data: ZipExportProviderData) { this.metaFile = data.metaFile; this.getNoteTargetUrl = data.getNoteTargetUrl; this.rootMeta = data.rootMeta; this.archive = data.archive; + this.zipExportOptions = data.zipExportOptions; } abstract prepareMeta(): void; + abstract prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer; abstract afterDone(): void; } diff --git a/apps/server/src/services/export/zip/html.ts b/apps/server/src/services/export/zip/html.ts index 517552e1d..0eac07fb8 100644 --- a/apps/server/src/services/export/zip/html.ts +++ b/apps/server/src/services/export/zip/html.ts @@ -33,6 +33,41 @@ export default class HtmlExportProvider extends ZipExportProvider { this.metaFile.files.push(this.cssMeta); } + prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { + if (noteMeta.format === "html" && typeof content === "string") { + if (!content.substr(0, 100).toLowerCase().includes(" element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 + content = ` + + + + + + ${htmlTitle} + + +
    +

    ${htmlTitle}

    + +
    ${content}
    +
    + +`; + } + + return content.length < 100_000 ? html.prettyPrint(content, { indent_size: 2 }) : content; + } else { + return content; + } + } + afterDone() { if (!this.navigationMeta || !this.indexMeta || !this.cssMeta) { throw new Error("Missing meta."); diff --git a/apps/server/src/services/export/zip/markdown.ts b/apps/server/src/services/export/zip/markdown.ts index 2f8ac13bc..9143e5e1f 100644 --- a/apps/server/src/services/export/zip/markdown.ts +++ b/apps/server/src/services/export/zip/markdown.ts @@ -1,8 +1,26 @@ +import NoteMeta from "../../meta/note_meta" import { ZipExportProvider } from "./abstract_provider" +import mdService from "../markdown.js"; export default class MarkdownExportProvider extends ZipExportProvider { prepareMeta() { } + + prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { + if (noteMeta.format === "markdown" && typeof content === "string") { + let markdownContent = mdService.toMarkdown(content); + + if (markdownContent.trim().length > 0 && !markdownContent.startsWith("# ")) { + markdownContent = `# ${title}\r +${markdownContent}`; + } + + return markdownContent; + } else { + return content; + } + } + afterDone() { } } From a9f68f548778e828b2f7d0e1a72198b8ae939330 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 18:13:47 +0300 Subject: [PATCH 013/367] feat(export/zip): add option to export with share theme --- apps/client/src/widgets/dialogs/export.ts | 7 ++ apps/server/src/etapi/notes.ts | 2 +- apps/server/src/routes/api/export.ts | 2 +- apps/server/src/services/export/zip.ts | 32 ++++--- .../services/export/zip/abstract_provider.ts | 4 +- .../src/services/export/zip/share_theme.ts | 86 +++++++++++++++++++ 6 files changed, 119 insertions(+), 14 deletions(-) create mode 100644 apps/server/src/services/export/zip/share_theme.ts diff --git a/apps/client/src/widgets/dialogs/export.ts b/apps/client/src/widgets/dialogs/export.ts index d9b13f4ed..ccc748d01 100644 --- a/apps/client/src/widgets/dialogs/export.ts +++ b/apps/client/src/widgets/dialogs/export.ts @@ -85,6 +85,13 @@ const TPL = /*html*/` + +
    + +
    diff --git a/apps/server/src/etapi/notes.ts b/apps/server/src/etapi/notes.ts index 973ec04af..82280d0b9 100644 --- a/apps/server/src/etapi/notes.ts +++ b/apps/server/src/etapi/notes.ts @@ -147,7 +147,7 @@ function register(router: Router) { const note = eu.getAndCheckNote(req.params.noteId); const format = req.query.format || "html"; - if (typeof format !== "string" || !["html", "markdown"].includes(format)) { + if (typeof format !== "string" || !["html", "markdown", "share"].includes(format)) { throw new eu.EtapiError(400, "UNRECOGNIZED_EXPORT_FORMAT", `Unrecognized export format '${format}', supported values are 'html' (default) or 'markdown'.`); } diff --git a/apps/server/src/routes/api/export.ts b/apps/server/src/routes/api/export.ts index 7433cd552..b2909f288 100644 --- a/apps/server/src/routes/api/export.ts +++ b/apps/server/src/routes/api/export.ts @@ -26,7 +26,7 @@ function exportBranch(req: Request, res: Response) { const taskContext = new TaskContext(taskId, "export"); try { - if (type === "subtree" && (format === "html" || format === "markdown")) { + if (type === "subtree" && (format === "html" || format === "markdown" || format === "share")) { zipExportService.exportToZip(taskContext, branch, format, res); } else if (type === "single") { if (format !== "html" && format !== "markdown") { diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 84d84871c..de84a580d 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -4,7 +4,7 @@ import dateUtils from "../date_utils.js"; import path from "path"; import mimeTypes from "mime-types"; import packageInfo from "../../../package.json" with { type: "json" }; -import { getContentDisposition, escapeHtml } from "../utils.js"; +import { getContentDisposition } from "../utils.js"; import protectedSessionService from "../protected_session.js"; import sanitize from "sanitize-filename"; import fs from "fs"; @@ -22,9 +22,11 @@ import type { NoteMetaFile } from "../meta/note_meta.js"; import HtmlExportProvider from "./zip/html.js"; import { AdvancedExportOptions, ZipExportProvider, ZipExportProviderData } from "./zip/abstract_provider.js"; import MarkdownExportProvider from "./zip/markdown.js"; +import ShareThemeExportProvider from "./zip/share_theme.js"; +import type BNote from "../../becca/entities/bnote.js"; -async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "html" | "markdown", res: Response | fs.WriteStream, setHeaders = true, zipExportOptions?: AdvancedExportOptions) { - if (!["html", "markdown"].includes(format)) { +async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "html" | "markdown" | "share", res: Response | fs.WriteStream, setHeaders = true, zipExportOptions?: AdvancedExportOptions) { + if (!["html", "markdown", "share"].includes(format)) { throw new ValidationError(`Only 'html' and 'markdown' allowed as export format, '${format}' given`); } @@ -135,7 +137,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h prefix: branch.prefix, dataFileName: fileName, type: "text", // export will have text description - format: format + format: (format === "markdown" ? "markdown" : "html") }; return meta; } @@ -165,7 +167,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h taskContext.increaseProgressCount(); if (note.type === "text") { - meta.format = format; + meta.format = (format === "markdown" ? "markdown" : "html"); } noteIdToMeta[note.noteId] = meta as NoteMeta; @@ -296,13 +298,18 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h } } - function prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { - if (["html", "markdown"].includes(noteMeta?.format || "")) { + function prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note?: BNote): string | Buffer { + const isText = ["html", "markdown"].includes(noteMeta?.format || ""); + if (isText) { content = content.toString(); - content = rewriteFn(content, noteMeta); } - return provider.prepareContent(title, content, noteMeta); + content = provider.prepareContent(title, content, noteMeta, note, branch); + if (isText) { + content = rewriteFn(content as string, noteMeta); + } + + return content; } function saveNote(noteMeta: NoteMeta, filePathPrefix: string) { @@ -317,7 +324,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h let content: string | Buffer = `

    This is a clone of a note. Go to its primary location.

    `; - content = prepareContent(noteMeta.title, content, noteMeta); + content = prepareContent(noteMeta.title, content, noteMeta, undefined); archive.append(content, { name: filePathPrefix + noteMeta.dataFileName }); @@ -333,7 +340,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h } if (noteMeta.dataFileName) { - const content = prepareContent(noteMeta.title, note.getContent(), noteMeta); + const content = prepareContent(noteMeta.title, note.getContent(), noteMeta, note); archive.append(content, { name: filePathPrefix + noteMeta.dataFileName, @@ -395,6 +402,9 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h case "markdown": provider = new MarkdownExportProvider(providerData); break; + case "share": + provider = new ShareThemeExportProvider(providerData); + break; default: throw new Error(); } diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index ceadc0ec1..ba57ba69f 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -1,5 +1,7 @@ import { Archiver } from "archiver"; import type { default as NoteMeta, NoteMetaFile } from "../../meta/note_meta.js"; +import type BNote from "../../../becca/entities/bnote.js"; +import type BBranch from "../../../becca/entities/bbranch.js"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -44,6 +46,6 @@ export abstract class ZipExportProvider { } abstract prepareMeta(): void; - abstract prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer; + abstract prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer; abstract afterDone(): void; } diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts new file mode 100644 index 000000000..50339d20a --- /dev/null +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -0,0 +1,86 @@ +import { join } from "path"; +import NoteMeta from "../../meta/note_meta"; +import { ZipExportProvider } from "./abstract_provider"; +import { RESOURCE_DIR } from "../../resource_dir"; +import { getResourceDir, isDev } from "../../utils"; +import fs from "fs"; +import { renderNoteForExport } from "../../../share/content_renderer"; +import type BNote from "../../../becca/entities/bnote.js"; +import type BBranch from "../../../becca/entities/bbranch.js"; + +export default class ShareThemeExportProvider extends ZipExportProvider { + + private assetsMeta: NoteMeta[] = []; + + prepareMeta(): void { + const assets = [ + "style.css", + "script.js", + "boxicons.css", + "boxicons.eot", + "boxicons.woff2", + "boxicons.woff", + "boxicons.ttf", + "boxicons.svg", + "icon-color.svg" + ]; + + for (const asset of assets) { + const assetMeta = { + noImport: true, + dataFileName: asset + }; + this.assetsMeta.push(assetMeta); + this.metaFile.files.push(assetMeta); + } + } + + prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote, branch: BBranch): string | Buffer { + if (!noteMeta?.notePath?.length) { + throw new Error("Missing note path."); + } + const basePath = "../".repeat(noteMeta.notePath.length - 1); + + content = renderNoteForExport(note, branch, basePath); + + return content; + } + + afterDone(): void { + this.#saveAssets(this.rootMeta, this.assetsMeta); + } + + #saveAssets(rootMeta: NoteMeta, assetsMeta: NoteMeta[]) { + for (const assetMeta of assetsMeta) { + if (!assetMeta.dataFileName) { + continue; + } + + let cssContent = getShareThemeAssets(assetMeta.dataFileName); + this.archive.append(cssContent, { name: assetMeta.dataFileName }); + } + } + +} + +function getShareThemeAssets(nameWithExtension: string) { + // Rename share.css to style.css. + if (nameWithExtension === "style.css") { + nameWithExtension = "share.css"; + } else if (nameWithExtension === "script.js") { + nameWithExtension = "share.js"; + } + + let path: string | undefined; + if (nameWithExtension === "icon-color.svg") { + path = join(RESOURCE_DIR, "images", nameWithExtension); + } else if (isDev) { + path = join(getResourceDir(), "..", "..", "client", "dist", "src", nameWithExtension); + } + + if (!path) { + throw new Error("Not yet defined."); + } + + return fs.readFileSync(path); +} From acb0991d054100350d5b80a242025b830f947e15 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 18:24:59 +0300 Subject: [PATCH 014/367] refactor(export/zip): separate building provider into own method --- apps/server/src/services/export/zip.ts | 42 +++++++++---------- .../src/services/export/zip/share_theme.ts | 6 ++- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index de84a580d..fe767662b 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -20,7 +20,7 @@ import type BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import HtmlExportProvider from "./zip/html.js"; -import { AdvancedExportOptions, ZipExportProvider, ZipExportProviderData } from "./zip/abstract_provider.js"; +import { AdvancedExportOptions, ZipExportProviderData } from "./zip/abstract_provider.js"; import MarkdownExportProvider from "./zip/markdown.js"; import ShareThemeExportProvider from "./zip/share_theme.js"; import type BNote from "../../becca/entities/bnote.js"; @@ -36,6 +36,25 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h const noteIdToMeta: Record = {}; + function buildProvider() { + const providerData: ZipExportProviderData = { + getNoteTargetUrl, + metaFile, + archive, + rootMeta: rootMeta! + }; + switch (format) { + case "html": + return new HtmlExportProvider(providerData); + case "markdown": + return new MarkdownExportProvider(providerData); + case "share": + return new ShareThemeExportProvider(providerData); + default: + throw new Error(); + } + } + function getUniqueFilename(existingFileNames: Record, fileName: string) { const lcFileName = fileName.toLowerCase(); @@ -388,26 +407,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h files: [rootMeta] }; - let provider: ZipExportProvider; - const providerData: ZipExportProviderData = { - getNoteTargetUrl, - metaFile, - archive, - rootMeta - }; - switch (format) { - case "html": - provider = new HtmlExportProvider(providerData); - break; - case "markdown": - provider = new MarkdownExportProvider(providerData); - break; - case "share": - provider = new ShareThemeExportProvider(providerData); - break; - default: - throw new Error(); - } + const provider= buildProvider(); provider.prepareMeta(); diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 50339d20a..07dbf5f7c 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -35,13 +35,15 @@ export default class ShareThemeExportProvider extends ZipExportProvider { } } - prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote, branch: BBranch): string | Buffer { + prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer { if (!noteMeta?.notePath?.length) { throw new Error("Missing note path."); } const basePath = "../".repeat(noteMeta.notePath.length - 1); - content = renderNoteForExport(note, branch, basePath); + if (note) { + content = renderNoteForExport(note, branch, basePath); + } return content; } From 0efdf65202f7dc48dd9e69a89b4f3846f6d6c887 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 18:46:21 +0300 Subject: [PATCH 015/367] refactor(export/share): build index file --- apps/server/src/services/export/zip.ts | 5 +++-- .../services/export/zip/abstract_provider.ts | 4 +++- .../src/services/export/zip/share_theme.ts | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index fe767662b..9a11ca026 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -16,7 +16,7 @@ import ValidationError from "../../errors/validation_error.js"; import type NoteMeta from "../meta/note_meta.js"; import type AttachmentMeta from "../meta/attachment_meta.js"; import type AttributeMeta from "../meta/attribute_meta.js"; -import type BBranch from "../../becca/entities/bbranch.js"; +import BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import HtmlExportProvider from "./zip/html.js"; @@ -41,7 +41,8 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h getNoteTargetUrl, metaFile, archive, - rootMeta: rootMeta! + rootMeta: rootMeta!, + branch }; switch (format) { case "html": diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index ba57ba69f..d1bd7a9f9 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -22,6 +22,7 @@ export interface AdvancedExportOptions { } export interface ZipExportProviderData { + branch: BBranch; getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; metaFile: NoteMetaFile; rootMeta: NoteMeta; @@ -30,7 +31,7 @@ export interface ZipExportProviderData { } export abstract class ZipExportProvider { - + branch: BBranch; metaFile: NoteMetaFile; getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; rootMeta: NoteMeta; @@ -38,6 +39,7 @@ export abstract class ZipExportProvider { zipExportOptions?: AdvancedExportOptions; constructor(data: ZipExportProviderData) { + this.branch = data.branch; this.metaFile = data.metaFile; this.getNoteTargetUrl = data.getNoteTargetUrl; this.rootMeta = data.rootMeta; diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 07dbf5f7c..04a4a633f 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -11,6 +11,7 @@ import type BBranch from "../../../becca/entities/bbranch.js"; export default class ShareThemeExportProvider extends ZipExportProvider { private assetsMeta: NoteMeta[] = []; + private indexMeta: NoteMeta | null = null; prepareMeta(): void { const assets = [ @@ -33,6 +34,13 @@ export default class ShareThemeExportProvider extends ZipExportProvider { this.assetsMeta.push(assetMeta); this.metaFile.files.push(assetMeta); } + + this.indexMeta = { + noImport: true, + dataFileName: "index.html" + }; + + this.metaFile.files.push(this.indexMeta); } prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer { @@ -50,6 +58,17 @@ export default class ShareThemeExportProvider extends ZipExportProvider { afterDone(): void { this.#saveAssets(this.rootMeta, this.assetsMeta); + this.#saveIndex(); + } + + #saveIndex() { + if (!this.indexMeta?.dataFileName) { + return; + } + + const note = this.branch.getNote(); + const fullHtml = this.prepareContent(this.rootMeta.title ?? "", note.getContent(), this.rootMeta, note, this.branch); + this.archive.append(fullHtml, { name: this.indexMeta.dataFileName }); } #saveAssets(rootMeta: NoteMeta, assetsMeta: NoteMeta[]) { From 8523050ab2ed02ce75eedd30ef1f5efd22c22579 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 19:00:20 +0300 Subject: [PATCH 016/367] fix(export/share): note children preview links not working --- apps/server/src/services/export/zip.ts | 9 +++------ apps/server/src/services/export/zip/abstract_provider.ts | 3 +++ apps/server/src/services/export/zip/html.ts | 6 +++++- apps/server/src/services/export/zip/markdown.ts | 1 + apps/server/src/services/export/zip/share_theme.ts | 1 + packages/share-theme/src/templates/page.ejs | 2 +- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 9a11ca026..2f550898a 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -35,6 +35,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h }); const noteIdToMeta: Record = {}; + const rewriteFn = (zipExportOptions?.customRewriteLinks ? zipExportOptions?.customRewriteLinks(rewriteLinks, getNoteTargetUrl) : rewriteLinks); function buildProvider() { const providerData: ZipExportProviderData = { @@ -42,7 +43,8 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h metaFile, archive, rootMeta: rootMeta!, - branch + branch, + rewriteFn }; switch (format) { case "html": @@ -275,8 +277,6 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h return url; } - const rewriteFn = (zipExportOptions?.customRewriteLinks ? zipExportOptions?.customRewriteLinks(rewriteLinks, getNoteTargetUrl) : rewriteLinks); - function rewriteLinks(content: string, noteMeta: NoteMeta): string { content = content.replace(/src="[^"]*api\/images\/([a-zA-Z0-9_]+)\/[^"]*"/g, (match, targetNoteId) => { const url = getNoteTargetUrl(targetNoteId, noteMeta); @@ -325,9 +325,6 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h } content = provider.prepareContent(title, content, noteMeta, note, branch); - if (isText) { - content = rewriteFn(content as string, noteMeta); - } return content; } diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index d1bd7a9f9..0c7a53656 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -28,6 +28,7 @@ export interface ZipExportProviderData { rootMeta: NoteMeta; archive: Archiver; zipExportOptions?: AdvancedExportOptions; + rewriteFn: RewriteLinksFn; } export abstract class ZipExportProvider { @@ -37,6 +38,7 @@ export abstract class ZipExportProvider { rootMeta: NoteMeta; archive: Archiver; zipExportOptions?: AdvancedExportOptions; + rewriteFn: RewriteLinksFn; constructor(data: ZipExportProviderData) { this.branch = data.branch; @@ -45,6 +47,7 @@ export abstract class ZipExportProvider { this.rootMeta = data.rootMeta; this.archive = data.archive; this.zipExportOptions = data.zipExportOptions; + this.rewriteFn = data.rewriteFn; } abstract prepareMeta(): void; diff --git a/apps/server/src/services/export/zip/html.ts b/apps/server/src/services/export/zip/html.ts index 0eac07fb8..749d7adc8 100644 --- a/apps/server/src/services/export/zip/html.ts +++ b/apps/server/src/services/export/zip/html.ts @@ -62,7 +62,11 @@ export default class HtmlExportProvider extends ZipExportProvider { `; } - return content.length < 100_000 ? html.prettyPrint(content, { indent_size: 2 }) : content; + if (content.length < 100_000) { + content = html.prettyPrint(content, { indent_size: 2 }) + } + content = this.rewriteFn(content as string, noteMeta); + return content; } else { return content; } diff --git a/apps/server/src/services/export/zip/markdown.ts b/apps/server/src/services/export/zip/markdown.ts index 9143e5e1f..1ace2051a 100644 --- a/apps/server/src/services/export/zip/markdown.ts +++ b/apps/server/src/services/export/zip/markdown.ts @@ -15,6 +15,7 @@ export default class MarkdownExportProvider extends ZipExportProvider { ${markdownContent}`; } + markdownContent = this.rewriteFn(markdownContent, noteMeta); return markdownContent; } else { return content; diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 04a4a633f..695d90e8d 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -51,6 +51,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { if (note) { content = renderNoteForExport(note, branch, basePath); + content = this.rewriteFn(content, noteMeta); } return content; diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index 243f788a1..6900a1be0 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -137,7 +137,7 @@ content = content.replaceAll(headingRe, (...match) => { const action = note.type === "book" ? "getChildNotes" : "getVisibleChildNotes"; for (const childNote of note[action]()) { const isExternalLink = childNote.hasLabel("shareExternal") || childNote.hasLabel("shareExternalLink"); - const linkHref = isExternalLink ? childNote.getLabelValue("shareExternal") ?? childNote.getLabelValue("shareExternalLink") : `./${childNote.shareId}`; + const linkHref = isExternalLink ? childNote.getLabelValue("shareExternal") ?? childNote.getLabelValue("shareExternalLink") : `./${childNote.shareId ?? "#root/" + childNote.noteId}`; const target = isExternalLink ? ` target="_blank" rel="noopener noreferrer"` : ""; %>
  • From 77e4c3d0ecb05f39e823932e6259819aca8f5748 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 19:25:28 +0300 Subject: [PATCH 017/367] refactor(export/share): use different URL rewriting mechanism --- apps/server/src/becca/entities/bnote.ts | 4 ++++ apps/server/src/services/export/zip/share_theme.ts | 1 + packages/share-theme/src/templates/page.ejs | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/server/src/becca/entities/bnote.ts b/apps/server/src/becca/entities/bnote.ts index 650316777..e6563f2db 100644 --- a/apps/server/src/becca/entities/bnote.ts +++ b/apps/server/src/becca/entities/bnote.ts @@ -1774,6 +1774,10 @@ class BNote extends AbstractBeccaEntity { return this.getVisibleChildNotes().length > 0; } + get shareId() { + return this.noteId; + } + } export default BNote; diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 695d90e8d..2b4ba72e8 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -51,6 +51,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { if (note) { content = renderNoteForExport(note, branch, basePath); + content = content.replace(/href="[^"]*\.\/([a-zA-Z0-9_\/]{12})[^"]*"/g, "href=\"#root/$1\""); content = this.rewriteFn(content, noteMeta); } diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index 6900a1be0..243f788a1 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -137,7 +137,7 @@ content = content.replaceAll(headingRe, (...match) => { const action = note.type === "book" ? "getChildNotes" : "getVisibleChildNotes"; for (const childNote of note[action]()) { const isExternalLink = childNote.hasLabel("shareExternal") || childNote.hasLabel("shareExternalLink"); - const linkHref = isExternalLink ? childNote.getLabelValue("shareExternal") ?? childNote.getLabelValue("shareExternalLink") : `./${childNote.shareId ?? "#root/" + childNote.noteId}`; + const linkHref = isExternalLink ? childNote.getLabelValue("shareExternal") ?? childNote.getLabelValue("shareExternalLink") : `./${childNote.shareId}`; const target = isExternalLink ? ` target="_blank" rel="noopener noreferrer"` : ""; %>
  • From 35622a212253f09834ace19571118a28a93f423b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 19:38:47 +0300 Subject: [PATCH 018/367] feat(export/share): always render empty files --- apps/server/src/services/export/zip.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 2f550898a..9c0f099d1 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -198,10 +198,13 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h note.sortChildren(); const childBranches = note.getChildBranches().filter((branch) => branch?.noteId !== "_hidden"); - const available = !note.isProtected || protectedSessionService.isProtectedSessionAvailable(); + let shouldIncludeFile = (!note.isProtected || protectedSessionService.isProtectedSessionAvailable()); + if (format !== "share") { + shouldIncludeFile = shouldIncludeFile && (note.getContent().length > 0 || childBranches.length === 0); + } // if it's a leaf, then we'll export it even if it's empty - if (available && (note.getContent().length > 0 || childBranches.length === 0)) { + if (shouldIncludeFile) { meta.dataFileName = getDataFileName(note.type, note.mime, baseFileName, existingFileNames); } From b475037127466737cc2eade8601798d8ef052d47 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 20:00:40 +0300 Subject: [PATCH 019/367] feat(export/share): render non-text note types --- apps/server/src/services/export/zip.ts | 38 +++---------------- .../services/export/zip/abstract_provider.ts | 37 ++++++++++++++---- apps/server/src/services/export/zip/html.ts | 27 ++++++------- .../src/services/export/zip/share_theme.ts | 22 ++++++----- 4 files changed, 60 insertions(+), 64 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 9c0f099d1..26af3424f 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -2,7 +2,6 @@ import dateUtils from "../date_utils.js"; import path from "path"; -import mimeTypes from "mime-types"; import packageInfo from "../../../package.json" with { type: "json" }; import { getContentDisposition } from "../utils.js"; import protectedSessionService from "../protected_session.js"; @@ -33,16 +32,15 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h const archive = archiver("zip", { zlib: { level: 9 } // Sets the compression level. }); + const rewriteFn = (zipExportOptions?.customRewriteLinks ? zipExportOptions?.customRewriteLinks(rewriteLinks, getNoteTargetUrl) : rewriteLinks); + const provider= buildProvider(); const noteIdToMeta: Record = {}; - const rewriteFn = (zipExportOptions?.customRewriteLinks ? zipExportOptions?.customRewriteLinks(rewriteLinks, getNoteTargetUrl) : rewriteLinks); function buildProvider() { const providerData: ZipExportProviderData = { getNoteTargetUrl, - metaFile, archive, - rootMeta: rootMeta!, branch, rewriteFn }; @@ -94,36 +92,14 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h } let existingExtension = path.extname(fileName).toLowerCase(); - let newExtension; - - // the following two are handled specifically since we always want to have these extensions no matter the automatic detection - // and/or existing detected extensions in the note name - if (type === "text" && format === "markdown") { - newExtension = "md"; - } else if (type === "text" && format === "html") { - newExtension = "html"; - } else if (mime === "application/x-javascript" || mime === "text/javascript") { - newExtension = "js"; - } else if (type === "canvas" || mime === "application/json") { - newExtension = "json"; - } else if (existingExtension.length > 0) { - // if the page already has an extension, then we'll just keep it - newExtension = null; - } else { - if (mime?.toLowerCase()?.trim() === "image/jpg") { - newExtension = "jpg"; - } else if (mime?.toLowerCase()?.trim() === "text/mermaid") { - newExtension = "txt"; - } else { - newExtension = mimeTypes.extension(mime) || "dat"; - } - } + const newExtension = provider.mapExtension(type, mime, existingExtension, format); // if the note is already named with the extension (e.g. "image.jpg"), then it's silly to append the exact same extension again if (newExtension && existingExtension !== `.${newExtension.toLowerCase()}`) { fileName += `.${newExtension}`; } + return getUniqueFilename(existingFileNames, fileName); } @@ -408,9 +384,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h files: [rootMeta] }; - const provider= buildProvider(); - - provider.prepareMeta(); + provider.prepareMeta(metaFile); for (const noteMeta of Object.values(noteIdToMeta)) { // filter out relations which are not inside this export @@ -442,7 +416,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h saveNote(rootMeta, ""); - provider.afterDone(); + provider.afterDone(rootMeta); const note = branch.getNote(); const zipFileName = `${branch.prefix ? `${branch.prefix} - ` : ""}${note.getTitleOrProtected()}.zip`; diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index 0c7a53656..6ca5fdb9a 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -2,6 +2,7 @@ import { Archiver } from "archiver"; import type { default as NoteMeta, NoteMetaFile } from "../../meta/note_meta.js"; import type BNote from "../../../becca/entities/bnote.js"; import type BBranch from "../../../becca/entities/bbranch.js"; +import mimeTypes from "mime-types"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -24,8 +25,6 @@ export interface AdvancedExportOptions { export interface ZipExportProviderData { branch: BBranch; getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; - metaFile: NoteMetaFile; - rootMeta: NoteMeta; archive: Archiver; zipExportOptions?: AdvancedExportOptions; rewriteFn: RewriteLinksFn; @@ -33,24 +32,46 @@ export interface ZipExportProviderData { export abstract class ZipExportProvider { branch: BBranch; - metaFile: NoteMetaFile; getNoteTargetUrl: (targetNoteId: string, sourceMeta: NoteMeta) => string | null; - rootMeta: NoteMeta; archive: Archiver; zipExportOptions?: AdvancedExportOptions; rewriteFn: RewriteLinksFn; constructor(data: ZipExportProviderData) { this.branch = data.branch; - this.metaFile = data.metaFile; this.getNoteTargetUrl = data.getNoteTargetUrl; - this.rootMeta = data.rootMeta; this.archive = data.archive; this.zipExportOptions = data.zipExportOptions; this.rewriteFn = data.rewriteFn; } - abstract prepareMeta(): void; + abstract prepareMeta(metaFile: NoteMetaFile): void; abstract prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer; - abstract afterDone(): void; + abstract afterDone(rootMeta: NoteMeta): void; + + mapExtension(type: string | null, mime: string, existingExtension: string, format: string) { + // the following two are handled specifically since we always want to have these extensions no matter the automatic detection + // and/or existing detected extensions in the note name + if (type === "text" && format === "markdown") { + return "md"; + } else if (type === "text" && format === "html") { + return "html"; + } else if (mime === "application/x-javascript" || mime === "text/javascript") { + return "js"; + } else if (type === "canvas" || mime === "application/json") { + return "json"; + } else if (existingExtension.length > 0) { + // if the page already has an extension, then we'll just keep it + return null; + } else { + if (mime?.toLowerCase()?.trim() === "image/jpg") { + return "jpg"; + } else if (mime?.toLowerCase()?.trim() === "text/mermaid") { + return "txt"; + } else { + return mimeTypes.extension(mime) || "dat"; + } + } + } + } diff --git a/apps/server/src/services/export/zip/html.ts b/apps/server/src/services/export/zip/html.ts index 749d7adc8..8eb5c5d93 100644 --- a/apps/server/src/services/export/zip/html.ts +++ b/apps/server/src/services/export/zip/html.ts @@ -10,27 +10,24 @@ export default class HtmlExportProvider extends ZipExportProvider { private indexMeta: NoteMeta | null = null; private cssMeta: NoteMeta | null = null; - prepareMeta() { + prepareMeta(metaFile) { this.navigationMeta = { noImport: true, dataFileName: "navigation.html" }; - - this.metaFile.files.push(this.navigationMeta); + metaFile.files.push(this.navigationMeta); this.indexMeta = { noImport: true, dataFileName: "index.html" }; - - this.metaFile.files.push(this.indexMeta); + metaFile.files.push(this.indexMeta); this.cssMeta = { noImport: true, dataFileName: "style.css" }; - - this.metaFile.files.push(this.cssMeta); + metaFile.files.push(this.cssMeta); } prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta): string | Buffer { @@ -72,23 +69,23 @@ export default class HtmlExportProvider extends ZipExportProvider { } } - afterDone() { + afterDone(rootMeta: NoteMeta) { if (!this.navigationMeta || !this.indexMeta || !this.cssMeta) { throw new Error("Missing meta."); } - this.#saveNavigation(this.rootMeta, this.navigationMeta); - this.#saveIndex(this.rootMeta, this.indexMeta); - this.#saveCss(this.rootMeta, this.cssMeta); + this.#saveNavigation(rootMeta, this.navigationMeta); + this.#saveIndex(rootMeta, this.indexMeta); + this.#saveCss(rootMeta, this.cssMeta); } - #saveNavigationInner(meta: NoteMeta) { + #saveNavigationInner(rootMeta: NoteMeta, meta: NoteMeta) { let html = "
  • "; const escapedTitle = escapeHtml(`${meta.prefix ? `${meta.prefix} - ` : ""}${meta.title}`); if (meta.dataFileName && meta.noteId) { - const targetUrl = this.getNoteTargetUrl(meta.noteId, this.rootMeta); + const targetUrl = this.getNoteTargetUrl(meta.noteId, rootMeta); html += `${escapedTitle}`; } else { @@ -99,7 +96,7 @@ export default class HtmlExportProvider extends ZipExportProvider { html += "
      "; for (const child of meta.children) { - html += this.#saveNavigationInner(child); + html += this.#saveNavigationInner(rootMeta, child); } html += "
    "; @@ -119,7 +116,7 @@ export default class HtmlExportProvider extends ZipExportProvider { -
      ${this.#saveNavigationInner(rootMeta)}
    +
      ${this.#saveNavigationInner(rootMeta, rootMeta)}
    `; const prettyHtml = fullHtml.length < 100_000 ? html.prettyPrint(fullHtml, { indent_size: 2 }) : fullHtml; diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 2b4ba72e8..abe7be42d 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -1,5 +1,5 @@ import { join } from "path"; -import NoteMeta from "../../meta/note_meta"; +import NoteMeta, { NoteMetaFile } from "../../meta/note_meta"; import { ZipExportProvider } from "./abstract_provider"; import { RESOURCE_DIR } from "../../resource_dir"; import { getResourceDir, isDev } from "../../utils"; @@ -13,7 +13,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { private assetsMeta: NoteMeta[] = []; private indexMeta: NoteMeta | null = null; - prepareMeta(): void { + prepareMeta(metaFile: NoteMetaFile): void { const assets = [ "style.css", "script.js", @@ -32,7 +32,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { dataFileName: asset }; this.assetsMeta.push(assetMeta); - this.metaFile.files.push(assetMeta); + metaFile.files.push(assetMeta); } this.indexMeta = { @@ -40,7 +40,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { dataFileName: "index.html" }; - this.metaFile.files.push(this.indexMeta); + metaFile.files.push(this.indexMeta); } prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer { @@ -58,18 +58,22 @@ export default class ShareThemeExportProvider extends ZipExportProvider { return content; } - afterDone(): void { - this.#saveAssets(this.rootMeta, this.assetsMeta); - this.#saveIndex(); + afterDone(rootMeta: NoteMeta): void { + this.#saveAssets(rootMeta, this.assetsMeta); + this.#saveIndex(rootMeta); } - #saveIndex() { + mapExtension(_type: string | null, _mime: string, _existingExtension: string, _format: string): string | null { + return "html"; + } + + #saveIndex(rootMeta: NoteMeta) { if (!this.indexMeta?.dataFileName) { return; } const note = this.branch.getNote(); - const fullHtml = this.prepareContent(this.rootMeta.title ?? "", note.getContent(), this.rootMeta, note, this.branch); + const fullHtml = this.prepareContent(rootMeta.title ?? "", note.getContent(), rootMeta, note, this.branch); this.archive.append(fullHtml, { name: this.indexMeta.dataFileName }); } From 61dbc15fc6e721d21e31a8e8d8d5304da9c291cc Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 20:14:13 +0300 Subject: [PATCH 020/367] feat(export/share): use translation --- apps/client/src/translations/en/translation.json | 4 ++-- apps/client/src/widgets/dialogs/export.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 6d3ad07a2..dd02af8ef 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -110,7 +110,8 @@ "export_status": "Export status", "export_in_progress": "Export in progress: {{progressCount}}", "export_finished_successfully": "Export finished successfully.", - "format_pdf": "PDF - for printing or sharing purposes." + "format_pdf": "PDF - for printing or sharing purposes.", + "share-format": "HTML for web publishing - uses the same theme that is used shared notes, but can be published as a static website." }, "help": { "fullDocumentation": "Help (full documentation is available online)", @@ -1197,7 +1198,6 @@ "restore_provider": "Restore provider to search", "similarity_threshold": "Similarity Threshold", "similarity_threshold_description": "Minimum similarity score (0-1) for notes to be included in context for LLM queries", - "reprocess_index": "Rebuild Search Index", "reprocessing_index": "Rebuilding...", "reprocess_index_started": "Search index optimization started in the background", diff --git a/apps/client/src/widgets/dialogs/export.ts b/apps/client/src/widgets/dialogs/export.ts index ccc748d01..edf9a80dd 100644 --- a/apps/client/src/widgets/dialogs/export.ts +++ b/apps/client/src/widgets/dialogs/export.ts @@ -89,7 +89,7 @@ const TPL = /*html*/`
  • From 9bc966491dfdc6d9ed98e9ae45afe48213c1588b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 21:22:45 +0300 Subject: [PATCH 021/367] fix(edit-docs): import error --- apps/edit-docs/src/edit-docs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index 940f89540..db5d4be0c 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -6,7 +6,7 @@ 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 } from "@triliumnext/server/src/services/export/zip.js"; +import type { AdvancedExportOptions } from "@triliumnext/server/src/services/export/zip/abstract_provider.js"; import { parseNoteMetaFile } from "@triliumnext/server/src/services/in_app_help.js"; import type NoteMeta from "@triliumnext/server/src/services/meta/note_meta.js"; From 413137ac6437b765ae0cda75ef5fda842f3a9412 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 21:23:44 +0300 Subject: [PATCH 022/367] chore(nx): sync tsconfig --- apps/server/tsconfig.app.json | 3 +++ apps/server/tsconfig.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/apps/server/tsconfig.app.json b/apps/server/tsconfig.app.json index 61f4a77fe..eb7f102aa 100644 --- a/apps/server/tsconfig.app.json +++ b/apps/server/tsconfig.app.json @@ -34,6 +34,9 @@ "src/**/*.spec.jsx" ], "references": [ + { + "path": "../../packages/ckeditor5/tsconfig.lib.json" + }, { "path": "../../packages/turndown-plugin-gfm/tsconfig.lib.json" }, diff --git a/apps/server/tsconfig.json b/apps/server/tsconfig.json index baacd3fa5..6bc224295 100644 --- a/apps/server/tsconfig.json +++ b/apps/server/tsconfig.json @@ -3,6 +3,9 @@ "files": [], "include": [], "references": [ + { + "path": "../../packages/ckeditor5" + }, { "path": "../../packages/turndown-plugin-gfm" }, From a2110ca631a0bf35424a7fd568d6d82cb72939bd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 17:44:47 +0300 Subject: [PATCH 023/367] fix(export/share): tree not expanding properly --- .../src/services/export/zip/share_theme.ts | 4 ++-- apps/server/src/share/content_renderer.ts | 19 +++++++++++++++---- apps/server/src/share/routes.ts | 1 + packages/share-theme/src/templates/page.ejs | 11 +---------- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index abe7be42d..59746626f 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -1,6 +1,6 @@ import { join } from "path"; import NoteMeta, { NoteMetaFile } from "../../meta/note_meta"; -import { ZipExportProvider } from "./abstract_provider"; +import { ZipExportProvider } from "./abstract_provider.js"; import { RESOURCE_DIR } from "../../resource_dir"; import { getResourceDir, isDev } from "../../utils"; import fs from "fs"; @@ -50,7 +50,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { const basePath = "../".repeat(noteMeta.notePath.length - 1); if (note) { - content = renderNoteForExport(note, branch, basePath); + content = renderNoteForExport(note, branch, basePath, noteMeta.notePath.slice(0, -1)); content = content.replace(/href="[^"]*\.\/([a-zA-Z0-9_\/]{12})[^"]*"/g, "href=\"#root/$1\""); content = this.rewriteFn(content, noteMeta); } diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 041e5cc17..62c9df71f 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -61,7 +61,7 @@ function getSharedSubTreeRoot(note: SNote | BNote | undefined): Subroot { return getSharedSubTreeRoot(parentBranch.getParentNote()); } -export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath: string) { +export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath: string, ancestors: string[]) { const subRoot: Subroot = { branch: parentBranch, note: parentBranch.getNote() @@ -69,7 +69,7 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath return renderNoteContentInternal(note, { subRoot, - rootNoteId: note.getParentNotes()[0].noteId, + rootNoteId: parentBranch.noteId, cssToLoad: [ `${basePath}style.css`, `${basePath}boxicons.css` @@ -77,13 +77,22 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath jsToLoad: [ `${basePath}script.js` ], - logoUrl: `${basePath}icon-color.svg` + logoUrl: `${basePath}icon-color.svg`, + ancestors }); } export function renderNoteContent(note: SNote) { const subRoot = getSharedSubTreeRoot(note); + const ancestors: string[] = []; + let notePointer = note; + while (notePointer.parents[0].noteId !== subRoot.note?.noteId) { + const pointerParent = notePointer.parents[0]; + ancestors.push(pointerParent.noteId); + notePointer = pointerParent; + } + // Determine CSS to load. const cssToLoad: string[] = []; if (!isDev && !note.isLabelTruthy("shareOmitDefaultCss")) { @@ -110,7 +119,8 @@ export function renderNoteContent(note: SNote) { rootNoteId: "_share", cssToLoad, jsToLoad, - logoUrl + logoUrl, + ancestors }); } @@ -120,6 +130,7 @@ interface RenderArgs { cssToLoad: string[]; jsToLoad: string[]; logoUrl: string; + ancestors: string[]; } function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) { diff --git a/apps/server/src/share/routes.ts b/apps/server/src/share/routes.ts index 4b0281ec5..ceaeedb1b 100644 --- a/apps/server/src/share/routes.ts +++ b/apps/server/src/share/routes.ts @@ -137,6 +137,7 @@ function register(router: Router) { return; } + res.send(renderNoteContent(note)); } diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index 243f788a1..10a6c474a 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -97,16 +97,7 @@ content = content.replaceAll(headingRe, (...match) => { <% if (hasTree) { %> <% } %> From bc4643fed2ed2937c501faf034fb59a31f0a2a65 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 17:48:52 +0300 Subject: [PATCH 024/367] refactor(share): use internal rendering method for subtemplates --- apps/server/src/share/content_renderer.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 62c9df71f..529db2116 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -185,14 +185,18 @@ function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) // Render with the default view otherwise. const templatePath = join(getResourceDir(), "share-theme", "templates", "page.ejs"); - return ejs.render(readFileSync(templatePath, "utf-8"), opts, { + return ejs.render(readTemplate(templatePath), opts, { includer: (path) => { const templatePath = join(getResourceDir(), "share-theme", "templates", `${path}.ejs`); - return { filename: templatePath } + return { template: readTemplate(templatePath) }; } }); } +function readTemplate(path: string) { + return readFileSync(path, "utf-8"); +} + function getContent(note: SNote | BNote) { if (note.isProtected) { return { From 3a55490bbf859912648aabdcb7d8250a904c5720 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 18:08:29 +0300 Subject: [PATCH 025/367] refactor(share): use a string cache for templates --- apps/server/src/services/export/zip/share_theme.ts | 6 ++++-- apps/server/src/share/content_renderer.ts | 10 +++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 59746626f..efde0b5f5 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -51,8 +51,10 @@ export default class ShareThemeExportProvider extends ZipExportProvider { if (note) { content = renderNoteForExport(note, branch, basePath, noteMeta.notePath.slice(0, -1)); - content = content.replace(/href="[^"]*\.\/([a-zA-Z0-9_\/]{12})[^"]*"/g, "href=\"#root/$1\""); - content = this.rewriteFn(content, noteMeta); + if (typeof content === "string") { + content = content.replace(/href="[^"]*\.\/([a-zA-Z0-9_\/]{12})[^"]*"/g, "href=\"#root/$1\""); + content = this.rewriteFn(content, noteMeta); + } } return content; diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 529db2116..d5c3a4c9e 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -18,6 +18,7 @@ import { readFileSync } from "fs"; const shareAdjustedAssetPath = isDev ? assetPath : `../${assetPath}`; const shareAdjustedAppPath = isDev ? app_path : `../${app_path}`; +const templateCache: Map = new Map(); /** * Represents the output of the content renderer. @@ -194,7 +195,14 @@ function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) } function readTemplate(path: string) { - return readFileSync(path, "utf-8"); + const cachedTemplate = templateCache.get(path); + if (cachedTemplate) { + return cachedTemplate; + } + + const templateString = readFileSync(path, "utf-8"); + templateCache.set(path, templateString); + return templateString; } function getContent(note: SNote | BNote) { From 6d446c5b275ea116b7d65b88011328de3f3570f8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 18:49:11 +0300 Subject: [PATCH 026/367] fix(export/share): asset path in prod --- apps/server/src/services/export/zip/share_theme.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index efde0b5f5..f8475b0c2 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -105,10 +105,8 @@ function getShareThemeAssets(nameWithExtension: string) { path = join(RESOURCE_DIR, "images", nameWithExtension); } else if (isDev) { path = join(getResourceDir(), "..", "..", "client", "dist", "src", nameWithExtension); - } - - if (!path) { - throw new Error("Not yet defined."); + } else { + path = join(getResourceDir(), "public", "src", nameWithExtension); } return fs.readFileSync(path); From 3ebfee8bd2c3871c622b30e0fbdab1a96d4faffd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 18:49:19 +0300 Subject: [PATCH 027/367] fix(export/share): tree error in prod --- apps/server/src/share/content_renderer.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index d5c3a4c9e..167bdb716 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -88,8 +88,11 @@ export function renderNoteContent(note: SNote) { const ancestors: string[] = []; let notePointer = note; - while (notePointer.parents[0].noteId !== subRoot.note?.noteId) { + while (notePointer.parents[0]?.noteId !== subRoot.note?.noteId) { const pointerParent = notePointer.parents[0]; + if (!pointerParent) { + break; + } ancestors.push(pointerParent.noteId); notePointer = pointerParent; } From 9abdbbbc5b2bfd9f6fbf787254eb7d32d6fb43a2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 19:06:18 +0300 Subject: [PATCH 028/367] refactor(export/share): fix type --- apps/server/src/services/export/zip/markdown.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/services/export/zip/markdown.ts b/apps/server/src/services/export/zip/markdown.ts index 1ace2051a..827f059d6 100644 --- a/apps/server/src/services/export/zip/markdown.ts +++ b/apps/server/src/services/export/zip/markdown.ts @@ -1,5 +1,5 @@ import NoteMeta from "../../meta/note_meta" -import { ZipExportProvider } from "./abstract_provider" +import { ZipExportProvider } from "./abstract_provider.js" import mdService from "../markdown.js"; export default class MarkdownExportProvider extends ZipExportProvider { From 06de06b50115df24bb54ee1a9f6b376bdd6cff1e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 19:21:09 +0300 Subject: [PATCH 029/367] refactor(export/share): share type for format --- apps/edit-docs/src/edit-docs.ts | 4 ++-- apps/server/src/etapi/notes.ts | 3 ++- apps/server/src/services/export/single.ts | 5 +++-- apps/server/src/services/export/zip.ts | 6 +++--- apps/server/src/services/export/zip/abstract_provider.ts | 4 +++- apps/server/src/services/export/zip/share_theme.ts | 4 ---- apps/server/src/services/meta/note_meta.ts | 3 ++- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index db5d4be0c..b6a04969f 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -6,7 +6,7 @@ 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 } from "@triliumnext/server/src/services/export/zip/abstract_provider.js"; +import type { AdvancedExportOptions, ExportFormat } from "@triliumnext/server/src/services/export/zip/abstract_provider.js"; import { parseNoteMetaFile } from "@triliumnext/server/src/services/in_app_help.js"; import type NoteMeta from "@triliumnext/server/src/services/meta/note_meta.js"; @@ -75,7 +75,7 @@ async function setOptions() { optionsService.setOption("compressImages", "false"); } -async function exportData(noteId: string, format: "html" | "markdown", outputPath: string, ignoredFiles?: Set) { +async function exportData(noteId: string, format: ExportFormat, outputPath: string, ignoredFiles?: Set) { const zipFilePath = "output.zip"; try { diff --git a/apps/server/src/etapi/notes.ts b/apps/server/src/etapi/notes.ts index 82280d0b9..941d09566 100644 --- a/apps/server/src/etapi/notes.ts +++ b/apps/server/src/etapi/notes.ts @@ -14,6 +14,7 @@ import type { ParsedQs } from "qs"; import type { NoteParams } from "../services/note-interface.js"; import type { SearchParams } from "../services/search/services/types.js"; import type { ValidatorMap } from "./etapi-interface.js"; +import type { ExportFormat } from "../services/export/zip/abstract_provider.js"; function register(router: Router) { eu.route(router, "get", "/etapi/notes", (req, res, next) => { @@ -157,7 +158,7 @@ function register(router: Router) { // (e.g. branchIds are not seen in UI), that we export "note export" instead. const branch = note.getParentBranches()[0]; - zipExportService.exportToZip(taskContext, branch, format as "html" | "markdown", res); + zipExportService.exportToZip(taskContext, branch, format as ExportFormat, res); }); eu.route(router, "post", "/etapi/notes/:noteId/import", (req, res, next) => { diff --git a/apps/server/src/services/export/single.ts b/apps/server/src/services/export/single.ts index b626bf919..2748c8850 100644 --- a/apps/server/src/services/export/single.ts +++ b/apps/server/src/services/export/single.ts @@ -9,8 +9,9 @@ import type TaskContext from "../task_context.js"; import type BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; import type BNote from "../../becca/entities/bnote.js"; +import type { ExportFormat } from "./zip/abstract_provider.js"; -function exportSingleNote(taskContext: TaskContext, branch: BBranch, format: "html" | "markdown", res: Response) { +function exportSingleNote(taskContext: TaskContext, branch: BBranch, format: ExportFormat, res: Response) { const note = branch.getNote(); if (note.type === "image" || note.type === "file") { @@ -33,7 +34,7 @@ function exportSingleNote(taskContext: TaskContext, branch: BBranch, format: "ht taskContext.taskSucceeded(); } -export function mapByNoteType(note: BNote, content: string | Buffer, format: "html" | "markdown") { +export function mapByNoteType(note: BNote, content: string | Buffer, format: ExportFormat) { let payload, extension, mime; if (typeof content !== "string") { diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 26af3424f..1bfc1e842 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -19,12 +19,12 @@ import BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import HtmlExportProvider from "./zip/html.js"; -import { AdvancedExportOptions, ZipExportProviderData } from "./zip/abstract_provider.js"; +import { AdvancedExportOptions, type ExportFormat, ZipExportProviderData } from "./zip/abstract_provider.js"; import MarkdownExportProvider from "./zip/markdown.js"; import ShareThemeExportProvider from "./zip/share_theme.js"; import type BNote from "../../becca/entities/bnote.js"; -async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "html" | "markdown" | "share", res: Response | fs.WriteStream, setHeaders = true, zipExportOptions?: AdvancedExportOptions) { +async function exportToZip(taskContext: TaskContext, branch: BBranch, format: ExportFormat, res: Response | fs.WriteStream, setHeaders = true, zipExportOptions?: AdvancedExportOptions) { if (!["html", "markdown", "share"].includes(format)) { throw new ValidationError(`Only 'html' and 'markdown' allowed as export format, '${format}' given`); } @@ -432,7 +432,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h taskContext.taskSucceeded(); } -async function exportToZipFile(noteId: string, format: "markdown" | "html", zipFilePath: string, zipExportOptions?: AdvancedExportOptions) { +async function exportToZipFile(noteId: string, format: ExportFormat, zipFilePath: string, zipExportOptions?: AdvancedExportOptions) { const fileOutputStream = fs.createWriteStream(zipFilePath); const taskContext = new TaskContext("no-progress-reporting"); diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index 6ca5fdb9a..f777ed1cb 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -6,6 +6,8 @@ import mimeTypes from "mime-types"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; +export type ExportFormat = "html" | "markdown" | "share"; + export interface AdvancedExportOptions { /** * If `true`, then only the note's content will be kept. If `false` (default), then each page will have its own template. @@ -49,7 +51,7 @@ export abstract class ZipExportProvider { abstract prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer; abstract afterDone(rootMeta: NoteMeta): void; - mapExtension(type: string | null, mime: string, existingExtension: string, format: string) { + mapExtension(type: string | null, mime: string, existingExtension: string, format: ExportFormat) { // the following two are handled specifically since we always want to have these extensions no matter the automatic detection // and/or existing detected extensions in the note name if (type === "text" && format === "markdown") { diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index f8475b0c2..03bdb68b4 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -65,10 +65,6 @@ export default class ShareThemeExportProvider extends ZipExportProvider { this.#saveIndex(rootMeta); } - mapExtension(_type: string | null, _mime: string, _existingExtension: string, _format: string): string | null { - return "html"; - } - #saveIndex(rootMeta: NoteMeta) { if (!this.indexMeta?.dataFileName) { return; diff --git a/apps/server/src/services/meta/note_meta.ts b/apps/server/src/services/meta/note_meta.ts index 33e7a7843..7a7a9f4b7 100644 --- a/apps/server/src/services/meta/note_meta.ts +++ b/apps/server/src/services/meta/note_meta.ts @@ -1,6 +1,7 @@ import type { NoteType } from "@triliumnext/commons"; import type AttachmentMeta from "./attachment_meta.js"; import type AttributeMeta from "./attribute_meta.js"; +import type { ExportFormat } from "../export/zip/abstract_provider.js"; export interface NoteMetaFile { formatVersion: number; @@ -19,7 +20,7 @@ export default interface NoteMeta { type?: NoteType; mime?: string; /** 'html' or 'markdown', applicable to text notes only */ - format?: "html" | "markdown"; + format?: ExportFormat; dataFileName?: string; dirFileName?: string; /** this file should not be imported (e.g., HTML navigation) */ From fded714f18ff108f8710080a09180f47f79388a8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 19:53:21 +0300 Subject: [PATCH 030/367] fix(export/share): use right extension for images --- apps/server/src/services/export/zip.ts | 3 ++- .../src/services/export/zip/abstract_provider.ts | 12 +++++++++++- apps/server/src/services/export/zip/share_theme.ts | 10 +++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 1bfc1e842..10b84abce 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -23,6 +23,7 @@ import { AdvancedExportOptions, type ExportFormat, ZipExportProviderData } from import MarkdownExportProvider from "./zip/markdown.js"; import ShareThemeExportProvider from "./zip/share_theme.js"; import type BNote from "../../becca/entities/bnote.js"; +import { NoteType } from "@triliumnext/commons"; async function exportToZip(taskContext: TaskContext, branch: BBranch, format: ExportFormat, res: Response | fs.WriteStream, setHeaders = true, zipExportOptions?: AdvancedExportOptions) { if (!["html", "markdown", "share"].includes(format)) { @@ -77,7 +78,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: Ex } } - function getDataFileName(type: string | null, mime: string, baseFileName: string, existingFileNames: Record): string { + function getDataFileName(type: NoteType | null, mime: string, baseFileName: string, existingFileNames: Record): string { let fileName = baseFileName.trim(); // Crop fileName to avoid its length exceeding 30 and prevent cutting into the extension. diff --git a/apps/server/src/services/export/zip/abstract_provider.ts b/apps/server/src/services/export/zip/abstract_provider.ts index f777ed1cb..c9645a843 100644 --- a/apps/server/src/services/export/zip/abstract_provider.ts +++ b/apps/server/src/services/export/zip/abstract_provider.ts @@ -3,6 +3,7 @@ import type { default as NoteMeta, NoteMetaFile } from "../../meta/note_meta.js" import type BNote from "../../../becca/entities/bnote.js"; import type BBranch from "../../../becca/entities/bbranch.js"; import mimeTypes from "mime-types"; +import { NoteType } from "@triliumnext/commons"; type RewriteLinksFn = (content: string, noteMeta: NoteMeta) => string; @@ -51,7 +52,16 @@ export abstract class ZipExportProvider { abstract prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer; abstract afterDone(rootMeta: NoteMeta): void; - mapExtension(type: string | null, mime: string, existingExtension: string, format: ExportFormat) { + /** + * Determines the extension of the resulting file for a specific note type. + * + * @param type the type of the note. + * @param mime the mime type of the note. + * @param existingExtension the existing extension, including the leading period character. + * @param format the format requested for export (e.g. HTML, Markdown). + * @returns an extension *without* the leading period character, or `null` to preserve the existing extension instead. + */ + mapExtension(type: NoteType | null, mime: string, existingExtension: string, format: ExportFormat) { // the following two are handled specifically since we always want to have these extensions no matter the automatic detection // and/or existing detected extensions in the note name if (type === "text" && format === "markdown") { diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 03bdb68b4..06609b031 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -1,6 +1,6 @@ import { join } from "path"; import NoteMeta, { NoteMetaFile } from "../../meta/note_meta"; -import { ZipExportProvider } from "./abstract_provider.js"; +import { ExportFormat, ZipExportProvider } from "./abstract_provider.js"; import { RESOURCE_DIR } from "../../resource_dir"; import { getResourceDir, isDev } from "../../utils"; import fs from "fs"; @@ -65,6 +65,14 @@ export default class ShareThemeExportProvider extends ZipExportProvider { this.#saveIndex(rootMeta); } + mapExtension(type: string | null, mime: string, existingExtension: string, format: ExportFormat): string | null { + if (mime.startsWith("image/")) { + return null; + } + + return "html"; + } + #saveIndex(rootMeta: NoteMeta) { if (!this.indexMeta?.dataFileName) { return; From 9cf7fa1997ec754b4854e4c1a5f9eacd1277710d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 22:14:15 +0300 Subject: [PATCH 031/367] fix(export/share): use right extension for clones --- apps/server/src/services/export/zip.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 10b84abce..58df003af 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -126,7 +126,8 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: Ex const notePath = parentMeta.notePath.concat([note.noteId]); if (note.noteId in noteIdToMeta) { - const fileName = getUniqueFilename(existingFileNames, `${baseFileName}.clone.${format === "html" ? "html" : "md"}`); + const extension = provider.mapExtension("text", "text/html", "", format); + const fileName = getUniqueFilename(existingFileNames, `${baseFileName}.clone.${extension}`); const meta: NoteMeta = { isClone: true, From aa102ab3939f5c30b0afa4635fc5dc8dd0079ce2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 14:54:20 +0300 Subject: [PATCH 032/367] fix(export/share): missing templates after merge --- apps/server/src/services/export/zip/html.ts | 9 +++++++-- apps/server/src/share/content_renderer.ts | 13 ++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/server/src/services/export/zip/html.ts b/apps/server/src/services/export/zip/html.ts index 8eb5c5d93..259e4da67 100644 --- a/apps/server/src/services/export/zip/html.ts +++ b/apps/server/src/services/export/zip/html.ts @@ -1,8 +1,9 @@ import type NoteMeta from "../../meta/note_meta.js"; -import { escapeHtml } from "../../utils"; -import cssContent from "@triliumnext/ckeditor5/content.css"; +import { escapeHtml, getResourceDir, isDev } from "../../utils"; import html from "html"; import { ZipExportProvider } from "./abstract_provider.js"; +import path from "path"; +import fs from "fs"; export default class HtmlExportProvider extends ZipExportProvider { @@ -164,6 +165,10 @@ export default class HtmlExportProvider extends ZipExportProvider { return; } + const cssFile = isDev + ? path.join(__dirname, "../../../../../node_modules/ckeditor5/dist/ckeditor5-content.css") + : path.join(getResourceDir(), "ckeditor5-content.css"); + const cssContent = fs.readFileSync(cssFile, "utf-8"); this.archive.append(cssContent, { name: cssMeta.dataFileName }); } diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 31c3896c6..6a45b66e5 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -189,15 +189,22 @@ function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) } // Render with the default view otherwise. - const templatePath = join(getResourceDir(), "share-theme", "templates", "page.ejs"); + const templatePath = getDefaultTemplatePath("page"); return ejs.render(readTemplate(templatePath), opts, { includer: (path) => { - const templatePath = join(getResourceDir(), "share-theme", "templates", `${path}.ejs`); - return { template: readTemplate(templatePath) }; + // Path is relative to apps/server/dist/assets/views + return { template: readTemplate(getDefaultTemplatePath(path)) }; } }); } +function getDefaultTemplatePath(template: string) { + // Path is relative to apps/server/dist/assets/views + return process.env.NODE_ENV === "development" + ? join(__dirname, `../../../../packages/share-theme/src/templates/${template}.ejs`) + : `../../share-theme/templates/${template}.ejs`; +} + function readTemplate(path: string) { const cachedTemplate = templateCache.get(path); if (cachedTemplate) { From bb636128b049da91a2567f0c9186cac023044bb1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 16:02:20 +0300 Subject: [PATCH 033/367] fix(export/share): missing files and wrong meta handling --- apps/server/src/services/export/zip.ts | 20 +------------------- apps/server/src/services/export/zip/html.ts | 2 +- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 0ad0d7f22..8733686a9 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -3,7 +3,7 @@ import dateUtils from "../date_utils.js"; import path from "path"; import packageInfo from "../../../package.json" with { type: "json" }; -import { getContentDisposition, escapeHtml, getResourceDir, isDev } from "../utils.js"; +import { getContentDisposition } from "../utils.js"; import protectedSessionService from "../protected_session.js"; import sanitize from "sanitize-filename"; import fs from "fs"; @@ -415,24 +415,6 @@ async function exportToZip(taskContext: TaskContext<"export">, branch: BBranch, } return; } - - const metaFileJson = JSON.stringify(metaFile, null, "\t"); - - archive.append(metaFileJson, { name: "!!!meta.json" }); - - saveNote(rootMeta, ""); - - const note = branch.getNote(); - const zipFileName = `${branch.prefix ? `${branch.prefix} - ` : ""}${note.getTitleOrProtected() || "note"}.zip`; - - if (setHeaders && "setHeader" in res) { - res.setHeader("Content-Disposition", getContentDisposition(zipFileName)); - res.setHeader("Content-Type", "application/zip"); - } - - archive.pipe(res); - await archive.finalize(); - taskContext.taskSucceeded(null); } catch (e: unknown) { const message = `Export failed with error: ${e instanceof Error ? e.message : String(e)}`; log.error(message); diff --git a/apps/server/src/services/export/zip/html.ts b/apps/server/src/services/export/zip/html.ts index 259e4da67..0cab8193c 100644 --- a/apps/server/src/services/export/zip/html.ts +++ b/apps/server/src/services/export/zip/html.ts @@ -166,7 +166,7 @@ export default class HtmlExportProvider extends ZipExportProvider { } const cssFile = isDev - ? path.join(__dirname, "../../../../../node_modules/ckeditor5/dist/ckeditor5-content.css") + ? path.join(__dirname, "../../../../../../node_modules/ckeditor5/dist/ckeditor5-content.css") : path.join(getResourceDir(), "ckeditor5-content.css"); const cssContent = fs.readFileSync(cssFile, "utf-8"); this.archive.append(cssContent, { name: cssMeta.dataFileName }); From 357d294f2d349f5aa5fcd8f33e3ae82d4cce9f7d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 18:25:16 +0300 Subject: [PATCH 034/367] chore(export/share): address review --- apps/server/src/services/export/zip.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 8733686a9..f7ef70bc8 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -27,14 +27,14 @@ import { NoteType } from "@triliumnext/commons"; async function exportToZip(taskContext: TaskContext<"export">, branch: BBranch, format: ExportFormat, res: Response | fs.WriteStream, setHeaders = true, zipExportOptions?: AdvancedExportOptions) { if (!["html", "markdown", "share"].includes(format)) { - throw new ValidationError(`Only 'html' and 'markdown' allowed as export format, '${format}' given`); + throw new ValidationError(`Only 'html', 'markdown' and 'share' allowed as export format, '${format}' given`); } const archive = archiver("zip", { zlib: { level: 9 } // Sets the compression level. }); const rewriteFn = (zipExportOptions?.customRewriteLinks ? zipExportOptions?.customRewriteLinks(rewriteLinks, getNoteTargetUrl) : rewriteLinks); - const provider= buildProvider(); + const provider = buildProvider(); const noteIdToMeta: Record = {}; From 3660e2f12799c471099da03a7d622adbcff5bcd5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 19:00:26 +0300 Subject: [PATCH 035/367] refactor(share): store assets at /share/asset level --- apps/server/scripts/build.ts | 1 + apps/server/src/routes/assets.ts | 2 ++ apps/server/src/share/content_renderer.ts | 13 +++++-------- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/server/scripts/build.ts b/apps/server/scripts/build.ts index d2ed99ee2..6e0c53adf 100644 --- a/apps/server/scripts/build.ts +++ b/apps/server/scripts/build.ts @@ -7,6 +7,7 @@ async function main() { // Copy assets build.copy("src/assets", "assets/"); + build.triggerBuildAndCopyTo("packages/share-theme", "share-theme/assets/"); build.copy("/packages/share-theme/src/templates", "share-theme/templates/"); // Copy node modules dependencies diff --git a/apps/server/src/routes/assets.ts b/apps/server/src/routes/assets.ts index a1a2bfb63..efcb5a335 100644 --- a/apps/server/src/routes/assets.ts +++ b/apps/server/src/routes/assets.ts @@ -32,6 +32,7 @@ async function register(app: express.Application) { req.url = `/${assetUrlFragment}` + req.url; vite.middlewares(req, res, next); }); + app.use(`/share/assets/`, express.static(path.join(srcRoot, "../../packages/share-theme/dist"))); } else { const publicDir = path.join(resourceDir, "public"); if (!existsSync(publicDir)) { @@ -42,6 +43,7 @@ async function register(app: express.Application) { app.use(`/${assetUrlFragment}/stylesheets`, persistentCacheStatic(path.join(publicDir, "stylesheets"))); app.use(`/${assetUrlFragment}/fonts`, persistentCacheStatic(path.join(publicDir, "fonts"))); app.use(`/${assetUrlFragment}/translations/`, persistentCacheStatic(path.join(publicDir, "translations"))); + app.use(`/share/assets/`, persistentCacheStatic(path.join(resourceDir, "share-theme/assets"))); app.use(`/node_modules/`, persistentCacheStatic(path.join(publicDir, "node_modules"))); } app.use(`/${assetUrlFragment}/images`, persistentCacheStatic(path.join(resourceDir, "assets", "images"))); diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 6a45b66e5..aa42ecf44 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -9,15 +9,13 @@ import type BBranch from "../becca/entities/bbranch.js"; import { t } from "i18next"; import SBranch from "./shaca/entities/sbranch.js"; import options from "../services/options.js"; -import utils, { getResourceDir, isDev, safeExtractMessageAndStackFromError } from "../services/utils.js"; -import app_path from "../services/app_path.js"; +import utils, { isDev, safeExtractMessageAndStackFromError } from "../services/utils.js"; import ejs from "ejs"; import log from "../services/log.js"; import { join } from "path"; import { readFileSync } from "fs"; const shareAdjustedAssetPath = isDev ? assetPath : `../${assetPath}`; -const shareAdjustedAppPath = isDev ? app_path : `../${app_path}`; const templateCache: Map = new Map(); /** @@ -99,9 +97,9 @@ export function renderNoteContent(note: SNote) { // Determine CSS to load. const cssToLoad: string[] = []; - if (!isDev && !note.isLabelTruthy("shareOmitDefaultCss")) { - cssToLoad.push(`${shareAdjustedAssetPath}/src/share.css`); - cssToLoad.push(`${shareAdjustedAssetPath}/src/boxicons.css`); + if (!note.isLabelTruthy("shareOmitDefaultCss")) { + cssToLoad.push(`assets/styles.css`); + cssToLoad.push(`assets/boxicons.css`); } for (const cssRelation of note.getRelations("shareCss")) { cssToLoad.push(`api/notes/${cssRelation.value}/download`); @@ -109,7 +107,7 @@ export function renderNoteContent(note: SNote) { // Determine JS to load. const jsToLoad: string[] = [ - `${shareAdjustedAppPath}/share.js` + "assets/scripts.js" ]; for (const jsRelation of note.getRelations("shareJs")) { jsToLoad.push(`api/notes/${jsRelation.value}/download`); @@ -147,7 +145,6 @@ function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) isEmpty, assetPath: shareAdjustedAssetPath, assetUrlFragment, - appPath: shareAdjustedAppPath, showLoginInShareTheme, t, isDev, From 4ef766748440891f1182e87a6d8568f84ab10933 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 19:09:19 +0300 Subject: [PATCH 036/367] chore(share): bring back inline mermaid rendering --- apps/client/src/share.ts | 3 --- packages/share-theme/package.json | 3 +++ packages/share-theme/src/scripts/index.ts | 2 ++ .../share-theme/src/scripts/modules}/mermaid.ts | 0 pnpm-lock.yaml | 8 ++++++++ 5 files changed, 13 insertions(+), 3 deletions(-) rename {apps/client/src/share => packages/share-theme/src/scripts/modules}/mermaid.ts (100%) diff --git a/apps/client/src/share.ts b/apps/client/src/share.ts index b438f0c0c..d073baca1 100644 --- a/apps/client/src/share.ts +++ b/apps/client/src/share.ts @@ -32,9 +32,6 @@ async function formatCodeBlocks() { async function setupTextNote() { formatCodeBlocks(); applyMath(); - - const setupMermaid = (await import("./share/mermaid.js")).default; - setupMermaid(); } /** diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index a521b66aa..515a6fc02 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -21,6 +21,9 @@ "Zerebos " ], "license": "Apache-2.0", + "dependencies": { + "mermaid": "11.12.0" + }, "devDependencies": { "@digitak/esrun": "3.2.26", "@types/swagger-ui": "5.21.1", diff --git a/packages/share-theme/src/scripts/index.ts b/packages/share-theme/src/scripts/index.ts index 7b71fcb8f..03c5c101c 100644 --- a/packages/share-theme/src/scripts/index.ts +++ b/packages/share-theme/src/scripts/index.ts @@ -3,6 +3,7 @@ import setupExpanders from "./modules/expanders"; import setupMobileMenu from "./modules/mobile"; import setupSearch from "./modules/search"; import setupThemeSelector from "./modules/theme"; +import setupMermaid from "./modules/mermaid"; function $try unknown>(func: T, ...args: Parameters) { try { @@ -18,3 +19,4 @@ $try(setupToC); $try(setupExpanders); $try(setupMobileMenu); $try(setupSearch); +$try(setupMermaid); diff --git a/apps/client/src/share/mermaid.ts b/packages/share-theme/src/scripts/modules/mermaid.ts similarity index 100% rename from apps/client/src/share/mermaid.ts rename to packages/share-theme/src/scripts/modules/mermaid.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..e2755aca2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1328,6 +1328,10 @@ importers: version: 1.2.0 packages/share-theme: + dependencies: + mermaid: + specifier: 11.12.0 + version: 11.12.0 devDependencies: '@digitak/esrun': specifier: 3.2.26 @@ -15335,6 +15339,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15837,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: From 6ae67c410cfcfbc27d1bca4bb354517c2cfbd70c Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 20:52:47 +0300 Subject: [PATCH 037/367] chore(share): load Mermaid only when necessary --- packages/share-theme/src/scripts/modules/mermaid.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/share-theme/src/scripts/modules/mermaid.ts b/packages/share-theme/src/scripts/modules/mermaid.ts index 123f3816c..78ae5a573 100644 --- a/packages/share-theme/src/scripts/modules/mermaid.ts +++ b/packages/share-theme/src/scripts/modules/mermaid.ts @@ -1,7 +1,12 @@ -import mermaid from "mermaid"; +export default async function setupMermaid() { + const mermaidEls = document.querySelectorAll("#content pre code.language-mermaid"); + if (mermaidEls.length === 0) { + return; + } -export default function setupMermaid() { - for (const codeBlock of document.querySelectorAll("#content pre code.language-mermaid")) { + const mermaid = (await import("mermaid")).default; + + for (const codeBlock of mermaidEls) { const parentPre = codeBlock.parentElement; if (!parentPre) { continue; From b9a4e7ab117d7516734017a0ff24a0f2422a3168 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 20:52:54 +0300 Subject: [PATCH 038/367] chore(share): enable code splitting --- packages/share-theme/scripts/build.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/share-theme/scripts/build.ts b/packages/share-theme/scripts/build.ts index 586005ea5..073165f36 100644 --- a/packages/share-theme/scripts/build.ts +++ b/packages/share-theme/scripts/build.ts @@ -1,4 +1,3 @@ -import fs from "node:fs"; import path from "node:path"; // import {fileURLToPath} from "node:url"; @@ -51,8 +50,9 @@ async function runBuild() { await esbuild.build({ entryPoints: entryPoints, bundle: true, + splitting: true, outdir: path.join(rootDir, "dist"), - format: "cjs", + format: "esm", target: ["chrome96"], loader: { ".png": "dataurl", From e3dd25b5918148924de4cf2e2fcf74c0573eb1c1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 21:10:31 +0300 Subject: [PATCH 039/367] chore(share): set up math --- apps/client/src/share.ts | 9 --------- apps/server/src/share/content_renderer.ts | 1 + packages/share-theme/package.json | 1 + packages/share-theme/src/scripts/index.ts | 2 ++ packages/share-theme/src/scripts/modules/math.ts | 13 +++++++++++++ packages/share-theme/src/styles/content.css | 4 ++++ pnpm-lock.yaml | 7 +++---- 7 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 packages/share-theme/src/scripts/modules/math.ts diff --git a/apps/client/src/share.ts b/apps/client/src/share.ts index d073baca1..602f7e95c 100644 --- a/apps/client/src/share.ts +++ b/apps/client/src/share.ts @@ -9,15 +9,7 @@ async function ensureJQuery() { (window as any).$ = $; } -async function applyMath() { - const anyMathBlock = document.querySelector("#content .math-tex"); - if (!anyMathBlock) { - return; - } - const renderMathInElement = (await import("./services/math.js")).renderMathInElement; - renderMathInElement(document.getElementById("content")); -} async function formatCodeBlocks() { const anyCodeBlock = document.querySelector("#content pre"); @@ -31,7 +23,6 @@ async function formatCodeBlocks() { async function setupTextNote() { formatCodeBlocks(); - applyMath(); } /** diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index aa42ecf44..3b5ce0a6d 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -99,6 +99,7 @@ export function renderNoteContent(note: SNote) { const cssToLoad: string[] = []; if (!note.isLabelTruthy("shareOmitDefaultCss")) { cssToLoad.push(`assets/styles.css`); + cssToLoad.push(`assets/scripts.css`); cssToLoad.push(`assets/boxicons.css`); } for (const cssRelation of note.getRelations("shareCss")) { diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index 515a6fc02..ecaacfb52 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -22,6 +22,7 @@ ], "license": "Apache-2.0", "dependencies": { + "katex": "0.16.25", "mermaid": "11.12.0" }, "devDependencies": { diff --git a/packages/share-theme/src/scripts/index.ts b/packages/share-theme/src/scripts/index.ts index 03c5c101c..fbbc864d0 100644 --- a/packages/share-theme/src/scripts/index.ts +++ b/packages/share-theme/src/scripts/index.ts @@ -4,6 +4,7 @@ import setupMobileMenu from "./modules/mobile"; import setupSearch from "./modules/search"; import setupThemeSelector from "./modules/theme"; import setupMermaid from "./modules/mermaid"; +import setupMath from "./modules/math"; function $try unknown>(func: T, ...args: Parameters) { try { @@ -20,3 +21,4 @@ $try(setupExpanders); $try(setupMobileMenu); $try(setupSearch); $try(setupMermaid); +$try(setupMath); diff --git a/packages/share-theme/src/scripts/modules/math.ts b/packages/share-theme/src/scripts/modules/math.ts new file mode 100644 index 000000000..a1c3195ac --- /dev/null +++ b/packages/share-theme/src/scripts/modules/math.ts @@ -0,0 +1,13 @@ +export default async function setupMath() { + const anyMathBlock = document.querySelector("#content .math-tex"); + if (!anyMathBlock) { + return; + } + + const renderMathInElement = (await import("katex/contrib/auto-render")).default; + await import("katex/contrib/mhchem"); + await import("katex/dist/katex.min.css"); + + renderMathInElement(document.getElementById("content")); + document.body.classList.add("math-loaded"); +} diff --git a/packages/share-theme/src/styles/content.css b/packages/share-theme/src/styles/content.css index d500888a6..e67be725a 100644 --- a/packages/share-theme/src/styles/content.css +++ b/packages/share-theme/src/styles/content.css @@ -46,4 +46,8 @@ #content img { max-width: 100%; +} + +body:not(.math-loaded) .math-tex { + visibility: hidden; } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2755aca2..c8eab1bc0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1329,6 +1329,9 @@ importers: packages/share-theme: dependencies: + katex: + specifier: 0.16.25 + version: 0.16.25 mermaid: specifier: 11.12.0 version: 11.12.0 @@ -15085,8 +15088,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15837,8 +15838,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: From 21b20cf5750d9e02c6801284a2d32978f09b58ba Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 21:18:06 +0300 Subject: [PATCH 040/367] chore(share): bring back most of the logic --- apps/client/src/share.ts | 48 ------------------- packages/share-theme/src/scripts/index.ts | 34 ++++++++++++- .../share-theme/src/scripts/modules/api.ts | 18 +++++++ 3 files changed, 50 insertions(+), 50 deletions(-) create mode 100644 packages/share-theme/src/scripts/modules/api.ts diff --git a/apps/client/src/share.ts b/apps/client/src/share.ts index 602f7e95c..579b9e422 100644 --- a/apps/client/src/share.ts +++ b/apps/client/src/share.ts @@ -9,8 +9,6 @@ async function ensureJQuery() { (window as any).$ = $; } - - async function formatCodeBlocks() { const anyCodeBlock = document.querySelector("#content pre"); if (!anyCodeBlock) { @@ -24,49 +22,3 @@ async function formatCodeBlocks() { async function setupTextNote() { formatCodeBlocks(); } - -/** - * Fetch note with given ID from backend - * - * @param noteId of the given note to be fetched. If false, fetches current note. - */ -async function fetchNote(noteId: string | null = null) { - if (!noteId) { - noteId = document.body.getAttribute("data-note-id"); - } - - const resp = await fetch(`api/notes/${noteId}`); - - return await resp.json(); -} - -document.addEventListener( - "DOMContentLoaded", - () => { - const noteType = determineNoteType(); - - if (noteType === "text") { - setupTextNote(); - } - - const toggleMenuButton = document.getElementById("toggleMenuButton"); - const layout = document.getElementById("layout"); - - if (toggleMenuButton && layout) { - toggleMenuButton.addEventListener("click", () => layout.classList.toggle("showMenu")); - } - }, - false -); - -function determineNoteType() { - const bodyClass = document.body.className; - const match = bodyClass.match(/type-([^\s]+)/); - return match ? match[1] : null; -} - -// workaround to prevent webpack from removing "fetchNote" as dead code: -// add fetchNote as property to the window object -Object.defineProperty(window, "fetchNote", { - value: fetchNote -}); diff --git a/packages/share-theme/src/scripts/index.ts b/packages/share-theme/src/scripts/index.ts index fbbc864d0..ea08330b0 100644 --- a/packages/share-theme/src/scripts/index.ts +++ b/packages/share-theme/src/scripts/index.ts @@ -5,6 +5,7 @@ import setupSearch from "./modules/search"; import setupThemeSelector from "./modules/theme"; import setupMermaid from "./modules/mermaid"; import setupMath from "./modules/math"; +import api from "./modules/api"; function $try unknown>(func: T, ...args: Parameters) { try { @@ -15,10 +16,39 @@ function $try unknown>(func: T, ...args: Paramete } } +Object.assign(window, api); $try(setupThemeSelector); $try(setupToC); $try(setupExpanders); $try(setupMobileMenu); $try(setupSearch); -$try(setupMermaid); -$try(setupMath); + +function setupTextNote() { + $try(setupMermaid); + $try(setupMath); +} + +document.addEventListener( + "DOMContentLoaded", + () => { + const noteType = determineNoteType(); + + if (noteType === "text") { + setupTextNote(); + } + + const toggleMenuButton = document.getElementById("toggleMenuButton"); + const layout = document.getElementById("layout"); + + if (toggleMenuButton && layout) { + toggleMenuButton.addEventListener("click", () => layout.classList.toggle("showMenu")); + } + }, + false +); + +function determineNoteType() { + const bodyClass = document.body.className; + const match = bodyClass.match(/type-([^\s]+)/); + return match ? match[1] : null; +} diff --git a/packages/share-theme/src/scripts/modules/api.ts b/packages/share-theme/src/scripts/modules/api.ts new file mode 100644 index 000000000..adaca77d1 --- /dev/null +++ b/packages/share-theme/src/scripts/modules/api.ts @@ -0,0 +1,18 @@ +/** + * Fetch note with given ID from backend + * + * @param noteId of the given note to be fetched. If false, fetches current note. + */ +async function fetchNote(noteId: string | null = null) { + if (!noteId) { + noteId = document.body.getAttribute("data-note-id"); + } + + const resp = await fetch(`api/notes/${noteId}`); + + return await resp.json(); +} + +export default { + fetchNote +}; From 395f33cd5b1fddba239f1398b12a81f0261f1a17 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 22:32:42 +0300 Subject: [PATCH 041/367] chore(share): bring back boxicons --- apps/server/src/share/content_renderer.ts | 1 - packages/share-theme/package.json | 3 ++- packages/share-theme/scripts/build.ts | 2 ++ packages/share-theme/src/scripts/index.ts | 1 + packages/share-theme/src/scripts/modules/math.ts | 3 ++- pnpm-lock.yaml | 7 +++++++ 6 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 3b5ce0a6d..953feef1c 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -100,7 +100,6 @@ export function renderNoteContent(note: SNote) { if (!note.isLabelTruthy("shareOmitDefaultCss")) { cssToLoad.push(`assets/styles.css`); cssToLoad.push(`assets/scripts.css`); - cssToLoad.push(`assets/boxicons.css`); } for (const cssRelation of note.getRelations("shareCss")) { cssToLoad.push(`api/notes/${cssRelation.value}/download`); diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index ecaacfb52..68916cc3e 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -23,7 +23,8 @@ "license": "Apache-2.0", "dependencies": { "katex": "0.16.25", - "mermaid": "11.12.0" + "mermaid": "11.12.0", + "boxicons": "2.1.4" }, "devDependencies": { "@digitak/esrun": "3.2.26", diff --git a/packages/share-theme/scripts/build.ts b/packages/share-theme/scripts/build.ts index 073165f36..512935493 100644 --- a/packages/share-theme/scripts/build.ts +++ b/packages/share-theme/scripts/build.ts @@ -60,6 +60,8 @@ async function runBuild() { ".woff": "dataurl", ".woff2": "dataurl", ".ttf": "dataurl", + ".eot": "empty", + ".svg": "empty", ".html": "text", ".css": "css" }, diff --git a/packages/share-theme/src/scripts/index.ts b/packages/share-theme/src/scripts/index.ts index ea08330b0..f076a4bcc 100644 --- a/packages/share-theme/src/scripts/index.ts +++ b/packages/share-theme/src/scripts/index.ts @@ -6,6 +6,7 @@ import setupThemeSelector from "./modules/theme"; import setupMermaid from "./modules/mermaid"; import setupMath from "./modules/math"; import api from "./modules/api"; +import "boxicons/css/boxicons.min.css"; function $try unknown>(func: T, ...args: Parameters) { try { diff --git a/packages/share-theme/src/scripts/modules/math.ts b/packages/share-theme/src/scripts/modules/math.ts index a1c3195ac..bdba2ded9 100644 --- a/packages/share-theme/src/scripts/modules/math.ts +++ b/packages/share-theme/src/scripts/modules/math.ts @@ -1,3 +1,5 @@ +import "katex/dist/katex.min.css"; + export default async function setupMath() { const anyMathBlock = document.querySelector("#content .math-tex"); if (!anyMathBlock) { @@ -6,7 +8,6 @@ export default async function setupMath() { const renderMathInElement = (await import("katex/contrib/auto-render")).default; await import("katex/contrib/mhchem"); - await import("katex/dist/katex.min.css"); renderMathInElement(document.getElementById("content")); document.body.classList.add("math-loaded"); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8eab1bc0..d5cd6af3d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1329,6 +1329,9 @@ importers: packages/share-theme: dependencies: + boxicons: + specifier: 2.1.4 + version: 2.1.4 katex: specifier: 0.16.25 version: 0.16.25 @@ -15088,6 +15091,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15838,6 +15843,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: From 5dc066f4c6d00c480c2867295ff7d76e9cf32b57 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 23:03:20 +0300 Subject: [PATCH 042/367] chore(dev): add work-around to run on Ubuntu See https://github.com/electron/electron/issues/42510. --- scripts/electron-start.mts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/electron-start.mts b/scripts/electron-start.mts index 92e85f9a8..e1ed9df7e 100644 --- a/scripts/electron-start.mts +++ b/scripts/electron-start.mts @@ -3,7 +3,7 @@ import { getElectronPath, isNixOS } from "./utils.mjs"; const LD_LIBRARY_PATH = isNixOS() && execSync("nix eval --raw nixpkgs#gcc.cc.lib").toString("utf-8") + "/lib"; -execSync(`${getElectronPath()} ${process.argv[2]}`, { +execSync(`${getElectronPath()} ${process.argv[2]} --no-sandbox`, { stdio: "inherit", env: { ...process.env, From 1530d96eca758c878acf82df1718a4c3635db43d Mon Sep 17 00:00:00 2001 From: Manfred Manni Date: Fri, 24 Oct 2025 08:35:00 +0200 Subject: [PATCH 043/367] Translated using Weblate (German) Currently translated at 99.8% (1619 of 1621 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index ca0e40d69..e5037b780 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -184,7 +184,8 @@ }, "import-status": "Importstatus", "in-progress": "Import läuft: {{progress}}", - "successful": "Import erfolgreich abgeschlossen." + "successful": "Import erfolgreich abgeschlossen.", + "importZipRecommendation": "Beim Import einer ZIP-Datei wird die Notizhierarchie aus der Ordnerstruktur im Archiv übernommen." }, "include_note": { "dialog_title": "Notiz beifügen", @@ -1521,7 +1522,9 @@ "window-on-top": "Dieses Fenster immer oben halten" }, "note_detail": { - "could_not_find_typewidget": "Konnte typeWidget für Typ ‚{{type}}‘ nicht finden" + "could_not_find_typewidget": "Konnte typeWidget für Typ ‚{{type}}‘ nicht finden", + "printing": "Druckvorgang läuft…", + "printing_pdf": "PDF-Export läuft…" }, "note_title": { "placeholder": "Titel der Notiz hier eingeben…" From a99dfecf43eec9dbb00e84ae1afa198b56047829 Mon Sep 17 00:00:00 2001 From: Manfred Manni Date: Fri, 24 Oct 2025 08:30:49 +0200 Subject: [PATCH 044/367] Translated using Weblate (German) Currently translated at 100.0% (387 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/ --- apps/server/src/assets/translations/de/server.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/de/server.json b/apps/server/src/assets/translations/de/server.json index 6ee28f60f..8f072f8ea 100644 --- a/apps/server/src/assets/translations/de/server.json +++ b/apps/server/src/assets/translations/de/server.json @@ -274,7 +274,8 @@ "export_filter": "PDF Dokument (*.pdf)", "unable-to-export-message": "Die aktuelle Notiz konnte nicht als PDF exportiert werden.", "unable-to-export-title": "Export als PDF fehlgeschlagen", - "unable-to-save-message": "Die ausgewählte Datei konnte nicht beschrieben werden. Erneut versuchen oder ein anderes Ziel auswählen." + "unable-to-save-message": "Die ausgewählte Datei konnte nicht beschrieben werden. Erneut versuchen oder ein anderes Ziel auswählen.", + "unable-to-print": "Notiz kann nicht gedruckt werden" }, "tray": { "tooltip": "Trilium Notes", From bf4cfb9c02a5b302c3115192f521667452b1a814 Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 07:12:14 +0200 Subject: [PATCH 045/367] Translated using Weblate (Hungarian) Currently translated at 1.7% (29 of 1621 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/hu/ --- .../src/translations/hu/translation.json | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/hu/translation.json b/apps/client/src/translations/hu/translation.json index 0967ef424..4d9d4a09a 100644 --- a/apps/client/src/translations/hu/translation.json +++ b/apps/client/src/translations/hu/translation.json @@ -1 +1,47 @@ -{} +{ + "about": { + "title": "A Trilium Notes-ról", + "homepage": "Kezdőlap:", + "app_version": "Alkalmazás verziója:", + "db_version": "Adatbázis verzió:", + "sync_version": "Verzió szinkronizálás :", + "build_revision": "Build revízió:", + "data_directory": "Adatkönyvtár:", + "build_date": "Build dátum:" + }, + "toast": { + "critical-error": { + "title": "Kritikus hiba", + "message": "Kritikus hiba történt, amely megakadályozza a kliensalkalmazás indítását:\n\n{{message}}\n\nEzt valószínűleg egy váratlan szkripthiba okozza. Próbálja meg biztonságos módban elindítani az alkalmazást, és hárítsa el a problémát." + }, + "widget-error": { + "title": "Nem sikerült inicializálni egy widgetet", + "message-custom": "A(z) \"{{id}}\" azonosítójú, \"{{title}}\" című jegyzetből származó egyéni widget inicializálása sikertelen volt a következő ok miatt:\n\n{{message}}", + "message-unknown": "Ismeretlen widget inicializálása sikertelen volt a következő ok miatt:\n\n{{message}}" + }, + "bundle-error": { + "title": "Nem sikerült betölteni az egyéni szkriptet", + "message": "A(z) \"{{id}}\" azonosítójú, \"{{title}}\" című jegyzetből származó szkript nem hajtható végre a következő ok miatt:\n\n{{message}}" + } + }, + "add_link": { + "add_link": "Link hozzáadása", + "help_on_links": "Segítség a linkekhez", + "note": "Jegyzet", + "search_note": "név szerinti jegyzetkeresés", + "link_title_mirrors": "A link cím tükrözi a jegyzet aktuális címét", + "link_title_arbitrary": "link cím önkényesen módosítható", + "link_title": "Link cím", + "button_add_link": "Link hozzáadása" + }, + "branch_prefix": { + "edit_branch_prefix": "Az elágazás előtagjának szerkesztése", + "help_on_tree_prefix": "Segítség a fa előtagján", + "prefix": "Az előtag: ", + "save": "Mentés" + }, + "bulk_actions": { + "bulk_actions": "Tömeges akciók", + "affected_notes": "Érintett jegyzetek" + } +} From a64d8cd8e2b03f4a45691d659f4575e39be3b0bb Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 07:11:26 +0200 Subject: [PATCH 046/367] Translated using Weblate (Hungarian) Currently translated at 7.4% (29 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/hu/ --- apps/server/src/assets/translations/hu/server.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/hu/server.json b/apps/server/src/assets/translations/hu/server.json index 5ec97ec4f..45282ac36 100644 --- a/apps/server/src/assets/translations/hu/server.json +++ b/apps/server/src/assets/translations/hu/server.json @@ -23,6 +23,11 @@ "edit-note-title": "Ugrás fáról a jegyzet részleteihez és a cím szerkesztése", "edit-branch-prefix": "\"Ág címjelzésének szerkesztése\" ablak mutatása", "clone-notes-to": "Kijelölt jegyzetek másolása", - "move-notes-to": "Kijelölt jegyzetek elhelyzése" + "move-notes-to": "Kijelölt jegyzetek elhelyzése", + "note-clipboard": "Megjegyzés vágólap", + "copy-notes-to-clipboard": "Másolja a kiválasztott jegyzeteket a vágólapra", + "paste-notes-from-clipboard": "A vágólapról szóló jegyzetek beillesztése aktív jegyzetbe", + "cut-notes-to-clipboard": "A kiválasztott jegyzetek kivágása a vágólapra", + "select-all-notes-in-parent": "Válassza ki az összes jegyzetet az aktuális jegyzetszintről" } } From d4a6a297f488b9e42071238fcedde602b73948f1 Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Fri, 24 Oct 2025 05:54:48 +0200 Subject: [PATCH 047/367] Translated using Weblate (Arabic) Currently translated at 64.3% (1043 of 1621 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/ --- .../src/translations/ar/translation.json | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/apps/client/src/translations/ar/translation.json b/apps/client/src/translations/ar/translation.json index 2e11116fb..3a913844f 100644 --- a/apps/client/src/translations/ar/translation.json +++ b/apps/client/src/translations/ar/translation.json @@ -12,6 +12,9 @@ "toast": { "critical-error": { "title": "خطأ فادح" + }, + "widget-error": { + "title": "فشل في البدء بعنصر الواجهة" } }, "add_link": { @@ -26,7 +29,8 @@ "edit_branch_prefix": "تعديل بادئة الفرع", "prefix": "البادئة: ", "save": "حفظ", - "help_on_tree_prefix": "مساعدة حول بادئة الشجرة" + "help_on_tree_prefix": "مساعدة حول بادئة الشجرة", + "branch_prefix_saved": "تم حفظ بادئة الفرع." }, "bulk_actions": { "bulk_actions": "اجراءات جماعية", @@ -372,7 +376,8 @@ "export_note_title": "تصدير الملاحظة", "export_status": "حالة التصدير", "export_finished_successfully": "اكتمل التصدير بنجاح.", - "export_in_progress": "جار التصدير: {{progressCount}}" + "export_in_progress": "جار التصدير: {{progressCount}}", + "choose_export_type": "اختر نوع التصدير اولا من فضلك" }, "help": { "troubleshooting": "أستكشاف الاخطاء واصلاحها", @@ -402,7 +407,10 @@ "movingCloningNotes": "نقل/ استنساخ الملاحظات", "deleteNotes": "حذف الملاحظة/ الشجرة الفرعية", "collapseWholeTree": "طي شجرة الملاحظة باكملها", - "followLink": "اتبع تلرابط تحت المؤشر" + "followLink": "اتبع تلرابط تحت المؤشر", + "onlyInDesktop": "في سطح المكتب فقط(Electron build)", + "createEditLink": "انشاء/ تحرير رابط خارجي", + "quickSearch": "الانتقال الى مربع البحث السريع" }, "import": { "options": "خيارات", @@ -465,7 +473,11 @@ "delete_all_button": "حذف كل المراجعات", "settings": "اعدادات مراجعة الملاحظة", "diff_not_available": "المقارنة غير متوفرة.", - "help_title": "مساعدة حول مراجعات الملاحظة" + "help_title": "مساعدة حول مراجعات الملاحظة", + "diff_off_hint": "انقر لعرض محتويات الملاحظة", + "revisions_deleted": "تم حذف جميع نسخ المراجعات للملاحظة.", + "revision_restored": "تم استعادة نسخ المراجعة للملاحظة.", + "revision_deleted": "تم حذف مراجعة الملاحظة." }, "sort_child_notes": { "title": "عنوان", @@ -485,7 +497,8 @@ "undelete_link": "الغاء الحذف", "title": "التغيرات الاخيرة", "no_changes_message": "لايوجد تغيير لحد الان...", - "erase_notes_button": "مسح الملاحظات المحذوفة الان" + "erase_notes_button": "مسح الملاحظات المحذوفة الان", + "deleted_notes_message": "تم حذف الملاحظات نهائيا." }, "edited_notes": { "deleted": "(حذف)", @@ -811,7 +824,8 @@ "help_on_links": "مساعدة حول الارتباطات التشعبية", "notes_to_clone": "ملاحظات للنسخ", "target_parent_note": "الملاحظة الاصلية الهدف", - "clone_to_selected_note": "استنساخ الى الملاحظة المحددة" + "clone_to_selected_note": "استنساخ الى الملاحظة المحددة", + "no_path_to_clone_to": "لايوجد مسار لنسخ المحتوى الية." }, "table_of_contents": { "unit": "عناوين", @@ -1312,7 +1326,8 @@ "notes_to_move": "الملاحظات المراد نقلها", "target_parent_note": "ملاحظة الاصل الهدف", "dialog_title": "انقل الملاحظات الى...", - "move_button": "نقل الىالملاحظة المحددة" + "move_button": "نقل الىالملاحظة المحددة", + "error_no_path": "لايوجد مسار لنقل العنصر الية." }, "delete_revisions": { "delete_note_revisions": "حذف مراجعات الملاحظة" From 32dee254cdd72dabe3aa35dbbc751f6aa302e207 Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Fri, 24 Oct 2025 05:56:39 +0200 Subject: [PATCH 048/367] Translated using Weblate (Arabic) Currently translated at 82.4% (319 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/ar/ --- apps/server/src/assets/translations/ar/server.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/server/src/assets/translations/ar/server.json b/apps/server/src/assets/translations/ar/server.json index e51c4c9f9..114a2598f 100644 --- a/apps/server/src/assets/translations/ar/server.json +++ b/apps/server/src/assets/translations/ar/server.json @@ -84,7 +84,9 @@ "show-backend-log": "فتح صفحة \"سجل الخلفية\"", "edit-readonly-note": "تعديل ملاحظة القراءة فقط", "attributes-labels-and-relations": "سمات ( تسميات و علاقات)", - "render-active-note": "عرض ( اعادة عرض) الملاحظة المؤرشفة" + "render-active-note": "عرض ( اعادة عرض) الملاحظة المؤرشفة", + "show-help": "فتح دليل التعليمات", + "copy-without-formatting": "نسخ النص المحدد بدون تنسيق" }, "setup_sync-from-server": { "note": "ملاحظة:", @@ -339,7 +341,14 @@ "toggle-system-tray-icon": "تبديل ايقونة علبة النظام", "switch-to-first-tab": "التبديل الى التبويب الاول", "follow-link-under-cursor": "اتبع الرابط اسفل المؤشر", - "paste-markdown-into-text": "لصق نص بتنسبق Markdown" + "paste-markdown-into-text": "لصق نص بتنسبق Markdown", + "move-note-up-in-hierarchy": "نقل الملاحظة للاعلى في الهيكل", + "move-note-down-in-hierarchy": "نقل الملاحظة للاسفل في الهيكل", + "select-all-notes-in-parent": "تحديد جميع الملاحظات التابعة للملاحظة الاصل", + "add-note-above-to-selection": "اضافة ملاحظة فوق الملاحظة المحددة", + "add-note-below-to-selection": "اصافة ملاحظة اسفل الملاحظة المحددة", + "add-include-note-to-text": "اضافة الملاحظة الى النص", + "toggle-ribbon-tab-image-properties": "اظهار/ اخفاء صورة علامة التبويب في الشريط." }, "share_404": { "title": "غير موجود", From 0e2196f8723f249f539542cf67e6482b38d08bee Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 07:11:43 +0200 Subject: [PATCH 049/367] Translated using Weblate (Hungarian) Currently translated at 24.5% (29 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/hu/ --- docs/README-hu.md | 124 +++++++++++++++++++++++----------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/docs/README-hu.md b/docs/README-hu.md index bba139cc9..4c960dcdc 100644 --- a/docs/README-hu.md +++ b/docs/README-hu.md @@ -9,85 +9,85 @@
    -# Trilium Notes +# Trilium Jegyzetek -![GitHub Sponsors](https://img.shields.io/github/sponsors/eliandoran) -![LiberaPay patrons](https://img.shields.io/liberapay/patrons/ElianDoran)\ -![Docker Pulls](https://img.shields.io/docker/pulls/triliumnext/trilium) -![GitHub Downloads (all assets, all -releases)](https://img.shields.io/github/downloads/triliumnext/trilium/total)\ +![GitHub szponzorok](https://img.shields.io/github/sponsors/eliandoran) +![LiberaPay támogatók](https://img.shields.io/liberapay/patrons/ElianDoran)\ +![Docker pull-ok](https://img.shields.io/docker/pulls/triliumnext/trilium) +![GitHub letöltések (összes tartalom, összes +kiadás)](https://img.shields.io/github/downloads/triliumnext/trilium/total)\ [![RelativeCI](https://badges.relative-ci.com/badges/Di5q7dz9daNDZ9UXi0Bp?branch=develop)](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) -[![Translation -status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted.weblate.org/engage/trilium/) +[![Fordítás +állapota](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted.weblate.org/engage/trilium/) -[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | -[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md) -| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) | -[Spanish](./docs/README-es.md) +[angol](./README.md) | [egyszerűsített kínai](./docs/README-ZH_CN.md) | +[hagyományos kínai](./docs/README-ZH_TW.md) | [orosz](./docs/README-ru.md) | +[japán](./docs/README-ja.md) | [olasz](./docs/README-it.md) | +[spanyol](./docs/README-es.md) -Trilium Notes is a free and open-source, cross-platform hierarchical note taking -application with focus on building large personal knowledge bases. +A Trilium Notes egy ingyenes és nyílt forráskódú, platformfüggetlen hierarchikus +jegyzetelő alkalmazás, amely nagy személyes tudásbázisok építésére összpontosít. -See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for -quick overview: +A gyors áttekintésért lásd a +[képernyőképeket](https://triliumnext.github.io/Docs/Wiki/screenshot-tour): Trilium Screenshot -## ⏬ Download -- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – - stable version, recommended for most users. +## ⏬ Letöltés +- [Legújabb kiadás](https://github.com/TriliumNext/Trilium/releases/latest) – + stabil verzió, a legtöbb felhasználó számára ajánlott. - [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – - unstable development version, updated daily with the latest features and - fixes. + instabil fejlesztői verzió, naponta frissül a legújabb funkciókkal és + javításokkal. -## 📚 Documentation +## 📚 Dokumentáció -**Visit our comprehensive documentation at -[docs.triliumnotes.org](https://docs.triliumnotes.org/)** +**Tekintse meg átfogó dokumentációnkat a [docs.triliumnotes.org] +címen(https://docs.triliumnotes.org/)** -Our documentation is available in multiple formats: -- **Online Documentation**: Browse the full documentation at - [docs.triliumnotes.org](https://docs.triliumnotes.org/) -- **In-App Help**: Press `F1` within Trilium to access the same documentation - directly in the application -- **GitHub**: Navigate through the [User - Guide](./docs/User%20Guide/User%20Guide/) in this repository +Dokumentációink többféle formátumban is elérhetők: +- **Online dokumentáció**: Böngéssze a teljes dokumentációt a + [docs.triliumnotes.org](https://docs.triliumnotes.org/) címen. +- **Alkalmazáson belüli súgó**: Nyomja meg az `F1` billentyűt a Triliumon belül, + hogy ugyanazt a dokumentációt közvetlenül az alkalmazásban is elérje. +- **GitHub**: Navigálj a [Felhasználói + útmutatóban](./docs/User%20Guide/User%20Guide/) ebben a repository-ban -### Quick Links -- [Getting Started Guide](https://docs.triliumnotes.org/) -- [Installation - Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) +### Gyorslinkek +- [Kezdő lépések útmutatója](https://docs.triliumnotes.org/) +- [Telepítési + utasítások](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) - [Docker - Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md) -- [Upgrading - TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md) -- [Basic Concepts and - Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md) -- [Patterns of Personal Knowledge - Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) + beállítás](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md) +- [TriliumNext + Frissítése](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md) +- [Alapfogalmak és + jellemzők](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md) +- [A személyes tudásbázis + mintái](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) -## 🎁 Features +## 🎁 Jellemzők -* Notes can be arranged into arbitrarily deep tree. Single note can be placed - into multiple places in the tree (see - [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) -* Rich WYSIWYG note editor including e.g. tables, images and - [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown +* A jegyzetek önkényesen mély fába rendezhetők. Egyetlen jegyzetet lehet + elhelyezni a többi fába (lásd + [klónozás](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) +* Gazdag WYSIWYG jegyzetszerkesztő, beleértve például az asztalokat, képeket és + [math](https://triliumnext.github.io/Docs/Wiki/text-notes) markdownt [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) -* Support for editing [notes with source - code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax - highlighting -* Fast and easy [navigation between - notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text - search and [note - hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting) -* Seamless [note - versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions) -* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be - used for note organization, querying and advanced - [scripting](https://triliumnext.github.io/Docs/Wiki/scripts) -* UI available in English, German, Spanish, French, Romanian, and Chinese - (simplified and traditional) +* Szerkesztés támogatása [jegyzetek + forráskóddal](https://triliumnext.github.io/Docs/Wiki/code-notes), beleértve a + szintaxis kiemelését +* Gyors és egyszerű [navigáció a jegyzetek + között](https://triliumnext.github.io/Docs/Wiki/note-navigation), teljes + szöveges keresés és + [megjegyzés](https://triliumnext.github.io/Docs/Wiki/note-hoisting) +* Zökkenőmentes + [jegyzetváltozat](https://triliumnext.github.io/Docs/Wiki/note-revisions) +* Megjegyzés [attribútumok](https://triliumnext.github.io/Docs/Wiki/attributes) + használható jegyzetszervezéshez, lekérdezéshez és speciális + [szkriptelés](https://triliumnext.github.io/Docs/Wiki/scripts) +* UI elérhető angol, német, spanyol, francia, román és kínai (egyszerűsített és + hagyományos) * Direct [OpenID and TOTP integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md) for more secure login From 0ec00913578fc515f283a4b535aa77a5d9b17f78 Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 07:12:02 +0200 Subject: [PATCH 050/367] Translated using Weblate (Hungarian) Currently translated at 19.1% (28 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/hu/ --- .../public/translations/hu/translation.json | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/apps/website/public/translations/hu/translation.json b/apps/website/public/translations/hu/translation.json index 0967ef424..06ef1b8ca 100644 --- a/apps/website/public/translations/hu/translation.json +++ b/apps/website/public/translations/hu/translation.json @@ -1 +1,39 @@ -{} +{ + "get-started": { + "title": "Kezdés", + "desktop_title": "Töltsd le az asztali alkalmazást (v{{version}})", + "architecture": "Szerkezet:", + "older_releases": "Régebbi kiadások megtekintése", + "server_title": "Szerver beállítása több eszközről történő hozzáféréshez" + }, + "hero_section": { + "title": "Rendszerezd a gondolataidat. Építsd fel a személyes tudásbázisodat.", + "subtitle": "A Trilium egy nyílt forráskódú megoldás jegyzeteléshez és személyes tudásbázis rendszerezéséhez. Használd helyben az asztali gépeden, vagy szinkronizáld a saját szervereddel, hogy jegyzeteid mindenhol elérhetőek legyenek.", + "get_started": "Kezdés", + "github": "GitHub", + "dockerhub": "Docker Hub", + "screenshot_alt": "A Trilium Notes asztali alkalmazás képernyőképe" + }, + "organization_benefits": { + "title": "Szervezet", + "note_structure_title": "Jegyzet szerkezet", + "note_structure_description": "A jegyzetek hierarchikusan rendezhetők. Nincs szükség mappákra, mivel minden jegyzet tartalmazhat aljegyzeteket. Egyetlen jegyzet több helyre is hozzáadható a hierarchiában.", + "attributes_title": "Jegyzetcímkék és kapcsolatok", + "attributes_description": "Használjon kapcsolatokat a jegyzetek között, vagy adjon hozzá címkéket az egyszerű kategorizálás érdekében. Használjon kiemelt attribútumokat strukturált információk beviteléhez, amelyek táblázatokban és táblákon használhatók.", + "hoisting_title": "Munkaterületek és kiemelés", + "hoisting_description": "Könnyedén különítse el a személyes és munkahelyi jegyzeteit úgy, hogy csoportosítja őket egy munkaterület alatt, amely a jegyzetfát csak egy adott jegyzetkészlet megjelenítésére összpontosítja." + }, + "productivity_benefits": { + "title": "Termelékenység és biztonság", + "revisions_title": "Megjegyzés felülvizsgálatai", + "revisions_content": "A jegyzetek rendszeresen tárolódnak a háttérben, és a revíziók felhasználhatók felülvizsgálatra vagy véletlen változások visszavonására. A revíziók igény szerint is létrehozhatók.", + "sync_title": "Szinkronizálás", + "sync_content": "Használjon saját maga által üzemeltetett vagy felhő alapu példányt, hogy könnyen szinkronizálja a jegyzeteket több eszközön keresztül, és hozzáférjen a mobiltelefonjáról egy PWA segítségével.", + "protected_notes_title": "Védett jegyzetek", + "protected_notes_content": "Védje az érzékeny személyes adatokat a jegyzetek titkosításával és a jelszóval védett munkamenet mögötti zárolással.", + "jump_to_title": "Gyors keresés és parancsok", + "jump_to_content": "Ugorj gyorsan a jegyzetekhez vagy a felhasználói felület parancsaihoz a hierarchia területén, keresve a címüket, a fuzzy illesztéssel, hogy megmagyarázza az elírásokat vagy az enyhe különbségeket.", + "search_title": "Erőteljes keresés", + "search_content": "Vagy keressen szöveget a jegyzetekben, és szűkítse le a keresést a szülői jegyzet szűrésével vagy mélységével." + } +} From f502fe41c76dd988be2aa20945ed5cc756640e5a Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Fri, 24 Oct 2025 05:30:25 +0200 Subject: [PATCH 051/367] Translated using Weblate (Arabic) Currently translated at 52.7% (77 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/ --- apps/website/public/translations/ar/translation.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/website/public/translations/ar/translation.json b/apps/website/public/translations/ar/translation.json index ce83352fc..e0c453b3f 100644 --- a/apps/website/public/translations/ar/translation.json +++ b/apps/website/public/translations/ar/translation.json @@ -73,7 +73,8 @@ "download_exe": "تحميل ملف التثبيت (exe.)", "title_x64": "ويندوز 64 بت", "download_zip": "النسخة المحمولة بصيغة zip", - "title_arm64": "نظام ويندوز عاى ARM" + "title_arm64": "نظام ويندوز عاى ARM", + "quick_start": "للتثبيت باستخدام Winget:" }, "download_helper_desktop_linux": { "download_deb": ".deb", @@ -112,6 +113,11 @@ "download_dmg": "تحميل ملف التثبيت (dmg.)", "download_homebrew_cask": "Homebrew Cask", "download_zip": "النسخة المحمولة بصيغة zip", - "title_x64": "نظام macOS لاصدار intel" + "title_x64": "نظام macOS لاصدار intel", + "title_arm64": "نظام macOS لمعالجة اجهزة Apple Silicon", + "quick_start": "للتثبيت بواسطة Homebrew:" + }, + "contribute": { + "title": "طرق اخرى للمساهمة" } } From 1e4793351a51297e862f248129ea7afc67eb2dea Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 18:27:08 +0200 Subject: [PATCH 052/367] Translated using Weblate (Hungarian) Currently translated at 1.9% (32 of 1621 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/hu/ --- apps/client/src/translations/hu/translation.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/hu/translation.json b/apps/client/src/translations/hu/translation.json index 4d9d4a09a..042fbb281 100644 --- a/apps/client/src/translations/hu/translation.json +++ b/apps/client/src/translations/hu/translation.json @@ -42,6 +42,9 @@ }, "bulk_actions": { "bulk_actions": "Tömeges akciók", - "affected_notes": "Érintett jegyzetek" + "affected_notes": "Érintett jegyzetek", + "labels": "Címkék", + "relations": "Kapcsolatok", + "notes": "Jegyzetek" } } From ac1399a139bc561c07efb8b4f935eee07b37314b Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 18:26:54 +0200 Subject: [PATCH 053/367] Translated using Weblate (Hungarian) Currently translated at 8.2% (32 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/hu/ --- apps/server/src/assets/translations/hu/server.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/hu/server.json b/apps/server/src/assets/translations/hu/server.json index 45282ac36..2411a8d51 100644 --- a/apps/server/src/assets/translations/hu/server.json +++ b/apps/server/src/assets/translations/hu/server.json @@ -28,6 +28,9 @@ "copy-notes-to-clipboard": "Másolja a kiválasztott jegyzeteket a vágólapra", "paste-notes-from-clipboard": "A vágólapról szóló jegyzetek beillesztése aktív jegyzetbe", "cut-notes-to-clipboard": "A kiválasztott jegyzetek kivágása a vágólapra", - "select-all-notes-in-parent": "Válassza ki az összes jegyzetet az aktuális jegyzetszintről" + "select-all-notes-in-parent": "Válassza ki az összes jegyzetet az aktuális jegyzetszintről", + "activate-next-tab": "Aktiválja a jobb oldali fület", + "activate-previous-tab": "Aktiválja a lapot a bal oldalon", + "open-new-window": "Nyiss új üres ablakot" } } From 808ba75ee07325a5572847d75bc358f528ad4a31 Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 18:27:33 +0200 Subject: [PATCH 054/367] Translated using Weblate (Hungarian) Currently translated at 27.1% (32 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/hu/ --- docs/README-hu.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/README-hu.md b/docs/README-hu.md index 4c960dcdc..867c35eec 100644 --- a/docs/README-hu.md +++ b/docs/README-hu.md @@ -105,11 +105,12 @@ Dokumentációink többféle formátumban is elérhetők: * [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing notes and their relations -* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/) -* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with - location pins and GPX tracks -* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced - showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) +* Elmetérképek, [Mind Elixir](https://docs.mind-elixir.com/) alapján +* [Geo térképek](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) + helymeghatározó tűkkel és GPX nyomokkal +* [Szkriptelés](https://triliumnext.github.io/Docs/Wiki/scripts) - lásd: + [Speciális + bemutatók](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) * [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation * Scales well in both usability and performance upwards of 100 000 notes * Touch optimized [mobile From 31ee78b1aa62c78c90ca6737f402c29cd5b25610 Mon Sep 17 00:00:00 2001 From: brtkcs Date: Fri, 24 Oct 2025 18:29:13 +0200 Subject: [PATCH 055/367] Translated using Weblate (Hungarian) Currently translated at 21.2% (31 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/hu/ --- apps/website/public/translations/hu/translation.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/website/public/translations/hu/translation.json b/apps/website/public/translations/hu/translation.json index 06ef1b8ca..a988c42ef 100644 --- a/apps/website/public/translations/hu/translation.json +++ b/apps/website/public/translations/hu/translation.json @@ -35,5 +35,10 @@ "jump_to_content": "Ugorj gyorsan a jegyzetekhez vagy a felhasználói felület parancsaihoz a hierarchia területén, keresve a címüket, a fuzzy illesztéssel, hogy megmagyarázza az elírásokat vagy az enyhe különbségeket.", "search_title": "Erőteljes keresés", "search_content": "Vagy keressen szöveget a jegyzetekben, és szűkítse le a keresést a szülői jegyzet szűrésével vagy mélységével." + }, + "note_types": { + "file_description": "Beágyazott multimédiás fájlokat, például PDF-eket, képeket, videókat, alkalmazáson belüli előnézettel.", + "canvas_title": "Vászon", + "canvas_description": "Rendezzen formákat, képeket és szöveget egy végtelen vászonra, ugyanazzal a technológiával mint ami excalidraw.com mögött van. Ideális diagramokhoz, vázlatokhoz és vizuális tervezéshez." } } From 0c399a676a0ea86de6bb8f905d8cb8d8aa071940 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 24 Oct 2025 23:28:42 +0300 Subject: [PATCH 056/367] chore(share): fix typecheck issue --- packages/share-theme/src/types.d.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/share-theme/src/types.d.ts diff --git a/packages/share-theme/src/types.d.ts b/packages/share-theme/src/types.d.ts new file mode 100644 index 000000000..3fa19bd49 --- /dev/null +++ b/packages/share-theme/src/types.d.ts @@ -0,0 +1,5 @@ +declare module "katex/contrib/auto-render" { + export default function renderMathInElement(elem: HTMLElement, options?: {}) +} + +declare module "katex/contrib/mhchem" {} From 35316a4c45a31dee6c38968cac82d579e0c74bbc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:08:32 +0000 Subject: [PATCH 057/367] chore(deps): update dependency @smithy/middleware-retry to v4.4.5 --- packages/ckeditor5/package.json | 2 +- pnpm-lock.yaml | 97 +++++++++++++++++++++++++++++---- 2 files changed, 87 insertions(+), 12 deletions(-) diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 261bbed8f..d73384443 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -15,7 +15,7 @@ "ckeditor5-premium-features": "47.1.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.4", + "@smithy/middleware-retry": "4.4.5", "@types/jquery": "3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..0c64b419e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -840,8 +840,8 @@ importers: version: 47.1.0(bufferutil@4.0.9)(ckeditor5@47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41))(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': - specifier: 4.4.4 - version: 4.4.4 + specifier: 4.4.5 + version: 4.4.5 '@types/jquery': specifier: 3.5.33 version: 3.5.33 @@ -4390,6 +4390,10 @@ packages: resolution: {integrity: sha512-Tir3DbfoTO97fEGUZjzGeoXgcQAUBRDTmuH9A8lxuP8ATrgezrAJ6cLuRvwdKN4ZbYNlHgKlBX69Hyu3THYhtg==} engines: {node: '>=18.0.0'} + '@smithy/core@3.17.1': + resolution: {integrity: sha512-V4Qc2CIb5McABYfaGiIYLTmo/vwNIK7WXI5aGveBd9UcdhbOMwcvIMxIw/DJj1S9QgOMa/7FBkarMdIC0EOTEQ==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.0.6': resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} engines: {node: '>=18.0.0'} @@ -4442,8 +4446,12 @@ packages: resolution: {integrity: sha512-/RJhpYkMOaUZoJEkddamGPPIYeKICKXOu/ojhn85dKDM0n5iDIhjvYAQLP3K5FPhgB203O3GpWzoK2OehEoIUw==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.4': - resolution: {integrity: sha512-vSgABQAkuUHRO03AhR2rWxVQ1un284lkBn+NFawzdahmzksAoOeVMnXXsuPViL4GlhRHXqFaMlc8Mj04OfQk1w==} + '@smithy/middleware-endpoint@4.3.5': + resolution: {integrity: sha512-SIzKVTvEudFWJbxAaq7f2GvP3jh2FHDpIFI6/VAf4FOWGFZy0vnYMPSRj8PGYI8Hjt29mvmwSRgKuO3bK4ixDw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.5': + resolution: {integrity: sha512-DCaXbQqcZ4tONMvvdz+zccDE21sLcbwWoNqzPLFlZaxt1lDtOE2tlVpRSwcTOJrjJSUThdgEYn7HrX5oLGlK9A==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.3': @@ -4462,6 +4470,10 @@ packages: resolution: {integrity: sha512-MHFvTjts24cjGo1byXqhXrbqm7uznFD/ESFx8npHMWTFQVdBZjrT1hKottmp69LBTRm/JQzP/sn1vPt0/r6AYQ==} engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.4.3': + resolution: {integrity: sha512-MAwltrDB0lZB/H6/2M5PIsISSwdI5yIh6DaBB9r0Flo9nx3y0dzl/qTMJPd7tJvPdsx6Ks/cwVzheGNYzXyNbQ==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.3': resolution: {integrity: sha512-+1EZ+Y+njiefCohjlhyOcy1UNYjT+1PwGFHCxA/gYctjg3DQWAU19WigOXAco/Ql8hZokNehpzLd0/+3uCreqQ==} engines: {node: '>=18.0.0'} @@ -4494,6 +4506,10 @@ packages: resolution: {integrity: sha512-qz7RTd15GGdwJ3ZCeBKLDQuUQ88m+skh2hJwcpPm1VqLeKzgZvXf6SrNbxvx7uOqvvkjCMXqx3YB5PDJyk00ww==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.9.1': + resolution: {integrity: sha512-Ngb95ryR5A9xqvQFT5mAmYkCwbXvoLavLFwmi7zVg/IowFPCfiqRfkOKnbc/ZRL8ZKJ4f+Tp6kSu6wjDQb8L/g==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.8.0': resolution: {integrity: sha512-QpELEHLO8SsQVtqP+MkEgCYTFW0pleGozfs3cZ183ZBj9z3VC1CX1/wtFMK64p+5bhtZo41SeLK1rBRtd25nHQ==} engines: {node: '>=18.0.0'} @@ -4554,6 +4570,10 @@ packages: resolution: {integrity: sha512-oZvn8a5bwwQBNYHT2eNo0EU8Kkby3jeIg1P2Lu9EQtqDxki1LIjGRJM6dJ5CZUig8QmLxWxqOKWvg3mVoOBs5A==} engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.4': + resolution: {integrity: sha512-+qDxSkiErejw1BAIXUFBSfM5xh3arbz1MmxlbMCKanDDZtVEQ7PSKW9FQS0Vud1eI/kYn0oCTVKyNzRlq+9MUw==} + engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@4.2.0': resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} engines: {node: '>=18.0.0'} @@ -14378,7 +14398,7 @@ snapshots: '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 + '@smithy/middleware-retry': 4.4.5 '@smithy/middleware-serde': 4.2.3 '@smithy/middleware-stack': 4.2.3 '@smithy/node-config-provider': 4.3.3 @@ -14424,7 +14444,7 @@ snapshots: '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 + '@smithy/middleware-retry': 4.4.5 '@smithy/middleware-serde': 4.2.3 '@smithy/middleware-stack': 4.2.3 '@smithy/node-config-provider': 4.3.3 @@ -14618,7 +14638,7 @@ snapshots: '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 + '@smithy/middleware-retry': 4.4.5 '@smithy/middleware-serde': 4.2.3 '@smithy/middleware-stack': 4.2.3 '@smithy/node-config-provider': 4.3.3 @@ -15081,8 +15101,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15144,6 +15162,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15831,6 +15851,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -18832,6 +18854,19 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 + '@smithy/core@3.17.1': + dependencies: + '@smithy/middleware-serde': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.3 + '@smithy/util-stream': 4.5.4 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.0.6': dependencies: '@smithy/node-config-provider': 4.3.3 @@ -18915,12 +18950,23 @@ snapshots: '@smithy/util-middleware': 4.2.3 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.4': + '@smithy/middleware-endpoint@4.3.5': + dependencies: + '@smithy/core': 3.17.1 + '@smithy/middleware-serde': 4.2.3 + '@smithy/node-config-provider': 4.3.3 + '@smithy/shared-ini-file-loader': 4.3.3 + '@smithy/types': 4.8.0 + '@smithy/url-parser': 4.2.3 + '@smithy/util-middleware': 4.2.3 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.5': dependencies: '@smithy/node-config-provider': 4.3.3 '@smithy/protocol-http': 5.3.3 '@smithy/service-error-classification': 4.2.3 - '@smithy/smithy-client': 4.9.0 + '@smithy/smithy-client': 4.9.1 '@smithy/types': 4.8.0 '@smithy/util-middleware': 4.2.3 '@smithy/util-retry': 4.2.3 @@ -18953,6 +18999,14 @@ snapshots: '@smithy/types': 4.8.0 tslib: 2.8.1 + '@smithy/node-http-handler@4.4.3': + dependencies: + '@smithy/abort-controller': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/querystring-builder': 4.2.3 + '@smithy/types': 4.8.0 + tslib: 2.8.1 + '@smithy/property-provider@4.2.3': dependencies: '@smithy/types': 4.8.0 @@ -19004,6 +19058,16 @@ snapshots: '@smithy/util-stream': 4.5.3 tslib: 2.8.1 + '@smithy/smithy-client@4.9.1': + dependencies: + '@smithy/core': 3.17.1 + '@smithy/middleware-endpoint': 4.3.5 + '@smithy/middleware-stack': 4.2.3 + '@smithy/protocol-http': 5.3.3 + '@smithy/types': 4.8.0 + '@smithy/util-stream': 4.5.4 + tslib: 2.8.1 + '@smithy/types@4.8.0': dependencies: tslib: 2.8.1 @@ -19092,6 +19156,17 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 + '@smithy/util-stream@4.5.4': + dependencies: + '@smithy/fetch-http-handler': 5.3.4 + '@smithy/node-http-handler': 4.4.3 + '@smithy/types': 4.8.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/util-uri-escape@4.2.0': dependencies: tslib: 2.8.1 From 43dc8a4b878c02d0d84f5c258de30d32be25e8fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:09:20 +0000 Subject: [PATCH 058/367] chore(deps): update dependency @types/archiver to v6.0.4 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5cc30b1c9..71b508104 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -36,7 +36,7 @@ "@triliumnext/commons": "workspace:*", "@triliumnext/express-partial-content": "workspace:*", "@triliumnext/turndown-plugin-gfm": "workspace:*", - "@types/archiver": "6.0.3", + "@types/archiver": "6.0.4", "@types/better-sqlite3": "7.6.13", "@types/cls-hooked": "4.3.9", "@types/compression": "1.8.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..8964522bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -484,8 +484,8 @@ importers: specifier: workspace:* version: link:../../packages/turndown-plugin-gfm '@types/archiver': - specifier: 6.0.3 - version: 6.0.3 + specifier: 6.0.4 + version: 6.0.4 '@types/better-sqlite3': specifier: 7.6.13 version: 7.6.13 @@ -4737,8 +4737,8 @@ packages: '@types/appdmg@0.5.5': resolution: {integrity: sha512-G+n6DgZTZFOteITE30LnWj+HRVIGr7wMlAiLWOO02uJFWVEitaPU9JVXm9wJokkgshBawb2O1OykdcsmkkZfgg==} - '@types/archiver@6.0.3': - resolution: {integrity: sha512-a6wUll6k3zX6qs5KlxIggs1P1JcYJaTCx2gnlr+f0S1yd2DoaEwoIK10HmBaLnZwWneBz+JBm0dwcZu0zECBcQ==} + '@types/archiver@6.0.4': + resolution: {integrity: sha512-ULdQpARQ3sz9WH4nb98mJDYA0ft2A8C4f4fovvUcFwINa1cgGjY36JCAYuP5YypRq4mco1lJp1/7jEMS2oR0Hg==} '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -19268,7 +19272,7 @@ snapshots: '@types/node': 22.18.12 optional: true - '@types/archiver@6.0.3': + '@types/archiver@6.0.4': dependencies: '@types/readdir-glob': 1.1.5 From 42dcb8f1417269640cd34a2f83e61dc37d6be7a0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:10:08 +0000 Subject: [PATCH 059/367] chore(deps): update dependency @types/cookie-parser to v1.4.10 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5cc30b1c9..627c408b6 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -40,7 +40,7 @@ "@types/better-sqlite3": "7.6.13", "@types/cls-hooked": "4.3.9", "@types/compression": "1.8.1", - "@types/cookie-parser": "1.4.9", + "@types/cookie-parser": "1.4.10", "@types/debounce": "1.2.4", "@types/ejs": "3.1.5", "@types/escape-html": "1.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..a15798c44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -496,8 +496,8 @@ importers: specifier: 1.8.1 version: 1.8.1 '@types/cookie-parser': - specifier: 1.4.9 - version: 1.4.9(@types/express@5.0.3) + specifier: 1.4.10 + version: 1.4.10(@types/express@5.0.3) '@types/debounce': specifier: 1.2.4 version: 1.2.4 @@ -4785,8 +4785,8 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/cookie-parser@1.4.9': - resolution: {integrity: sha512-tGZiZ2Gtc4m3wIdLkZ8mkj1T6CEHb35+VApbL2T14Dew8HA7c+04dmKqsKRNC+8RJPm16JEK0tFSwdZqubfc4g==} + '@types/cookie-parser@1.4.10': + resolution: {integrity: sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg==} peerDependencies: '@types/express': '*' @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -19332,7 +19336,7 @@ snapshots: dependencies: '@types/node': 22.18.12 - '@types/cookie-parser@1.4.9(@types/express@5.0.3)': + '@types/cookie-parser@1.4.10(@types/express@5.0.3)': dependencies: '@types/express': 5.0.3 From 7dac61dc26fac50b4b4ebc5082a4d72d9e09a14a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:11:50 +0000 Subject: [PATCH 060/367] chore(deps): update dependency @types/serve-static to v1.15.10 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 26 ++++++++++++++++---------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5cc30b1c9..b14b64fc1 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -56,7 +56,7 @@ "@types/sanitize-html": "2.16.0", "@types/sax": "1.2.7", "@types/serve-favicon": "2.5.7", - "@types/serve-static": "1.15.9", + "@types/serve-static": "1.15.10", "@types/session-file-store": "1.2.5", "@types/stream-throttle": "0.1.4", "@types/supertest": "6.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..875830d88 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -544,8 +544,8 @@ importers: specifier: 2.5.7 version: 2.5.7 '@types/serve-static': - specifier: 1.15.9 - version: 1.15.9 + specifier: 1.15.10 + version: 1.15.10 '@types/session-file-store': specifier: 1.2.5 version: 1.2.5 @@ -5123,8 +5123,8 @@ packages: '@types/serve-index@1.9.4': resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - '@types/serve-static@1.15.9': - resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==} + '@types/serve-static@1.15.10': + resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} '@types/session-file-store@1.2.5': resolution: {integrity: sha512-xjIyh40IznXLrvbAY/nmxu5cMcPcE3ZoDrSDvd02m6p8UjUgOtZAGI7Os5DDd6THuxClLWNhFo/awy1tYp64Bg==} @@ -14935,6 +14935,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15504,6 +15506,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -15831,6 +15835,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -19516,13 +19522,13 @@ snapshots: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 5.1.0 '@types/qs': 6.14.0 - '@types/serve-static': 1.15.9 + '@types/serve-static': 1.15.10 '@types/express@5.0.3': dependencies: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 5.1.0 - '@types/serve-static': 1.15.9 + '@types/serve-static': 1.15.10 '@types/fs-extra@11.0.4': dependencies: @@ -19725,10 +19731,10 @@ snapshots: dependencies: '@types/express': 5.0.3 - '@types/serve-static@1.15.9': + '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.18.8 + '@types/node': 22.18.12 '@types/send': 0.17.5 '@types/session-file-store@1.2.5': @@ -19770,7 +19776,7 @@ snapshots: '@types/swagger-ui-express@4.1.8': dependencies: '@types/express': 5.0.3 - '@types/serve-static': 1.15.9 + '@types/serve-static': 1.15.10 '@types/swagger-ui@5.21.1': {} @@ -30630,7 +30636,7 @@ snapshots: '@types/express': 4.17.23 '@types/express-serve-static-core': 5.1.0 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.9 + '@types/serve-static': 1.15.10 '@types/sockjs': 0.3.36 '@types/ws': 8.18.1 ansi-html-community: 0.0.8 From 950793377d9548fad7193b37548971c78e9be784 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:13:27 +0000 Subject: [PATCH 061/367] chore(deps): update dependency @types/yargs to v17.0.34 --- _regroup/package.json | 2 +- apps/dump-db/package.json | 2 +- pnpm-lock.yaml | 14 +++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/_regroup/package.json b/_regroup/package.json index 4cec178aa..938f195f0 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -39,7 +39,7 @@ "@stylistic/eslint-plugin": "5.5.0", "@types/express": "5.0.3", "@types/node": "22.18.12", - "@types/yargs": "17.0.33", + "@types/yargs": "17.0.34", "@vitest/coverage-v8": "3.2.4", "eslint": "9.38.0", "eslint-plugin-simple-import-sort": "12.1.1", diff --git a/apps/dump-db/package.json b/apps/dump-db/package.json index 07686d794..d39a079da 100644 --- a/apps/dump-db/package.json +++ b/apps/dump-db/package.json @@ -13,7 +13,7 @@ "devDependencies": { "@types/better-sqlite3": "7.6.13", "@types/mime-types": "3.0.1", - "@types/yargs": "17.0.33" + "@types/yargs": "17.0.34" }, "scripts": { "dev": "tsx src/main.ts", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..6be3e7078 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -422,8 +422,8 @@ importers: specifier: 3.0.1 version: 3.0.1 '@types/yargs': - specifier: 17.0.33 - version: 17.0.33 + specifier: 17.0.34 + version: 17.0.34 apps/edit-docs: dependencies: @@ -5201,8 +5201,8 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@types/yargs@17.0.34': + resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==} '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -19810,7 +19814,7 @@ snapshots: '@types/yargs-parser@21.0.3': {} - '@types/yargs@17.0.33': + '@types/yargs@17.0.34': dependencies: '@types/yargs-parser': 21.0.3 From 09c3e5b56e5d5b473f30cb52000ffedd56ea6a0b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:15:41 +0000 Subject: [PATCH 062/367] chore(deps): update dependency happy-dom to v20.0.8 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 161 +++++++++++++++++++++------------------ 2 files changed, 88 insertions(+), 75 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 71957e495..26b338db0 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -76,7 +76,7 @@ "@types/reveal.js": "5.2.1", "@types/tabulator-tables": "6.2.11", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.0.7", + "happy-dom": "20.0.8", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..c2beb2780 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,7 +87,7 @@ importers: version: 7.0.0(eslint@9.38.0(jiti@2.6.1)) happy-dom: specifier: ~20.0.0 - version: 20.0.7 + version: 20.0.8 jiti: specifier: 2.6.1 version: 2.6.1 @@ -123,7 +123,7 @@ importers: version: 4.5.4(@types/node@22.18.12)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) apps/client: dependencies: @@ -280,7 +280,7 @@ importers: version: 5.0.0 '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/bootstrap': specifier: 5.2.10 version: 5.2.10 @@ -306,14 +306,14 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.25.11)) happy-dom: - specifier: 20.0.7 - version: 20.0.7 + specifier: 20.0.8 + version: 20.0.8 script-loader: specifier: 0.7.2 version: 0.7.2 vite-plugin-static-copy: specifier: 3.1.4 - version: 3.1.4(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 3.1.4(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -473,7 +473,7 @@ importers: version: 2.1.3(electron@38.3.0) '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@triliumnext/commons': specifier: workspace:* version: link:../../packages/commons @@ -758,7 +758,7 @@ importers: version: 1.0.1 vite: specifier: 7.1.11 - version: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: specifier: 8.18.3 version: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -798,7 +798,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) eslint: specifier: 9.38.0 version: 9.38.0(jiti@2.6.1) @@ -813,7 +813,7 @@ importers: version: 0.4.2 vite: specifier: 7.1.11 - version: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -901,7 +901,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -961,7 +961,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1021,7 +1021,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1088,7 +1088,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1155,7 +1155,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -2270,11 +2270,11 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/core@1.6.0': + resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -5049,6 +5049,9 @@ packages: '@types/node@20.19.22': resolution: {integrity: sha512-hRnu+5qggKDSyWHlnmThnUqg62l29Aj/6vcYgUaSFL9oc7DVjeWEQN3PRgdSc6F8d9QRMWkf36CLMch1Do/+RQ==} + '@types/node@20.19.23': + resolution: {integrity: sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==} + '@types/node@22.15.21': resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} @@ -5064,8 +5067,8 @@ packages: '@types/node@22.18.8': resolution: {integrity: sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==} - '@types/node@24.8.1': - resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} + '@types/node@24.9.1': + resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -8398,8 +8401,8 @@ packages: handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - happy-dom@20.0.7: - resolution: {integrity: sha512-CywLfzmYxP5OYpuAG0usFY0CpxJtwYR+w8Mms5J8W29Y2Pzf6rbfQS2M523tRZTb0oLA+URopPtnAQX2fupHZQ==} + happy-dom@20.0.8: + resolution: {integrity: sha512-TlYaNQNtzsZ97rNMBAm8U+e2cUQXNithgfCizkDgc11lgmN4j9CKMhO3FPGKWQYPwwkFcPpoXYF/CqEPLgzfOg==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -13459,8 +13462,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.14.0: - resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} undici@6.21.3: resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} @@ -15144,6 +15147,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15384,6 +15389,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.1.0': dependencies: @@ -15504,6 +15511,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -15831,6 +15840,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -16586,7 +16597,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.3 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -16701,13 +16712,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@emnapi/core@1.5.0': + '@emnapi/core@1.6.0': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.6.0': dependencies: tslib: 2.8.1 optional: true @@ -17886,8 +17897,8 @@ snapshots: '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.6.0 + '@emnapi/runtime': 1.6.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -17937,7 +17948,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.3 + semver: 7.7.2 '@npmcli/fs@4.0.0': dependencies: @@ -18094,18 +18105,18 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.27.2)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@prefresh/vite': 2.4.8(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-prerender-plugin: 0.5.11(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-prerender-plugin: 0.5.11(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - preact - supports-color @@ -18118,7 +18129,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.8(preact@10.27.2)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@prefresh/vite@2.4.8(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18126,7 +18137,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.27.2 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -19265,7 +19276,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 optional: true '@types/archiver@6.0.3': @@ -19287,7 +19298,7 @@ snapshots: '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/bootstrap@5.2.10': dependencies: @@ -19301,7 +19312,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/responselike': 1.0.3 '@types/chai@5.2.2': @@ -19326,7 +19337,7 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.0 - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/connect@3.4.38': dependencies: @@ -19343,7 +19354,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/cssnano@5.1.3(postcss@8.5.6)': dependencies: @@ -19531,7 +19542,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 optional: true '@types/geojson-vt@3.2.5': @@ -19543,7 +19554,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/hast@3.0.4': dependencies: @@ -19557,7 +19568,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/ini@4.1.1': {} @@ -19575,7 +19586,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/leaflet-gpx@1.3.8': dependencies: @@ -19629,7 +19640,7 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/node@16.9.1': {} @@ -19641,6 +19652,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@20.19.23': + dependencies: + undici-types: 6.21.0 + '@types/node@22.15.21': dependencies: undici-types: 6.21.0 @@ -19661,10 +19676,9 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@24.8.1': + '@types/node@24.9.1': dependencies: - undici-types: 7.14.0 - optional: true + undici-types: 7.16.0 '@types/parse-json@4.0.2': {} @@ -19696,7 +19710,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/retry@0.12.2': {} @@ -19742,7 +19756,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/statuses@2.0.6': optional: true @@ -19778,7 +19792,7 @@ snapshots: '@types/through2@2.0.41': dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 '@types/tmp@0.2.6': {} @@ -19816,7 +19830,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.18.12 + '@types/node': 22.18.10 optional: true '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': @@ -20099,7 +20113,7 @@ snapshots: magic-string: 0.30.18 sirv: 3.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: playwright: 1.56.1 @@ -20122,7 +20136,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20141,7 +20155,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) transitivePeerDependencies: @@ -20193,7 +20207,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.15 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/utils@3.2.4': dependencies: @@ -22762,7 +22776,7 @@ snapshots: engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/cors': 2.8.19 - '@types/node': 22.18.12 + '@types/node': 24.9.1 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -24096,9 +24110,9 @@ snapshots: handle-thing@2.0.1: {} - happy-dom@20.0.7: + happy-dom@20.0.8: dependencies: - '@types/node': 20.19.22 + '@types/node': 20.19.23 '@types/whatwg-mimetype': 3.0.2 whatwg-mimetype: 3.0.0 @@ -24884,13 +24898,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 22.18.12 + '@types/node': 24.9.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -27857,7 +27871,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.18.12 + '@types/node': 24.9.1 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -30112,8 +30126,7 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.14.0: - optional: true + undici-types@7.16.0: {} undici@6.21.3: {} @@ -30368,13 +30381,13 @@ snapshots: - rollup - supports-color - vite-plugin-static-copy@3.1.4(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.4(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: @@ -30382,7 +30395,7 @@ snapshots: typescript: 5.9.3 vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-prerender-plugin@0.5.11(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-prerender-plugin@0.5.11(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.18 @@ -30390,7 +30403,7 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: @@ -30412,7 +30425,7 @@ snapshots: tsx: 4.20.6 yaml: 2.8.1 - vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -30421,7 +30434,7 @@ snapshots: rollup: 4.52.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 fsevents: 2.3.3 jiti: 2.6.1 less: 4.1.3 @@ -30432,7 +30445,7 @@ snapshots: tsx: 4.20.6 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -30462,7 +30475,7 @@ snapshots: '@types/node': 22.18.12 '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 3.2.4(vitest@3.2.4) - happy-dom: 20.0.7 + happy-dom: 20.0.8 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From dcc35bd507938fa5cf3dceeb0a54f05756316954 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:16:19 +0000 Subject: [PATCH 063/367] chore(deps): update dependency lint-staged to v16.2.6 --- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- pnpm-lock.yaml | 38 ++++++++++--------- 6 files changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 4f5df097f..1413fec20 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -32,7 +32,7 @@ "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", - "lint-staged": "16.2.5", + "lint-staged": "16.2.6", "stylelint": "16.25.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index d8c5c50fb..786cb2e77 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -33,7 +33,7 @@ "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", - "lint-staged": "16.2.5", + "lint-staged": "16.2.6", "stylelint": "16.25.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index cac582774..8fc80dd33 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -35,7 +35,7 @@ "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", - "lint-staged": "16.2.5", + "lint-staged": "16.2.6", "stylelint": "16.25.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 680042be7..fca16801d 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -36,7 +36,7 @@ "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", - "lint-staged": "16.2.5", + "lint-staged": "16.2.6", "stylelint": "16.25.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index c57bfac11..246cc41c5 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -35,7 +35,7 @@ "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", - "lint-staged": "16.2.5", + "lint-staged": "16.2.6", "stylelint": "16.25.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..c63465c4a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -882,8 +882,8 @@ importers: specifier: 14.1.1 version: 14.1.1 lint-staged: - specifier: 16.2.5 - version: 16.2.5 + specifier: 16.2.6 + version: 16.2.6 stylelint: specifier: 16.25.0 version: 16.25.0(typescript@5.9.3) @@ -942,8 +942,8 @@ importers: specifier: 14.1.1 version: 14.1.1 lint-staged: - specifier: 16.2.5 - version: 16.2.5 + specifier: 16.2.6 + version: 16.2.6 stylelint: specifier: 16.25.0 version: 16.25.0(typescript@5.9.3) @@ -1002,8 +1002,8 @@ importers: specifier: 14.1.1 version: 14.1.1 lint-staged: - specifier: 16.2.5 - version: 16.2.5 + specifier: 16.2.6 + version: 16.2.6 stylelint: specifier: 16.25.0 version: 16.25.0(typescript@5.9.3) @@ -1069,8 +1069,8 @@ importers: specifier: 14.1.1 version: 14.1.1 lint-staged: - specifier: 16.2.5 - version: 16.2.5 + specifier: 16.2.6 + version: 16.2.6 stylelint: specifier: 16.25.0 version: 16.25.0(typescript@5.9.3) @@ -1136,8 +1136,8 @@ importers: specifier: 14.1.1 version: 14.1.1 lint-staged: - specifier: 16.2.5 - version: 16.2.5 + specifier: 16.2.6 + version: 16.2.6 stylelint: specifier: 16.25.0 version: 16.25.0(typescript@5.9.3) @@ -9482,8 +9482,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@16.2.5: - resolution: {integrity: sha512-o36wH3OX0jRWqDw5dOa8a8x6GXTKaLM+LvhRaucZxez0IxA+KNDUCiyjBfNgsMNmchwSX6urLSL7wShcUqAang==} + lint-staged@16.2.6: + resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} engines: {node: '>=20.17'} hasBin: true @@ -9491,8 +9491,8 @@ packages: resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} engines: {node: '>=16.0.0'} - listr2@9.0.4: - resolution: {integrity: sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ==} + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} load-json-file@2.0.0: @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -25298,10 +25302,10 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@16.2.5: + lint-staged@16.2.6: dependencies: commander: 14.0.1 - listr2: 9.0.4 + listr2: 9.0.5 micromatch: 4.0.8 nano-spawn: 2.0.0 pidtree: 0.6.0 @@ -25317,7 +25321,7 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 8.1.0 - listr2@9.0.4: + listr2@9.0.5: dependencies: cli-truncate: 5.1.0 colorette: 2.0.20 From 041c961cfad6c5c0f4ade6875be68cdbeedd20f0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:16:54 +0000 Subject: [PATCH 064/367] chore(deps): update dependency turndown to v7.2.2 --- apps/server/package.json | 2 +- packages/turndown-plugin-gfm/package.json | 2 +- pnpm-lock.yaml | 18 +++++++++++------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5cc30b1c9..04eba5f1c 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -125,7 +125,7 @@ "swagger-ui-express": "5.0.1", "time2fa": "1.4.2", "tmp": "0.2.5", - "turndown": "7.2.1", + "turndown": "7.2.2", "unescape": "1.0.1", "vite": "7.1.11", "ws": "8.18.3", diff --git a/packages/turndown-plugin-gfm/package.json b/packages/turndown-plugin-gfm/package.json index 7d69ecd39..63301db0f 100644 --- a/packages/turndown-plugin-gfm/package.json +++ b/packages/turndown-plugin-gfm/package.json @@ -22,7 +22,7 @@ "gfm" ], "devDependencies": { - "turndown": "7.2.1", + "turndown": "7.2.2", "turndown-attendant": "0.0.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..a19c5d150 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -751,8 +751,8 @@ importers: specifier: 0.2.5 version: 0.2.5 turndown: - specifier: 7.2.1 - version: 7.2.1 + specifier: 7.2.2 + version: 7.2.2 unescape: specifier: 1.0.1 version: 1.0.1 @@ -1378,8 +1378,8 @@ importers: packages/turndown-plugin-gfm: devDependencies: turndown: - specifier: 7.2.1 - version: 7.2.1 + specifier: 7.2.2 + version: 7.2.2 turndown-attendant: specifier: 0.0.3 version: 0.0.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -13345,8 +13345,8 @@ packages: turndown-attendant@0.0.3: resolution: {integrity: sha512-j0LH9oWLiZuv8ZonU4ZkLvQYumfWIZri4Aetbx+NSQ4jLgERZvkwDjA2woLRbPKR7UQtI9/I0AsZVk06+geXNw==} - turndown@7.2.1: - resolution: {integrity: sha512-7YiPJw6rLClQL3oUKN3KgMaXeJJ2lAyZItclgKDurqnH61so4k4IH/qwmMva0zpuJc/FhRExBBnk7EbeFANlgQ==} + turndown@7.2.2: + resolution: {integrity: sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -29996,7 +30000,7 @@ snapshots: - supports-color - utf-8-validate - turndown@7.2.1: + turndown@7.2.2: dependencies: '@mixmark-io/domino': 2.2.0 From 557d576b85f4badaae55c40c8c5e16026914aa0d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:18:06 +0000 Subject: [PATCH 065/367] fix(deps): update dependency mind-elixir to v5.3.4 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 71957e495..671b1a030 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -55,7 +55,7 @@ "mark.js": "8.11.1", "marked": "16.4.1", "mermaid": "11.12.0", - "mind-elixir": "5.3.3", + "mind-elixir": "5.3.4", "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.27.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..aa45edc74 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -159,7 +159,7 @@ importers: version: 0.2.0(mermaid@11.12.0) '@mind-elixir/node-menu': specifier: 5.0.0 - version: 5.0.0(mind-elixir@5.3.3) + version: 5.0.0(mind-elixir@5.3.4) '@popperjs/core': specifier: 2.11.8 version: 2.11.8 @@ -248,8 +248,8 @@ importers: specifier: 11.12.0 version: 11.12.0 mind-elixir: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.3.4 + version: 5.3.4 normalize.css: specifier: 8.0.1 version: 8.0.1 @@ -9966,8 +9966,8 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - mind-elixir@5.3.3: - resolution: {integrity: sha512-SR0DRZh7I4fV3c8IeL9cYgJiJeW+TgKOrHQTntqu14nhrxyZjVsDfeLUY/52PB8r1WsORsN0IKx0qGhneXmtJQ==} + mind-elixir@5.3.4: + resolution: {integrity: sha512-HVZZLNC+QBdYvsg3dvhw4+ZLR06Az3lilXewhwfRmzyeAZiI6HB/amsUTAVHaZTby3aXAR+iOIpMXIUXpQckPQ==} mini-css-extract-plugin@2.4.7: resolution: {integrity: sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==} @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -17868,9 +17872,9 @@ snapshots: '@microsoft/tsdoc@0.15.1': {} - '@mind-elixir/node-menu@5.0.0(mind-elixir@5.3.3)': + '@mind-elixir/node-menu@5.0.0(mind-elixir@5.3.4)': dependencies: - mind-elixir: 5.3.3 + mind-elixir: 5.3.4 '@mixmark-io/domino@2.2.0': {} @@ -26063,7 +26067,7 @@ snapshots: mimic-response@3.1.0: {} - mind-elixir@5.3.3: {} + mind-elixir@5.3.4: {} mini-css-extract-plugin@2.4.7(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)): dependencies: From 0526d99560f5b658d6f64815806a59aaa60b1c77 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:19:14 +0000 Subject: [PATCH 066/367] chore(deps): update ckeditor5 config packages to v12.2.0 --- pnpm-lock.yaml | 345 +++++++------------------------------------------ 1 file changed, 45 insertions(+), 300 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..8cfee7c3f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -877,7 +877,7 @@ importers: version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -889,7 +889,7 @@ importers: version: 16.25.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(stylelint@16.25.0(typescript@5.9.3)) + version: 12.2.0(stylelint@16.25.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.9.3) @@ -937,7 +937,7 @@ importers: version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -949,7 +949,7 @@ importers: version: 16.25.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(stylelint@16.25.0(typescript@5.9.3)) + version: 12.2.0(stylelint@16.25.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.9.3) @@ -997,7 +997,7 @@ importers: version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1009,7 +1009,7 @@ importers: version: 16.25.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(stylelint@16.25.0(typescript@5.9.3)) + version: 12.2.0(stylelint@16.25.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.9.3) @@ -1064,7 +1064,7 @@ importers: version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1076,7 +1076,7 @@ importers: version: 16.25.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(stylelint@16.25.0(typescript@5.9.3)) + version: 12.2.0(stylelint@16.25.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.9.3) @@ -1131,7 +1131,7 @@ importers: version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1143,7 +1143,7 @@ importers: version: 16.25.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(stylelint@16.25.0(typescript@5.9.3)) + version: 12.2.0(stylelint@16.25.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.9.3) @@ -2270,11 +2270,11 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/core@1.6.0': + resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -5207,14 +5207,6 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.40.0': - resolution: {integrity: sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.40.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.46.2': resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5223,13 +5215,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.40.0': - resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.2': resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5237,61 +5222,22 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.40.0': - resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.46.1': - resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.2': resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.40.0': - resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.46.1': - resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.46.2': resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.40.0': - resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/tsconfig-utils@8.46.1': - resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.46.2': resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.40.0': - resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.2': resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5299,50 +5245,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.40.0': - resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.46.1': - resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.46.2': resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.40.0': - resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/typescript-estree@8.46.1': - resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.46.2': resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.40.0': - resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.46.1': - resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.2': resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5350,14 +5262,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.40.0': - resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.46.1': - resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.46.2': resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7638,8 +7542,8 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-ckeditor5@12.1.1: - resolution: {integrity: sha512-08GaAQihDvGeTL5XVx/Ihgin11+3bVPaWi+xKzh3ewkcM5HrC9PF06WltBGFsxSJmBRmg8VFSLMwAXcuyZDq3Q==} + eslint-config-ckeditor5@12.2.0: + resolution: {integrity: sha512-/TQsJuSkTZDVK8srm29tt0kicMEqAyusad1aH6EIXhBjNiQnsagYRNBZjAKiBGdofhjXy4sAD4g+gNa2igO9NA==} peerDependencies: eslint: ^9.0.0 typescript: ^5.0.0 @@ -7658,8 +7562,8 @@ packages: eslint-linter-browserify@9.38.0: resolution: {integrity: sha512-uOR+eJFM+WQyyZAGeazz8D3XiS0a26bIK/uHSFZWQ7H8UK7hrUpHzMfcGZSzY1icM86LYCPhV3jYkVePWLjQGA==} - eslint-plugin-ckeditor5-rules@12.1.1: - resolution: {integrity: sha512-e0PhbA3sNWy4Djs6r+kVfWNvu6urJXucIUfqI2GKjgOfqYOhmpLNaudH6FHKAg/OM8g0ETb7TbG3Bc375ru+sg==} + eslint-plugin-ckeditor5-rules@12.2.0: + resolution: {integrity: sha512-WgQP9aZo1N7bIDwwf2Wsnd0RpL20MAVxEehhYoFWy7HAMAnV3IliKuU3dsFA35O8cK4q7eKz7FiObwSRAfttQA==} eslint-plugin-compat@6.0.2: resolution: {integrity: sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==} @@ -7667,8 +7571,8 @@ packages: peerDependencies: eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-mocha@11.1.0: - resolution: {integrity: sha512-rKntVWRsQFPbf8OkSgVNRVRrcVAPaGTyEgWCEyXaPDJkTl0v5/lwu1vTk5sWiUJU8l2sxwvGUZzSNrEKdVMeQw==} + eslint-plugin-mocha@11.2.0: + resolution: {integrity: sha512-nMdy3tEXZac8AH5Z/9hwUkSfWu8xHf4XqwB5UEQzyTQGKcNlgFeciRAjLjliIKC3dR1Ex/a2/5sqgQzvYRkkkA==} peerDependencies: eslint: '>=9.0.0' @@ -12946,8 +12850,8 @@ packages: peerDependencies: postcss: ^8.4.32 - stylelint-config-ckeditor5@12.1.1: - resolution: {integrity: sha512-bEqemEiQ8Y4emTKAlOsN4cOx/lk61pVhFwegBDewlS8OqbJ6QsWXBPccSWQCETN5DUUoqoOcZYKsfsH/IsrNEg==} + stylelint-config-ckeditor5@12.2.0: + resolution: {integrity: sha512-CnOovy7bPzWXEwNikoTZ1wK+cOAgcWKIe6sSPGRqC2wFXl81ipFafSHb48k7cNDA4qxHy47iGB0N1qwgnoDjSg==} peerDependencies: stylelint: '>=16.0.0' @@ -12967,8 +12871,8 @@ packages: peerDependencies: stylelint: '>=10.1.0' - stylelint-plugin-ckeditor5-rules@12.1.1: - resolution: {integrity: sha512-vS7uJta2itqoGo6hXgitclZH0ucwikbXP30y0I7GLhppUmYPqQhPvDBX21RuC9imbEYuIkTcaQzggU/DjSTBsA==} + stylelint-plugin-ckeditor5-rules@12.2.0: + resolution: {integrity: sha512-NsNVaVrEvBrxh2pRpzZkRZBUS1gjh07vzZJUj8evVCTZ69iVVcCVGz0Jlbvl1vZ6RiVDCfMpPu6XWTTwTL+FMw==} peerDependencies: stylelint: '>=16.0.0' @@ -13403,13 +13307,6 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.40.0: - resolution: {integrity: sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - typescript-eslint@8.46.2: resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -15335,6 +15232,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15730,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -16586,7 +16487,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.3 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -16701,13 +16602,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@emnapi/core@1.5.0': + '@emnapi/core@1.6.0': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.6.0': dependencies: tslib: 2.8.1 optional: true @@ -16722,7 +16623,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -17886,8 +17787,8 @@ snapshots: '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.6.0 + '@emnapi/runtime': 1.6.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -17937,7 +17838,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.3 + semver: 7.7.2 '@npmcli/fs@4.0.0': dependencies: @@ -19122,7 +19023,7 @@ snapshots: '@stylistic/eslint-plugin@4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -19819,23 +19720,6 @@ snapshots: '@types/node': 22.18.12 optional: true - '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/type-utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.40.0 - eslint: 9.38.0(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -19853,18 +19737,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.40.0 - debug: 4.4.3(supports-color@6.0.0) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.46.2 @@ -19877,24 +19749,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.40.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.40.0 - debug: 4.4.3(supports-color@6.0.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - debug: 4.4.3(supports-color@6.0.0) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) @@ -19904,45 +19758,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.40.0': - dependencies: - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/visitor-keys': 8.40.0 - - '@typescript-eslint/scope-manager@8.46.1': - dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 - '@typescript-eslint/scope-manager@8.46.2': dependencies: '@typescript-eslint/types': 8.46.2 '@typescript-eslint/visitor-keys': 8.46.2 - '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3(supports-color@6.0.0) - eslint: 9.38.0(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.46.2 @@ -19955,44 +19779,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.40.0': {} - - '@typescript-eslint/types@8.46.1': {} - '@typescript-eslint/types@8.46.2': {} - '@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.40.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.3) - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/visitor-keys': 8.40.0 - debug: 4.4.3(supports-color@6.0.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 - debug: 4.4.3(supports-color@6.0.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) @@ -20009,28 +19797,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/types': 8.40.0 - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) @@ -20042,16 +19808,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.40.0': - dependencies: - '@typescript-eslint/types': 8.40.0 - eslint-visitor-keys: 4.2.1 - - '@typescript-eslint/visitor-keys@8.46.1': - dependencies: - '@typescript-eslint/types': 8.46.1 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.46.2': dependencies: '@typescript-eslint/types': 8.46.2 @@ -23070,17 +22826,17 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-ckeditor5@12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-ckeditor5@12.2.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@eslint/js': 9.38.0 '@eslint/markdown': 6.6.0 '@stylistic/eslint-plugin': 4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) - eslint-plugin-ckeditor5-rules: 12.1.1 - eslint-plugin-mocha: 11.1.0(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-ckeditor5-rules: 12.2.0 + eslint-plugin-mocha: 11.2.0(eslint@9.38.0(jiti@2.6.1)) globals: 16.4.0 typescript: 5.9.3 - typescript-eslint: 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -23105,7 +22861,7 @@ snapshots: eslint-linter-browserify@9.38.0: {} - eslint-plugin-ckeditor5-rules@12.1.1: + eslint-plugin-ckeditor5-rules@12.2.0: dependencies: '@es-joy/jsdoccomment': 0.50.2 enhanced-resolve: 5.18.3 @@ -23127,7 +22883,7 @@ snapshots: lodash.memoize: 4.1.2 semver: 7.7.2 - eslint-plugin-mocha@11.1.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-mocha@11.2.0(eslint@9.38.0(jiti@2.6.1)): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) eslint: 9.38.0(jiti@2.6.1) @@ -29391,12 +29147,12 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 7.1.0 - stylelint-config-ckeditor5@12.1.1(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-ckeditor5@12.2.0(stylelint@16.25.0(typescript@5.9.3)): dependencies: '@stylistic/stylelint-plugin': 3.1.3(stylelint@16.25.0(typescript@5.9.3)) stylelint: 16.25.0(typescript@5.9.3) stylelint-config-recommended: 16.0.0(stylelint@16.25.0(typescript@5.9.3)) - stylelint-plugin-ckeditor5-rules: 12.1.1(stylelint@16.25.0(typescript@5.9.3)) + stylelint-plugin-ckeditor5-rules: 12.2.0(stylelint@16.25.0(typescript@5.9.3)) stylelint-config-ckeditor5@2.0.1(stylelint@16.25.0(typescript@5.9.3)): dependencies: @@ -29411,7 +29167,7 @@ snapshots: dependencies: stylelint: 16.25.0(typescript@5.9.3) - stylelint-plugin-ckeditor5-rules@12.1.1(stylelint@16.25.0(typescript@5.9.3)): + stylelint-plugin-ckeditor5-rules@12.2.0(stylelint@16.25.0(typescript@5.9.3)): dependencies: stylelint: 16.25.0(typescript@5.9.3) @@ -30063,17 +29819,6 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.38.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) From 41450ab85af4d942e4e48deca86e0b3389a2fe34 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:19:49 +0000 Subject: [PATCH 067/367] chore(deps): update dependency @types/tabulator-tables to v6.3.0 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 71957e495..f5405df24 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -74,7 +74,7 @@ "@types/leaflet-gpx": "1.3.8", "@types/mark.js": "8.11.12", "@types/reveal.js": "5.2.1", - "@types/tabulator-tables": "6.2.11", + "@types/tabulator-tables": "6.3.0", "copy-webpack-plugin": "13.0.1", "happy-dom": "20.0.7", "script-loader": "0.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..afcba5448 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -300,8 +300,8 @@ importers: specifier: 5.2.1 version: 5.2.1 '@types/tabulator-tables': - specifier: 6.2.11 - version: 6.2.11 + specifier: 6.3.0 + version: 6.3.0 copy-webpack-plugin: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.25.11)) @@ -5159,8 +5159,8 @@ packages: '@types/swagger-ui@5.21.1': resolution: {integrity: sha512-DUmUH59eeOtvAqcWwBduH2ws0cc5i95KHsXCS4FsOfbUq/clW8TN+HqRBj7q5p9MSsSNK43RziIGItNbrAGLxg==} - '@types/tabulator-tables@6.2.11': - resolution: {integrity: sha512-vDyUwAsrMYH17YvkTuEPUx2Rp98JK0p3B74EsUlvYr08bP4l0NgXL+0tcDIon8Rd2GJeOFC0gW+/3MZ5a9nvSg==} + '@types/tabulator-tables@6.3.0': + resolution: {integrity: sha512-/mQzrThCdSQXc2lz2SUZglIG+vWQ1sb1CEiVxw9SFGKPulaj1543zrL2qABeJIKjKPxcSgmWUyDA9e8CMaI2cQ==} '@types/through2@2.0.41': resolution: {integrity: sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==} @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -19774,7 +19778,7 @@ snapshots: '@types/swagger-ui@5.21.1': {} - '@types/tabulator-tables@6.2.11': {} + '@types/tabulator-tables@6.3.0': {} '@types/through2@2.0.41': dependencies: From 3588e385435634ff8a1a9c61dd04d9ee37e5dd06 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:21:24 +0000 Subject: [PATCH 068/367] chore(deps): update dependency openai to v6.7.0 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5cc30b1c9..b44aa1eac 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -110,7 +110,7 @@ "multer": "2.0.2", "normalize-strings": "1.1.1", "ollama": "0.6.0", - "openai": "6.6.0", + "openai": "6.7.0", "rand-token": "1.0.1", "safe-compare": "1.1.4", "sanitize-filename": "1.6.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..71e1bab11 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -706,8 +706,8 @@ importers: specifier: 0.6.0 version: 0.6.0 openai: - specifier: 6.6.0 - version: 6.6.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) + specifier: 6.7.0 + version: 6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) rand-token: specifier: 1.0.1 version: 1.0.1 @@ -10455,8 +10455,8 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} - openai@6.6.0: - resolution: {integrity: sha512-1yWk4cBsHF5Bq9TreHYOHY7pbqdlT74COnm8vPx7WKn36StS+Hyk8DdAitnLaw67a5Cudkz5EmlFQjSrNnrA2w==} + openai@6.7.0: + resolution: {integrity: sha512-mgSQXa3O/UXTbA8qFzoa7aydbXBJR5dbLQXCRapAOtoNT+v69sLdKMZzgiakpqhclRnhPggPAXoniVGn2kMY2A==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -26654,7 +26658,7 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 - openai@6.6.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4): + openai@6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4): optionalDependencies: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) zod: 3.24.4 From 62a69a0da094985e9b6386f5e6e28f2e586f34ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:21:29 +0000 Subject: [PATCH 069/367] chore(deps): update node.js to v22.21.0 --- apps/server/Dockerfile | 4 ++-- apps/server/Dockerfile.alpine | 4 ++-- apps/server/Dockerfile.alpine.rootless | 4 ++-- apps/server/Dockerfile.rootless | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/server/Dockerfile b/apps/server/Dockerfile index 61074c725..ef6ddfcb0 100644 --- a/apps/server/Dockerfile +++ b/apps/server/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22.20.0-bullseye-slim AS builder +FROM node:22.21.0-bullseye-slim AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:22.20.0-bullseye-slim +FROM node:22.21.0-bullseye-slim # Install only runtime dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends \ diff --git a/apps/server/Dockerfile.alpine b/apps/server/Dockerfile.alpine index 3120ab643..4162e6c15 100644 --- a/apps/server/Dockerfile.alpine +++ b/apps/server/Dockerfile.alpine @@ -1,4 +1,4 @@ -FROM node:22.20.0-alpine AS builder +FROM node:22.21.0-alpine AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:22.20.0-alpine +FROM node:22.21.0-alpine # Install runtime dependencies RUN apk add --no-cache su-exec shadow diff --git a/apps/server/Dockerfile.alpine.rootless b/apps/server/Dockerfile.alpine.rootless index a56fd6a86..34adf5a7f 100644 --- a/apps/server/Dockerfile.alpine.rootless +++ b/apps/server/Dockerfile.alpine.rootless @@ -1,4 +1,4 @@ -FROM node:22.20.0-alpine AS builder +FROM node:22.21.0-alpine AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:22.20.0-alpine +FROM node:22.21.0-alpine # Create a non-root user with configurable UID/GID ARG USER=trilium ARG UID=1001 diff --git a/apps/server/Dockerfile.rootless b/apps/server/Dockerfile.rootless index ac2e663a8..e7ea29b5c 100644 --- a/apps/server/Dockerfile.rootless +++ b/apps/server/Dockerfile.rootless @@ -1,4 +1,4 @@ -FROM node:22.20.0-bullseye-slim AS builder +FROM node:22.21.0-bullseye-slim AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:22.20.0-bullseye-slim +FROM node:22.21.0-bullseye-slim # Create a non-root user with configurable UID/GID ARG USER=trilium ARG UID=1001 From 892eb5b95d25ad6c2de761c304fd404adf5d50fe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:21:37 +0000 Subject: [PATCH 070/367] chore(deps): update pnpm to v10.19.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 54d96c346..3386e8b5f 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "url": "https://github.com/TriliumNext/Trilium/issues" }, "homepage": "https://triliumnotes.org", - "packageManager": "pnpm@10.18.3", + "packageManager": "pnpm@10.19.0", "pnpm": { "patchedDependencies": { "@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch", From 3f36f515dbd8468bee2d6be162d2abb9af7f1111 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:22:07 +0000 Subject: [PATCH 071/367] fix(deps): update codemirror --- packages/codemirror/package.json | 4 ++-- pnpm-lock.yaml | 34 ++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index 1a900b35f..48485c005 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -5,12 +5,12 @@ "type": "module", "main": "./src/index.ts", "dependencies": { - "@codemirror/commands": "6.9.0", + "@codemirror/commands": "6.10.0", "@codemirror/lang-css": "6.3.1", "@codemirror/lang-html": "6.4.11", "@codemirror/lang-javascript": "6.2.4", "@codemirror/lang-json": "6.0.2", - "@codemirror/lang-markdown": "6.4.0", + "@codemirror/lang-markdown": "6.5.0", "@codemirror/lang-php": "6.0.2", "@codemirror/lang-vue": "0.1.3", "@codemirror/lang-xml": "6.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..c4f0c0118 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1163,8 +1163,8 @@ importers: packages/codemirror: dependencies: '@codemirror/commands': - specifier: 6.9.0 - version: 6.9.0 + specifier: 6.10.0 + version: 6.10.0 '@codemirror/lang-css': specifier: 6.3.1 version: 6.3.1 @@ -1178,8 +1178,8 @@ importers: specifier: 6.0.2 version: 6.0.2 '@codemirror/lang-markdown': - specifier: 6.4.0 - version: 6.4.0 + specifier: 6.5.0 + version: 6.5.0 '@codemirror/lang-php': specifier: 6.0.2 version: 6.0.2 @@ -1278,7 +1278,7 @@ importers: version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2) '@replit/codemirror-vim': specifier: 6.3.0 - version: 6.3.0(@codemirror/commands@6.9.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6) + version: 6.3.0(@codemirror/commands@6.10.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6) '@ssddanbrown/codemirror-lang-smarty': specifier: 1.0.0 version: 1.0.0 @@ -1999,12 +1999,12 @@ packages: '@codemirror/autocomplete@6.18.6': resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} + '@codemirror/commands@6.10.0': + resolution: {integrity: sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==} + '@codemirror/commands@6.8.1': resolution: {integrity: sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==} - '@codemirror/commands@6.9.0': - resolution: {integrity: sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==} - '@codemirror/lang-css@6.3.1': resolution: {integrity: sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==} @@ -2020,8 +2020,8 @@ packages: '@codemirror/lang-markdown@6.3.2': resolution: {integrity: sha512-c/5MYinGbFxYl4itE9q/rgN/sMTjOr8XL5OWnC+EaRMLfCbVUmmubTJfdgpfcSS2SCaT7b+Q+xi3l6CgoE+BsA==} - '@codemirror/lang-markdown@6.4.0': - resolution: {integrity: sha512-ZeArR54seh4laFbUTVy0ZmQgO+C/cxxlW4jEoQMhL3HALScBpZBeZcLzrQmJsTEx4is9GzOe0bFAke2B1KZqeA==} + '@codemirror/lang-markdown@6.5.0': + resolution: {integrity: sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==} '@codemirror/lang-php@6.0.2': resolution: {integrity: sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA==} @@ -15335,6 +15335,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -16095,14 +16099,14 @@ snapshots: '@codemirror/view': 6.38.6 '@lezer/common': 1.2.3 - '@codemirror/commands@6.8.1': + '@codemirror/commands@6.10.0': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 '@codemirror/view': 6.38.6 '@lezer/common': 1.2.3 - '@codemirror/commands@6.9.0': + '@codemirror/commands@6.8.1': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 @@ -16154,7 +16158,7 @@ snapshots: '@lezer/common': 1.2.3 '@lezer/markdown': 1.4.3 - '@codemirror/lang-markdown@6.4.0': + '@codemirror/lang-markdown@6.5.0': dependencies: '@codemirror/autocomplete': 6.18.6 '@codemirror/lang-html': 6.4.11 @@ -18466,9 +18470,9 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.9.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6)': + '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.10.0)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.38.6)': dependencies: - '@codemirror/commands': 6.9.0 + '@codemirror/commands': 6.10.0 '@codemirror/language': 6.11.0 '@codemirror/search': 6.5.11 '@codemirror/state': 6.5.2 From c8b98f2db6d4d1e989e939af67773b59155da83f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:22:39 +0000 Subject: [PATCH 072/367] fix(deps): update dependency react-i18next to v16.2.0 --- apps/client/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 28 +++++++++++++++++++++------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 71957e495..09fbe01a8 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -59,7 +59,7 @@ "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.27.2", - "react-i18next": "16.1.2", + "react-i18next": "16.2.0", "reveal.js": "5.2.1", "svg-pan-zoom": "3.6.2", "tabulator-tables": "6.3.1", diff --git a/apps/website/package.json b/apps/website/package.json index 9aec2e719..8ac8f9a3c 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -13,7 +13,7 @@ "preact": "10.27.2", "preact-iso": "2.11.0", "preact-render-to-string": "6.6.2", - "react-i18next": "16.1.2" + "react-i18next": "16.2.0" }, "devDependencies": { "@preact/preset-vite": "2.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..4c8c2e1ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -260,8 +260,8 @@ importers: specifier: 10.27.2 version: 10.27.2 react-i18next: - specifier: 16.1.2 - version: 16.1.2(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) + specifier: 16.2.0 + version: 16.2.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) reveal.js: specifier: 5.2.1 version: 5.2.1 @@ -793,8 +793,8 @@ importers: specifier: 6.6.2 version: 6.6.2(preact@10.27.2) react-i18next: - specifier: 16.1.2 - version: 16.1.2(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) + specifier: 16.2.0 + version: 16.2.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -11812,8 +11812,8 @@ packages: peerDependencies: react: ^19.1.0 - react-i18next@16.1.2: - resolution: {integrity: sha512-AxZAojM6CsP9qWUu8d0XD0KXYBG6yyitcWRRPSRXgGVkJ47hCIy3Mc/sE9deB0k+OK9WcC04vSFoQC9QdMcd6Q==} + react-i18next@16.2.0: + resolution: {integrity: sha512-giCEDa6NtQYvuLGW9xaBo4HCVxT0Y8jrOpX/uSnd+lZ3Dmm/2BNrGNEgRZzWDkSobmE6IWPJ+/Ow9Rhi/gP6+g==} peerDependencies: i18next: '>= 25.5.2' react: '>= 16.8.0' @@ -13611,6 +13611,11 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + user-agent-data-types@0.4.2: resolution: {integrity: sha512-jXep3kO/dGNmDOkbDa8ccp4QArgxR4I76m3QVcJ1aOF0B9toc+YtSXtX5gLdDTZXyWlpQYQrABr6L1L2GZOghw==} @@ -15504,6 +15509,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -15831,6 +15838,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -27998,12 +28007,13 @@ snapshots: react: 16.14.0 scheduler: 0.26.0 - react-i18next@16.1.2(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3): + react-i18next@16.2.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 i18next: 25.6.0(typescript@5.9.3) react: 16.14.0 + use-sync-external-store: 1.6.0(react@16.14.0) optionalDependencies: react-dom: 19.1.0(react@16.14.0) typescript: 5.9.3 @@ -30266,6 +30276,10 @@ snapshots: dependencies: react: 16.14.0 + use-sync-external-store@1.6.0(react@16.14.0): + dependencies: + react: 16.14.0 + user-agent-data-types@0.4.2: {} userhome@1.0.1: {} From 23a20c4490be17500541c9a18f4fb5744432cf2c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:23:11 +0000 Subject: [PATCH 073/367] chore(deps): update dependency ini to v6 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5cc30b1c9..b14c28880 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -100,7 +100,7 @@ "i18next": "25.6.0", "i18next-fs-backend": "2.6.0", "image-type": "6.0.0", - "ini": "5.0.0", + "ini": "6.0.0", "is-animated": "2.0.2", "is-svg": "6.1.0", "jimp": "1.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b3dbf218..9bf94cd4b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -676,8 +676,8 @@ importers: specifier: 6.0.0 version: 6.0.0 ini: - specifier: 5.0.0 - version: 5.0.0 + specifier: 6.0.0 + version: 6.0.0 is-animated: specifier: 2.0.2 version: 2.0.2 @@ -8783,6 +8783,10 @@ packages: resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} engines: {node: ^18.17.0 || >=20.5.0} + ini@6.0.0: + resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} + engines: {node: ^20.17.0 || >=22.9.0} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -15335,6 +15339,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15831,6 +15837,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -24563,6 +24571,8 @@ snapshots: ini@5.0.0: {} + ini@6.0.0: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 From 8baf496f96569f2d913f8befb7c8033d9aece8ee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 01:23:17 +0000 Subject: [PATCH 074/367] chore(deps): update github artifact actions --- .github/workflows/main-docker.yml | 8 ++++---- .github/workflows/nightly.yml | 2 +- .github/workflows/playwright.yml | 2 +- .github/workflows/release.yml | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main-docker.yml b/.github/workflows/main-docker.yml index 407272a99..827320146 100644 --- a/.github/workflows/main-docker.yml +++ b/.github/workflows/main-docker.yml @@ -86,12 +86,12 @@ jobs: - name: Upload Playwright trace if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: Playwright trace (${{ matrix.dockerfile }}) path: test-output/playwright/output - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 if: ${{ !cancelled() }} with: name: Playwright report (${{ matrix.dockerfile }}) @@ -209,7 +209,7 @@ jobs: touch "/tmp/digests/${digest#sha256:}" - name: Upload digest - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: digests-${{ env.PLATFORM_PAIR }}-${{ matrix.dockerfile }} path: /tmp/digests/* @@ -223,7 +223,7 @@ jobs: - build steps: - name: Download digests - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: path: /tmp/digests pattern: digests-* diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 0d0205f32..ac15f9914 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -89,7 +89,7 @@ jobs: name: Nightly Build - name: Publish artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 if: ${{ github.event_name == 'pull_request' }} with: name: TriliumNotes ${{ matrix.os.name }} ${{ matrix.arch }} diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 886b46d61..e2a2757f5 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -35,7 +35,7 @@ jobs: - name: Upload test report if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: e2e report path: apps/server-e2e/test-output diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3ee30040d..1bd2d89ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,7 +73,7 @@ jobs: GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }} - name: Upload the artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: release-desktop-${{ matrix.os.name }}-${{ matrix.arch }} path: apps/desktop/upload/*.* @@ -100,7 +100,7 @@ jobs: arch: ${{ matrix.arch }} - name: Upload the artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: release-server-linux-${{ matrix.arch }} path: upload/*.* @@ -120,7 +120,7 @@ jobs: docs/Release Notes - name: Download all artifacts - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: merge-multiple: true pattern: release-* From e030dd96dab4f979229d7171f2085bf0d8cba779 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 06:08:45 +0000 Subject: [PATCH 075/367] chore(deps): update dependency eslint-plugin-react-hooks to v7.0.1 --- package.json | 2 +- pnpm-lock.yaml | 45 ++++++++++++++++++++++++--------------------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 3386e8b5f..ef62562ff 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "eslint": "9.38.0", "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.2.2", - "eslint-plugin-react-hooks": "7.0.0", + "eslint-plugin-react-hooks": "7.0.1", "happy-dom": "~20.0.0", "jiti": "2.6.1", "jsonc-eslint-parser": "2.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 472221b59..da219001e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -83,8 +83,8 @@ importers: specifier: 2.2.2 version: 2.2.2(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-react-hooks: - specifier: 7.0.0 - version: 7.0.0(eslint@9.38.0(jiti@2.6.1)) + specifier: 7.0.1 + version: 7.0.1(eslint@9.38.0(jiti@2.6.1)) happy-dom: specifier: ~20.0.0 version: 20.0.7 @@ -464,7 +464,7 @@ importers: devDependencies: '@anthropic-ai/sdk': specifier: 0.67.0 - version: 0.67.0(zod@3.24.4) + version: 0.67.0(zod@4.1.12) '@braintree/sanitize-url': specifier: 7.1.1 version: 7.1.1 @@ -707,7 +707,7 @@ importers: version: 0.6.0 openai: specifier: 6.7.0 - version: 6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) + version: 6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12) rand-token: specifier: 1.0.1 version: 1.0.1 @@ -7684,8 +7684,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-hooks@7.0.0: - resolution: {integrity: sha512-fNXaOwvKwq2+pXiRpXc825Vd63+KM4DLL40Rtlycb8m7fYpp6efrTp1sa6ZbP/Ap58K2bEKFXRmhURE+CJAQWw==} + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} engines: {node: '>=18'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -14256,6 +14256,9 @@ packages: zod@3.24.4: resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==} + zod@4.1.12: + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + zustand@4.5.6: resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==} engines: {node: '>=12.7.0'} @@ -14288,11 +14291,11 @@ snapshots: '@antfu/utils@9.2.0': {} - '@anthropic-ai/sdk@0.67.0(zod@3.24.4)': + '@anthropic-ai/sdk@0.67.0(zod@4.1.12)': dependencies: json-schema-to-ts: 3.1.1 optionalDependencies: - zod: 3.24.4 + zod: 4.1.12 '@apidevtools/json-schema-ref-parser@9.1.2': dependencies: @@ -15149,6 +15152,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15340,8 +15345,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15391,6 +15394,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.1.0': dependencies: @@ -15511,8 +15516,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -15685,8 +15688,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-mention@47.1.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -23153,14 +23154,14 @@ snapshots: dependencies: eslint: 9.38.0(jiti@2.6.1) - eslint-plugin-react-hooks@7.0.0(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.38.0(jiti@2.6.1)): dependencies: '@babel/core': 7.28.0 '@babel/parser': 7.28.4 eslint: 9.38.0(jiti@2.6.1) hermes-parser: 0.25.1 - zod: 3.24.4 - zod-validation-error: 3.5.3(zod@3.24.4) + zod: 4.1.12 + zod-validation-error: 3.5.3(zod@4.1.12) transitivePeerDependencies: - supports-color @@ -26665,10 +26666,10 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 - openai@6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4): + openai@6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12): optionalDependencies: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) - zod: 3.24.4 + zod: 4.1.12 openapi-types@12.1.3: {} @@ -31078,12 +31079,14 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.7.0 - zod-validation-error@3.5.3(zod@3.24.4): + zod-validation-error@3.5.3(zod@4.1.12): dependencies: - zod: 3.24.4 + zod: 4.1.12 zod@3.24.4: {} + zod@4.1.12: {} + zustand@4.5.6(@types/react@19.1.7)(react@16.14.0): dependencies: use-sync-external-store: 1.5.0(react@16.14.0) From e69751a8b3813dca3f072e089a72c930b299b156 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 06:10:07 +0000 Subject: [PATCH 076/367] fix(deps): update dependency preact-render-to-string to v6.6.3 --- apps/website/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/apps/website/package.json b/apps/website/package.json index 8ac8f9a3c..0b009f46e 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -12,7 +12,7 @@ "i18next-http-backend": "3.0.2", "preact": "10.27.2", "preact-iso": "2.11.0", - "preact-render-to-string": "6.6.2", + "preact-render-to-string": "6.6.3", "react-i18next": "16.2.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 472221b59..c20c1f23d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -788,10 +788,10 @@ importers: version: 10.27.2 preact-iso: specifier: 2.11.0 - version: 2.11.0(preact-render-to-string@6.6.2(preact@10.27.2))(preact@10.27.2) + version: 2.11.0(preact-render-to-string@6.6.3(preact@10.27.2))(preact@10.27.2) preact-render-to-string: - specifier: 6.6.2 - version: 6.6.2(preact@10.27.2) + specifier: 6.6.3 + version: 6.6.3(preact@10.27.2) react-i18next: specifier: 16.2.0 version: 16.2.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) @@ -11625,8 +11625,8 @@ packages: preact: 10.27.2 preact-render-to-string: '>=6.4.0' - preact-render-to-string@6.6.2: - resolution: {integrity: sha512-VJ++Pkzv6+ZOmeN/9Qvx0mRdXqnei1Lo3uu9bGvYHhoMI1VUkDT44hcpGbiokl/kuuYTayYa3yvmYTLZMplfMA==} + preact-render-to-string@6.6.3: + resolution: {integrity: sha512-7oHG7jzjriqsFPkSPiPnzrQ0GcxFm6wOkYWNdStK5Ks9YlWSQQXKGBRAX4nKDdqX7HAQuRvI4pZNZMycK4WwDw==} peerDependencies: preact: 10.27.2 @@ -15340,8 +15340,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15511,8 +15509,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -27795,12 +27791,12 @@ snapshots: potpack@2.1.0: {} - preact-iso@2.11.0(preact-render-to-string@6.6.2(preact@10.27.2))(preact@10.27.2): + preact-iso@2.11.0(preact-render-to-string@6.6.3(preact@10.27.2))(preact@10.27.2): dependencies: preact: 10.27.2 - preact-render-to-string: 6.6.2(preact@10.27.2) + preact-render-to-string: 6.6.3(preact@10.27.2) - preact-render-to-string@6.6.2(preact@10.27.2): + preact-render-to-string@6.6.3(preact@10.27.2): dependencies: preact: 10.27.2 From 1794f8546db8f0c9aa3556e3cf8933591e311297 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 06:12:41 +0000 Subject: [PATCH 077/367] chore(deps): update dependency @types/express to v5.0.4 --- _regroup/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 55 +++++++++++++++++++++++-------------------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/_regroup/package.json b/_regroup/package.json index 938f195f0..1937327e0 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -37,7 +37,7 @@ "devDependencies": { "@playwright/test": "1.56.1", "@stylistic/eslint-plugin": "5.5.0", - "@types/express": "5.0.3", + "@types/express": "5.0.4", "@types/node": "22.18.12", "@types/yargs": "17.0.34", "@vitest/coverage-v8": "3.2.4", diff --git a/package.json b/package.json index 3386e8b5f..b3ba04677 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@fast-csv/parse": "5.0.5", "@playwright/test": "1.56.1", "@triliumnext/server": "workspace:*", - "@types/express": "5.0.3", + "@types/express": "5.0.4", "@types/node": "22.18.12", "@vitest/coverage-v8": "3.2.4", "@vitest/ui": "3.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e36497d8..ac4f9bea0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,8 +50,8 @@ importers: specifier: workspace:* version: link:apps/server '@types/express': - specifier: 5.0.3 - version: 5.0.3 + specifier: 5.0.4 + version: 5.0.4 '@types/node': specifier: 22.18.12 version: 22.18.12 @@ -497,7 +497,7 @@ importers: version: 1.8.1 '@types/cookie-parser': specifier: 1.4.10 - version: 1.4.10(@types/express@5.0.3) + version: 1.4.10(@types/express@5.0.4) '@types/debounce': specifier: 1.2.4 version: 1.2.4 @@ -4961,6 +4961,9 @@ packages: '@types/express@5.0.3': resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} + '@types/express@5.0.4': + resolution: {integrity: sha512-g64dbryHk7loCIrsa0R3shBnEu5p6LPJ09bu9NG58+jz+cRUjFrc3Bz0kNQ7j9bXeCsrRDvNET1G54P/GJkAyA==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -14967,8 +14970,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15115,6 +15116,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15420,8 +15423,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.1.0': dependencies: @@ -15542,8 +15543,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -15716,8 +15715,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-mention@47.1.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15871,8 +15868,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -16070,6 +16065,8 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.1.0 '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-upload@47.1.0': dependencies: @@ -16628,7 +16625,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -17979,7 +17976,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@4.0.0': dependencies: @@ -19427,9 +19424,9 @@ snapshots: dependencies: '@types/node': 22.18.12 - '@types/cookie-parser@1.4.10(@types/express@5.0.3)': + '@types/cookie-parser@1.4.10(@types/express@5.0.4)': dependencies: - '@types/express': 5.0.3 + '@types/express': 5.0.4 '@types/cookie@0.6.0': optional: true @@ -19438,7 +19435,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/cssnano@5.1.3(postcss@8.5.6)': dependencies: @@ -19619,6 +19616,12 @@ snapshots: '@types/express-serve-static-core': 5.1.0 '@types/serve-static': 1.15.10 + '@types/express@5.0.4': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 5.1.0 + '@types/serve-static': 1.15.10 + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 @@ -19626,7 +19629,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 optional: true '@types/geojson-vt@3.2.5': @@ -19638,7 +19641,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/hast@3.0.4': dependencies: @@ -19652,7 +19655,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/ini@4.1.1': {} @@ -19670,7 +19673,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/leaflet-gpx@1.3.8': dependencies: @@ -19724,7 +19727,7 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/node@16.9.1': {} @@ -19821,7 +19824,7 @@ snapshots: '@types/serve-index@1.9.4': dependencies: - '@types/express': 5.0.3 + '@types/express': 5.0.4 '@types/serve-static@1.15.10': dependencies: @@ -22860,7 +22863,7 @@ snapshots: engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/cors': 2.8.19 - '@types/node': 24.9.1 + '@types/node': 22.18.12 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -27957,7 +27960,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.9.1 + '@types/node': 22.18.12 long: 5.3.2 protocol-buffers-schema@3.6.0: {} From b78893b106da6da6790252fc1563d92a18170c0c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 06:14:32 +0000 Subject: [PATCH 078/367] chore(deps): update dependency vite to v7.1.12 --- apps/server/package.json | 2 +- apps/website/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 126 ++++++++++++++++++-------------------- 4 files changed, 63 insertions(+), 69 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 7e9fa4f26..bc95d89c2 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -127,7 +127,7 @@ "tmp": "0.2.5", "turndown": "7.2.2", "unescape": "1.0.1", - "vite": "7.1.11", + "vite": "7.1.12", "ws": "8.18.3", "xml2js": "0.6.2", "yauzl": "3.2.0" diff --git a/apps/website/package.json b/apps/website/package.json index 8ac8f9a3c..fd6fa49a7 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -21,7 +21,7 @@ "eslint-config-preact": "2.0.0", "typescript": "5.9.3", "user-agent-data-types": "0.4.2", - "vite": "7.1.11" + "vite": "7.1.12" }, "eslintConfig": { "extends": "preact" diff --git a/package.json b/package.json index 3386e8b5f..064ca35f2 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "typescript": "~5.9.0", "typescript-eslint": "8.46.2", "upath": "2.0.1", - "vite": "7.1.11", + "vite": "7.1.12", "vite-plugin-dts": "~4.5.0", "vitest": "3.2.4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e36497d8..f196347da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,7 +99,7 @@ importers: version: 0.18.0 rollup-plugin-webpack-stats: specifier: 2.1.6 - version: 2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -116,11 +116,11 @@ importers: specifier: 2.0.1 version: 2.0.1 vite: - specifier: 7.1.11 - version: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 7.1.12 + version: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-dts: specifier: ~4.5.0 - version: 4.5.4(@types/node@22.18.12)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.5.4(@types/node@22.18.12)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -280,7 +280,7 @@ importers: version: 5.0.0 '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/bootstrap': specifier: 5.2.10 version: 5.2.10 @@ -313,7 +313,7 @@ importers: version: 0.7.2 vite-plugin-static-copy: specifier: 3.1.4 - version: 3.1.4(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 3.1.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -473,7 +473,7 @@ importers: version: 2.1.3(electron@38.3.0) '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@triliumnext/commons': specifier: workspace:* version: link:../../packages/commons @@ -757,8 +757,8 @@ importers: specifier: 1.0.1 version: 1.0.1 vite: - specifier: 7.1.11 - version: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 7.1.12 + version: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: specifier: 8.18.3 version: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -798,7 +798,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) eslint: specifier: 9.38.0 version: 9.38.0(jiti@2.6.1) @@ -812,8 +812,8 @@ importers: specifier: 0.4.2 version: 0.4.2 vite: - specifier: 7.1.11 - version: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 7.1.12 + version: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -865,7 +865,7 @@ importers: version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -898,7 +898,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -925,7 +925,7 @@ importers: version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -958,7 +958,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -985,7 +985,7 @@ importers: version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1018,7 +1018,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -1052,7 +1052,7 @@ importers: version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1085,7 +1085,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -1119,7 +1119,7 @@ importers: version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1152,7 +1152,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -13750,8 +13750,8 @@ packages: peerDependencies: vite: 5.x || 6.x || 7.x - vite@7.1.11: - resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==} + vite@7.1.12: + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -14967,8 +14967,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15115,6 +15113,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15176,8 +15176,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15342,6 +15340,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.1.0': dependencies: @@ -15369,8 +15369,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15420,8 +15418,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.1.0': dependencies: @@ -15542,8 +15538,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -16628,7 +16622,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -17979,7 +17973,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@4.0.0': dependencies: @@ -18136,18 +18130,18 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@prefresh/vite': 2.4.8(preact@10.27.2)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-prerender-plugin: 0.5.11(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-prerender-plugin: 0.5.11(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - preact - supports-color @@ -18160,7 +18154,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.8(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@prefresh/vite@2.4.8(preact@10.27.2)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18168,7 +18162,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.27.2 - vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20188,11 +20182,11 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/utils': 3.2.4 magic-string: 0.30.18 sirv: 3.0.1 @@ -20241,7 +20235,7 @@ snapshots: tinyrainbow: 2.0.0 vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.12)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.8)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) transitivePeerDependencies: - supports-color @@ -20253,14 +20247,14 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.18 optionalDependencies: msw: 2.7.5(@types/node@22.18.12)(typescript@5.9.3) - vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -28482,11 +28476,11 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 optional: true - rollup-plugin-stats@1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + rollup-plugin-stats@1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) rollup-plugin-styles@4.0.0(rollup@4.40.0): dependencies: @@ -28515,13 +28509,13 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.40.0) rollup: 4.40.0 - rollup-plugin-webpack-stats@2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + rollup-plugin-webpack-stats@2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - rollup-plugin-stats: 1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + rollup-plugin-stats: 1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) rollup@4.40.0: dependencies: @@ -30438,7 +30432,7 @@ snapshots: debug: 4.4.3(supports-color@6.0.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -30453,7 +30447,7 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@22.18.12)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@22.18.12)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@microsoft/api-extractor': 7.52.8(@types/node@22.18.12) '@rollup/pluginutils': 5.1.4(rollup@4.52.0) @@ -30466,27 +30460,27 @@ snapshots: magic-string: 0.30.17 typescript: 5.9.3 optionalDependencies: - vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@3.1.4(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: svgo: 3.3.2 typescript: 5.9.3 - vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-prerender-plugin@0.5.11(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-prerender-plugin@0.5.11(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.18 @@ -30494,9 +30488,9 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -30516,7 +30510,7 @@ snapshots: tsx: 4.20.6 yaml: 2.8.1 - vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -30540,7 +30534,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -30558,13 +30552,13 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-node: 3.2.4(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.18.12 - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.12)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@22.18.12)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 3.2.4(vitest@3.2.4) happy-dom: 20.0.8 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From 189071deb8e337839d38268ce273b43677cfc9c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 06:17:20 +0000 Subject: [PATCH 079/367] chore(deps): update dependency electron to v38.4.0 --- apps/desktop/package.json | 2 +- apps/edit-docs/package.json | 2 +- apps/server/package.json | 2 +- pnpm-lock.yaml | 114 +++++++++++++++++------------------- 4 files changed, 56 insertions(+), 64 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 352e43a1c..a59f17e12 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -35,7 +35,7 @@ "@triliumnext/commons": "workspace:*", "@triliumnext/server": "workspace:*", "copy-webpack-plugin": "13.0.1", - "electron": "38.3.0", + "electron": "38.4.0", "@electron-forge/cli": "7.10.2", "@electron-forge/maker-deb": "7.10.2", "@electron-forge/maker-dmg": "7.10.2", diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index 14c843def..f47db844c 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -12,7 +12,7 @@ "@triliumnext/desktop": "workspace:*", "@types/fs-extra": "11.0.4", "copy-webpack-plugin": "13.0.1", - "electron": "38.3.0", + "electron": "38.4.0", "fs-extra": "11.3.2" }, "scripts": { diff --git a/apps/server/package.json b/apps/server/package.json index 7e9fa4f26..f8613976a 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -81,7 +81,7 @@ "debounce": "2.2.0", "debug": "4.4.3", "ejs": "3.1.10", - "electron": "38.3.0", + "electron": "38.4.0", "electron-debug": "4.1.0", "electron-window-state": "5.0.3", "escape-html": "1.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ee02382c..0d3cd22a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -334,7 +334,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@38.3.0) + version: 2.1.3(electron@38.4.0) better-sqlite3: specifier: 12.4.1 version: 12.4.1 @@ -391,8 +391,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.25.11)) electron: - specifier: 38.3.0 - version: 38.3.0 + specifier: 38.4.0 + version: 38.4.0 prebuild-install: specifier: 7.1.3 version: 7.1.3 @@ -447,8 +447,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.25.11)) electron: - specifier: 38.3.0 - version: 38.3.0 + specifier: 38.4.0 + version: 38.4.0 fs-extra: specifier: 11.3.2 version: 11.3.2 @@ -470,7 +470,7 @@ importers: version: 7.1.1 '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@38.3.0) + version: 2.1.3(electron@38.4.0) '@preact/preset-vite': specifier: 2.10.2 version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) @@ -619,8 +619,8 @@ importers: specifier: 3.1.10 version: 3.1.10 electron: - specifier: 38.3.0 - version: 38.3.0 + specifier: 38.4.0 + version: 38.4.0 electron-debug: specifier: 4.1.0 version: 4.1.0 @@ -5066,9 +5066,6 @@ packages: '@types/node@20.19.18': resolution: {integrity: sha512-KeYVbfnbsBCyKG8e3gmUqAfyZNcoj/qpEbHRkQkfZdKOBrU7QQ+BsTdfqLSWX9/m1ytYreMhpKvp+EZi3UFYAg==} - '@types/node@20.19.22': - resolution: {integrity: sha512-hRnu+5qggKDSyWHlnmThnUqg62l29Aj/6vcYgUaSFL9oc7DVjeWEQN3PRgdSc6F8d9QRMWkf36CLMch1Do/+RQ==} - '@types/node@20.19.23': resolution: {integrity: sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==} @@ -5078,9 +5075,6 @@ packages: '@types/node@22.15.30': resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==} - '@types/node@22.18.10': - resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==} - '@types/node@22.18.12': resolution: {integrity: sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==} @@ -7367,8 +7361,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@38.3.0: - resolution: {integrity: sha512-Wij4AzX4SAV0X/ktq+NrWrp5piTCSS8F6YWh1KAcG+QRtNzyns9XLKERP68nFHIwfprhxF2YCN2uj7nx9DaeJw==} + electron@38.4.0: + resolution: {integrity: sha512-9CsXKbGf2qpofVe2pQYSgom2E//zLDJO2rGLLbxgy9tkdTOs7000Gte+d/PUtzLjI/DS95jDK0ojYAeqjLvpYg==} engines: {node: '>= 12.20.55'} hasBin: true @@ -14867,8 +14861,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15015,6 +15007,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15269,6 +15263,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15318,8 +15314,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.1.0': dependencies: @@ -15612,6 +15606,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.1.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15853,6 +15849,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -16427,7 +16425,7 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@6.0.0) fs-extra: 10.1.0 - semver: 7.7.2 + semver: 7.7.3 username: 5.1.0 transitivePeerDependencies: - bluebird @@ -16522,7 +16520,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -16567,7 +16565,7 @@ snapshots: plist: 3.1.0 resedit: 2.0.3 resolve: 1.22.10 - semver: 7.7.2 + semver: 7.7.3 yargs-parser: 21.1.1 transitivePeerDependencies: - supports-color @@ -16585,7 +16583,7 @@ snapshots: node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: @@ -16611,9 +16609,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.3(electron@38.3.0)': + '@electron/remote@2.1.3(electron@38.4.0)': dependencies: - electron: 38.3.0 + electron: 38.4.0 '@electron/universal@2.0.2': dependencies: @@ -17873,7 +17871,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@4.0.0': dependencies: @@ -19254,7 +19252,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 optional: true '@types/archiver@6.0.4': @@ -19276,7 +19274,7 @@ snapshots: '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/bootstrap@5.2.10': dependencies: @@ -19290,7 +19288,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/responselike': 1.0.3 '@types/chai@5.2.2': @@ -19315,7 +19313,7 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.0 - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/connect@3.4.38': dependencies: @@ -19332,7 +19330,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/cssnano@5.1.3(postcss@8.5.6)': dependencies: @@ -19520,7 +19518,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 optional: true '@types/geojson-vt@3.2.5': @@ -19532,7 +19530,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/hast@3.0.4': dependencies: @@ -19546,7 +19544,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/ini@4.1.1': {} @@ -19564,7 +19562,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/leaflet-gpx@1.3.8': dependencies: @@ -19618,7 +19616,7 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/node@16.9.1': {} @@ -19626,10 +19624,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@20.19.22': - dependencies: - undici-types: 6.21.0 - '@types/node@20.19.23': dependencies: undici-types: 6.21.0 @@ -19642,10 +19636,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.18.10': - dependencies: - undici-types: 6.21.0 - '@types/node@22.18.12': dependencies: undici-types: 6.21.0 @@ -19657,6 +19647,7 @@ snapshots: '@types/node@24.9.1': dependencies: undici-types: 7.16.0 + optional: true '@types/parse-json@4.0.2': {} @@ -19688,7 +19679,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/retry@0.12.2': {} @@ -19734,7 +19725,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/statuses@2.0.6': optional: true @@ -19770,7 +19761,7 @@ snapshots: '@types/through2@2.0.41': dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 '@types/tmp@0.2.6': {} @@ -19808,7 +19799,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.12 optional: true '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': @@ -20120,11 +20111,11 @@ snapshots: '@wdio/repl@9.16.2': dependencies: - '@types/node': 20.19.22 + '@types/node': 20.19.23 '@wdio/types@9.20.0': dependencies: - '@types/node': 20.19.22 + '@types/node': 20.19.23 '@wdio/utils@9.20.0': dependencies: @@ -22460,7 +22451,7 @@ snapshots: glob: 7.2.3 lodash: 4.17.21 parse-author: 2.0.0 - semver: 7.7.2 + semver: 7.7.3 tmp-promise: 3.0.3 optionalDependencies: '@types/fs-extra': 9.0.13 @@ -22547,10 +22538,10 @@ snapshots: - supports-color optional: true - electron@38.3.0: + electron@38.4.0: dependencies: '@electron/get': 2.0.3 - '@types/node': 22.18.10 + '@types/node': 22.18.12 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -22609,7 +22600,7 @@ snapshots: engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/cors': 2.8.19 - '@types/node': 24.9.1 + '@types/node': 22.18.12 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -23847,7 +23838,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.2 + semver: 7.7.3 serialize-error: 7.0.1 optional: true @@ -24733,13 +24724,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 24.9.1 + '@types/node': 22.18.12 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -27706,7 +27697,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.9.1 + '@types/node': 22.18.12 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -29951,7 +29942,8 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.16.0: {} + undici-types@7.16.0: + optional: true undici@6.21.3: {} @@ -30395,7 +30387,7 @@ snapshots: webdriver@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: - '@types/node': 20.19.22 + '@types/node': 20.19.23 '@types/ws': 8.18.1 '@wdio/config': 9.20.0 '@wdio/logger': 9.18.0 From 48e85fad433a130cb460e70d0de651c2b4e13f23 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 06:17:51 +0000 Subject: [PATCH 080/367] chore(deps): update dependency node-abi to v4.15.0 --- package.json | 2 +- pnpm-lock.yaml | 30 ++++++++++++++---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index ef62562ff..5588519ce 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "on-headers@<1.1.0": ">=1.1.0", "form-data@>=4.0.0 <4.0.4": ">=4.0.4", "form-data@>=3.0.0 <3.0.4": ">=3.0.4", - "node-abi": "4.14.0" + "node-abi": "4.15.0" }, "ignoredBuiltDependencies": [ "sqlite3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ee02382c..7b4229b88 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ overrides: on-headers@<1.1.0: '>=1.1.0' form-data@>=4.0.0 <4.0.4: '>=4.0.4' form-data@>=3.0.0 <3.0.4: '>=3.0.4' - node-abi: 4.14.0 + node-abi: 4.15.0 patchedDependencies: '@ckeditor/ckeditor5-code-block': @@ -10144,8 +10144,8 @@ packages: nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-abi@4.14.0: - resolution: {integrity: sha512-E4n91K4Nk1Rch2KzD+edU2bfZTP4W42GypAUDXU4vu1A+4u9PvUNDkGI0dXbsy8ZeF3WGj0SD/uHxnXD/sW+3w==} + node-abi@4.15.0: + resolution: {integrity: sha512-w5n9oW45LIgHXqDhA2tL4/uzjeussOn0c5WgWQT48xMbk49+kTlVgZjaEyCBuvS1AP+HuizfiAKGZwIYsILGcw==} engines: {node: '>=22.12.0'} node-addon-api@7.1.1: @@ -14867,8 +14867,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15015,6 +15013,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15076,8 +15076,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15318,8 +15316,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.1.0': dependencies: @@ -15612,6 +15608,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.1.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -16522,7 +16520,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -16581,7 +16579,7 @@ snapshots: detect-libc: 2.1.1 fs-extra: 10.1.0 got: 11.8.6 - node-abi: 4.14.0 + node-abi: 4.15.0 node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 @@ -16600,7 +16598,7 @@ snapshots: detect-libc: 2.0.4 got: 11.8.6 graceful-fs: 4.2.11 - node-abi: 4.14.0 + node-abi: 4.15.0 node-api-version: 0.2.1 node-gyp: 11.2.0 ora: 5.4.1 @@ -17873,7 +17871,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@4.0.0': dependencies: @@ -26204,9 +26202,9 @@ snapshots: nice-try@1.0.5: {} - node-abi@4.14.0: + node-abi@4.15.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-addon-api@7.1.1: {} @@ -27652,7 +27650,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 4.14.0 + node-abi: 4.15.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 From dcdffed003e964bf6b8f66379fb34a8936fb74a9 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 09:18:41 +0300 Subject: [PATCH 081/367] chore(deps): remove unused types for session-file-store --- apps/server/package.json | 1 - pnpm-lock.yaml | 27 ++++++--------------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 7e9fa4f26..bc0228f65 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -57,7 +57,6 @@ "@types/sax": "1.2.7", "@types/serve-favicon": "2.5.7", "@types/serve-static": "1.15.10", - "@types/session-file-store": "1.2.5", "@types/stream-throttle": "0.1.4", "@types/supertest": "6.0.3", "@types/swagger-ui-express": "4.1.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ee02382c..b1c384860 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -546,9 +546,6 @@ importers: '@types/serve-static': specifier: 1.15.10 version: 1.15.10 - '@types/session-file-store': - specifier: 1.2.5 - version: 1.2.5 '@types/stream-throttle': specifier: 0.1.4 version: 0.1.4 @@ -5149,9 +5146,6 @@ packages: '@types/serve-static@1.15.10': resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} - '@types/session-file-store@1.2.5': - resolution: {integrity: sha512-xjIyh40IznXLrvbAY/nmxu5cMcPcE3ZoDrSDvd02m6p8UjUgOtZAGI7Os5DDd6THuxClLWNhFo/awy1tYp64Bg==} - '@types/sinonjs__fake-timers@8.1.5': resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} @@ -14867,8 +14861,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15076,8 +15068,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15269,6 +15259,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15318,8 +15310,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.1.0': dependencies: @@ -15612,6 +15602,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.1.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15765,8 +15757,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -16522,7 +16512,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -17873,7 +17863,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@4.0.0': dependencies: @@ -19723,11 +19713,6 @@ snapshots: '@types/node': 22.18.12 '@types/send': 0.17.5 - '@types/session-file-store@1.2.5': - dependencies: - '@types/express': 5.0.3 - '@types/express-session': 1.18.2 - '@types/sinonjs__fake-timers@8.1.5': {} '@types/sizzle@2.3.9': {} From e15839db4731b05d1494a819be3ffc8759e4b594 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 25 Oct 2025 08:03:48 +0200 Subject: [PATCH 082/367] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-ar.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/README-ar.md b/docs/README-ar.md index bf82c914b..7bd5d5410 100644 --- a/docs/README-ar.md +++ b/docs/README-ar.md @@ -61,8 +61,8 @@ quick overview: Docker](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md) - [ترقية تريليوم للملاحظات](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md) -- [Basic Concepts and - Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md) +- [مفاهيم ومميزات + اساسية](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md) - [Patterns of Personal Knowledge Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) @@ -110,7 +110,7 @@ quick overview: location pins and GPX tracks * [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) -* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation +* [واجهة REST API](https://triliumnext.github.io/Docs/Wiki/etapi) للأتمتة * Scales well in both usability and performance upwards of 100 000 notes * Touch optimized [mobile frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for From 64daeb082629d7cadfe56d0c035606421ee980da Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Sat, 25 Oct 2025 07:43:24 +0200 Subject: [PATCH 083/367] Translated using Weblate (Arabic) Currently translated at 65.0% (1055 of 1621 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/ --- .../src/translations/ar/translation.json | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/apps/client/src/translations/ar/translation.json b/apps/client/src/translations/ar/translation.json index 3a913844f..b04472d7c 100644 --- a/apps/client/src/translations/ar/translation.json +++ b/apps/client/src/translations/ar/translation.json @@ -87,7 +87,8 @@ "workspace_calendar_root": "‎تحديد جذر التقويم لكل مساحة عمل", "hide_highlight_widget": "اخفاء عنصر واجهة قائمة التمييزات", "is_owned_by_note": "تخص الملاحظة", - "and_more": "... و {{count}}مرات اكثر." + "and_more": "... و {{count}}مرات اكثر.", + "related_notes_title": "ملاحظات اخرى بنفس التسمية" }, "rename_label": { "to": "الى", @@ -131,7 +132,9 @@ "delete_attachment": "حذف المرفق", "upload_new_revision": "رفع مراجعة جديدة", "copy_link_to_clipboard": "نسخ الرابط الى الحافظة", - "convert_attachment_into_note": "تحويل المرفق الى ملاحظة" + "convert_attachment_into_note": "تحويل المرفق الى ملاحظة", + "delete_success": "تم حذف المرفق \"{{title}}\" .", + "enter_new_name": "ادخل اسم مرفق جديد" }, "calendar": { "week": "أسبوع", @@ -263,7 +266,8 @@ "note_paths": { "search": "بحث", "archived": "مؤرشف", - "title": "مسارات الملاحظة" + "title": "مسارات الملاحظة", + "clone_button": "جار نسخ الملاحظة الى مكان جديد..." }, "script_executor": { "query": "استعلام", @@ -477,7 +481,9 @@ "diff_off_hint": "انقر لعرض محتويات الملاحظة", "revisions_deleted": "تم حذف جميع نسخ المراجعات للملاحظة.", "revision_restored": "تم استعادة نسخ المراجعة للملاحظة.", - "revision_deleted": "تم حذف مراجعة الملاحظة." + "revision_deleted": "تم حذف مراجعة الملاحظة.", + "snapshot_interval": "فاصل زمني لحفظ لقطات اصدارات المراجعة: {{seconds}}", + "maximum_revisions": "حد عدد لقطات اصدارات الملاحظة: {{number}}" }, "sort_child_notes": { "title": "عنوان", @@ -491,7 +497,8 @@ "sorting_direction": "اتجاه الترتيب", "natural_sort": "الترتيب الطبيعي", "natural_sort_language": "لغات الترتيب الطبيعي", - "sort_children_by": "ترتيب العناصر الفرعية حسب..." + "sort_children_by": "ترتيب العناصر الفرعية حسب...", + "sort_folders_at_top": "ترتيب المجلدات في الاعلى" }, "recent_changes": { "undelete_link": "الغاء الحذف", @@ -718,7 +725,9 @@ "default_token_name": "رمز جديد", "rename_token_title": "اعادة تسمية الرمز", "rename_token": "اعادة تسمية هذا الرمز", - "create_token": "انشاء رمز PEAPI جديد" + "create_token": "انشاء رمز PEAPI جديد", + "new_token_title": "رمز ETAPI جديد", + "token_created_title": "انشاء رمز ETAPI" }, "password": { "heading": "كلمة المرور", @@ -1043,7 +1052,8 @@ }, "delete_note": { "delete_note": "حذف الملاحظة", - "delete_matched_notes": "حف الملاحظات المطابقة" + "delete_matched_notes": "حف الملاحظات المطابقة", + "delete_matched_notes_description": "سوف يؤدي هذا الى حذف الملاحظات المطابقة." }, "rename_note": { "rename_note": "اعادة تسمية الملاحظة", @@ -1378,7 +1388,8 @@ "save_attributes": "حفظ السمات ", "add_a_new_attribute": "اضافة سمة جديدة", "add_new_label_definition": "اضافة تعريف لتسمية جديدة", - "add_new_relation_definition": "اضافة تعريف لعلاقة جديدة" + "add_new_relation_definition": "اضافة تعريف لعلاقة جديدة", + "add_new_relation": "اضافة علاقة جديدة " }, "zen_mode": { "button_exit": "الخروج من وضع Zen" @@ -1449,5 +1460,8 @@ }, "png_export_button": { "button_title": "تصدير المخطط كملف PNG" + }, + "protected_session_status": { + "inactive": "انقر للدخول الى جلسة محمية" } } From cbc756ba06cf0b66a5dff86e59ef84303d7a7f37 Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Sat, 25 Oct 2025 07:28:06 +0200 Subject: [PATCH 084/367] Translated using Weblate (Arabic) Currently translated at 85.7% (332 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/ar/ --- .../src/assets/translations/ar/server.json | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/apps/server/src/assets/translations/ar/server.json b/apps/server/src/assets/translations/ar/server.json index 114a2598f..3a8e7187b 100644 --- a/apps/server/src/assets/translations/ar/server.json +++ b/apps/server/src/assets/translations/ar/server.json @@ -198,7 +198,8 @@ "expand": "توسيع", "site-theme": "المظهر العام للموقع", "image_alt": "صورة المقال", - "on-this-page": "في هذه السفحة" + "on-this-page": "في هذه السفحة", + "last-updated": "اخر تحديث {{- date}}" }, "hidden_subtree_templates": { "description": "الوصف", @@ -260,7 +261,8 @@ }, "share_page": { "parent": "الأصل:", - "child-notes": "الملاحظات الفرعية:" + "child-notes": "الملاحظات الفرعية:", + "no-content": "لاتحتوي هذة الملاحظة على محتوى." }, "notes": { "duplicate-note-suffix": "(مكرر)", @@ -348,7 +350,17 @@ "add-note-above-to-selection": "اضافة ملاحظة فوق الملاحظة المحددة", "add-note-below-to-selection": "اصافة ملاحظة اسفل الملاحظة المحددة", "add-include-note-to-text": "اضافة الملاحظة الى النص", - "toggle-ribbon-tab-image-properties": "اظهار/ اخفاء صورة علامة التبويب في الشريط." + "toggle-ribbon-tab-image-properties": "اظهار/ اخفاء صورة علامة التبويب في الشريط.", + "toggle-ribbon-tab-classic-editor": "عرض/اخفاء تبويب المحور الكلاسيكي", + "toggle-ribbon-tab-basic-properties": "عرض/اخفاء تبويب الخصائص الاساسية", + "toggle-ribbon-tab-book-properties": "عرض/اخفاء تبويب خصائص الدفتر", + "toggle-ribbon-tab-file-properties": "عرض/ادخفاء تبويب خصائص الملف", + "toggle-ribbon-tab-owned-attributes": "عرض/اخفاء تبويب المميزات المملوكة", + "toggle-ribbon-tab-inherited-attributes": "عرض/اخفاء تبويب السمات الموروثة", + "toggle-ribbon-tab-promoted-attributes": "عرض/ اخفاء تبويب السمات المعززة", + "toggle-ribbon-tab-note-map": "عرض/اخفاء تبويب خريطة الملاحظات", + "toggle-ribbon-tab-similar-notes": "عرض/اخفاء شريط الملاحظات المشابهة", + "export-active-note-as-pdf": "تصدير الملاحظة النشطة كملفPDF" }, "share_404": { "title": "غير موجود", @@ -357,6 +369,7 @@ "weekdayNumber": "الاسبوع{رقم الاسيوع}", "quarterNumber": "الربع {رقم الربع}", "pdf": { - "export_filter": "مستند PDF (.pdf)" + "export_filter": "مستند PDF (.pdf)", + "unable-to-export-title": "تعذر التصدير كملف PDF" } } From c16a135efc3c0b57983e2e30ec143f6c2d2601da Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Sat, 25 Oct 2025 06:53:44 +0200 Subject: [PATCH 085/367] Translated using Weblate (Arabic) Currently translated at 55.4% (81 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/ --- apps/website/public/translations/ar/translation.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/website/public/translations/ar/translation.json b/apps/website/public/translations/ar/translation.json index e0c453b3f..024d96f84 100644 --- a/apps/website/public/translations/ar/translation.json +++ b/apps/website/public/translations/ar/translation.json @@ -7,7 +7,8 @@ }, "download_helper_server_hosted": { "title": "استضافة مدفوعة", - "download_triliumcc": "بدلا من ذلك، راجع trillum. cc" + "download_triliumcc": "بدلا من ذلك، راجع trillum. cc", + "download_pikapod": "اعدلد على PikaPods" }, "get-started": { "architecture": "المعمارية:", @@ -22,7 +23,8 @@ "organization_benefits": { "title": "تنظيم", "note_structure_title": "هيكيلية الملاحظة", - "hoisting_title": "مساحات العمل والتركيز على الملاحظة" + "hoisting_title": "مساحات العمل والتركيز على الملاحظة", + "attributes_title": "العلاقات وجداول الملاحظة" }, "productivity_benefits": { "sync_title": "‎المزامنة", @@ -30,7 +32,8 @@ "protected_notes_title": "الملاحظات المحمية", "search_title": "البحث القوي", "web_clipper_title": "اداة قص الويب", - "title": "الانتاجية والسلامة" + "title": "الانتاجية والسلامة", + "jump_to_title": "الاوامر والبحث السريع" }, "note_types": { "canvas_title": "مساحة العمل", @@ -66,7 +69,8 @@ "paypal": "PayPal", "title": "ادعمنا", "financial_donations_title": "التبرعات المالية", - "github_sponsors": "الرعاة على GitHub" + "github_sponsors": "الرعاة على GitHub", + "buy_me_a_coffee": "Buy Me A Coffee" }, "download_helper_desktop_windows": { "download_scoop": "Scoop", From 14e06c4555896e206a050d6eb3832f06b6790182 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 09:34:53 +0300 Subject: [PATCH 086/367] chore(dev): add entry point for starting web site in dev mode --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index ef62562ff..05712e550 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "desktop:start": "pnpm run --filter desktop dev", "desktop:build": "pnpm run --filter desktop build", "desktop:start-prod": "pnpm run --filter desktop start-prod", + "website:start": "pnpm run --filter website dev", "website:build": "pnpm run --filter website build", "electron:build": "pnpm desktop:build", "electron:start": "pnpm desktop:start", From 1a68bdfe026646f14aa999f76cd148088e63d685 Mon Sep 17 00:00:00 2001 From: Ryan Keane Date: Sat, 25 Oct 2025 01:00:14 -0700 Subject: [PATCH 087/367] fix(windows script): add -command flag I don't know why if I replace old, system builtin powershell executable with powershell 7, scripts fail with this error: The argument 'Set-Item -Path ...' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. Adding -Command at the end of flags just fixed it. Signed-off-by: Ryan Keane --- apps/desktop/electron-forge/trilium-no-cert-check.bat | 2 +- apps/desktop/electron-forge/trilium-portable.bat | 2 +- apps/desktop/electron-forge/trilium-safe-mode.bat | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/desktop/electron-forge/trilium-no-cert-check.bat b/apps/desktop/electron-forge/trilium-no-cert-check.bat index cfc345c42..d3405b497 100644 --- a/apps/desktop/electron-forge/trilium-no-cert-check.bat +++ b/apps/desktop/electron-forge/trilium-no-cert-check.bat @@ -6,7 +6,7 @@ WHERE powershell.exe > NUL 2>&1 IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL :POWERSHELL -powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0; ./trilium.exe" +powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo -Command "Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0; ./trilium.exe" GOTO END :BATCH diff --git a/apps/desktop/electron-forge/trilium-portable.bat b/apps/desktop/electron-forge/trilium-portable.bat index b6eeb853f..5b71c9cf2 100644 --- a/apps/desktop/electron-forge/trilium-portable.bat +++ b/apps/desktop/electron-forge/trilium-portable.bat @@ -6,7 +6,7 @@ WHERE powershell.exe > NUL 2>&1 IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL :POWERSHELL -powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'; ./trilium.exe" +powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo -Command "Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'; ./trilium.exe" GOTO END :BATCH diff --git a/apps/desktop/electron-forge/trilium-safe-mode.bat b/apps/desktop/electron-forge/trilium-safe-mode.bat index 7e0fafa99..e112896f7 100644 --- a/apps/desktop/electron-forge/trilium-safe-mode.bat +++ b/apps/desktop/electron-forge/trilium-safe-mode.bat @@ -6,7 +6,7 @@ WHERE powershell.exe > NUL 2>&1 IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL :POWERSHELL -powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1; ./trilium.exe --disable-gpu" +powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo -Command "Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1; ./trilium.exe --disable-gpu" GOTO END :BATCH From b7b1d17817b45af062cc9b47a4e5f7cb54af171c Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 16:41:10 +0300 Subject: [PATCH 088/367] chore(website): add list of locales --- apps/website/src/i18n.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps/website/src/i18n.ts b/apps/website/src/i18n.ts index 32bd7d09c..ecd1290c0 100644 --- a/apps/website/src/i18n.ts +++ b/apps/website/src/i18n.ts @@ -2,6 +2,23 @@ import { default as i18next } from "i18next"; import HttpApi from 'i18next-http-backend'; import { initReactI18next } from "react-i18next"; +interface Locale { + id: string; + name: string; + rtl?: boolean; +} + +export const LOCALES: Locale[] = [ + { id: "ro", name: "Română" }, + { id: "zh_TW", name: "繁體中文" }, + { id: "fr", name: "Français" }, + { id: "it", name: "Italiano" }, + { id: "ja", name: "日本語" }, + { id: "pl", name: "Polski" }, + { id: "es", name: "Español" }, + { id: "ar", name: "اَلْعَرَبِيَّةُ", rtl: true }, +]; + i18next .use(HttpApi) .use(initReactI18next); From 30480b2c2364294ab33d0ddda725da5e8300538f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 17:25:58 +0300 Subject: [PATCH 089/367] chore(website/i18n): start generating routes --- apps/website/src/index.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/website/src/index.tsx b/apps/website/src/index.tsx index 10680c4fa..595b99743 100644 --- a/apps/website/src/index.tsx +++ b/apps/website/src/index.tsx @@ -7,6 +7,7 @@ import { NotFound } from './pages/_404.jsx'; import Footer from './components/Footer.js'; import GetStarted from './pages/GetStarted/get-started.js'; import SupportUs from './pages/SupportUs/SupportUs.js'; +import { LOCALES } from './i18n'; export function App(props: {repoStargazersCount: number}) { return ( @@ -14,7 +15,7 @@ export function App(props: {repoStargazersCount: number}) {
    - + @@ -35,6 +36,17 @@ export async function prerender(data) { // This ensures the GitHub API is not called on every page load in the client. const stargazersCount = await getRepoStargazersCount(); - return await ssr(); + const result = await ssr(); + console.log("Got links ", result.links); + const links: string[] = []; + for (const locale of LOCALES) { + for (const link of result.links?.values() ?? []) { + links.push(locale.id + link); + } + } + return { + ...result, + links + }; } From f4796f0f9e32e9a1635a41ff34044b3eb8811ac1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 18:18:47 +0300 Subject: [PATCH 090/367] feat(website/i18n): footer navigation --- apps/website/src/components/Footer.css | 10 +++++++++- apps/website/src/components/Footer.tsx | 20 +++++++++++++++----- apps/website/src/i18n.ts | 2 +- apps/website/src/index.tsx | 14 +------------- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/apps/website/src/components/Footer.css b/apps/website/src/components/Footer.css index 1dafed348..ed0ec973b 100644 --- a/apps/website/src/components/Footer.css +++ b/apps/website/src/components/Footer.css @@ -5,17 +5,25 @@ footer { color: var(--muted-color); font-size: 0.8em; - .content-wrapper { + .row { display: flex; justify-content: space-between; align-items: center; flex-direction: column-reverse; gap: 2em; + margin-bottom: 1em; @media (min-width: 720px) { flex-direction: row; } } + + nav.languages { + flex-grow: 1; + justify-content: center; + display: flex; + gap: 1em; + } } .social-buttons { diff --git a/apps/website/src/components/Footer.tsx b/apps/website/src/components/Footer.tsx index 04033f565..8948ca779 100644 --- a/apps/website/src/components/Footer.tsx +++ b/apps/website/src/components/Footer.tsx @@ -5,18 +5,28 @@ import githubDiscussionsIcon from "../assets/boxicons/bx-discussion.svg?raw"; import matrixIcon from "../assets/boxicons/bx-message-dots.svg?raw"; import redditIcon from "../assets/boxicons/bx-reddit.svg?raw"; import { Link } from "./Button.js"; -import { t } from "../i18n"; +import { LOCALES, t } from "../i18n"; export default function Footer() { return (
    -
    ) diff --git a/apps/website/src/i18n.ts b/apps/website/src/i18n.ts index ecd1290c0..a3305a71c 100644 --- a/apps/website/src/i18n.ts +++ b/apps/website/src/i18n.ts @@ -17,7 +17,7 @@ export const LOCALES: Locale[] = [ { id: "pl", name: "Polski" }, { id: "es", name: "Español" }, { id: "ar", name: "اَلْعَرَبِيَّةُ", rtl: true }, -]; +].toSorted((a, b) => a.name.localeCompare(b.name)); i18next .use(HttpApi) diff --git a/apps/website/src/index.tsx b/apps/website/src/index.tsx index 595b99743..231b7326e 100644 --- a/apps/website/src/index.tsx +++ b/apps/website/src/index.tsx @@ -7,7 +7,6 @@ import { NotFound } from './pages/_404.jsx'; import Footer from './components/Footer.js'; import GetStarted from './pages/GetStarted/get-started.js'; import SupportUs from './pages/SupportUs/SupportUs.js'; -import { LOCALES } from './i18n'; export function App(props: {repoStargazersCount: number}) { return ( @@ -36,17 +35,6 @@ export async function prerender(data) { // This ensures the GitHub API is not called on every page load in the client. const stargazersCount = await getRepoStargazersCount(); - const result = await ssr(); - console.log("Got links ", result.links); - const links: string[] = []; - for (const locale of LOCALES) { - for (const link of result.links?.values() ?? []) { - links.push(locale.id + link); - } - } - return { - ...result, - links - }; + return await ssr(); } From 1a6f5a027f403b0131e1e456aa42989a1da44108 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 18:21:52 +0300 Subject: [PATCH 091/367] chore(website/i18n): add English too --- apps/website/src/i18n.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/website/src/i18n.ts b/apps/website/src/i18n.ts index a3305a71c..0d50259fe 100644 --- a/apps/website/src/i18n.ts +++ b/apps/website/src/i18n.ts @@ -9,6 +9,7 @@ interface Locale { } export const LOCALES: Locale[] = [ + { id: "en", name: "English" }, { id: "ro", name: "Română" }, { id: "zh_TW", name: "繁體中文" }, { id: "fr", name: "Français" }, From 49cf7ae1a3fdd472453596eb38fd25c5a68c52ac Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 25 Oct 2025 18:54:24 +0300 Subject: [PATCH 092/367] feat(website/i18n): render pages by locale --- apps/website/src/components/Header.tsx | 8 ++++-- apps/website/src/index.tsx | 38 ++++++++++++++++++-------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/apps/website/src/components/Header.tsx b/apps/website/src/components/Header.tsx index 07c6a2cba..198fc7f60 100644 --- a/apps/website/src/components/Header.tsx +++ b/apps/website/src/components/Header.tsx @@ -1,13 +1,14 @@ import "./Header.css"; import { Link } from "./Button.js"; import { SocialButtons, SocialButton } from "./Footer.js"; -import { useEffect, useMemo, useState } from "preact/hooks"; +import { useContext, useEffect, useMemo, useState } from "preact/hooks"; import { useLocation } from 'preact-iso'; import DownloadButton from './DownloadButton.js'; import githubIcon from "../assets/boxicons/bx-github.svg?raw"; import Icon from "./Icon.js"; import logoPath from "../assets/icon-color.svg"; import menuIcon from "../assets/boxicons/bx-menu.svg?raw"; +import { LocaleContext } from ".."; interface HeaderLink { url: string; @@ -23,6 +24,7 @@ const HEADER_LINKS: HeaderLink[] = [ export function Header(props: {repoStargazersCount: number}) { const { url } = useLocation(); + const locale = useContext(LocaleContext); const [ mobileMenuShown, setMobileMenuShown ] = useState(false); return ( @@ -48,7 +50,7 @@ export function Header(props: {repoStargazersCount: number}) {
    ); -} \ No newline at end of file +} diff --git a/apps/website/src/index.tsx b/apps/website/src/index.tsx index 231b7326e..df4836381 100644 --- a/apps/website/src/index.tsx +++ b/apps/website/src/index.tsx @@ -2,29 +2,45 @@ import './style.css'; import { FALLBACK_STARGAZERS_COUNT, getRepoStargazersCount } from './github-utils.js'; import { Header } from './components/Header.jsx'; import { Home } from './pages/Home/index.jsx'; -import { LocationProvider, Router, Route, hydrate, prerender as ssr } from 'preact-iso'; +import { LocationProvider, Router, Route, hydrate, prerender as ssr, useLocation } from 'preact-iso'; import { NotFound } from './pages/_404.jsx'; import Footer from './components/Footer.js'; import GetStarted from './pages/GetStarted/get-started.js'; import SupportUs from './pages/SupportUs/SupportUs.js'; +import { createContext } from 'preact'; + +export const LocaleContext = createContext('en'); export function App(props: {repoStargazersCount: number}) { return ( -
    -
    - - - - - - -
    -