From 11b8c3425caa3f3c2b0a9d2b97107cb598e5b2e3 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Thu, 29 May 2025 23:09:52 +0800 Subject: [PATCH 01/37] feat(mindMap): support find --- apps/client/src/widgets/buttons/note_actions.ts | 2 +- apps/client/src/widgets/find.ts | 6 ++++-- apps/client/src/widgets/find_in_html.ts | 2 +- apps/client/src/widgets/type_widgets/mind_map.ts | 9 +++++++++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/buttons/note_actions.ts b/apps/client/src/widgets/buttons/note_actions.ts index 020da9318..6989d8152 100644 --- a/apps/client/src/widgets/buttons/note_actions.ts +++ b/apps/client/src/widgets/buttons/note_actions.ts @@ -186,7 +186,7 @@ export default class NoteActionsWidget extends NoteContextAwareWidget { this.$convertNoteIntoAttachmentButton.toggle(note.isEligibleForConversionToAttachment()); - this.toggleDisabled(this.$findInTextButton, ["text", "code", "book"].includes(note.type)); + this.toggleDisabled(this.$findInTextButton, ["text", "code", "book", "mindMap"].includes(note.type)); this.toggleDisabled(this.$showAttachmentsButton, !isInOptions); this.toggleDisabled(this.$showSourceButton, ["text", "code", "relationMap", "mermaid", "canvas", "mindMap", "geoMap"].includes(note.type)); diff --git a/apps/client/src/widgets/find.ts b/apps/client/src/widgets/find.ts index fc8bebb88..c5b3470b2 100644 --- a/apps/client/src/widgets/find.ts +++ b/apps/client/src/widgets/find.ts @@ -188,7 +188,7 @@ export default class FindWidget extends NoteContextAwareWidget { return; } - if (!["text", "code", "render"].includes(this.note?.type ?? "")) { + if (!["text", "code", "render", "mindMap"].includes(this.note?.type ?? "")) { return; } @@ -250,6 +250,8 @@ export default class FindWidget extends NoteContextAwareWidget { case "text": const readOnly = await this.noteContext?.isReadOnly(); return readOnly ? this.htmlHandler : this.textHandler; + case "mindMap": + return this.htmlHandler; default: console.warn("FindWidget: Unsupported note type for find widget", this.note?.type); } @@ -352,7 +354,7 @@ export default class FindWidget extends NoteContextAwareWidget { } isEnabled() { - return super.isEnabled() && ["text", "code", "render"].includes(this.note?.type ?? ""); + return super.isEnabled() && ["text", "code", "render", "mindMap"].includes(this.note?.type ?? ""); } async entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) { diff --git a/apps/client/src/widgets/find_in_html.ts b/apps/client/src/widgets/find_in_html.ts index 304bea656..0bf2bd376 100644 --- a/apps/client/src/widgets/find_in_html.ts +++ b/apps/client/src/widgets/find_in_html.ts @@ -85,7 +85,7 @@ export default class FindInHtml { if (this.$results?.length) { const $current = this.$results.eq(this.currentIndex); this.$results.removeClass(FIND_RESULT_SELECTED_CSS_CLASSNAME); - $current[0].scrollIntoView(); + $current[0].scrollIntoView({ block: 'center', inline: 'center'}); $current.addClass(FIND_RESULT_SELECTED_CSS_CLASSNAME); } } diff --git a/apps/client/src/widgets/type_widgets/mind_map.ts b/apps/client/src/widgets/type_widgets/mind_map.ts index 18867bc83..898de7a26 100644 --- a/apps/client/src/widgets/type_widgets/mind_map.ts +++ b/apps/client/src/widgets/type_widgets/mind_map.ts @@ -286,4 +286,13 @@ export default class MindMapWidget extends TypeWidget { utils.downloadSvgAsPng(this.note.title, svg); } + async executeWithContentElementEvent({ resolve, ntxId }: EventData<"executeWithContentElement">) { + if (!this.isNoteContext(ntxId)) { + return; + } + + await this.initialized; + + resolve(this.$content.find('.main-node-container')); + } } From 1db36c5aecf6592e7aa0471724369cdffa7677c8 Mon Sep 17 00:00:00 2001 From: Hershey <120335013+HersheyStormBottle@users.noreply.github.com> Date: Thu, 29 May 2025 16:44:30 +0100 Subject: [PATCH 02/37] Update Packaged version for Linux.md - Added link to releases - Added clarity on wget use - Added missing suffix to file in nohup command - Added clarity on nohups function --- .../1. Installing the server/Packaged version for Linux.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md b/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md index 6e3e37309..68697192a 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md +++ b/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md @@ -4,7 +4,8 @@ This is essentially Trilium sources + node modules + node.js runtime packaged in ## Steps * SSH into your server -* use `wget` (or `curl`) to download latest `TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz` (notice `-Server` suffix) on your server. +* Release list at https://github.com/TriliumNext/Notes/releases +* use `wget` (or `curl`) to download latest `TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz` (copy link from release page, notice `-Server` suffix) on your server. * unpack the archive, e.g. using `tar -xf -d TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz` * `cd trilium-linux-x64-server` * `./trilium.sh` @@ -12,7 +13,7 @@ This is essentially Trilium sources + node modules + node.js runtime packaged in The problem with above steps is that once you close the SSH connection, the Trilium process is terminated. To avoid that, you have two options: -* Kill it (with e.g. Ctrl + C) and run again like this: `nohup ./trilium &`. +* Kill it (with e.g. Ctrl + C) and run again like this: `nohup ./trilium.sh &`. (nohup keeps the process running in the background, & runs it in the background) * Configure systemd to automatically run Trilium in the background on every boot ## Configure Trilium to auto-run on boot with systemd @@ -76,4 +77,4 @@ If you get an error like this, you need to either upgrade your glibc (typically ## TLS -Don't forget to [configure TLS](../TLS%20Configuration.md), which is required for secure usage! \ No newline at end of file +Don't forget to [configure TLS](../TLS%20Configuration.md), which is required for secure usage! From e59c97278036fd0ae9ca2b2317de35e3da6e0a10 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Fri, 30 May 2025 09:59:29 +0800 Subject: [PATCH 03/37] fix(e2e): Search works when dismissing a tab --- apps/server-e2e/src/layout/tab_bar.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server-e2e/src/layout/tab_bar.spec.ts b/apps/server-e2e/src/layout/tab_bar.spec.ts index c064dbf57..cb82f8f82 100644 --- a/apps/server-e2e/src/layout/tab_bar.spec.ts +++ b/apps/server-e2e/src/layout/tab_bar.spec.ts @@ -115,7 +115,7 @@ test("Search works when dismissing a tab", async ({ page, context }) => { await app.getTab(0).click(); await app.openAndClickNoteActionMenu("Search in note"); - await expect(app.findAndReplaceWidget).toBeVisible(); + await expect(app.findAndReplaceWidget.first()).toBeVisible(); }); test("New tab displays workspaces", async ({ page, context }) => { From 64234aed9b2f6aead4185aab92005600941d57c5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 09:17:55 +0300 Subject: [PATCH 04/37] docs(release): update --- docs/Release Notes/Release Notes/v0.94.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Release Notes/Release Notes/v0.94.0.md b/docs/Release Notes/Release Notes/v0.94.0.md index 1761b94ad..03dfa000f 100644 --- a/docs/Release Notes/Release Notes/v0.94.0.md +++ b/docs/Release Notes/Release Notes/v0.94.0.md @@ -59,6 +59,7 @@ * [Text notes: add a way to move up and down text lines via a keyboard shortcut](https://github.com/TriliumNext/Notes/issues/1002) by @dogfuntom * [improve tab scroll UX by switching from instant to smooth behavior](https://github.com/TriliumNext/Notes/pull/2030) by @SiriusXT * Calendar view: display calendar view if `#viewType=calendar` is set. +* [Mind map: add search support](https://github.com/TriliumNext/Notes/pull/2055) by @SiriusXT ## 📖 Documentation From dd4cb7de7da14d4d0c34b2375628a89c9e7fb960 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Fri, 30 May 2025 20:28:17 +0800 Subject: [PATCH 05/37] feat(tab-row): Added smooth decay logic to ensure responsive and fluid animation --- apps/client/src/widgets/tab_row.ts | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/tab_row.ts b/apps/client/src/widgets/tab_row.ts index 92b81f6dd..f1ba461f3 100644 --- a/apps/client/src/widgets/tab_row.ts +++ b/apps/client/src/widgets/tab_row.ts @@ -378,16 +378,37 @@ export default class TabRowWidget extends BasicWidget { } scrollTabContainer(direction: number, behavior: ScrollBehavior = "smooth") { - const currentScrollLeft = this.$tabScrollingContainer[0]?.scrollLeft; - this.$tabScrollingContainer[0].scrollTo({ - left: currentScrollLeft + direction, + this.$tabScrollingContainer[0].scrollBy({ + left: direction, behavior }); }; setupScrollEvents() { + let deltaX = 0; + let isScrolling = false; + const stepScroll = () => { + if (Math.abs(deltaX) > 5) { + const step = Math.round(deltaX * 0.2); + deltaX -= step; + this.scrollTabContainer(step, "instant"); + requestAnimationFrame(stepScroll); + } else { + this.scrollTabContainer(deltaX, "instant"); + deltaX = 0; + isScrolling = false; + } + }; this.$tabScrollingContainer[0].addEventListener('wheel', (event) => { - this.scrollTabContainer(event.deltaY * 1.5); + if (!event.shiftKey || event.deltaX === 0) { + event.preventDefault(); + // Clamp deltaX between TAB_CONTAINER_MIN_WIDTH and TAB_CONTAINER_MIN_WIDTH * 3 + deltaX += Math.sign(event.deltaY) * Math.max(Math.min(Math.abs(event.deltaY), TAB_CONTAINER_MIN_WIDTH * 3), TAB_CONTAINER_MIN_WIDTH); + if (!isScrolling) { + isScrolling = true; + stepScroll(); + } + } }); this.$scrollButtonLeft[0].addEventListener('click', () => this.scrollTabContainer(-200)); From 7010472bea4aae6f10c634757ee41b9186176993 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Fri, 30 May 2025 20:40:33 +0800 Subject: [PATCH 06/37] feat(tab): enable Shift + Wheel to switch tabs --- apps/client/src/widgets/tab_row.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/tab_row.ts b/apps/client/src/widgets/tab_row.ts index f1ba461f3..6d0fc2fba 100644 --- a/apps/client/src/widgets/tab_row.ts +++ b/apps/client/src/widgets/tab_row.ts @@ -399,8 +399,8 @@ export default class TabRowWidget extends BasicWidget { isScrolling = false; } }; - this.$tabScrollingContainer[0].addEventListener('wheel', (event) => { - if (!event.shiftKey || event.deltaX === 0) { + this.$tabScrollingContainer[0].addEventListener('wheel', async (event) => { + if (!event.shiftKey && event.deltaX === 0) { event.preventDefault(); // Clamp deltaX between TAB_CONTAINER_MIN_WIDTH and TAB_CONTAINER_MIN_WIDTH * 3 deltaX += Math.sign(event.deltaY) * Math.max(Math.min(Math.abs(event.deltaY), TAB_CONTAINER_MIN_WIDTH * 3), TAB_CONTAINER_MIN_WIDTH); @@ -408,6 +408,14 @@ export default class TabRowWidget extends BasicWidget { isScrolling = true; stepScroll(); } + } else if (event.shiftKey) { + event.preventDefault(); + if (event.deltaY > 0) { + await appContext.tabManager.activateNextTabCommand(); + } else { + await appContext.tabManager.activatePreviousTabCommand(); + } + this.activeTabEl.scrollIntoView(); } }); From b93e44a38ff0f5f0d9346dd3377f3b02e4d98741 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 17:38:39 +0300 Subject: [PATCH 07/37] fix(llm): button shown even if disabled --- .../widgets/buttons/create_ai_chat_button.ts | 27 ------------------- .../services/hidden_subtree_launcherbar.ts | 2 +- 2 files changed, 1 insertion(+), 28 deletions(-) delete mode 100644 apps/client/src/widgets/buttons/create_ai_chat_button.ts diff --git a/apps/client/src/widgets/buttons/create_ai_chat_button.ts b/apps/client/src/widgets/buttons/create_ai_chat_button.ts deleted file mode 100644 index 1ccd52cda..000000000 --- a/apps/client/src/widgets/buttons/create_ai_chat_button.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { t } from "../../services/i18n.js"; -import options from "../../services/options.js"; -import CommandButtonWidget from "./command_button.js"; - -export default class CreateAiChatButton extends CommandButtonWidget { - constructor() { - super(); - - this.icon("bx bx-bot") - .title(t("ai.create_new_ai_chat")) - .titlePlacement("bottom") - .command("createAiChat") - .class("icon-action"); - } - - isEnabled() { - return options.get("aiEnabled") === "true"; - } - - async refreshWithNote() { - if (this.isEnabled()) { - this.$widget.show(); - } else { - this.$widget.hide(); - } - } -} diff --git a/apps/server/src/services/hidden_subtree_launcherbar.ts b/apps/server/src/services/hidden_subtree_launcherbar.ts index 633dbe363..3ddef26df 100644 --- a/apps/server/src/services/hidden_subtree_launcherbar.ts +++ b/apps/server/src/services/hidden_subtree_launcherbar.ts @@ -72,7 +72,7 @@ export default function buildLaunchBarConfig() { id: "_lbLlmChat", title: t("hidden-subtree.llm-chat-title"), type: "launcher", - command: "createAiChat", + builtinWidget: "aiChatLauncher", icon: "bx bx-bot", attributes: [ { type: "label", name: "desktopOnly" } From 939469ba5465c5cab3d3d23b9a429942a09153b1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 19:22:51 +0300 Subject: [PATCH 08/37] style(next): fix dropdown container while app is loading --- apps/client/src/stylesheets/style.css | 2 +- apps/client/src/stylesheets/theme-next/base.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index b1b9ee921..5e1bebfa1 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -328,7 +328,7 @@ button kbd { --bs-dropdown-zindex: 999; } -body.desktop .dropdown-menu { +body.desktop .dropdown-menu.show { border: 1px solid var(--dropdown-border-color); box-shadow: 0px 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity)); animation: dropdown-menu-opening 100ms ease-in; diff --git a/apps/client/src/stylesheets/theme-next/base.css b/apps/client/src/stylesheets/theme-next/base.css index 9058328c3..d98750087 100644 --- a/apps/client/src/stylesheets/theme-next/base.css +++ b/apps/client/src/stylesheets/theme-next/base.css @@ -89,7 +89,7 @@ * supported when this class is used. */ - .dropdown-menu:not(.static) { + .dropdown-menu.show:not(.static) { border-radius: var(--dropdown-border-radius); padding: var(--menu-padding-size) !important; font-size: 0.9rem !important; From 8994f537dca736ca6831c114e4db592f6c007b12 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 21:32:35 +0300 Subject: [PATCH 09/37] fix(migration): use bundleable migrations This fixes TypeScript migrations, which were not being run correctly even in previous versions. On the ESBuild version, neither SQL migrations worked due to the fact that they were not being bundled. --- .../db/migrations/0215__content_structure.sql | 13 - .../migrations/0217__drop_content_tables.sql | 4 - ...0218__rename_note_revision_to_revision.sql | 26 -- .../db/migrations/0219__attachments.sql | 23 -- ..._remove_hideIncludedImages_main_option.sql | 2 - ...2__rename_openTabs_to_openNoteContexts.sql | 2 - .../src/assets/db/migrations/0223__NOOP.sql | 1 - .../db/migrations/0224__fix_blobIds.sql | 14 - .../0225__create_blobId_indices.sql | 3 - .../0226__rename_noteSize_label.sql | 1 - .../0227__disable_image_compression.sql | 2 - .../db/migrations/0228__fix_blobIds.sql | 17 - .../0229__add_oauth_user_data_table.sql | 14 - .../db/migrations/0230__vector_embeddings.sql | 46 --- .../db/migrations/0231__session_store.sql | 5 - .../0216__move_content_into_blobs.ts | 4 +- .../0220__migrate_images_to_attachments.ts | 10 +- apps/server/src/migrations/migrations.ts | 295 ++++++++++++++++++ apps/server/src/services/migration.ts | 71 ++--- apps/server/src/services/resource_dir.ts | 8 - 20 files changed, 326 insertions(+), 235 deletions(-) delete mode 100644 apps/server/src/assets/db/migrations/0215__content_structure.sql delete mode 100644 apps/server/src/assets/db/migrations/0217__drop_content_tables.sql delete mode 100644 apps/server/src/assets/db/migrations/0218__rename_note_revision_to_revision.sql delete mode 100644 apps/server/src/assets/db/migrations/0219__attachments.sql delete mode 100644 apps/server/src/assets/db/migrations/0221__remove_hideIncludedImages_main_option.sql delete mode 100644 apps/server/src/assets/db/migrations/0222__rename_openTabs_to_openNoteContexts.sql delete mode 100644 apps/server/src/assets/db/migrations/0223__NOOP.sql delete mode 100644 apps/server/src/assets/db/migrations/0224__fix_blobIds.sql delete mode 100644 apps/server/src/assets/db/migrations/0225__create_blobId_indices.sql delete mode 100644 apps/server/src/assets/db/migrations/0226__rename_noteSize_label.sql delete mode 100644 apps/server/src/assets/db/migrations/0227__disable_image_compression.sql delete mode 100644 apps/server/src/assets/db/migrations/0228__fix_blobIds.sql delete mode 100644 apps/server/src/assets/db/migrations/0229__add_oauth_user_data_table.sql delete mode 100644 apps/server/src/assets/db/migrations/0230__vector_embeddings.sql delete mode 100644 apps/server/src/assets/db/migrations/0231__session_store.sql rename apps/server/src/{assets/db => }/migrations/0216__move_content_into_blobs.ts (97%) rename apps/server/src/{assets/db => }/migrations/0220__migrate_images_to_attachments.ts (76%) create mode 100644 apps/server/src/migrations/migrations.ts diff --git a/apps/server/src/assets/db/migrations/0215__content_structure.sql b/apps/server/src/assets/db/migrations/0215__content_structure.sql deleted file mode 100644 index da4afcf6b..000000000 --- a/apps/server/src/assets/db/migrations/0215__content_structure.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE IF NOT EXISTS "blobs" ( - `blobId` TEXT NOT NULL, - `content` TEXT NULL DEFAULT NULL, - `dateModified` TEXT NOT NULL, - `utcDateModified` TEXT NOT NULL, - PRIMARY KEY(`blobId`) -); - -ALTER TABLE notes ADD blobId TEXT DEFAULT NULL; -ALTER TABLE note_revisions ADD blobId TEXT DEFAULT NULL; - -CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId); -CREATE INDEX IF NOT EXISTS IDX_note_revisions_blobId on note_revisions (blobId); diff --git a/apps/server/src/assets/db/migrations/0217__drop_content_tables.sql b/apps/server/src/assets/db/migrations/0217__drop_content_tables.sql deleted file mode 100644 index 549fd6919..000000000 --- a/apps/server/src/assets/db/migrations/0217__drop_content_tables.sql +++ /dev/null @@ -1,4 +0,0 @@ -DROP TABLE note_contents; -DROP TABLE note_revision_contents; - -DELETE FROM entity_changes WHERE entityName IN ('note_contents', 'note_revision_contents'); diff --git a/apps/server/src/assets/db/migrations/0218__rename_note_revision_to_revision.sql b/apps/server/src/assets/db/migrations/0218__rename_note_revision_to_revision.sql deleted file mode 100644 index c67c52393..000000000 --- a/apps/server/src/assets/db/migrations/0218__rename_note_revision_to_revision.sql +++ /dev/null @@ -1,26 +0,0 @@ -CREATE TABLE IF NOT EXISTS "revisions" (`revisionId` TEXT NOT NULL PRIMARY KEY, - `noteId` TEXT NOT NULL, - type TEXT DEFAULT '' NOT NULL, - mime TEXT DEFAULT '' NOT NULL, - `title` TEXT NOT NULL, - `isProtected` INT NOT NULL DEFAULT 0, - blobId TEXT DEFAULT NULL, - `utcDateLastEdited` TEXT NOT NULL, - `utcDateCreated` TEXT NOT NULL, - `utcDateModified` TEXT NOT NULL, - `dateLastEdited` TEXT NOT NULL, - `dateCreated` TEXT NOT NULL); - -INSERT INTO revisions (revisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId) -SELECT noteRevisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId FROM note_revisions; - -DROP TABLE note_revisions; - -CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`); -CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`); -CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`); -CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`); -CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`); -CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId); - -UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions'; diff --git a/apps/server/src/assets/db/migrations/0219__attachments.sql b/apps/server/src/assets/db/migrations/0219__attachments.sql deleted file mode 100644 index 246360bfe..000000000 --- a/apps/server/src/assets/db/migrations/0219__attachments.sql +++ /dev/null @@ -1,23 +0,0 @@ -CREATE TABLE IF NOT EXISTS "attachments" -( - attachmentId TEXT not null primary key, - ownerId TEXT not null, - role TEXT not null, - mime TEXT not null, - title TEXT not null, - isProtected INT not null DEFAULT 0, - position INT default 0 not null, - blobId TEXT DEFAULT null, - dateModified TEXT NOT NULL, - utcDateModified TEXT not null, - utcDateScheduledForErasureSince TEXT DEFAULT NULL, - isDeleted INT not null, - deleteId TEXT DEFAULT NULL); - -CREATE INDEX IDX_attachments_ownerId_role - on attachments (ownerId, role); - -CREATE INDEX IDX_attachments_utcDateScheduledForErasureSince - on attachments (utcDateScheduledForErasureSince); - -CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId); diff --git a/apps/server/src/assets/db/migrations/0221__remove_hideIncludedImages_main_option.sql b/apps/server/src/assets/db/migrations/0221__remove_hideIncludedImages_main_option.sql deleted file mode 100644 index 5e4ec083b..000000000 --- a/apps/server/src/assets/db/migrations/0221__remove_hideIncludedImages_main_option.sql +++ /dev/null @@ -1,2 +0,0 @@ -DELETE FROM options WHERE name = 'hideIncludedImages_main'; -DELETE FROM entity_changes WHERE entityName = 'options' AND entityId = 'hideIncludedImages_main'; \ No newline at end of file diff --git a/apps/server/src/assets/db/migrations/0222__rename_openTabs_to_openNoteContexts.sql b/apps/server/src/assets/db/migrations/0222__rename_openTabs_to_openNoteContexts.sql deleted file mode 100644 index c4d719bce..000000000 --- a/apps/server/src/assets/db/migrations/0222__rename_openTabs_to_openNoteContexts.sql +++ /dev/null @@ -1,2 +0,0 @@ -UPDATE options SET name = 'openNoteContexts' WHERE name = 'openTabs'; -UPDATE entity_changes SET entityId = 'openNoteContexts' WHERE entityName = 'options' AND entityId = 'openTabs'; diff --git a/apps/server/src/assets/db/migrations/0223__NOOP.sql b/apps/server/src/assets/db/migrations/0223__NOOP.sql deleted file mode 100644 index e0ac49d1e..000000000 --- a/apps/server/src/assets/db/migrations/0223__NOOP.sql +++ /dev/null @@ -1 +0,0 @@ -SELECT 1; diff --git a/apps/server/src/assets/db/migrations/0224__fix_blobIds.sql b/apps/server/src/assets/db/migrations/0224__fix_blobIds.sql deleted file mode 100644 index 725e9d1f2..000000000 --- a/apps/server/src/assets/db/migrations/0224__fix_blobIds.sql +++ /dev/null @@ -1,14 +0,0 @@ -UPDATE blobs SET blobId = REPLACE(blobId, '+', 'X'); -UPDATE blobs SET blobId = REPLACE(blobId, '/', 'Y'); - -UPDATE notes SET blobId = REPLACE(blobId, '+', 'X'); -UPDATE notes SET blobId = REPLACE(blobId, '/', 'Y'); - -UPDATE attachments SET blobId = REPLACE(blobId, '+', 'X'); -UPDATE attachments SET blobId = REPLACE(blobId, '/', 'Y'); - -UPDATE revisions SET blobId = REPLACE(blobId, '+', 'X'); -UPDATE revisions SET blobId = REPLACE(blobId, '/', 'Y'); - -UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'X') WHERE entityName = 'blobs'; -UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'Y') WHERE entityName = 'blobs'; diff --git a/apps/server/src/assets/db/migrations/0225__create_blobId_indices.sql b/apps/server/src/assets/db/migrations/0225__create_blobId_indices.sql deleted file mode 100644 index bd3445447..000000000 --- a/apps/server/src/assets/db/migrations/0225__create_blobId_indices.sql +++ /dev/null @@ -1,3 +0,0 @@ -CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId); -CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId); -CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId); diff --git a/apps/server/src/assets/db/migrations/0226__rename_noteSize_label.sql b/apps/server/src/assets/db/migrations/0226__rename_noteSize_label.sql deleted file mode 100644 index cd2239af4..000000000 --- a/apps/server/src/assets/db/migrations/0226__rename_noteSize_label.sql +++ /dev/null @@ -1 +0,0 @@ -UPDATE attributes SET value = 'contentAndAttachmentsAndRevisionsSize' WHERE name = 'orderBy' AND value = 'noteSize'; diff --git a/apps/server/src/assets/db/migrations/0227__disable_image_compression.sql b/apps/server/src/assets/db/migrations/0227__disable_image_compression.sql deleted file mode 100644 index a5350deff..000000000 --- a/apps/server/src/assets/db/migrations/0227__disable_image_compression.sql +++ /dev/null @@ -1,2 +0,0 @@ --- emergency disabling of image compression since it appears to make problems in migration to 0.61 -UPDATE options SET value = 'false' WHERE name = 'compressImages'; diff --git a/apps/server/src/assets/db/migrations/0228__fix_blobIds.sql b/apps/server/src/assets/db/migrations/0228__fix_blobIds.sql deleted file mode 100644 index 339a6100a..000000000 --- a/apps/server/src/assets/db/migrations/0228__fix_blobIds.sql +++ /dev/null @@ -1,17 +0,0 @@ --- + is normally replaced by X and / by Y, but this can temporarily cause UNIQUE key exception --- this might create blob duplicates, but cleanup will eventually take care of it - -UPDATE blobs SET blobId = REPLACE(blobId, '+', 'A'); -UPDATE blobs SET blobId = REPLACE(blobId, '/', 'B'); - -UPDATE notes SET blobId = REPLACE(blobId, '+', 'A'); -UPDATE notes SET blobId = REPLACE(blobId, '/', 'B'); - -UPDATE attachments SET blobId = REPLACE(blobId, '+', 'A'); -UPDATE attachments SET blobId = REPLACE(blobId, '/', 'B'); - -UPDATE revisions SET blobId = REPLACE(blobId, '+', 'A'); -UPDATE revisions SET blobId = REPLACE(blobId, '/', 'B'); - -UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'A') WHERE entityName = 'blobs'; -UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'B') WHERE entityName = 'blobs'; diff --git a/apps/server/src/assets/db/migrations/0229__add_oauth_user_data_table.sql b/apps/server/src/assets/db/migrations/0229__add_oauth_user_data_table.sql deleted file mode 100644 index ea2db4ef9..000000000 --- a/apps/server/src/assets/db/migrations/0229__add_oauth_user_data_table.sql +++ /dev/null @@ -1,14 +0,0 @@ --- Add the oauth user data table -CREATE TABLE IF NOT EXISTS "user_data" -( - tmpID INT, - username TEXT, - email TEXT, - userIDEncryptedDataKey TEXT, - userIDVerificationHash TEXT, - salt TEXT, - derivedKey TEXT, - isSetup TEXT DEFAULT "false", - UNIQUE (tmpID), - PRIMARY KEY (tmpID) -); \ No newline at end of file diff --git a/apps/server/src/assets/db/migrations/0230__vector_embeddings.sql b/apps/server/src/assets/db/migrations/0230__vector_embeddings.sql deleted file mode 100644 index 45f14fddf..000000000 --- a/apps/server/src/assets/db/migrations/0230__vector_embeddings.sql +++ /dev/null @@ -1,46 +0,0 @@ --- Add tables for vector embeddings storage and management --- This migration adds embedding support to the main document.db database - --- Store embeddings for notes -CREATE TABLE IF NOT EXISTS "note_embeddings" ( - "embedId" TEXT NOT NULL PRIMARY KEY, - "noteId" TEXT NOT NULL, - "providerId" TEXT NOT NULL, - "modelId" TEXT NOT NULL, - "dimension" INTEGER NOT NULL, - "embedding" BLOB NOT NULL, - "version" INTEGER NOT NULL DEFAULT 1, - "dateCreated" TEXT NOT NULL, - "utcDateCreated" TEXT NOT NULL, - "dateModified" TEXT NOT NULL, - "utcDateModified" TEXT NOT NULL -); - -CREATE INDEX "IDX_note_embeddings_noteId" ON "note_embeddings" ("noteId"); -CREATE INDEX "IDX_note_embeddings_providerId_modelId" ON "note_embeddings" ("providerId", "modelId"); - --- Table to track which notes need embedding updates -CREATE TABLE IF NOT EXISTS "embedding_queue" ( - "noteId" TEXT NOT NULL PRIMARY KEY, - "operation" TEXT NOT NULL, -- CREATE, UPDATE, DELETE - "dateQueued" TEXT NOT NULL, - "utcDateQueued" TEXT NOT NULL, - "priority" INTEGER NOT NULL DEFAULT 0, - "attempts" INTEGER NOT NULL DEFAULT 0, - "lastAttempt" TEXT NULL, - "error" TEXT NULL, - "failed" INTEGER NOT NULL DEFAULT 0, - "isProcessing" INTEGER NOT NULL DEFAULT 0 -); - --- Table to store embedding provider configurations -CREATE TABLE IF NOT EXISTS "embedding_providers" ( - "providerId" TEXT NOT NULL PRIMARY KEY, - "name" TEXT NOT NULL, - "priority" INTEGER NOT NULL DEFAULT 0, - "config" TEXT NOT NULL, -- JSON config object - "dateCreated" TEXT NOT NULL, - "utcDateCreated" TEXT NOT NULL, - "dateModified" TEXT NOT NULL, - "utcDateModified" TEXT NOT NULL -); \ No newline at end of file diff --git a/apps/server/src/assets/db/migrations/0231__session_store.sql b/apps/server/src/assets/db/migrations/0231__session_store.sql deleted file mode 100644 index de245d25c..000000000 --- a/apps/server/src/assets/db/migrations/0231__session_store.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE IF NOT EXISTS sessions ( - id TEXT PRIMARY KEY, - data TEXT, - expires INTEGER -); \ No newline at end of file diff --git a/apps/server/src/assets/db/migrations/0216__move_content_into_blobs.ts b/apps/server/src/migrations/0216__move_content_into_blobs.ts similarity index 97% rename from apps/server/src/assets/db/migrations/0216__move_content_into_blobs.ts rename to apps/server/src/migrations/0216__move_content_into_blobs.ts index 6251e70aa..47d4c5761 100644 --- a/apps/server/src/assets/db/migrations/0216__move_content_into_blobs.ts +++ b/apps/server/src/migrations/0216__move_content_into_blobs.ts @@ -1,5 +1,5 @@ -import sql from "../../../services/sql.js"; -import utils from "../../../services/utils.js"; +import sql from "../services/sql.js"; +import utils from "../services/utils.js"; interface NoteContentsRow { noteId: string; diff --git a/apps/server/src/assets/db/migrations/0220__migrate_images_to_attachments.ts b/apps/server/src/migrations/0220__migrate_images_to_attachments.ts similarity index 76% rename from apps/server/src/assets/db/migrations/0220__migrate_images_to_attachments.ts rename to apps/server/src/migrations/0220__migrate_images_to_attachments.ts index 197246273..9e06644c3 100644 --- a/apps/server/src/assets/db/migrations/0220__migrate_images_to_attachments.ts +++ b/apps/server/src/migrations/0220__migrate_images_to_attachments.ts @@ -1,8 +1,8 @@ -import becca from "../../../becca/becca.js"; -import becca_loader from "../../../becca/becca_loader.js"; -import cls from "../../../services/cls.js"; -import log from "../../../services/log.js"; -import sql from "../../../services/sql.js"; +import becca from "../becca/becca.js"; +import becca_loader from "../becca/becca_loader.js"; +import cls from "../services/cls.js"; +import log from "../services/log.js"; +import sql from "../services/sql.js"; export default () => { cls.init(() => { diff --git a/apps/server/src/migrations/migrations.ts b/apps/server/src/migrations/migrations.ts new file mode 100644 index 000000000..1ac414afe --- /dev/null +++ b/apps/server/src/migrations/migrations.ts @@ -0,0 +1,295 @@ +/** + * @module + * + * Contains all the migrations that are run on the database. + */ + +// Migrations should be kept in descending order, so the latest migration is first. +const MIGRATIONS: (SqlMigration | JsMigration)[] = [ + // Session store + { + version: 231, + sql: /*sql*/`\ + CREATE TABLE IF NOT EXISTS sessions ( + id TEXT PRIMARY KEY, + data TEXT, + expires INTEGER + ); + ` + }, + // Add tables for vector embeddings storage and management + // This migration adds embedding support to the main document.db database + { + version: 230, + sql: /*sql*/`\ + -- Store embeddings for notes + CREATE TABLE IF NOT EXISTS "note_embeddings" ( + "embedId" TEXT NOT NULL PRIMARY KEY, + "noteId" TEXT NOT NULL, + "providerId" TEXT NOT NULL, + "modelId" TEXT NOT NULL, + "dimension" INTEGER NOT NULL, + "embedding" BLOB NOT NULL, + "version" INTEGER NOT NULL DEFAULT 1, + "dateCreated" TEXT NOT NULL, + "utcDateCreated" TEXT NOT NULL, + "dateModified" TEXT NOT NULL, + "utcDateModified" TEXT NOT NULL + ); + + CREATE INDEX "IDX_note_embeddings_noteId" ON "note_embeddings" ("noteId"); + CREATE INDEX "IDX_note_embeddings_providerId_modelId" ON "note_embeddings" ("providerId", "modelId"); + + -- Table to track which notes need embedding updates + CREATE TABLE IF NOT EXISTS "embedding_queue" ( + "noteId" TEXT NOT NULL PRIMARY KEY, + "operation" TEXT NOT NULL, -- CREATE, UPDATE, DELETE + "dateQueued" TEXT NOT NULL, + "utcDateQueued" TEXT NOT NULL, + "priority" INTEGER NOT NULL DEFAULT 0, + "attempts" INTEGER NOT NULL DEFAULT 0, + "lastAttempt" TEXT NULL, + "error" TEXT NULL, + "failed" INTEGER NOT NULL DEFAULT 0, + "isProcessing" INTEGER NOT NULL DEFAULT 0 + ); + + -- Table to store embedding provider configurations + CREATE TABLE IF NOT EXISTS "embedding_providers" ( + "providerId" TEXT NOT NULL PRIMARY KEY, + "name" TEXT NOT NULL, + "priority" INTEGER NOT NULL DEFAULT 0, + "config" TEXT NOT NULL, -- JSON config object + "dateCreated" TEXT NOT NULL, + "utcDateCreated" TEXT NOT NULL, + "dateModified" TEXT NOT NULL, + "utcDateModified" TEXT NOT NULL + ); + ` + }, + + // add the oauth user data table + { + version: 229, + sql: /*sql*/`\ + CREATE TABLE IF NOT EXISTS "user_data" + ( + tmpID INT, + username TEXT, + email TEXT, + userIDEncryptedDataKey TEXT, + userIDVerificationHash TEXT, + salt TEXT, + derivedKey TEXT, + isSetup TEXT DEFAULT "false", + UNIQUE (tmpID), + PRIMARY KEY (tmpID) + ); + ` + }, + // fix blob IDs + { + version: 228, + sql: /*sql*/`\ + -- + is normally replaced by X and / by Y, but this can temporarily cause UNIQUE key exception + -- this might create blob duplicates, but cleanup will eventually take care of it + + UPDATE blobs SET blobId = REPLACE(blobId, '+', 'A'); + UPDATE blobs SET blobId = REPLACE(blobId, '/', 'B'); + + UPDATE notes SET blobId = REPLACE(blobId, '+', 'A'); + UPDATE notes SET blobId = REPLACE(blobId, '/', 'B'); + + UPDATE attachments SET blobId = REPLACE(blobId, '+', 'A'); + UPDATE attachments SET blobId = REPLACE(blobId, '/', 'B'); + + UPDATE revisions SET blobId = REPLACE(blobId, '+', 'A'); + UPDATE revisions SET blobId = REPLACE(blobId, '/', 'B'); + + UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'A') WHERE entityName = 'blobs'; + UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'B') WHERE entityName = 'blobs'; + ` + }, + // disable image compression + { + version: 227, + sql: /*sql*/`\ + -- emergency disabling of image compression since it appears to make problems in migration to 0.61 + UPDATE options SET value = 'false' WHERE name = 'compressImages'; + ` + }, + // rename note size label + { + version: 226, + sql: /*sql*/`\ + UPDATE attributes SET value = 'contentAndAttachmentsAndRevisionsSize' WHERE name = 'orderBy' AND value = 'noteSize'; + ` + }, + // create blob ID indices + { + version: 225, + sql: /*sql*/`\ + CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId); + CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId); + CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId); + ` + }, + // fix blob IDs + { + version: 224, + sql: /*sql*/`\ + UPDATE blobs SET blobId = REPLACE(blobId, '+', 'X'); + UPDATE blobs SET blobId = REPLACE(blobId, '/', 'Y'); + + UPDATE notes SET blobId = REPLACE(blobId, '+', 'X'); + UPDATE notes SET blobId = REPLACE(blobId, '/', 'Y'); + + UPDATE attachments SET blobId = REPLACE(blobId, '+', 'X'); + UPDATE attachments SET blobId = REPLACE(blobId, '/', 'Y'); + + UPDATE revisions SET blobId = REPLACE(blobId, '+', 'X'); + UPDATE revisions SET blobId = REPLACE(blobId, '/', 'Y'); + + UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'X') WHERE entityName = 'blobs'; + UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'Y') WHERE entityName = 'blobs'; + ` + }, + // no operation + { + version: 223, + sql: /*sql*/`\ + SELECT 1; + ` + }, + // rename open tabs to open note contexts + { + version: 222, + sql: /*sql*/`\ + UPDATE options SET name = 'openNoteContexts' WHERE name = 'openTabs'; + UPDATE entity_changes SET entityId = 'openNoteContexts' WHERE entityName = 'options' AND entityId = 'openTabs'; + ` + }, + // remove hide included images option + { + version: 221, + sql: /*sql*/`\ + DELETE FROM options WHERE name = 'hideIncludedImages_main'; + DELETE FROM entity_changes WHERE entityName = 'options' AND entityId = 'hideIncludedImages_main'; + ` + }, + // migrate images to attachments + { + version: 220, + module: () => import("./0220__migrate_images_to_attachments.js") + }, + // attachments + { + version: 219, + sql: /*sql*/`\ + CREATE TABLE IF NOT EXISTS "attachments" + ( + attachmentId TEXT not null primary key, + ownerId TEXT not null, + role TEXT not null, + mime TEXT not null, + title TEXT not null, + isProtected INT not null DEFAULT 0, + position INT default 0 not null, + blobId TEXT DEFAULT null, + dateModified TEXT NOT NULL, + utcDateModified TEXT not null, + utcDateScheduledForErasureSince TEXT DEFAULT NULL, + isDeleted INT not null, + deleteId TEXT DEFAULT NULL); + + CREATE INDEX IDX_attachments_ownerId_role + on attachments (ownerId, role); + + CREATE INDEX IDX_attachments_utcDateScheduledForErasureSince + on attachments (utcDateScheduledForErasureSince); + + CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId); + ` + }, + // rename note revision to revision + { + version: 218, + sql: /*sql*/`\ + CREATE TABLE IF NOT EXISTS "revisions" ( + revisionId TEXT NOT NULL PRIMARY KEY, + noteId TEXT NOT NULL, + type TEXT DEFAULT '' NOT NULL, + mime TEXT DEFAULT '' NOT NULL, + title TEXT NOT NULL, + isProtected INT NOT NULL DEFAULT 0, + blobId TEXT DEFAULT NULL, + utcDateLastEdited TEXT NOT NULL, + utcDateCreated TEXT NOT NULL, + utcDateModified TEXT NOT NULL, + dateLastEdited TEXT NOT NULL, + dateCreated TEXT NOT NULL + ); + + INSERT INTO revisions (revisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId) + SELECT noteRevisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId FROM note_revisions; + + DROP TABLE note_revisions; + + CREATE INDEX IDX_revisions_noteId ON revisions (noteId); + CREATE INDEX IDX_revisions_utcDateCreated ON revisions (utcDateCreated); + CREATE INDEX IDX_revisions_utcDateLastEdited ON revisions (utcDateLastEdited); + CREATE INDEX IDX_revisions_dateCreated ON revisions (dateCreated); + CREATE INDEX IDX_revisions_dateLastEdited ON revisions (dateLastEdited); + CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId); + + UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions'; + ` + }, + // drop content tables + { + version: 217, + sql: /*sql*/`\ + DROP TABLE note_contents; + DROP TABLE note_revision_contents; + + DELETE FROM entity_changes WHERE entityName IN ('note_contents', 'note_revision_contents'); + ` + }, + { + version: 216, + module: async () => import("./0216__move_content_into_blobs.js") + }, + // content structure + { + version: 215, + sql: /*sql*/`\ + CREATE TABLE IF NOT EXISTS "blobs" ( + blobId TEXT NOT NULL, + content TEXT NULL DEFAULT NULL, + dateModified TEXT NOT NULL, + utcDateModified TEXT NOT NULL, + PRIMARY KEY (blobId) + ); + + ALTER TABLE notes ADD blobId TEXT DEFAULT NULL; + ALTER TABLE note_revisions ADD blobId TEXT DEFAULT NULL; + + CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId); + CREATE INDEX IF NOT EXISTS IDX_note_revisions_blobId on note_revisions (blobId); + ` + } +]; + +export default MIGRATIONS; + +interface Migration { + version: number; +} + +interface SqlMigration extends Migration { + sql: string; +} + +interface JsMigration extends Migration { + module: () => Promise<{ default: () => void }>; +} diff --git a/apps/server/src/services/migration.ts b/apps/server/src/services/migration.ts index 2271b5de4..57ad890c6 100644 --- a/apps/server/src/services/migration.ts +++ b/apps/server/src/services/migration.ts @@ -1,25 +1,19 @@ import backupService from "./backup.js"; import sql from "./sql.js"; -import fs from "fs"; import log from "./log.js"; import { crash } from "./utils.js"; -import resourceDir from "./resource_dir.js"; import appInfo from "./app_info.js"; import cls from "./cls.js"; import { t } from "i18next"; -import { join } from "path"; +import MIGRATIONS from "../migrations/migrations.js"; interface MigrationInfo { dbVersion: number; - name: string; - file: string; - type: "sql" | "js" | "ts" | string; /** - * Contains the JavaScript/TypeScript migration as a callback method that must be called to trigger the migration. - * The method cannot be async since it runs in an SQL transaction. - * For SQL migrations, this value is falsy. + * If string, then the migration is an SQL script that will be executed. + * If a function, then the migration is a JavaScript/TypeScript module that will be executed. */ - module?: () => void; + migration: string | (() => void); } async function migrate() { @@ -37,7 +31,6 @@ async function migrate() { ); const migrations = await prepareMigrations(currentDbVersion); - migrations.sort((a, b) => a.dbVersion - b.dbVersion); // all migrations are executed in one transaction - upgrade either succeeds, or the user can stay at the old version // otherwise if half of the migrations succeed, user can't use any version - DB is too "new" for the old app, @@ -76,53 +69,37 @@ async function migrate() { } async function prepareMigrations(currentDbVersion: number): Promise { - const migrationFiles = fs.readdirSync(resourceDir.MIGRATIONS_DIR) ?? []; + MIGRATIONS.sort((a, b) => a.version - b.version); const migrations: MigrationInfo[] = []; - for (const file of migrationFiles) { - const match = file.match(/^([0-9]{4})__([a-zA-Z0-9_ ]+)\.(sql|js|ts)$/); - if (!match) { - continue; - } - - const dbVersion = parseInt(match[1]); + for (const migration of MIGRATIONS) { + const dbVersion = migration.version; if (dbVersion > currentDbVersion) { - const name = match[2]; - const type = match[3]; - - const migration: MigrationInfo = { - dbVersion: dbVersion, - name: name, - file: file, - type: type - }; - - if (type === "js" || type === "ts") { + if ("sql" in migration) { + migrations.push({ + dbVersion, + migration: migration.sql + }); + } else { // Due to ESM imports, the migration file needs to be imported asynchronously and thus cannot be loaded at migration time (since migration is not asynchronous). // As such we have to preload the ESM. - // Going back to the original approach but making it webpack-compatible - const importPath = join(resourceDir.MIGRATIONS_DIR, file); - migration.module = (await import(importPath)).default; + migrations.push({ + dbVersion, + migration: (await migration.module()).default + }); } - - migrations.push(migration); } } return migrations; } -function executeMigration(mig: MigrationInfo) { - if (mig.module) { - console.log("Migration with JS module"); - mig.module(); - } else if (mig.type === "sql") { - const migrationSql = fs.readFileSync(`${resourceDir.MIGRATIONS_DIR}/${mig.file}`).toString("utf8"); - - console.log(`Migration with SQL script: ${migrationSql}`); - - sql.executeScript(migrationSql); +function executeMigration({ migration }: MigrationInfo) { + if (typeof migration === "string") { + console.log(`Migration with SQL script: ${migration}`); + sql.executeScript(migration); } else { - throw new Error(`Unknown migration type '${mig.type}'`); - } + console.log("Migration with JS module"); + migration(); + }; } function getDbVersion() { diff --git a/apps/server/src/services/resource_dir.ts b/apps/server/src/services/resource_dir.ts index a336bd3b8..c274b43ce 100644 --- a/apps/server/src/services/resource_dir.ts +++ b/apps/server/src/services/resource_dir.ts @@ -14,16 +14,8 @@ if (!fs.existsSync(DB_INIT_DIR)) { process.exit(1); } -const MIGRATIONS_DIR = path.resolve(DB_INIT_DIR, "migrations"); - -if (!fs.existsSync(MIGRATIONS_DIR)) { - log.error(`Could not find migration directory: ${MIGRATIONS_DIR}`); - process.exit(1); -} - export default { RESOURCE_DIR, - MIGRATIONS_DIR, DB_INIT_DIR, ELECTRON_APP_ROOT_DIR }; From 355d1cfb5ec231a7cfb7af60733939e4d94f252d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 21:45:45 +0300 Subject: [PATCH 10/37] chore(docs): sync --- .../Packaged version for Linux.html | 9 ++++++--- .../Packaged version for Linux.md | 7 +++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.html index fb75e87d3..6d92fef26 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.html @@ -3,8 +3,9 @@

Steps

  • SSH into your server
  • -
  • use wget (or curl) to download latest TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz (notice -Server suffix) - on your server.
  • +
  • use wget (or curl) to download latest TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz (copy + link from release page, + notice -Server suffix) on your server.
  • unpack the archive, e.g. using tar -xf -d TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz
  • cd trilium-linux-x64-server @@ -17,7 +18,9 @@

    The problem with above steps is that once you close the SSH connection, the Trilium process is terminated. To avoid that, you have two options:

      -
    • Kill it (with e.g. Ctrl + C) and run again like this: nohup ./trilium &.
    • +
    • Kill it (with e.g. Ctrl + C) and run again like this: nohup ./trilium.sh &. + (nohup keeps the process running in the background, & runs + it in the background)
    • Configure systemd to automatically run Trilium in the background on every boot
    diff --git a/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md b/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md index 68697192a..a1326d1c9 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md +++ b/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux.md @@ -4,8 +4,7 @@ This is essentially Trilium sources + node modules + node.js runtime packaged in ## Steps * SSH into your server -* Release list at https://github.com/TriliumNext/Notes/releases -* use `wget` (or `curl`) to download latest `TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz` (copy link from release page, notice `-Server` suffix) on your server. +* use `wget` (or `curl`) to download latest `TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz` (copy link from [release page](https://github.com/TriliumNext/Notes/releases), notice `-Server` suffix) on your server. * unpack the archive, e.g. using `tar -xf -d TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz` * `cd trilium-linux-x64-server` * `./trilium.sh` @@ -13,7 +12,7 @@ This is essentially Trilium sources + node modules + node.js runtime packaged in The problem with above steps is that once you close the SSH connection, the Trilium process is terminated. To avoid that, you have two options: -* Kill it (with e.g. Ctrl + C) and run again like this: `nohup ./trilium.sh &`. (nohup keeps the process running in the background, & runs it in the background) +* Kill it (with e.g. Ctrl + C) and run again like this: `nohup ./trilium.sh &`. (nohup keeps the process running in the background, `&` runs it in the background) * Configure systemd to automatically run Trilium in the background on every boot ## Configure Trilium to auto-run on boot with systemd @@ -77,4 +76,4 @@ If you get an error like this, you need to either upgrade your glibc (typically ## TLS -Don't forget to [configure TLS](../TLS%20Configuration.md), which is required for secure usage! +Don't forget to [configure TLS](../TLS%20Configuration.md), which is required for secure usage! \ No newline at end of file From 60a298ab38a01b82c9f71b964600ef7e808b8b9d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 21:47:17 +0300 Subject: [PATCH 11/37] docs(release): mention documentation update --- docs/Release Notes/Release Notes/v0.94.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Release Notes/Release Notes/v0.94.0.md b/docs/Release Notes/Release Notes/v0.94.0.md index 03dfa000f..2d255509e 100644 --- a/docs/Release Notes/Release Notes/v0.94.0.md +++ b/docs/Release Notes/Release Notes/v0.94.0.md @@ -68,6 +68,7 @@ * Add documentation around setting the various environment variables to control upload size limit by @perfectra1n * README improvements by @FliegendeWurst * Improved the documentation of text note keyboard shortcuts (including adding missing shortcuts). +* Improvements to "Packaged version for Linux" by @HersheyStormBottle ## 🌍 Internationalization From 77eceabf6e796153624ac0abf35ca258b21da188 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 21:58:46 +0300 Subject: [PATCH 12/37] Revert "style(next): fix dropdown container while app is loading" This reverts commit 939469ba5465c5cab3d3d23b9a429942a09153b1. --- apps/client/src/stylesheets/style.css | 2 +- apps/client/src/stylesheets/theme-next/base.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 5e1bebfa1..b1b9ee921 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -328,7 +328,7 @@ button kbd { --bs-dropdown-zindex: 999; } -body.desktop .dropdown-menu.show { +body.desktop .dropdown-menu { border: 1px solid var(--dropdown-border-color); box-shadow: 0px 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity)); animation: dropdown-menu-opening 100ms ease-in; diff --git a/apps/client/src/stylesheets/theme-next/base.css b/apps/client/src/stylesheets/theme-next/base.css index d98750087..9058328c3 100644 --- a/apps/client/src/stylesheets/theme-next/base.css +++ b/apps/client/src/stylesheets/theme-next/base.css @@ -89,7 +89,7 @@ * supported when this class is used. */ - .dropdown-menu.show:not(.static) { + .dropdown-menu:not(.static) { border-radius: var(--dropdown-border-radius); padding: var(--menu-padding-size) !important; font-size: 0.9rem !important; From 7542038756842a3d70fed8984f7d64be11a87512 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 22:01:12 +0300 Subject: [PATCH 13/37] fix(style): context menu appearing while page is loading --- apps/server/src/assets/views/desktop.ejs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/views/desktop.ejs b/apps/server/src/assets/views/desktop.ejs index e831f73c1..45356b254 100644 --- a/apps/server/src/assets/views/desktop.ejs +++ b/apps/server/src/assets/views/desktop.ejs @@ -19,7 +19,7 @@
    - + <%- include("./partials/windowGlobal.ejs", locals) %> From ff2a8e870822297e372d0945a9b8523d776b6978 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 30 May 2025 23:57:32 +0300 Subject: [PATCH 14/37] chore(github): mark demo as vendored --- .gitattributes | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index 2f8b47a8f..4aad0cbff 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,8 +1,9 @@ package-lock.json linguist-generated=true **/package-lock.json linguist-generated=true -apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true +apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true linguist-vendored apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/**/*.html eol=lf +apps/edit-docs/demo/** linguist-vendored docs/**/*.md eol=lf docs/**/*.json eol=lf @@ -15,5 +16,3 @@ demo/**/*.js eol=lf demo/**/*.css eol=lf *.sh eol=lf - -apps/client/src/libraries/** linguist-vendored \ No newline at end of file From af8210724839ee08598d8d9d126dd3e9d4130e93 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 00:05:46 +0300 Subject: [PATCH 15/37] chore(github): mark demo as non-detectable --- .gitattributes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index 4aad0cbff..13dc766a2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,7 +3,7 @@ package-lock.json linguist-generated=true apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true linguist-vendored apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/**/*.html eol=lf -apps/edit-docs/demo/** linguist-vendored +apps/edit-docs/demo/** -linguist-detectable docs/**/*.md eol=lf docs/**/*.json eol=lf From 5c16afbd6993ccdc14f8cc63c0b21b38ed65099a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 00:08:55 +0300 Subject: [PATCH 16/37] chore(github): mark documentation --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitattributes b/.gitattributes index 13dc766a2..5448ed435 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,7 +3,9 @@ package-lock.json linguist-generated=true apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true linguist-vendored apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/**/*.html eol=lf +apps/server/src/assets/doc_notes/** linguist-documentation apps/edit-docs/demo/** -linguist-detectable +docs/** linguist-documentation docs/**/*.md eol=lf docs/**/*.json eol=lf From ac384257d3cc105c6d0ed6d1c8fc27feffb13af8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 00:17:54 +0300 Subject: [PATCH 17/37] refactor(github): reorganize attributes --- .gitattributes | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.gitattributes b/.gitattributes index 5448ed435..29e177cb7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,20 +1,21 @@ +# Mark files as auto-generated to simplify reviews. package-lock.json linguist-generated=true **/package-lock.json linguist-generated=true +apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true -apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true linguist-vendored +# Ignore from GitHub language stats. apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/**/*.html eol=lf -apps/server/src/assets/doc_notes/** linguist-documentation -apps/edit-docs/demo/** -linguist-detectable -docs/** linguist-documentation +apps/server/src/assets/doc_notes/** linguist-detectable=false +apps/edit-docs/demo/** linguist-detectable=false +docs/** linguist-detectable=false +# Normalize line endings. docs/**/*.md eol=lf docs/**/*.json eol=lf - demo/**/*.html eol=lf demo/**/*.json eol=lf demo/**/*.svg eol=lf demo/**/*.txt eol=lf demo/**/*.js eol=lf demo/**/*.css eol=lf - *.sh eol=lf From 5d2a77981735edc6fb1467e7d6d9e2f1c09126e0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 00:19:06 +0300 Subject: [PATCH 18/37] chore(server): remove now redundant shebang --- apps/server/src/www.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/server/src/www.ts b/apps/server/src/www.ts index 4d2e0b412..2dcd74c80 100644 --- a/apps/server/src/www.ts +++ b/apps/server/src/www.ts @@ -1,4 +1,3 @@ -#!/usr/bin/env node import fs from "fs"; import http from "http"; import https from "https"; From bc58ef605f91b444cb91f8c4c20dc3c7e247870b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 00:57:14 +0300 Subject: [PATCH 19/37] fix(llm): LLM note type should not be selectable (closes #1848) --- apps/client/src/widgets/note_type.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/note_type.ts b/apps/client/src/widgets/note_type.ts index 63190f208..055cdf565 100644 --- a/apps/client/src/widgets/note_type.ts +++ b/apps/client/src/widgets/note_type.ts @@ -38,7 +38,6 @@ const NOTE_TYPES: NoteTypeMapping[] = [ // Misc note types { type: "render", mime: "", title: t("note_types.render-note"), selectable: true }, { type: "webView", mime: "", title: t("note_types.web-view"), selectable: true }, - { type: "aiChat", mime: "application/json", title: t("note_types.ai-chat"), selectable: true }, // Code notes { type: "code", mime: "text/plain", title: t("note_types.code"), selectable: true }, @@ -50,7 +49,8 @@ const NOTE_TYPES: NoteTypeMapping[] = [ { type: "image", title: t("note_types.image"), selectable: false }, { type: "launcher", mime: "", title: t("note_types.launcher"), selectable: false }, { type: "noteMap", mime: "", title: t("note_types.note-map"), selectable: false }, - { type: "search", title: t("note_types.saved-search"), selectable: false } + { type: "search", title: t("note_types.saved-search"), selectable: false }, + { type: "aiChat", mime: "application/json", title: t("note_types.ai-chat"), selectable: false } ]; const NOT_SELECTABLE_NOTE_TYPES = NOTE_TYPES.filter((nt) => !nt.selectable).map((nt) => nt.type); From 33924cb7f8fe98e18eae83404601d3118f5d09e3 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 01:31:13 +0300 Subject: [PATCH 20/37] chore(env): set up nvmrc --- .nvmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..156ca6d39 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22.16.0 \ No newline at end of file From 5af4d65d1f9764c68773fe644f9ccc160d5f7d3d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 01:32:52 +0300 Subject: [PATCH 21/37] chore(server): bump node version --- apps/server/scripts/build-server.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/scripts/build-server.sh b/apps/server/scripts/build-server.sh index 313726c86..b278df733 100644 --- a/apps/server/scripts/build-server.sh +++ b/apps/server/scripts/build-server.sh @@ -21,7 +21,7 @@ fi echo "Selected Arch: $ARCH" # Set Node.js version and architecture-specific filename -NODE_VERSION=22.14.0 +NODE_VERSION=22.16.0 script_dir=$(realpath $(dirname $0)) BUILD_DIR="$script_dir/../dist" From b01258a8ce208459e0fdbb6253b096ff213d8a52 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Sat, 31 May 2025 10:43:49 +0800 Subject: [PATCH 22/37] translate(cn): Fix some Chinese translations --- apps/client/src/translations/cn/translation.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index 455723f0e..ebac20f19 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -274,15 +274,15 @@ "revision_last_edited": "此修订版本上次编辑于 {{date}}", "confirm_delete_all": "您是否要删除此笔记的所有修订版本?", "no_revisions": "此笔记暂无修订版本...", - "restore_button": "", + "restore_button": "恢复", "confirm_restore": "您是否要恢复此修订版本?这将使用此修订版本覆盖笔记的当前标题和内容。", - "delete_button": "", + "delete_button": "删除", "confirm_delete": "您是否要删除此修订版本?", "revisions_deleted": "笔记修订版本已删除。", "revision_restored": "笔记修订版本已恢复。", "revision_deleted": "笔记修订版本已删除。", "snapshot_interval": "笔记快照保存间隔: {{seconds}}秒。", - "maximum_revisions": "当前笔记的最历史数量: {{number}}。", + "maximum_revisions": "当前笔记的最大历史数量: {{number}}。", "settings": "笔记修订设置", "download_button": "下载", "mime": "MIME 类型:", @@ -806,7 +806,7 @@ "open_full": "展开显示", "collapse": "折叠到正常大小", "title": "笔记地图", - "fix-nodes": "修复节点", + "fix-nodes": "固定节点", "link-distance": "链接距离" }, "note_paths": { @@ -1213,7 +1213,7 @@ "color": "字体颜色", "bg_color": "背景颜色", "visibility_title": "高亮列表可见性", - "visibility_description": "您可以通过添加 #hideHighlightWidget 标签来隐藏每个笔记的高亮小部件。", + "visibility_description": "您可以通过添加 #hideHighlightWidget 标签来隐藏单个笔记的高亮小部件。", "shortcut_info": "您可以在选项 -> 快捷键中为快速切换右侧面板(包括高亮列表)配置键盘快捷键(名称为 'toggleRightPane')。" }, "table_of_contents": { @@ -1547,7 +1547,7 @@ "close_other_tabs": "关闭其他标签页", "close_right_tabs": "关闭右侧标签页", "close_all_tabs": "关闭所有标签页", - "reopen_last_tab": "重新打开最后一个关闭的标签页", + "reopen_last_tab": "重新打开关闭的标签页", "move_tab_to_new_window": "将此标签页移动到新窗口", "copy_tab_to_new_window": "将此标签页复制到新窗口", "new_tab": "新标签页" @@ -1616,7 +1616,7 @@ "auto-detect-language": "自动检测" }, "highlighting": { - "title": "", + "title": "代码块", "description": "控制文本笔记中代码块的语法高亮,代码笔记不会受到影响。", "color-scheme": "颜色方案" }, From 419a29372d67acf2298f7e4f749655655e52911e Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Sat, 31 May 2025 10:55:28 +0800 Subject: [PATCH 23/37] translate(cn): Fix some Chinese translations --- apps/client/src/translations/cn/translation.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index ebac20f19..fa2460f26 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -1627,21 +1627,21 @@ "theme_group_dark": "深色主题" }, "classic_editor_toolbar": { - "title": "格式化" + "title": "格式" }, "editor": { "title": "编辑器" }, "editing": { "editor_type": { - "label": "格式化工具栏", + "label": "格式工具栏", "floating": { "title": "浮动", "description": "编辑工具出现在光标附近;" }, "fixed": { "title": "固定", - "description": "编辑工具出现在 \"格式化\" 功能区标签中。" + "description": "编辑工具出现在 \"格式\" 功能区标签中。" }, "multiline-toolbar": "如果工具栏无法完全显示,则分多行显示。" } From 2ff1ad04ae2b61ed45ad8ac7efb884ba177829ce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 31 May 2025 02:57:25 +0000 Subject: [PATCH 24/37] chore(deps): update dependency @types/node to v22.15.29 --- _regroup/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 288 +++++++++++++++++++++--------------------- 3 files changed, 146 insertions(+), 146 deletions(-) diff --git a/_regroup/package.json b/_regroup/package.json index 6b6f96740..80e210e1d 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -38,7 +38,7 @@ "@playwright/test": "1.52.0", "@stylistic/eslint-plugin": "4.4.0", "@types/express": "5.0.1", - "@types/node": "22.15.24", + "@types/node": "22.15.29", "@types/yargs": "17.0.33", "@vitest/coverage-v8": "3.1.4", "eslint": "9.27.0", diff --git a/package.json b/package.json index 70e0b76bb..ad90e5887 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@playwright/test": "^1.36.0", "@triliumnext/server": "workspace:*", "@types/express": "^4.17.21", - "@types/node": "22.15.24", + "@types/node": "22.15.29", "@vitest/coverage-v8": "^3.0.5", "@vitest/ui": "^3.0.0", "chalk": "5.4.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34d654ca4..f1b38cbca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,19 +53,19 @@ importers: version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.8.3) '@nx/express': specifier: 21.1.2 - version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(express@4.21.2)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3) + version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(express@4.21.2)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3))(typescript@5.8.3) '@nx/js': specifier: 21.1.2 version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@nx/node': specifier: 21.1.2 - version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3) + version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3))(typescript@5.8.3) '@nx/playwright': specifier: 21.1.2 version: 21.1.2(@babel/traverse@7.27.0)(@playwright/test@1.52.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.8.3) '@nx/vite': specifier: 21.1.2 - version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4) + version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4) '@nx/web': specifier: 21.1.2 version: 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) @@ -79,8 +79,8 @@ importers: specifier: ^4.17.21 version: 4.17.22 '@types/node': - specifier: 22.15.24 - version: 22.15.24 + specifier: 22.15.29 + version: 22.15.29 '@vitest/coverage-v8': specifier: ^3.0.5 version: 3.1.4(@vitest/browser@3.1.4)(vitest@3.1.4) @@ -140,13 +140,13 @@ importers: version: 2.0.1 vite: specifier: ^6.0.0 - version: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + version: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) vite-plugin-dts: specifier: ~4.5.0 - version: 4.5.4(@types/node@22.15.24)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + version: 4.5.4(@types/node@22.15.29)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) vitest: specifier: ^3.0.0 - version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) apps/client: dependencies: @@ -321,7 +321,7 @@ importers: version: 0.7.2 vite-plugin-static-copy: specifier: 3.0.0 - version: 3.0.0(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + version: 3.0.0(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) apps/db-compare: dependencies: @@ -809,7 +809,7 @@ importers: version: 4.1.0 '@ckeditor/ckeditor5-package-tools': specifier: ^3.0.1 - version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) + version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.33.0 version: 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) @@ -818,7 +818,7 @@ importers: version: 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.5 - version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: ^3.0.5 version: 3.1.4(vitest@3.1.4) @@ -845,16 +845,16 @@ importers: version: 10.0.0(stylelint@16.19.1(typescript@5.8.3)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) vitest: specifier: ^3.0.5 - version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) webdriverio: specifier: ^9.0.7 version: 9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -869,7 +869,7 @@ importers: version: 4.1.0 '@ckeditor/ckeditor5-package-tools': specifier: ^3.0.1 - version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) + version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.33.0 version: 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) @@ -878,7 +878,7 @@ importers: version: 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.5 - version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: ^3.0.5 version: 3.1.4(vitest@3.1.4) @@ -905,16 +905,16 @@ importers: version: 10.0.0(stylelint@16.19.1(typescript@5.8.3)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) vitest: specifier: ^3.0.5 - version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) webdriverio: specifier: ^9.0.7 version: 9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -929,7 +929,7 @@ importers: version: 4.1.0 '@ckeditor/ckeditor5-package-tools': specifier: ^3.0.1 - version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) + version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.33.0 version: 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) @@ -938,7 +938,7 @@ importers: version: 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.5 - version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: ^3.0.5 version: 3.1.4(vitest@3.1.4) @@ -965,16 +965,16 @@ importers: version: 10.0.0(stylelint@16.19.1(typescript@5.8.3)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) vitest: specifier: ^3.0.5 - version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) webdriverio: specifier: ^9.0.7 version: 9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -996,7 +996,7 @@ importers: version: 4.1.0 '@ckeditor/ckeditor5-package-tools': specifier: ^3.0.1 - version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) + version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.33.0 version: 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) @@ -1005,7 +1005,7 @@ importers: version: 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.5 - version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: ^3.0.5 version: 3.1.4(vitest@3.1.4) @@ -1032,16 +1032,16 @@ importers: version: 10.0.0(stylelint@16.19.1(typescript@5.8.3)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) vitest: specifier: ^3.0.5 - version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) webdriverio: specifier: ^9.0.7 version: 9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1063,7 +1063,7 @@ importers: version: 4.1.0 '@ckeditor/ckeditor5-package-tools': specifier: ^3.0.1 - version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) + version: 3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.33.0 version: 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) @@ -1072,7 +1072,7 @@ importers: version: 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) '@vitest/browser': specifier: ^3.0.5 - version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: ^3.0.5 version: 3.1.4(vitest@3.1.4) @@ -1099,16 +1099,16 @@ importers: version: 10.0.0(stylelint@16.19.1(typescript@5.8.3)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3) typescript: specifier: 5.8.3 version: 5.8.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + version: 2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) vitest: specifier: ^3.0.5 - version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + version: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) webdriverio: specifier: ^9.0.7 version: 9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -4628,8 +4628,8 @@ packages: '@types/node@22.15.21': resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} - '@types/node@22.15.24': - resolution: {integrity: sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==} + '@types/node@22.15.29': + resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -14276,7 +14276,7 @@ snapshots: '@ckeditor/ckeditor5-utils': 45.1.0 ckeditor5: 45.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - '@ckeditor/ckeditor5-package-tools@3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor5-package-tools@3.0.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(bufferutil@4.0.9)(esbuild@0.25.5)(utf-8-validate@6.0.5)': dependencies: '@ckeditor/ckeditor5-dev-translations': 45.0.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)(typescript@5.0.4)(webpack@5.99.9(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)) '@ckeditor/ckeditor5-dev-utils': 45.0.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)(typescript@5.0.4)(webpack@5.99.9(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)) @@ -14295,7 +14295,7 @@ snapshots: stylelint-config-ckeditor5: 2.0.1(stylelint@16.19.1(typescript@5.8.3)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.99.9(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)) ts-loader: 9.5.2(typescript@5.0.4)(webpack@5.99.9(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)) - ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.0.4) typescript: 5.0.4 webpack: 5.99.9(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5) webpack-dev-server: 5.2.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)(webpack@5.99.9(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5)) @@ -15468,18 +15468,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@inquirer/confirm@5.1.12(@types/node@22.15.24)': + '@inquirer/confirm@5.1.12(@types/node@22.15.29)': dependencies: - '@inquirer/core': 10.1.13(@types/node@22.15.24) - '@inquirer/type': 3.0.7(@types/node@22.15.24) + '@inquirer/core': 10.1.13(@types/node@22.15.29) + '@inquirer/type': 3.0.7(@types/node@22.15.29) optionalDependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 optional: true - '@inquirer/core@10.1.13(@types/node@22.15.24)': + '@inquirer/core@10.1.13(@types/node@22.15.29)': dependencies: '@inquirer/figures': 1.0.12 - '@inquirer/type': 3.0.7(@types/node@22.15.24) + '@inquirer/type': 3.0.7(@types/node@22.15.29) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -15487,15 +15487,15 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 optional: true '@inquirer/figures@1.0.12': optional: true - '@inquirer/type@3.0.7(@types/node@22.15.24)': + '@inquirer/type@3.0.7(@types/node@22.15.29)': optionalDependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 optional: true '@isaacs/cliui@8.0.2': @@ -15524,7 +15524,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -15534,7 +15534,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -15552,7 +15552,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.15.24 + '@types/node': 22.15.29 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -15574,7 +15574,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.15.24 + '@types/node': 22.15.29 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -15644,7 +15644,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -15990,23 +15990,23 @@ snapshots: dependencies: langium: 3.3.1 - '@microsoft/api-extractor-model@7.30.6(@types/node@22.15.24)': + '@microsoft/api-extractor-model@7.30.6(@types/node@22.15.29)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@22.15.24) + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.29) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.8(@types/node@22.15.24)': + '@microsoft/api-extractor@7.52.8(@types/node@22.15.29)': dependencies: - '@microsoft/api-extractor-model': 7.30.6(@types/node@22.15.24) + '@microsoft/api-extractor-model': 7.30.6(@types/node@22.15.29) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@22.15.24) + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.29) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.3(@types/node@22.15.24) - '@rushstack/ts-command-line': 5.0.1(@types/node@22.15.24) + '@rushstack/terminal': 0.15.3(@types/node@22.15.29) + '@rushstack/ts-command-line': 5.0.1(@types/node@22.15.29) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -16178,11 +16178,11 @@ snapshots: - supports-color - verdaccio - '@nx/express@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(express@4.21.2)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3)': + '@nx/express@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(express@4.21.2)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3))(typescript@5.8.3)': dependencies: '@nx/devkit': 21.1.2(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@nx/js': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@nx/node': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3) + '@nx/node': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3))(typescript@5.8.3) tslib: 2.8.1 optionalDependencies: express: 4.21.2 @@ -16202,7 +16202,7 @@ snapshots: - typescript - verdaccio - '@nx/jest@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3)': + '@nx/jest@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(babel-plugin-macros@3.1.0)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3))(typescript@5.8.3)': dependencies: '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 @@ -16210,7 +16210,7 @@ snapshots: '@nx/js': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.8.3) identity-obj-proxy: 3.0.0 - jest-config: 29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@22.15.29)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3)) jest-resolve: 29.7.0 jest-util: 29.7.0 minimatch: 9.0.3 @@ -16272,11 +16272,11 @@ snapshots: - nx - supports-color - '@nx/node@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3)': + '@nx/node@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3))(typescript@5.8.3)': dependencies: '@nx/devkit': 21.1.2(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@nx/eslint': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.27.0(jiti@2.4.2))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@nx/jest': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3))(typescript@5.8.3) + '@nx/jest': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(babel-plugin-macros@3.1.0)(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3))(typescript@5.8.3) '@nx/js': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) kill-port: 1.6.1 tcp-port-used: 1.0.2 @@ -16349,7 +16349,7 @@ snapshots: - typescript - verdaccio - '@nx/vite@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)': + '@nx/vite@21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)': dependencies: '@nx/devkit': 21.1.2(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@nx/js': 21.1.2(@babel/traverse@7.27.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.1.2(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.8.3))(@swc/core@1.11.29(@swc/helpers@0.5.17))) @@ -16360,8 +16360,8 @@ snapshots: picomatch: 4.0.2 semver: 7.7.2 tsconfig-paths: 4.2.0 - vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -16986,7 +16986,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.40.0': optional: true - '@rushstack/node-core-library@5.13.1(@types/node@22.15.24)': + '@rushstack/node-core-library@5.13.1(@types/node@22.15.29)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -16997,23 +16997,23 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.3(@types/node@22.15.24)': + '@rushstack/terminal@0.15.3(@types/node@22.15.29)': dependencies: - '@rushstack/node-core-library': 5.13.1(@types/node@22.15.24) + '@rushstack/node-core-library': 5.13.1(@types/node@22.15.29) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 - '@rushstack/ts-command-line@5.0.1(@types/node@22.15.24)': + '@rushstack/ts-command-line@5.0.1(@types/node@22.15.29)': dependencies: - '@rushstack/terminal': 0.15.3(@types/node@22.15.24) + '@rushstack/terminal': 0.15.3(@types/node@22.15.29) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -17200,7 +17200,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 optional: true '@types/archiver@6.0.3': @@ -17239,11 +17239,11 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/bootstrap@5.2.10': dependencies: @@ -17253,7 +17253,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/responselike': 1.0.3 '@types/cls-hooked@4.3.9': @@ -17274,11 +17274,11 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.6 - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/cookie-parser@1.4.8(@types/express@5.0.2)': dependencies: @@ -17442,7 +17442,7 @@ snapshots: '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -17471,7 +17471,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 optional: true '@types/geojson@7946.0.16': {} @@ -17479,11 +17479,11 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/html@1.0.4': {} @@ -17493,7 +17493,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/ini@4.1.1': {} @@ -17523,11 +17523,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/keyv@3.1.4': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/leaflet-gpx@1.3.7': dependencies: @@ -17569,12 +17569,12 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 form-data: 4.0.2 '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/node@16.9.1': {} @@ -17588,7 +17588,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.15.24': + '@types/node@22.15.29': dependencies: undici-types: 6.21.0 @@ -17608,13 +17608,13 @@ snapshots: '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/resolve@1.20.2': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/retry@0.12.2': {} @@ -17631,7 +17631,7 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/serve-favicon@2.5.7': dependencies: @@ -17658,7 +17658,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 '@types/stack-utils@2.0.3': {} @@ -17673,7 +17673,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 22.15.24 + '@types/node': 22.15.29 form-data: 4.0.2 '@types/supertest@6.0.3': @@ -17715,7 +17715,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 optional: true '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': @@ -17858,16 +17858,16 @@ snapshots: '@typescript-eslint/types': 8.33.0 eslint-visitor-keys: 4.2.0 - '@vitest/browser@3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser@3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.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.1.4(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + '@vitest/mocker': 3.1.4(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) '@vitest/utils': 3.1.4 magic-string: 0.30.17 sirv: 3.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: playwright: 1.52.0 @@ -17890,7 +17890,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - supports-color @@ -17908,9 +17908,9 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) optionalDependencies: - '@vitest/browser': 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser': 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) transitivePeerDependencies: - supports-color @@ -17921,14 +17921,14 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.4(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))': + '@vitest/mocker@3.1.4(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.1.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - msw: 2.7.5(@types/node@22.15.24)(typescript@5.8.3) - vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + msw: 2.7.5(@types/node@22.15.29)(typescript@5.8.3) + vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) '@vitest/pretty-format@3.1.4': dependencies: @@ -17958,7 +17958,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.13 tinyrainbow: 2.0.0 - vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vitest: 3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) '@vitest/utils@3.1.4': dependencies: @@ -22067,7 +22067,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -22087,7 +22087,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.15.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3)): + jest-config@29.7.0(@types/node@22.15.29)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3)): dependencies: '@babel/core': 7.26.10 '@jest/test-sequencer': 29.7.0 @@ -22112,8 +22112,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.15.24 - ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3) + '@types/node': 22.15.29 + ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -22142,7 +22142,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -22152,7 +22152,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.15.24 + '@types/node': 22.15.29 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -22191,7 +22191,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -22219,7 +22219,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -22247,7 +22247,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -22293,7 +22293,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -22312,7 +22312,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.15.24 + '@types/node': 22.15.29 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -22321,19 +22321,19 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -23366,12 +23366,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3): + msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.12(@types/node@22.15.24) + '@inquirer/confirm': 5.1.12(@types/node@22.15.29) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -26462,14 +26462,14 @@ snapshots: typescript: 5.0.4 webpack: 5.99.9(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.5) - ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.0.4): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.0.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.24 + '@types/node': 22.15.29 acorn: 8.14.1 acorn-walk: 8.3.4 arg: 4.1.3 @@ -26482,14 +26482,14 @@ snapshots: optionalDependencies: '@swc/core': 1.11.29(@swc/helpers@0.5.17) - ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.24)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.15.29)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.24 + '@types/node': 22.15.29 acorn: 8.14.1 acorn-walk: 8.3.4 arg: 4.1.3 @@ -26818,13 +26818,13 @@ snapshots: vary@1.1.2: {} - vite-node@3.1.4(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): + vite-node@3.1.4(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@6.0.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - jiti @@ -26839,9 +26839,9 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@22.15.24)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)): + vite-plugin-dts@4.5.4(@types/node@22.15.29)(rollup@4.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)): dependencies: - '@microsoft/api-extractor': 7.52.8(@types/node@22.15.24) + '@microsoft/api-extractor': 7.52.8(@types/node@22.15.29) '@rollup/pluginutils': 5.1.4(rollup@4.40.0) '@volar/typescript': 2.4.13 '@vue/language-core': 2.2.0(typescript@5.8.3) @@ -26852,28 +26852,28 @@ snapshots: magic-string: 0.30.17 typescript: 5.8.3 optionalDependencies: - vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@3.0.0(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)): + vite-plugin-static-copy@3.0.0(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)): dependencies: chokidar: 3.6.0 fs-extra: 11.3.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.13 - vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) - vite-plugin-svgo@2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)): + vite-plugin-svgo@2.0.0(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)): dependencies: svgo: 3.3.2 typescript: 5.8.3 - vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) - vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): + vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): dependencies: esbuild: 0.25.5 fdir: 6.4.4(picomatch@4.0.2) @@ -26882,7 +26882,7 @@ snapshots: rollup: 4.40.0 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.24 + '@types/node': 22.15.29 fsevents: 2.3.3 jiti: 2.4.2 less: 4.1.3 @@ -26894,10 +26894,10 @@ snapshots: tsx: 4.19.4 yaml: 2.8.0 - vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.24)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): + vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.29)(@vitest/browser@3.1.4)(@vitest/ui@3.1.4)(happy-dom@17.5.6)(jiti@2.4.2)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0): dependencies: '@vitest/expect': 3.1.4 - '@vitest/mocker': 3.1.4(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) + '@vitest/mocker': 3.1.4(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0)) '@vitest/pretty-format': 3.1.4 '@vitest/runner': 3.1.4 '@vitest/snapshot': 3.1.4 @@ -26914,13 +26914,13 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) - vite-node: 3.1.4(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite: 6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) + vite-node: 3.1.4(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.24 - '@vitest/browser': 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.24)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.24)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@types/node': 22.15.29 + '@vitest/browser': 3.1.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.15.29)(typescript@5.8.3))(playwright@1.52.0)(utf-8-validate@6.0.5)(vite@6.3.5(@types/node@22.15.29)(jiti@2.4.2)(less@4.1.3)(sass-embedded@1.87.0)(sass@1.87.0)(stylus@0.64.0)(sugarss@4.0.1(postcss@8.5.3))(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))(vitest@3.1.4)(webdriverio@9.14.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 3.1.4(vitest@3.1.4) happy-dom: 17.5.6 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From 60526c21fb7e2b50e86a58cf8a58e0f2478e85e8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 31 May 2025 02:58:06 +0000 Subject: [PATCH 25/37] chore(deps): update dependency ollama to v0.5.16 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 204086f0f..0ee8007d5 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -87,7 +87,7 @@ "mime-types": "3.0.1", "multer": "2.0.0", "normalize-strings": "1.1.1", - "ollama": "0.5.15", + "ollama": "0.5.16", "openai": "4.103.0", "rand-token": "1.0.1", "safe-compare": "1.1.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34d654ca4..570843f94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -705,8 +705,8 @@ importers: specifier: 1.1.1 version: 1.1.1 ollama: - specifier: 0.5.15 - version: 0.5.15 + specifier: 0.5.16 + version: 0.5.16 openai: specifier: 4.103.0 version: 4.103.0(encoding@0.1.13)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) @@ -9490,8 +9490,8 @@ packages: resolution: {integrity: sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==} engines: {node: ^10.13.0 || >=12.0.0} - ollama@0.5.15: - resolution: {integrity: sha512-TSaZSJyP7MQJFjSmmNsoJiriwa3U+/UJRw6+M8aucs5dTsaWNZsBIGpDb5rXnW6nXxJBB/z79gZY8IaiIQgelQ==} + ollama@0.5.16: + resolution: {integrity: sha512-OEbxxOIUZtdZgOaTPAULo051F5y+Z1vosxEYOoABPnQKeW7i4O8tJNlxCB+xioyoorVqgjkdj+TA1f1Hy2ug/w==} omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} @@ -23688,7 +23688,7 @@ snapshots: oidc-token-hash@5.1.0: {} - ollama@0.5.15: + ollama@0.5.16: dependencies: whatwg-fetch: 3.6.20 From 46d127b8084dbbb4b4e58f74b3afd73a3e13e5be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 31 May 2025 02:58:51 +0000 Subject: [PATCH 26/37] fix(deps): update dependency @codemirror/view to v6.37.1 --- packages/codemirror/package.json | 2 +- pnpm-lock.yaml | 185 ++++++++++++++++--------------- 2 files changed, 94 insertions(+), 93 deletions(-) diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index 68a6d58a5..c2e94d271 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -30,7 +30,7 @@ "@codemirror/lang-xml": "6.1.0", "@codemirror/legacy-modes": "6.5.1", "@codemirror/search": "6.5.11", - "@codemirror/view": "6.37.0", + "@codemirror/view": "6.37.1", "@fsegurai/codemirror-theme-abcdef": "6.1.4", "@fsegurai/codemirror-theme-abyss": "6.1.4", "@fsegurai/codemirror-theme-android-studio": "6.1.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34d654ca4..8e34bfbe2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1149,86 +1149,86 @@ importers: specifier: 6.5.11 version: 6.5.11 '@codemirror/view': - specifier: 6.37.0 - version: 6.37.0 + specifier: 6.37.1 + version: 6.37.1 '@fsegurai/codemirror-theme-abcdef': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-abyss': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-android-studio': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-andromeda': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-basic-dark': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-basic-light': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-forest': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-github-dark': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-github-light': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-gruvbox-dark': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-gruvbox-light': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-material-dark': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-material-light': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-monokai': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-nord': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-palenight': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-solarized-dark': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-solarized-light': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-tokyo-night-day': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-tokyo-night-storm': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-volcano': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-dark': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-light': specifier: 6.1.4 - version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1) + version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1) '@replit/codemirror-indentation-markers': specifier: 6.5.3 - version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0) + version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1) '@replit/codemirror-lang-nix': specifier: 6.0.1 - version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2) + version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@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.8.1)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0) + version: 6.3.0(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1) '@ssddanbrown/codemirror-lang-smarty': specifier: 1.0.0 version: 1.0.0 @@ -2219,8 +2219,8 @@ packages: '@codemirror/state@6.5.2': resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} - '@codemirror/view@6.37.0': - resolution: {integrity: sha512-ghHIeRGfWB8h9Tc3sMdr7D5zp4sZvlCzG36Xjdh2ymmfAwvSaCJAAsL3HLyLEnHcE953+5Uox1bx5OS+YCW/7Q==} + '@codemirror/view@6.37.1': + resolution: {integrity: sha512-Qy4CAUwngy/VQkEz0XzMKVRcckQuqLYWKqVpDDDghBe5FSXSqfVrJn49nw3ePZHxRUz4nRmb05Lgi+9csWo4eg==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -14484,14 +14484,14 @@ snapshots: dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@codemirror/commands@6.8.1': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@codemirror/lang-css@6.3.1': @@ -14509,7 +14509,7 @@ snapshots: '@codemirror/lang-javascript': 6.2.4 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@lezer/css': 1.1.11 '@lezer/html': 1.3.10 @@ -14520,7 +14520,7 @@ snapshots: '@codemirror/language': 6.11.0 '@codemirror/lint': 6.8.5 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@lezer/javascript': 1.5.1 @@ -14535,7 +14535,7 @@ snapshots: '@codemirror/lang-html': 6.4.9 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@lezer/markdown': 1.4.3 @@ -14561,14 +14561,14 @@ snapshots: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@lezer/xml': 1.0.6 '@codemirror/language@6.11.0': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 @@ -14581,22 +14581,23 @@ snapshots: '@codemirror/lint@6.8.5': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 crelt: 1.0.6 '@codemirror/search@6.5.11': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 crelt: 1.0.6 '@codemirror/state@6.5.2': dependencies: '@marijn/find-cluster-break': 1.0.2 - '@codemirror/view@6.37.0': + '@codemirror/view@6.37.1': dependencies: '@codemirror/state': 6.5.2 + crelt: 1.0.6 style-mod: 4.1.2 w3c-keyname: 2.2.8 @@ -15245,165 +15246,165 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@fsegurai/codemirror-theme-abcdef@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-abcdef@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-abyss@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-abyss@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-android-studio@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-android-studio@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-andromeda@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-andromeda@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-basic-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-basic-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-basic-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-basic-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-forest@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-forest@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-github-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-github-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-github-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-github-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-gruvbox-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-gruvbox-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-gruvbox-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-gruvbox-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-material-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-material-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-material-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-material-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-monokai@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-monokai@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-nord@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-nord@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-palenight@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-palenight@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-solarized-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-solarized-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-solarized-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-solarized-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-tokyo-night-day@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-tokyo-night-day@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-tokyo-night-storm@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-tokyo-night-storm@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-volcano@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-volcano@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-dark@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-light@6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/highlight': 1.2.1 '@fullcalendar/core@6.1.17': @@ -16837,29 +16838,29 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)': + '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 - '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)': + '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)': dependencies: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.37.0)': + '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.8.1)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.37.1)': dependencies: '@codemirror/commands': 6.8.1 '@codemirror/language': 6.11.0 '@codemirror/search': 6.5.11 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.37.0 + '@codemirror/view': 6.37.1 '@rollup/plugin-commonjs@25.0.8(rollup@4.40.0)': dependencies: From fac8f531b8ceb15a09690f715fd00d3dca54dafd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 11:22:04 +0300 Subject: [PATCH 27/37] fix(codemirror): total number of results not correct on large or folded documents --- packages/codemirror/src/find_replace.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/codemirror/src/find_replace.ts b/packages/codemirror/src/find_replace.ts index 9eabc2c3c..ba9347cfe 100644 --- a/packages/codemirror/src/find_replace.ts +++ b/packages/codemirror/src/find_replace.ts @@ -16,6 +16,7 @@ export class SearchHighlighter { currentFound: number; totalFound: number; matcher?: MatchDecorator; + searchRegexp?: RegExp; private parsedMatches: Match[]; constructor(public view: EditorView) { @@ -42,6 +43,7 @@ export class SearchHighlighter { regexp: regex, decoration: searchMatchDecoration, }); + this.searchRegexp = regex; this.#updateSearchData(this.view); this.#scrollToMatchNearestSelection(); } @@ -98,17 +100,21 @@ export class SearchHighlighter { return; } - const matches = this.matcher.createDeco(view); - const cursor = matches.iter(); - while (cursor.value) { - this.parsedMatches.push({ - from: cursor.from, - to: cursor.to - }); - cursor.next(); + // Create the match decorator which will automatically highlight matches in the document. + this.matches = this.matcher.createDeco(view); + + // Manually search for matches in the current document in order to get the total number of matches. + const parsedMatches: Match[] = []; + const text = view.state.doc.toString(); + let match: RegExpExecArray | null | undefined; + while ((match = this.searchRegexp?.exec(text))) { + const from = match.index ?? 0; + const to = from + match[0].length; + + parsedMatches.push({ from, to }); } - this.matches = matches; + this.parsedMatches = parsedMatches; this.totalFound = this.parsedMatches.length; } From 03de472a575cbcb0728befef125702ef38291666 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 11:44:10 +0300 Subject: [PATCH 28/37] fix(codemirror): search not unfolding results --- packages/codemirror/src/find_replace.ts | 20 ++++++++++++++++++-- packages/codemirror/src/index.ts | 3 ++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/codemirror/src/find_replace.ts b/packages/codemirror/src/find_replace.ts index ba9347cfe..40d3c15a7 100644 --- a/packages/codemirror/src/find_replace.ts +++ b/packages/codemirror/src/find_replace.ts @@ -1,5 +1,6 @@ import { EditorView, Decoration, MatchDecorator, ViewPlugin, ViewUpdate } from "@codemirror/view"; -import { Range, RangeSet } from "@codemirror/state"; +import { foldState, unfoldEffect } from "@codemirror/language"; +import { Range, RangeSet, StateEffect } from "@codemirror/state"; const searchMatchDecoration = Decoration.mark({ class: "cm-searchMatch" }); const activeMatchDecoration = Decoration.mark({ class: "cm-activeMatch" }); @@ -79,8 +80,23 @@ export class SearchHighlighter { const match = this.parsedMatches[matchIndex]; this.currentFound = matchIndex + 1; this.activeMatch = activeMatchDecoration.range(match.from, match.to); + + // Check if the match is inside a folded region. + const unfoldEffects: StateEffect[] = []; + const folded = this.view.state.field(foldState); + const iter = folded.iter(); + while (iter.value) { + if (match.from >= iter.from && match.to <= iter.to) { + unfoldEffects.push(unfoldEffect.of({ from: iter.from, to: iter.to })); + } + iter.next(); + } + this.view.dispatch({ - effects: EditorView.scrollIntoView(match.from, { y: "center" }), + effects: [ + ...unfoldEffects, + EditorView.scrollIntoView(match.from, { y: "center" }) + ], scrollIntoView: true }); } diff --git a/packages/codemirror/src/index.ts b/packages/codemirror/src/index.ts index 8d6687be8..c86d37b12 100644 --- a/packages/codemirror/src/index.ts +++ b/packages/codemirror/src/index.ts @@ -1,6 +1,6 @@ import { defaultKeymap, history, historyKeymap } from "@codemirror/commands"; import { EditorView, highlightActiveLine, keymap, lineNumbers, placeholder, ViewPlugin, ViewUpdate, type EditorViewConfig } from "@codemirror/view"; -import { defaultHighlightStyle, StreamLanguage, syntaxHighlighting, indentUnit, bracketMatching, foldGutter } from "@codemirror/language"; +import { defaultHighlightStyle, StreamLanguage, syntaxHighlighting, indentUnit, bracketMatching, foldGutter, codeFolding } from "@codemirror/language"; import { Compartment, EditorSelection, EditorState, type Extension } from "@codemirror/state"; import { highlightSelectionMatches } from "@codemirror/search"; import { vim } from "@replit/codemirror-vim"; @@ -73,6 +73,7 @@ export default class CodeMirror extends EditorView { ]), highlightSelectionMatches(), bracketMatching(), + codeFolding(), foldGutter(), indentationMarkers(), ]; From 9e3909a5f7b4e82fe553a8fb1dc62d9d190c52a8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 12:06:14 +0300 Subject: [PATCH 29/37] fix(code): pressing tab while multiple lines are selected would replace with tab --- .../codemirror/src/extensions/custom_tab.ts | 41 ++++++++++++++----- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/packages/codemirror/src/extensions/custom_tab.ts b/packages/codemirror/src/extensions/custom_tab.ts index c8ced1df2..3987827dd 100644 --- a/packages/codemirror/src/extensions/custom_tab.ts +++ b/packages/codemirror/src/extensions/custom_tab.ts @@ -24,19 +24,38 @@ const smartIndentWithTab: KeyBinding[] = [ // Step 1: Handle non-empty selections → replace with tab if (selection.ranges.some(range => !range.empty)) { - for (let range of selection.ranges) { - changes.push({ from: range.from, to: range.to, insert: "\t" }); - newSelections.push(EditorSelection.cursor(range.from + 1)); + // If multiple lines are selected, insert a tab character at the start of each line + // and move the cursor to the position after the tab character. + const linesCovered = new Set(); + for (const range of selection.ranges) { + const startLine = state.doc.lineAt(range.from); + const endLine = state.doc.lineAt(range.to); + + for (let lineNumber = startLine.number; lineNumber <= endLine.number; lineNumber++) { + linesCovered.add(lineNumber); + } + } + + if (linesCovered.size > 1) { + // Multiple lines are selected, indent each line. + return indentMore({ state, dispatch }); + } else { + // Single line selection, replace with tab. + for (let range of selection.ranges) { + changes.push({ from: range.from, to: range.to, insert: "\t" }); + newSelections.push(EditorSelection.cursor(range.from + 1)); + } + + dispatch( + state.update({ + changes, + selection: EditorSelection.create(newSelections), + scrollIntoView: true, + userEvent: "input" + }) + ); } - dispatch( - state.update({ - changes, - selection: EditorSelection.create(newSelections), - scrollIntoView: true, - userEvent: "input" - }) - ); return true; } From 56b7965c9a89facee10953315d7fa47677342c88 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 12:11:57 +0300 Subject: [PATCH 30/37] refactor(codemirror): split custom tab functionality into more methods --- .../codemirror/src/extensions/custom_tab.ts | 104 ++++++++++-------- 1 file changed, 58 insertions(+), 46 deletions(-) diff --git a/packages/codemirror/src/extensions/custom_tab.ts b/packages/codemirror/src/extensions/custom_tab.ts index 3987827dd..e0f39690a 100644 --- a/packages/codemirror/src/extensions/custom_tab.ts +++ b/packages/codemirror/src/extensions/custom_tab.ts @@ -1,5 +1,5 @@ import { indentLess, indentMore } from "@codemirror/commands"; -import { EditorSelection, EditorState, SelectionRange, type ChangeSpec } from "@codemirror/state"; +import { EditorSelection, EditorState, SelectionRange, type Transaction, type ChangeSpec } from "@codemirror/state"; import type { KeyBinding } from "@codemirror/view"; /** @@ -19,8 +19,6 @@ const smartIndentWithTab: KeyBinding[] = [ } const { selection } = state; - const changes: ChangeSpec[] = []; - const newSelections: SelectionRange[] = []; // Step 1: Handle non-empty selections → replace with tab if (selection.ranges.some(range => !range.empty)) { @@ -40,55 +38,69 @@ const smartIndentWithTab: KeyBinding[] = [ // Multiple lines are selected, indent each line. return indentMore({ state, dispatch }); } else { - // Single line selection, replace with tab. - for (let range of selection.ranges) { - changes.push({ from: range.from, to: range.to, insert: "\t" }); - newSelections.push(EditorSelection.cursor(range.from + 1)); - } - - dispatch( - state.update({ - changes, - selection: EditorSelection.create(newSelections), - scrollIntoView: true, - userEvent: "input" - }) - ); + return handleSingleLineSelection(state, dispatch); } - - return true; } // Step 2: Handle empty selections - for (let range of selection.ranges) { - const line = state.doc.lineAt(range.head); - const beforeCursor = state.doc.sliceString(line.from, range.head); - - if (/^\s*$/.test(beforeCursor)) { - // Only whitespace before cursor → indent line - return indentMore({ state, dispatch }); - } else { - // Insert tab character at cursor - changes.push({ from: range.head, to: range.head, insert: "\t" }); - newSelections.push(EditorSelection.cursor(range.head + 1)); - } - } - - if (changes.length) { - dispatch( - state.update({ - changes, - selection: EditorSelection.create(newSelections), - scrollIntoView: true, - userEvent: "input" - }) - ); - return true; - } - - return false; + return handleEmptySelections(state, dispatch); }, shift: indentLess }, ] export default smartIndentWithTab; + +function handleSingleLineSelection(state: EditorState, dispatch: (transaction: Transaction) => void) { + const changes: ChangeSpec[] = []; + const newSelections: SelectionRange[] = []; + + // Single line selection, replace with tab. + for (let range of state.selection.ranges) { + changes.push({ from: range.from, to: range.to, insert: "\t" }); + newSelections.push(EditorSelection.cursor(range.from + 1)); + } + + dispatch( + state.update({ + changes, + selection: EditorSelection.create(newSelections), + scrollIntoView: true, + userEvent: "input" + }) + ); + + return true; +} + +function handleEmptySelections(state: EditorState, dispatch: (transaction: Transaction) => void) { + const changes: ChangeSpec[] = []; + const newSelections: SelectionRange[] = []; + + for (let range of state.selection.ranges) { + const line = state.doc.lineAt(range.head); + const beforeCursor = state.doc.sliceString(line.from, range.head); + + if (/^\s*$/.test(beforeCursor)) { + // Only whitespace before cursor → indent line + return indentMore({ state, dispatch }); + } else { + // Insert tab character at cursor + changes.push({ from: range.head, to: range.head, insert: "\t" }); + newSelections.push(EditorSelection.cursor(range.head + 1)); + } + } + + if (changes.length) { + dispatch( + state.update({ + changes, + selection: EditorSelection.create(newSelections), + scrollIntoView: true, + userEvent: "input" + }) + ); + return true; + } + + return false; +} From d7cb09c71c5aa68988dc6b6e3862cc481b6c4952 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 31 May 2025 09:17:24 +0000 Subject: [PATCH 31/37] chore(deps): update dependency openai to v4.104.0 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 0ee8007d5..2b8836251 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -88,7 +88,7 @@ "multer": "2.0.0", "normalize-strings": "1.1.1", "ollama": "0.5.16", - "openai": "4.103.0", + "openai": "4.104.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 ddb171d74..4e82e0e70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -708,8 +708,8 @@ importers: specifier: 0.5.16 version: 0.5.16 openai: - specifier: 4.103.0 - version: 4.103.0(encoding@0.1.13)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) + specifier: 4.104.0 + version: 4.104.0(encoding@0.1.13)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) rand-token: specifier: 1.0.1 version: 1.0.1 @@ -9526,8 +9526,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@4.103.0: - resolution: {integrity: sha512-eWcz9kdurkGOFDtd5ySS5y251H2uBgq9+1a2lTBnjMMzlexJ40Am5t6Mu76SSE87VvitPa0dkIAp75F+dZVC0g==} + openai@4.104.0: + resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -23728,7 +23728,7 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@4.103.0(encoding@0.1.13)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4): + openai@4.104.0(encoding@0.1.13)(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4): dependencies: '@types/node': 18.16.9 '@types/node-fetch': 2.6.12 From 1b5e51b285e0033fc6fe9c90df308f6971ff5bb4 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 13:36:28 +0300 Subject: [PATCH 32/37] fix(server): entrypoint for standalone server --- apps/server/scripts/build-server.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/scripts/build-server.sh b/apps/server/scripts/build-server.sh index b278df733..b81e2901a 100644 --- a/apps/server/scripts/build-server.sh +++ b/apps/server/scripts/build-server.sh @@ -43,7 +43,7 @@ rm -rf $BUILD_DIR/node/lib/node_modules/{npm,corepack} \ $BUILD_DIR/node_modules/electron* \ $BUILD_DIR/electron*.{js,map} -printf "#!/bin/sh\n./node/bin/node src/main\n" > $BUILD_DIR/trilium.sh +printf "#!/bin/sh\n./node/bin/node main.cjs\n" > $BUILD_DIR/trilium.sh chmod 755 $BUILD_DIR/trilium.sh VERSION=`jq -r ".version" package.json` From bb3102eb769d4ae0e5c4a7a1d6fca0db0f46ae46 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 13:47:01 +0300 Subject: [PATCH 33/37] chore(github): set vendored --- .gitattributes | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitattributes b/.gitattributes index 29e177cb7..b6a1d586c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,13 +1,13 @@ # Mark files as auto-generated to simplify reviews. package-lock.json linguist-generated=true **/package-lock.json linguist-generated=true -apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true +apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated # Ignore from GitHub language stats. apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/**/*.html eol=lf -apps/server/src/assets/doc_notes/** linguist-detectable=false -apps/edit-docs/demo/** linguist-detectable=false -docs/** linguist-detectable=false +apps/server/src/assets/doc_notes/** linguist-vendored +apps/edit-docs/demo/** linguist-vendored +docs/** linguist-vendored # Normalize line endings. docs/**/*.md eol=lf From 6c35778f3d5d6802cb4427a7055ef589f8c01c3d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 13:52:43 +0300 Subject: [PATCH 34/37] chore(dump-db): remove shebang --- apps/dump-db/src/main.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/dump-db/src/main.ts b/apps/dump-db/src/main.ts index e00f1c615..28f9065d4 100644 --- a/apps/dump-db/src/main.ts +++ b/apps/dump-db/src/main.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env node - import yargs from "yargs"; import { hideBin } from "yargs/helpers"; import dumpService from "./inc/dump.js"; From 8c02efb1bd93dd6d3416433a792c7b498ba62913 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 14:07:24 +0300 Subject: [PATCH 35/37] chore(github): set vendored to true --- .gitattributes | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitattributes b/.gitattributes index b6a1d586c..7b00e7d63 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,9 +5,9 @@ apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/** linguist-generated # Ignore from GitHub language stats. apps/server/src/assets/doc_notes/en/User[[:space:]]Guide/**/*.html eol=lf -apps/server/src/assets/doc_notes/** linguist-vendored -apps/edit-docs/demo/** linguist-vendored -docs/** linguist-vendored +apps/server/src/assets/doc_notes/** linguist-vendored=true +apps/edit-docs/demo/** linguist-vendored=true +docs/** linguist-vendored=true # Normalize line endings. docs/**/*.md eol=lf From 3046fe2bf2cbc33fb2f58493384e964eba7334dd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 14:07:33 +0300 Subject: [PATCH 36/37] chore(repo): clean up a few unused files --- _regroup/jsdoc-conf.json | 7 ------- _regroup/trilium.iml | 23 ----------------------- 2 files changed, 30 deletions(-) delete mode 100644 _regroup/jsdoc-conf.json delete mode 100644 _regroup/trilium.iml diff --git a/_regroup/jsdoc-conf.json b/_regroup/jsdoc-conf.json deleted file mode 100644 index b61bbacb6..000000000 --- a/_regroup/jsdoc-conf.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "templates": { - "default": { - "includeDate": false - } - } -} diff --git a/_regroup/trilium.iml b/_regroup/trilium.iml deleted file mode 100644 index bfa02661b..000000000 --- a/_regroup/trilium.iml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 1a2bb1e407a6209f22744be0832a97546571565a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 31 May 2025 16:57:06 +0300 Subject: [PATCH 37/37] fix(electron): crash on some Linux distributions --- apps/desktop/src/electron-main.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/desktop/src/electron-main.ts b/apps/desktop/src/electron-main.ts index 8a9ebae03..c8c28ac77 100644 --- a/apps/desktop/src/electron-main.ts +++ b/apps/desktop/src/electron-main.ts @@ -22,6 +22,12 @@ async function main() { electron.app.commandLine.appendSwitch("enable-experimental-web-platform-features"); electron.app.commandLine.appendSwitch("lang", options.getOptionOrNull("formattingLocale") ?? "en"); + // Electron 36 crashes with "Using GTK 2/3 and GTK 4 in the same process is not supported" on some distributions. + // See https://github.com/electron/electron/issues/46538 for more info. + if (process.platform === "linux") { + electron.app.commandLine.appendSwitch("gtk-version", "3"); + } + // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q.