From fbc4206908214fb590c0b25169f770b798010b0e Mon Sep 17 00:00:00 2001 From: greg1904 Date: Tue, 18 Feb 2025 22:18:55 +0100 Subject: [PATCH 01/22] adding new fields for launchbar to german translation --- translations/de/server.json | 72 +++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/translations/de/server.json b/translations/de/server.json index 41bf37a70..f50a0daca 100644 --- a/translations/de/server.json +++ b/translations/de/server.json @@ -194,8 +194,80 @@ "not-configured": "Der Synchronisations-Server-Host ist nicht konfiguriert. Bitte konfiguriere zuerst die Synchronisation.", "successful": "Die Server-Verbindung wurde erfolgreich hergestellt, die Synchronisation wurde gestartet." }, + "hidden-subtree": { + "root-title": "Versteckte Notizen", + "search-history-title": "Suchverlauf", + "note-map-title": "Notiz Karte", + "sql-console-history-title": "SQL Konsolen Verlauf", + "shared-notes-title": "Geteilte Notizen", + "bulk-action-title": "Massenverarbeitung", + "backend-log-title": "Backend Log", + "user-hidden-title": "Versteckt vom Nutzer", + "launch-bar-templates-title": "Launchbar Vorlagen", + "base-abstract-launcher-title": "Basis Abstrakte Launchbar", + "command-launcher-title": "Befehlslauncher", + "note-launcher-title": "Notiz Launcher", + "script-launcher-title": "Script Launcher", + "built-in-widget-title": "Eingebautes Widget", + "spacer-title": "Freifeld", + "custom-widget-title": "Custom Widget", + "launch-bar-title": "Launchbar", + "available-launchers-title": "Verfügbare Launchers", + "go-to-previous-note-title": "Zur vorherigen Notiz gehen", + "go-to-next-note-title": "Zur nächsten Notiz gehen", + "new-note-title": "Neue Notiz", + "search-notes-title": "Notizen durchsuchen", + "jump-to-note-title": "Zur Notiz springen", + "calendar-title": "Kalender", + "recent-changes-title": "neue Änderungen", + "bookmarks-title": "Lesezeichen", + "open-today-journal-note-title": "Heutigen Journaleintrag öffnen", + "quick-search-title": "Schnellsuche", + "protected-session-title": "Geschützte Sitzung", + "sync-status-title": "Sync Status", + "settings-title": "Einstellungen", + "options-title": "Optionen", + "appearance-title": "Erscheinungsbild", + "shortcuts-title": "Tastaturkürzel", + "text-notes": "Text Notizen", + "code-notes-title": "Code Notizen", + "images-title": "Bilder", + "spellcheck-title": "Rechtschreibprüfung", + "password-title": "Passwort", + "etapi-title": "ETAPI", + "backup-title": "Sicherung", + "sync-title": "Sync", + "other": "Weitere", + "advanced-title": "Erweitert", + "visible-launchers-title": "Sichtbare Launcher", + "user-guide": "Nutzerhandbuch" + }, + "notes": { + "new-note": "Neue Notiz", + "duplicate-note-suffix": "(dup)", + "duplicate-note-title": "{{ noteTitle }} {{ duplicateNoteSuffix }}" + }, "backend_log": { "log-does-not-exist": "Die Backend-Log-Datei '{{ fileName }}' existiert (noch) nicht.", "reading-log-failed": "Das Lesen der Backend-Log-Datei '{{ fileName }}' ist fehlgeschlagen." + }, + "content_renderer": { + "note-cannot-be-displayed": "Dieser Notiztyp kann nicht angezeigt werden." + }, + "pdf": { + "export_filter": "PDF Dokument (*.pdf)", + "unable-to-export-message": "Die aktuelle Notiz konnte nicht als PDF exportiert werden.", + "unable-to-export-title": "Export als PDF fehlgeschlagen", + "unable-to-save-message": "Die ausgewählte Datei konnte nicht beschrieben werden. Erneut versuchen oder ein anderes Ziel auswählen." + }, + "tray": { + "tooltip": "TriliumNext Notes", + "close": "Trilium schließen", + "recents": "Kürzliche Notizen", + "bookmarks": "Lesezeichen", + "today": "Heutigen Journal Eintrag öffnen", + "new-note": "Neue Notiz", + "show-windows": "Fenster anzeigen" } + } From e35ff07b9b67c32d53339056b4808b835501b1ee Mon Sep 17 00:00:00 2001 From: greg1904 Date: Tue, 18 Feb 2025 22:25:05 +0100 Subject: [PATCH 02/22] Launchbar --> Startleiste --- translations/de/server.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/de/server.json b/translations/de/server.json index f50a0daca..1b2cc5073 100644 --- a/translations/de/server.json +++ b/translations/de/server.json @@ -203,8 +203,8 @@ "bulk-action-title": "Massenverarbeitung", "backend-log-title": "Backend Log", "user-hidden-title": "Versteckt vom Nutzer", - "launch-bar-templates-title": "Launchbar Vorlagen", - "base-abstract-launcher-title": "Basis Abstrakte Launchbar", + "launch-bar-templates-title": "Startleiste Vorlagen", + "base-abstract-launcher-title": "Basis Abstrakte Startleiste", "command-launcher-title": "Befehlslauncher", "note-launcher-title": "Notiz Launcher", "script-launcher-title": "Script Launcher", From 62c9e865f5e05104ab99a006520336c2c7d4ca68 Mon Sep 17 00:00:00 2001 From: greg1904 Date: Tue, 18 Feb 2025 23:12:57 +0100 Subject: [PATCH 03/22] added some fields in translation.json + switched "Hinweis" to "Notiz" --- src/public/translations/de/translation.json | 83 +++++++++++++++------ 1 file changed, 62 insertions(+), 21 deletions(-) diff --git a/src/public/translations/de/translation.json b/src/public/translations/de/translation.json index c450085e3..b581ba812 100644 --- a/src/public/translations/de/translation.json +++ b/src/public/translations/de/translation.json @@ -1,6 +1,7 @@ { "about": { "title": "Über TriliumNext Notes", + "close": "Schließen", "homepage": "Startseite:", "app_version": "App-Version:", "db_version": "DB-Version:", @@ -52,10 +53,15 @@ "chosen_actions": "Ausgewählte Aktionen", "execute_bulk_actions": "Massenaktionen ausführen", "bulk_actions_executed": "Massenaktionen wurden erfolgreich ausgeführt.", - "none_yet": "Noch keine ... Füge eine Aktion hinzu, indem du oben auf eine der verfügbaren Aktionen klicken." + "none_yet": "Noch keine ... Füge eine Aktion hinzu, indem du oben auf eine der verfügbaren Aktionen klicken.", + "labels": "Labels", + "relations": "Beziehungen", + "notes": "Notizen", + "other": "Andere" }, "clone_to": { "clone_notes_to": "Notizen klonen nach...", + "close":"Schließen", "help_on_links": "Hilfe zu Links", "notes_to_clone": "Notizen zum Klonen", "target_parent_note": "Ziel-Übergeordnetenotiz", @@ -68,6 +74,7 @@ }, "confirm": { "confirmation": "Bestätigung", + "close":"Schließen", "cancel": "Abbrechen", "ok": "OK", "are_you_sure_remove_note": "Bist du sicher, dass du \"{{title}}\" von der Beziehungskarte entfernen möchten? ", @@ -76,6 +83,7 @@ }, "delete_notes": { "delete_notes_preview": "Vorschau der Notizen löschen", + "close": "Schließen", "delete_all_clones_description": "auch alle Klone löschen (kann bei letzte Änderungen rückgängig gemacht werden)", "erase_notes_description": "Beim normalen (vorläufigen) Löschen werden die Notizen nur als gelöscht markiert und sie können innerhalb eines bestimmten Zeitraums (im Dialogfeld „Letzte Änderungen“) wiederhergestellt werden. Wenn du diese Option aktivierst, werden die Notizen sofort gelöscht und es ist nicht möglich, die Notizen wiederherzustellen.", "erase_notes_warning": "Notizen dauerhaft löschen (kann nicht rückgängig gemacht werden), einschließlich aller Klone. Dadurch wird ein Neuladen der Anwendung erzwungen.", @@ -83,12 +91,15 @@ "no_note_to_delete": "Es werden keine Notizen gelöscht (nur Klone).", "broken_relations_to_be_deleted": "Folgende Beziehungen werden gelöst und gelöscht ()", "cancel": "Abbrechen", - "ok": "OK" + "ok": "OK", + "deleted_relation_text": "Notiz {{- note}} (soll gelöscht werden) wird von Beziehung {{- relation}} ausgehend von {{- source}} referenziert." + }, "export": { "export_note_title": "Notiz exportieren", "close": "Schließen", "export_type_subtree": "Diese Notiz und alle ihre Unternotizen", + "format_html": "HTML - empfohlen, da dadurch alle Formatierungen erhalten bleiben", "format_html_zip": "HTML im ZIP-Archiv – dies wird empfohlen, da dadurch die gesamte Formatierung erhalten bleibt.", "format_markdown": "Markdown – dadurch bleiben die meisten Formatierungen erhalten.", "format_opml": "OPML – Outliner-Austauschformat nur für Text. Formatierungen, Bilder und Dateien sind nicht enthalten.", @@ -99,7 +110,8 @@ "choose_export_type": "Bitte wähle zuerst den Exporttypen aus", "export_status": "Exportstatus", "export_in_progress": "Export läuft: {{progressCount}}", - "export_finished_successfully": "Der Export wurde erfolgreich abgeschlossen." + "export_finished_successfully": "Der Export wurde erfolgreich abgeschlossen.", + "format_pdf": "PDF - für Ausdrucke oder Teilen." }, "help": { "fullDocumentation": "Hilfe (gesamte Dokumentation ist online verfügbar)", @@ -171,10 +183,20 @@ "codeImportedAsCode": "Importiere erkannte Codedateien (z. B. .json) als Codenotizen, wenn die Metadaten unklar sind", "replaceUnderscoresWithSpaces": "Ersetze Unterstriche in importierten Notiznamen durch Leerzeichen", "import": "Import", - "failed": "Import fehlgeschlagen: {{message}}." + "failed": "Import fehlgeschlagen: {{message}}.", + "html_import_tags": { + "title": "HTML Tag Import", + "description": "Festlegen, welche HTML tags beim Import von Notizen beibehalten werden sollen. Tags, die nicht in dieser Liste stehen, werden beim Import entfernt. Einige tags (wie bspw. 'script') werden aus Sicherheitsgründen immer entfernt.", + "placeholder": "HTML tags eintragen, pro Zeile nur einer pro Zeile", + "reset_button": "Zur Standardliste zurücksetzen" + }, + "import-status": "Importstatus", + "in-progress": "Import läuft: {{progress}}", + "successful": "Import erfolgreich abgeschlossen." }, "include_note": { "dialog_title": "Notiz beifügen", + "close": "Schließen", "label_note": "Notiz", "placeholder_search": "Suche nach einer Notiz anhand ihres Namens", "box_size_prompt": "Kartongröße des beigelegten Zettels:", @@ -190,16 +212,19 @@ }, "jump_to_note": { "search_placeholder": "Suche nach einer Notiz anhand ihres Namens", + "close": "Schließen", "search_button": "Suche im Volltext: Strg+Eingabetaste" }, "markdown_import": { "dialog_title": "Markdown-Import", + "close": "Schließen", "modal_body_text": "Aufgrund der Browser-Sandbox ist es nicht möglich, die Zwischenablage direkt aus JavaScript zu lesen. Bitte füge den zu importierenden Markdown in den Textbereich unten ein und klicke auf die Schaltfläche „Importieren“.", "import_button": "Importieren Strg+Eingabe", "import_success": "Markdown-Inhalt wurde in das Dokument importiert." }, "move_to": { "dialog_title": "Notizen verschieben nach ...", + "close": "Schließen", "notes_to_move": "Notizen zum Verschieben", "target_parent_note": "Ziel-Elternnotiz", "search_placeholder": "Suche nach einer Notiz anhand ihres Namens", @@ -209,16 +234,19 @@ }, "note_type_chooser": { "modal_title": "Wähle den Notiztyp aus", + "close": "Schließen", "modal_body": "Wähle den Notiztyp / die Vorlage der neuen Notiz:", "templates": "Vorlagen:" }, "password_not_set": { "title": "Das Passwort ist nicht festgelegt", + "close": "Schließen", "body1": "Geschützte Notizen werden mit einem Benutzerpasswort verschlüsselt, es wurde jedoch noch kein Passwort festgelegt.", "body2": "Um Notizen verschlüsseln zu können, klicke hier um das Optionsmenu zu öffnen und ein Passwort zu setzen." }, "prompt": { "title": "Prompt", + "close": "Schließen", "ok": "OK Eingabe", "defaultTitle": "Prompt" }, @@ -232,6 +260,7 @@ "recent_changes": { "title": "Aktuelle Änderungen", "erase_notes_button": "Jetzt gelöschte Notizen löschen", + "close": "Schließen", "deleted_notes_message": "Gelöschte Notizen wurden gelöscht.", "no_changes_message": "Noch keine Änderungen...", "undelete_link": "Wiederherstellen", @@ -242,6 +271,7 @@ "delete_all_revisions": "Lösche alle Revisionen dieser Notiz", "delete_all_button": "Alle Revisionen löschen", "help_title": "Hilfe zu Notizrevisionen", + "close": "Schließen", "revision_last_edited": "Diese Revision wurde zuletzt am {{date}} bearbeitet", "confirm_delete_all": "Möchtest du alle Revisionen dieser Notiz löschen? Durch diese Aktion werden der Titel und der Inhalt der Revision gelöscht, die Metadaten der Revision bleiben jedoch erhalten.", "no_revisions": "Für diese Notiz gibt es noch keine Revisionen...", @@ -249,9 +279,9 @@ "confirm_restore": "Möchtest du diese Revision wiederherstellen? Dadurch werden der aktuelle Titel und Inhalt der Notiz mit dieser Revision überschrieben.", "delete_button": "Lösche diese Revision", "confirm_delete": "Möchtest du diese Revision löschen? Durch diese Aktion werden der Titel und der Inhalt der Revision gelöscht, die Metadaten der Revision bleiben jedoch erhalten.", - "revisions_deleted": "Hinweisrevisionen wurden gelöscht.", + "revisions_deleted": "Notizrevisionen wurden gelöscht.", "revision_restored": "Die Notizrevision wurde wiederhergestellt.", - "revision_deleted": "Hinweisrevision wurde gelöscht.", + "revision_deleted": "Notizrevision wurde gelöscht.", "snapshot_interval": "Notizrevisionen-Snapshot Intervall: {{seconds}}s.", "maximum_revisions": "Maximale Revisionen für aktuelle Notiz: {{number}}.", "settings": "Einstellungen für Notizrevisionen", @@ -263,6 +293,7 @@ }, "sort_child_notes": { "sort_children_by": "Unternotizen sortieren nach...", + "close": "Schließen", "sorting_criteria": "Sortierkriterien", "title": "Titel", "date_created": "Erstellungsdatum", @@ -280,6 +311,7 @@ }, "upload_attachments": { "upload_attachments_to_note": "Lade Anhänge zur Notiz hoch", + "close": "Schließen", "choose_files": "Wähle Dateien aus", "files_will_be_uploaded": "Dateien werden als Anhänge in hochgeladen", "options": "Optionen", @@ -345,6 +377,7 @@ "auto_read_only_disabled": "Text-/Codenotizen können automatisch in den Lesemodus versetzt werden, wenn sie zu groß sind. Du kannst dieses Verhalten für jede einzelne Notiz deaktivieren, indem du diese Beschriftung zur Notiz hinzufügst", "app_css": "markiert CSS-Notizen, die in die Trilium-Anwendung geladen werden und somit zur Änderung des Aussehens von Trilium verwendet werden können.", "app_theme": "markiert CSS-Notizen, die vollständige Trilium-Themen sind und daher in den Trilium-Optionen verfügbar sind.", + "app_theme_base": "markiert Notiz als \"nächste\" in der Reihe für ein Trilium-Theme als Grundlage für ein Custom-Theme. Ersetzt damit das Standard Theme.", "css_class": "Der Wert dieser Bezeichnung wird dann als CSS-Klasse dem Knoten hinzugefügt, der die angegebene Notiz im Baum darstellt. Dies kann für fortgeschrittene Themen nützlich sein. Kann in Vorlagennotizen verwendet werden.", "icon_class": "Der Wert dieser Bezeichnung wird als CSS-Klasse zum Symbol im Baum hinzugefügt, was dabei helfen kann, die Notizen im Baum visuell zu unterscheiden. Beispiel könnte bx bx-home sein – Symbole werden von Boxicons übernommen. Kann in Vorlagennotizen verwendet werden.", "page_size": "Anzahl der Elemente pro Seite in der Notizliste", @@ -406,7 +439,9 @@ "share_favicon": "Favicon-Notiz, die auf der freigegebenen Seite festgelegt werden soll. Normalerweise möchtest du es so einstellen, dass es Root teilt und es vererbbar macht. Die Favicon-Notiz muss sich ebenfalls im freigegebenen Unterbaum befinden. Erwäge die Verwendung von „share_hidden_from_tree“.", "is_owned_by_note": "ist Eigentum von Note", "other_notes_with_name": "Other notes with {{attributeType}} name \"{{attributeName}}\"", - "and_more": "... und {{count}} mehr." + "and_more": "... und {{count}} mehr.", + "print_landscape": "Beim Export als PDF, wird die Seitenausrichtung Querformat anstatt Hochformat verwendet.", + "print_page_size": "Beim Export als PDF, wird die Größe der Seite angepasst. Unterstützte Größen: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger." }, "attribute_editor": { "help_text_body1": "Um ein Label hinzuzufügen, gebe einfach z.B. ein. #rock oder wenn du auch einen Wert hinzufügen möchten, dann z.B. #year = 2024", @@ -491,7 +526,7 @@ "example_note": "Notiz – alle übereinstimmenden Notizen werden in „Notiz“ umbenannt.", "example_new_title": "NEU: ${note.title} – Übereinstimmende Notiztitel erhalten das Präfix „NEU:“", "example_date_prefix": "${note.dateCreatedObj.format('MM-DD:')}: ${note.title} – übereinstimmende Notizen werden mit dem Erstellungsmonat und -datum der Notiz vorangestellt", - "api_docs": "Siehe API-Dokumente für Hinweis und seinen dateCreatedObj / utcDateCreatedObj-Eigenschaften für Details." + "api_docs": "Siehe API-Dokumente für Notiz und seinen dateCreatedObj / utcDateCreatedObj-Eigenschaften für Details." }, "add_relation": { "add_relation": "Beziehung hinzufügen", @@ -607,7 +642,9 @@ "show_hidden_subtree": "Versteckten Teilbaum anzeigen", "show_help": "Hilfe anzeigen", "about": "Über TriliumNext Notes", - "logout": "Abmelden" + "logout": "Abmelden", + "show-cheatsheet": "Cheatsheet anzeigen", + "toggle-zen-mode": "Zen Modus" }, "sync_status": { "unknown": "

Der Synchronisations-Status wird bekannt, sobald der nächste Synchronisierungsversuch gestartet wird.

Klicke, um eine Synchronisierung jetzt auszulösen.

", @@ -641,7 +678,8 @@ "save_revision": "Revision speichern", "convert_into_attachment_failed": "Konvertierung der Notiz '{{title}}' fehlgeschlagen.", "convert_into_attachment_successful": "Notiz '{{title}}' wurde als Anhang konvertiert.", - "convert_into_attachment_prompt": "Bist du dir sicher, dass du die Notiz '{{title}}' in ein Anhang der übergeordneten Notiz konvertieren möchtest?" + "convert_into_attachment_prompt": "Bist du dir sicher, dass du die Notiz '{{title}}' in ein Anhang der übergeordneten Notiz konvertieren möchtest?", + "print_pdf": "Export als PDF..." }, "onclick_button": { "no_click_handler": "Das Schaltflächen-Widget „{{componentId}}“ hat keinen definierten Klick-Handler" @@ -715,7 +753,8 @@ "collapse": "Einklappen", "expand": "Ausklappen", "book_properties": "Bucheigenschaften", - "invalid_view_type": "Ungültiger Ansichtstyp „{{type}}“" + "invalid_view_type": "Ungültiger Ansichtstyp „{{type}}“", + "calendar": "Kalender" }, "edited_notes": { "no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...", @@ -759,15 +798,17 @@ "note_size_info": "Die Notizgröße bietet eine grobe Schätzung des Speicherbedarfs für diese Notiz. Es berücksichtigt den Inhalt der Notiz und den Inhalt ihrer Notizrevisionen.", "calculate": "berechnen", "subtree_size": "(Teilbaumgröße: {{size}} in {{count}} Notizen)", - "title": "Hinweisinfo" + "title": "Notizinfo" }, "note_map": { "open_full": "Vollständig erweitern", "collapse": "Auf normale Größe reduzieren", - "title": "Hinweiskarte" + "title": "Notizkarte", + "fix-nodes": "Knoten fixieren", + "link-distance": "Verbindungslänge" }, "note_paths": { - "title": "Hinweispfade", + "title": "Notizpfade", "clone_button": "Notiz an neuen Speicherort klonen...", "intro_placed": "Diese Notiz wird in den folgenden Pfaden abgelegt:", "intro_not_placed": "Diese Notiz ist noch nicht im Notizbaum platziert.", @@ -900,14 +941,14 @@ }, "attachment_detail": { "open_help_page": "Hilfeseite zu Anhängen öffnen", - "owning_note": "Hinweis zum Eigentümer:", + "owning_note": "Eigentümernotiz: ", "you_can_also_open": ", Du kannst auch das öffnen", "list_of_all_attachments": "Liste aller Anhänge", "attachment_deleted": "Dieser Anhang wurde gelöscht." }, "attachment_list": { "open_help_page": "Hilfeseite zu Anhängen öffnen", - "owning_note": "Hinweis zum Eigentümer:", + "owning_note": "Eigentümernotiz: ", "upload_attachments": "Anhänge hochladen", "no_attachments": "Diese Notiz enthält keine Anhänge." }, @@ -951,7 +992,7 @@ "specify_new_relation_name": "Gebe den neuen Beziehungsnamen an (erlaubte Zeichen: alphanumerisch, Doppelpunkt und Unterstrich):", "connection_exists": "Die Verbindung „{{name}}“ zwischen diesen Notizen besteht bereits.", "start_dragging_relations": "Beginne hier mit dem Ziehen von Beziehungen und lege sie auf einer anderen Notiz ab.", - "note_not_found": "Hinweis {{noteId}} nicht gefunden!", + "note_not_found": "Notiz {{noteId}} nicht gefunden!", "cannot_match_transform": "Transformation kann nicht übereinstimmen: {{transform}}", "note_already_in_diagram": "Die Notiz \"{{title}}\" ist schon im Diagram.", "enter_title_of_new_note": "Gebe den Titel der neuen Notiz ein", @@ -959,12 +1000,12 @@ "click_on_canvas_to_place_new_note": "Klicke auf den Canvas, um eine neue Notiz zu platzieren" }, "render": { - "note_detail_render_help_1": "Dieser Hilfehinweis wird angezeigt, da dieser Hinweis vom Typ „HTML rendern“ nicht über die erforderliche Beziehung verfügt, um ordnungsgemäß zu funktionieren.", + "note_detail_render_help_1": "Diese Hilfesnotiz wird angezeigt, da diese Notiz vom Typ „HTML rendern“ nicht über die erforderliche Beziehung verfügt, um ordnungsgemäß zu funktionieren.", "note_detail_render_help_2": "Render-HTML-Notiztyp wird benutzt für scripting. Kurzgesagt, du hast ein HTML-Code-Notiz (optional mit JavaScript) und diese Notiz rendert es. Damit es funktioniert, musst du eine a Beziehung namens \"renderNote\" zeigend auf die HTML-Notiz zum rendern definieren." }, "web_view": { "web_view": "Webansicht", - "embed_websites": "Hinweis vom Typ Web View ermöglicht das Einbetten von Websites in Trilium.", + "embed_websites": "Notiz vom Typ Web View ermöglicht das Einbetten von Websites in Trilium.", "create_label": "To start, please create a label with a URL address you want to embed, e.g. #webViewSrc=\"https://www.google.com\"" }, "backend_log": { @@ -1024,8 +1065,8 @@ "main_font": "Handschrift", "font_family": "Schriftfamilie", "size": "Größe", - "note_tree_font": "Hinweisbaum-Schriftart", - "note_detail_font": "Hinweis-Detail-Schriftart", + "note_tree_font": "Notizbaum-Schriftart", + "note_detail_font": "Notiz-Detail-Schriftart", "monospace_font": "Minivan (Code) Schriftart", "note_tree_and_detail_font_sizing": "Beachte, dass die Größe der Baum- und Detailschriftarten relativ zur Hauptschriftgrößeneinstellung ist.", "not_all_fonts_available": "Möglicherweise sind nicht alle aufgelisteten Schriftarten auf Ihrem System verfügbar.", From c261bf7f7a8dcc3c2ea789ba9d4771f7c1e577bb Mon Sep 17 00:00:00 2001 From: greg1904 Date: Tue, 18 Feb 2025 23:30:14 +0100 Subject: [PATCH 04/22] Kind --> Unternotiz and some other additions --- src/public/translations/de/translation.json | 50 ++++++++++++++++----- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/src/public/translations/de/translation.json b/src/public/translations/de/translation.json index b581ba812..25b3a6375 100644 --- a/src/public/translations/de/translation.json +++ b/src/public/translations/de/translation.json @@ -370,7 +370,7 @@ "disable_inclusion": "Skripte mit dieser Bezeichnung werden nicht in die Ausführung des übergeordneten Skripts einbezogen.", "sorted": "Hält untergeordnete Notizen alphabetisch nach Titel sortiert", "sort_direction": "ASC (Standard) oder DESC", - "sort_folders_first": "Ordner (Notizen mit Kindern) sollten oben sortiert werden", + "sort_folders_first": "Ordner (Notizen mit Unternotizen) sollten oben sortiert werden", "top": "Behalte die angegebene Notiz oben in der übergeordneten Notiz (gilt nur für sortierte übergeordnete Notizen).", "hide_promoted_attributes": "Heraufgestufte Attribute für diese Notiz ausblenden", "read_only": "Der Editor befindet sich im schreibgeschützten Modus. Funktioniert nur für Text- und Codenotizen.", @@ -905,7 +905,7 @@ "content_and_attachments_size": "Beachte die Inhaltsgröße einschließlich der Anhänge", "content_and_attachments_and_revisions_size": "Beachte die Inhaltsgröße einschließlich Anhängen und Revisionen", "revision_count": "Anzahl der Revisionen", - "children_count": "Anzahl der Kindernotizen", + "children_count": "Anzahl der Unternotizen", "parent_count": "Anzahl der Klone", "owned_label_count": "Anzahl der Etiketten", "owned_relation_count": "Anzahl der Beziehungen", @@ -1071,7 +1071,16 @@ "note_tree_and_detail_font_sizing": "Beachte, dass die Größe der Baum- und Detailschriftarten relativ zur Hauptschriftgrößeneinstellung ist.", "not_all_fonts_available": "Möglicherweise sind nicht alle aufgelisteten Schriftarten auf Ihrem System verfügbar.", "apply_font_changes": "Um Schriftartänderungen zu übernehmen, klicke auf", - "reload_frontend": "Frontend neu laden" + "reload_frontend": "Frontend neu laden", + "generic-fonts": "Generische Schriftarten", + "sans-serif-system-fonts": "Sans-serif Systemschriftarten", + "serif-system-fonts": "Serif Systemschriftarten", + "monospace-system-fonts": "Monospace Systemschriftarten", + "handwriting-system-fonts": "Handschrift Systemschriftarten", + "serif": "Serif", + "sans-serif": "Sans Serif", + "monospace": "Monospace", + "system-default": "System Standard" }, "max_content_width": { "title": "Inhaltsbreite", @@ -1095,8 +1104,17 @@ "title": "Thema", "theme_label": "Thema", "override_theme_fonts_label": "Theme-Schriftarten überschreiben", - "light_theme": "Licht", - "dark_theme": "Dunkel" + "auto_theme": "Auto", + "light_theme": "Hell", + "dark_theme": "Dunkel", + "triliumnext": "TriliumNext Beta (Systemfarbschema folgend)", + "triliumnext-light": "TriliumNext Beta (Hell)", + "triliumnext-dark": "TriliumNext Beta (Dunkel)", + "layout": "Layout", + "layout-vertical-title": "Vertikal", + "layout-horizontal-title": "Horizontal", + "layout-vertical-description": "Startleiste ist auf der linken Seite (standard)", + "layout-horizontal-description": "Startleiste ist unter der Tableiste. Die Tableiste wird dadurch auf die ganze Breite erweitert." }, "zoom_factor": { "title": "Zoomfaktor (nur Desktop-Build)", @@ -1222,6 +1240,8 @@ "backup_now": "Jetzt sichern", "backup_database_now": "Jetzt Datenbank sichern", "existing_backups": "Vorhandene Backups", + "date-and-time": "Datum & Uhrzeit", + "path": "Pfad", "database_backed_up_to": "Die Datenbank wurde gesichert unter {{backupFilePath}}", "no_backup_yet": "noch kein Backup" }, @@ -1229,7 +1249,7 @@ "title": "ETAPI", "description": "ETAPI ist eine REST-API, die für den programmgesteuerten Zugriff auf die Trilium-Instanz ohne Benutzeroberfläche verwendet wird.", "see_more": "Weitere Details findest du unter", - "wiki": "Woche", + "wiki": "Wiki", "and": "und", "openapi_spec": "ETAPI OpenAPI-Spezifikation", "create_token": "Erstelle ein neues ETAPI-Token", @@ -1395,7 +1415,9 @@ "launcher": "Launcher", "doc": "Dokument", "widget": "Widget", - "confirm-change": "Es is nicht empfehlenswert den Notiz-Typ zu ändern, wenn der Inhalt der Notiz nicht leer ist. Möchtest du dennoch fortfahren?" + "confirm-change": "Es is nicht empfehlenswert den Notiz-Typ zu ändern, wenn der Inhalt der Notiz nicht leer ist. Möchtest du dennoch fortfahren?", + "geo-map": "Geo Map", + "beta-feature": "Beta" }, "protect_note": { "toggle-on": "Notiz schützen", @@ -1418,7 +1440,11 @@ "open-help-page": "Hilfeseite öffnen", "find": { "case_sensitive": "Groß-/Kleinschreibung beachten", - "match_words": "Wörter genau übereinstimmen" + "match_words": "Wörter genau übereinstimmen", + "find_placeholder": "Finde in Text...", + "replace_placeholder": "Ersetze mit...", + "replace": "Ersetzen", + "replace_all": "Alle Ersetzen" }, "highlights_list_2": { "title": "Hervorhebungs-Liste", @@ -1443,7 +1469,11 @@ "automatically-collapse-notes-title": "Notizen werden nach einer Inaktivitätsperiode automatisch zusammengeklappt, um den Baum zu entlasten.", "save-changes": "Änderungen speichern und anwenden", "auto-collapsing-notes-after-inactivity": "Automatisches Zusammenklappen von Notizen nach Inaktivität…", - "saved-search-note-refreshed": "Gespeicherte Such-Notiz wurde aktualisiert." + "saved-search-note-refreshed": "Gespeicherte Such-Notiz wurde aktualisiert.", + "hoist-this-note-workspace": "Diese Notiz anheben (Arbeitsbereich)", + "refresh-saved-search-results": "Gespeicherte Suchergebnisse aktualisieren", + "create-child-note": "Unternotiz anlegen", + "unhoist": "Unhoist" }, "title_bar_buttons": { "window-on-top": "Dieses Fenster immer oben halten" @@ -1526,7 +1556,7 @@ "confirm_unhoisting": "Die angeforderte Notiz ‚{{requestedNote}}‘ befindet sich außerhalb des hoisted Bereichs der Notiz ‚{{hoistedNote}}‘. Du musst sie unhoisten, um auf die Notiz zuzugreifen. Möchtest du mit dem Unhoisting fortfahren?" }, "launcher_context_menu": { - "reset_launcher_confirm": "Möchtest du „{{title}}“ wirklich zurücksetzen? Alle Daten / Einstellungen in dieser Notiz (und ihren Kindern) gehen verloren und der Launcher wird an seinen ursprünglichen Standort zurückgesetzt.", + "reset_launcher_confirm": "Möchtest du „{{title}}“ wirklich zurücksetzen? Alle Daten / Einstellungen in dieser Notiz (und ihren Unternotizen) gehen verloren und der Launcher wird an seinen ursprünglichen Standort zurückgesetzt.", "add-note-launcher": "Launcher für Notiz hinzufügen", "add-script-launcher": "Launcher für Skript hinzufügen", "add-custom-widget": "Benutzerdefiniertes Widget hinzufügen", From 4ed3a28e293531fdb115fe67ddaf5232ff771e33 Mon Sep 17 00:00:00 2001 From: greg1904 Date: Tue, 18 Feb 2025 23:49:27 +0100 Subject: [PATCH 05/22] german adjustments --- src/public/translations/de/translation.json | 85 ++++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/src/public/translations/de/translation.json b/src/public/translations/de/translation.json index 25b3a6375..72295a3ed 100644 --- a/src/public/translations/de/translation.json +++ b/src/public/translations/de/translation.json @@ -1470,10 +1470,10 @@ "save-changes": "Änderungen speichern und anwenden", "auto-collapsing-notes-after-inactivity": "Automatisches Zusammenklappen von Notizen nach Inaktivität…", "saved-search-note-refreshed": "Gespeicherte Such-Notiz wurde aktualisiert.", - "hoist-this-note-workspace": "Diese Notiz anheben (Arbeitsbereich)", + "hoist-this-note-workspace": "Diese Notiz fokussieren (Arbeitsbereich)", "refresh-saved-search-results": "Gespeicherte Suchergebnisse aktualisieren", "create-child-note": "Unternotiz anlegen", - "unhoist": "Unhoist" + "unhoist": "Entfokussieren" }, "title_bar_buttons": { "window-on-top": "Dieses Fenster immer oben halten" @@ -1504,7 +1504,9 @@ "close_other_tabs": "Andere Tabs schließen", "close_right_tabs": "Tabs rechts schließen", "close_all_tabs": "Alle Tabs schließen", + "reopen_last_tab": "Zuletzt geschlossenen Tab erneut öffnen", "move_tab_to_new_window": "Tab in neues Fenster verschieben", + "copy_tab_to_new_window": "Tab in neues Fenster kopieren", "new_tab": "Neuer Tab" }, "toc": { @@ -1577,5 +1579,84 @@ }, "code_block": { "word_wrapping": "Wortumbruch" + }, + "classic_editor_toolbar": { + "title": "Format" + }, + "editor": { + "title": "Editor" + }, + "editing": { + "editor_type": { + "label": "Format Toolbar", + "floating": { + "title": "Schwebend", + "description": "Werkzeuge erscheinen in Cursornähe" + }, + "fixed": { + "title": "Fixiert", + "description": "Werkzeuge erscheinen im \"Format\" Tab" + }, + "multiline-toolbar": "Toolbar wenn nötig in mehreren Zeilen darstellen." + } + }, + "electron_context_menu": { + "add-term-to-dictionary": "Begriff \"{{term}}\" zum Wörterbuch hinzufügen", + "cut": "Ausschneiden", + "copy": "Kopieren", + "copy-link": "Link opieren", + "paste": "Einfügen", + "paste-as-plain-text": "Als unformatierten Text einfügen", + "search_online": "Suche nach \"{{term}}\" mit {{searchEngine}} starten" + }, + "image_context_menu": { + "copy_reference_to_clipboard": "Referenz in Zwischenablage kopieren", + "copy_image_to_clipboard": "Bild in die Zwischenablage kopieren" + }, + "link_context_menu": { + "open_note_in_new_tab": "Notiz in neuen Tab öffnen", + "open_note_in_new_split": "Notiz in neuen geteilten Tab öffnen", + "open_note_in_new_window": "Notiz in neuen Fenster öffnen" + }, + "electron_integration": { + "desktop-application": "Desktop Anwendung", + "native-title-bar": "Native Anwendungsleiste", + "native-title-bar-description": "In Windows und macOS, sorgt das Deaktivieren der nativen Anwendungsleiste für ein kompakteres Aussehen. Unter Linux, sorgt das Aktivieren der nativen Anwendungsleiste für eine bessere Integration mit anderen Teilen des Systems.", + "background-effects": "Hintergrundeffekte aktivieren (nur Windows 11)", + "background-effects-description": "Der Mica Effekt fügt einen unscharfen, stylischen Hintergrund in Anwendungsfenstern ein. Dieser erzeugt Tiefe und ein modernes Auftreten.", + "restart-app-button": "Anwendung neustarten um Änderungen anzuwenden", + "zoom-factor": "Zoomfaktor" + }, + "note_autocomplete": { + "search-for": "Suche nach \"{{term}}\"", + "create-note": "Erstelle und verlinke Unternotiz \"{{term}}\"", + "insert-external-link": "Einfügen von Externen Link zu \"{{term}}\"", + "clear-text-field": "Textfeldinhalt löschen", + "show-recent-notes": "Aktuelle Notizen anzeigen", + "full-text-search": "Volltextsuche" + }, + "note_tooltip": { + "note-has-been-deleted": "Notiz wurde gelöscht." + }, + "geo-map": { + "create-child-note-title": "Neue Unternotiz anlegen und zur Karte hinzufügen", + "create-child-note-instruction": "Auf die Karte klicken, um eine neue Notiz an der Stelle zu erstellen oder Escape drücken um abzubrechen.", + "unable-to-load-map": "Karte konnte nicht geladen werden." + }, + "geo-map-context": { + "open-location": "Ort öffnen", + "remove-from-map": "Von Karte entfernen" + }, + "help-button": { + "title": "Relevante Hilfeseite öffnen" + }, + "duration": { + "seconds": "Sekunden", + "minutes": "Minuten", + "hours": "Stunden", + "days": "Tage" + }, + "time_selector": { + "invalid_input": "Die eingegebene Zeit ist keine valide Zahl." } } From 549917c1f1057c40224c6c6809b9cfcdae21bfa6 Mon Sep 17 00:00:00 2001 From: greg1904 Date: Tue, 18 Feb 2025 23:56:15 +0100 Subject: [PATCH 06/22] small consistency adjustment --- src/public/translations/de/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/translations/de/translation.json b/src/public/translations/de/translation.json index 72295a3ed..718285843 100644 --- a/src/public/translations/de/translation.json +++ b/src/public/translations/de/translation.json @@ -631,7 +631,7 @@ "zoom_in": "Hineinzoomen", "configure_launchbar": "Konfiguriere die Launchbar", "show_shared_notes_subtree": "Unterbaum „Freigegebene Notizen“ anzeigen", - "advanced": "Fortschrittlich", + "advanced": "Erweitert", "open_dev_tools": "Öffne die Entwicklungstools", "open_sql_console": "Öffne die SQL-Konsole", "open_sql_console_history": "Öffne den SQL-Konsolenverlauf", From 61f2e35717e2f29504a36b8c3c6b603ea14ea9c9 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 19 Feb 2025 13:41:05 +0200 Subject: [PATCH 07/22] feat(client/file): trim big files in order to improve performance --- src/public/app/widgets/type_widgets/file.ts | 15 ++++++++++++++- src/public/translations/en/translation.json | 3 ++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/public/app/widgets/type_widgets/file.ts b/src/public/app/widgets/type_widgets/file.ts index 8030a7c93..735988278 100644 --- a/src/public/app/widgets/type_widgets/file.ts +++ b/src/public/app/widgets/type_widgets/file.ts @@ -4,6 +4,8 @@ import { t } from "../../services/i18n.js"; import type { EventData } from "../../components/app_context.js"; import type FNote from "../../entities/fnote.js"; +const TEXT_MAX_NUM_CHARS = 5000; + const TPL = `
+
+ ${t("file.too_big", { maxNumChars: TEXT_MAX_NUM_CHARS })} +
+

 
     
@@ -46,6 +52,7 @@ export default class FileTypeWidget extends TypeWidget { private $previewContent!: JQuery; private $previewNotAvailable!: JQuery; + private $previewTooBig!: JQuery; private $pdfPreview!: JQuery; private $videoPreview!: JQuery; private $audioPreview!: JQuery; @@ -58,6 +65,7 @@ export default class FileTypeWidget extends TypeWidget { this.$widget = $(TPL); this.$previewContent = this.$widget.find(".file-preview-content"); this.$previewNotAvailable = this.$widget.find(".file-preview-not-available"); + this.$previewTooBig = this.$widget.find(".file-preview-too-big"); this.$pdfPreview = this.$widget.find(".pdf-preview"); this.$videoPreview = this.$widget.find(".video-preview"); this.$audioPreview = this.$widget.find(".audio-preview"); @@ -73,12 +81,17 @@ export default class FileTypeWidget extends TypeWidget { this.$previewContent.empty().hide(); this.$pdfPreview.attr("src", "").empty().hide(); this.$previewNotAvailable.hide(); + this.$previewTooBig.hide(); this.$videoPreview.hide(); this.$audioPreview.hide(); if (blob?.content) { this.$previewContent.show().scrollTop(0); - this.$previewContent.text(blob.content); + const trimmedContent = blob.content.substring(0, TEXT_MAX_NUM_CHARS); + if (trimmedContent.length !== blob.content.length) { + this.$previewTooBig.show(); + } + this.$previewContent.text(trimmedContent); } else if (note.mime === "application/pdf") { this.$pdfPreview.show().attr("src", openService.getUrlForDownload(`api/notes/${this.noteId}/open`)); } else if (note.mime.startsWith("video/")) { diff --git a/src/public/translations/en/translation.json b/src/public/translations/en/translation.json index 1a5d92b32..ccffe93d5 100644 --- a/src/public/translations/en/translation.json +++ b/src/public/translations/en/translation.json @@ -966,7 +966,8 @@ "enter_workspace": "Enter workspace {{title}}" }, "file": { - "file_preview_not_available": "File preview is not available for this file format." + "file_preview_not_available": "File preview is not available for this file format.", + "too_big": "The preview only shows the first {{maxNumChars}} characters of the file for performance reasons. Download the file and open it externally to be able to see the entire content." }, "protected_session": { "enter_password_instruction": "Showing protected note requires entering your password:", From 6b5d905ebe9535511450596730c90b010e04a2b2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 19 Feb 2025 13:43:50 +0200 Subject: [PATCH 08/22] fix(client/file): flicker when too big alert is not needed --- src/public/app/widgets/type_widgets/file.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/public/app/widgets/type_widgets/file.ts b/src/public/app/widgets/type_widgets/file.ts index 735988278..1e75bfdb0 100644 --- a/src/public/app/widgets/type_widgets/file.ts +++ b/src/public/app/widgets/type_widgets/file.ts @@ -31,7 +31,7 @@ const TPL = ` } -
+
${t("file.too_big", { maxNumChars: TEXT_MAX_NUM_CHARS })}
@@ -81,7 +81,7 @@ export default class FileTypeWidget extends TypeWidget { this.$previewContent.empty().hide(); this.$pdfPreview.attr("src", "").empty().hide(); this.$previewNotAvailable.hide(); - this.$previewTooBig.hide(); + this.$previewTooBig.addClass("hidden-ext"); this.$videoPreview.hide(); this.$audioPreview.hide(); @@ -89,7 +89,7 @@ export default class FileTypeWidget extends TypeWidget { this.$previewContent.show().scrollTop(0); const trimmedContent = blob.content.substring(0, TEXT_MAX_NUM_CHARS); if (trimmedContent.length !== blob.content.length) { - this.$previewTooBig.show(); + this.$previewTooBig.removeClass("hidden-ext"); } this.$previewContent.text(trimmedContent); } else if (note.mime === "application/pdf") { From 04a6175630ecca389390da4f915ac6499f1ddadf Mon Sep 17 00:00:00 2001 From: McSido Date: Wed, 19 Feb 2025 22:52:38 +0100 Subject: [PATCH 09/22] feat(geomap): enhance icon building to include color class --- src/public/app/widgets/type_widgets/geo_map.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/public/app/widgets/type_widgets/geo_map.ts b/src/public/app/widgets/type_widgets/geo_map.ts index 1c1a72e35..4579ab730 100644 --- a/src/public/app/widgets/type_widgets/geo_map.ts +++ b/src/public/app/widgets/type_widgets/geo_map.ts @@ -222,7 +222,7 @@ export default class GeoMapTypeWidget extends TypeWidget { const [ lat, lng ] = latLng.split(",", 2).map((el) => parseFloat(el)); const L = this.L; - const icon = this.#buildIcon(note.getIcon(), note.title); + const icon = this.#buildIcon(note.getIcon(), note.getColorClass(), note.title); const marker = L.marker(L.latLng(lat, lng), { icon, @@ -257,12 +257,12 @@ export default class GeoMapTypeWidget extends TypeWidget { this.currentMarkerData[note.noteId] = marker; } - #buildIcon(bxIconClass: string, title: string) { + #buildIcon(bxIconClass: string, colorClass: string, title: string) { return this.L.divIcon({ html: `\ - + ${title}`, iconSize: [ 25, 41 ], iconAnchor: [ 12, 41 ] From 587a05143090ec5ef34abffda0a52ccad2333050 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 02:56:46 +0000 Subject: [PATCH 10/22] chore(deps): update dependency tsx to v4.19.3 --- package-lock.json | 226 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 123 insertions(+), 105 deletions(-) diff --git a/package-lock.json b/package-lock.json index db09f9241..e430675b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -169,7 +169,7 @@ "rimraf": "6.0.1", "swagger-jsdoc": "6.2.8", "tslib": "2.8.1", - "tsx": "4.19.2", + "tsx": "4.19.3", "typedoc": "0.27.7", "typescript": "5.7.3", "vitest": "3.0.5", @@ -1693,9 +1693,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", "cpu": [ "ppc64" ], @@ -1710,9 +1710,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", "cpu": [ "arm" ], @@ -1727,9 +1727,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", "cpu": [ "arm64" ], @@ -1744,9 +1744,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", "cpu": [ "x64" ], @@ -1761,9 +1761,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", "cpu": [ "arm64" ], @@ -1778,9 +1778,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", "cpu": [ "x64" ], @@ -1795,9 +1795,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", "cpu": [ "arm64" ], @@ -1812,9 +1812,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", "cpu": [ "x64" ], @@ -1829,9 +1829,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", "cpu": [ "arm" ], @@ -1846,9 +1846,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", "cpu": [ "arm64" ], @@ -1863,9 +1863,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", "cpu": [ "ia32" ], @@ -1880,9 +1880,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", "cpu": [ "loong64" ], @@ -1897,9 +1897,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", "cpu": [ "mips64el" ], @@ -1914,9 +1914,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", "cpu": [ "ppc64" ], @@ -1931,9 +1931,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", "cpu": [ "riscv64" ], @@ -1948,9 +1948,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", "cpu": [ "s390x" ], @@ -1965,9 +1965,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", "cpu": [ "x64" ], @@ -1999,9 +1999,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", "cpu": [ "x64" ], @@ -2016,9 +2016,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", "cpu": [ "arm64" ], @@ -2033,9 +2033,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", "cpu": [ "x64" ], @@ -2050,9 +2050,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", "cpu": [ "x64" ], @@ -2067,9 +2067,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", "cpu": [ "arm64" ], @@ -2084,9 +2084,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", "cpu": [ "ia32" ], @@ -2101,9 +2101,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", "cpu": [ "x64" ], @@ -8962,9 +8962,9 @@ "optional": true }, "node_modules/esbuild": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -8975,30 +8975,48 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/escalade": { @@ -16918,13 +16936,13 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", - "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", + "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.23.0", + "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "bin": { diff --git a/package.json b/package.json index 2503ee043..f501b0b70 100644 --- a/package.json +++ b/package.json @@ -224,7 +224,7 @@ "rimraf": "6.0.1", "swagger-jsdoc": "6.2.8", "tslib": "2.8.1", - "tsx": "4.19.2", + "tsx": "4.19.3", "typedoc": "0.27.7", "typescript": "5.7.3", "vitest": "3.0.5", From 68c7df797ddd8d042fd96f26b85b9bea09f3f215 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 02:57:00 +0000 Subject: [PATCH 11/22] chore(deps): update vitest monorepo to v3.0.6 --- package-lock.json | 150 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 77 insertions(+), 77 deletions(-) diff --git a/package-lock.json b/package-lock.json index db09f9241..138775875 100644 --- a/package-lock.json +++ b/package-lock.json @@ -157,7 +157,7 @@ "@types/ws": "8.5.14", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", - "@vitest/coverage-v8": "3.0.5", + "@vitest/coverage-v8": "3.0.6", "cross-env": "7.0.3", "electron": "34.2.0", "esm": "3.2.25", @@ -172,7 +172,7 @@ "tsx": "4.19.2", "typedoc": "0.27.7", "typescript": "5.7.3", - "vitest": "3.0.5", + "vitest": "3.0.6", "webpack": "5.98.0", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2" @@ -4523,9 +4523,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.5.tgz", - "integrity": "sha512-zOOWIsj5fHh3jjGwQg+P+J1FW3s4jBu1Zqga0qW60yutsBtqEqNEJKWYh7cYn1yGD+1bdPsPdC/eL4eVK56xMg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.0.6.tgz", + "integrity": "sha512-JRTlR8Bw+4BcmVTICa7tJsxqphAktakiLsAmibVLAWbu1lauFddY/tXeM6sAyl1cgkPuXtpnUgaCPhTdz1Qapg==", "dev": true, "license": "MIT", "dependencies": { @@ -4546,8 +4546,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.0.5", - "vitest": "3.0.5" + "@vitest/browser": "3.0.6", + "vitest": "3.0.6" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -4556,15 +4556,15 @@ } }, "node_modules/@vitest/expect": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.5.tgz", - "integrity": "sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.6.tgz", + "integrity": "sha512-zBduHf/ja7/QRX4HdP1DSq5XrPgdN+jzLOwaTq/0qZjYfgETNFCKf9nOAp2j3hmom3oTbczuUzrzg9Hafh7hNg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.5", - "@vitest/utils": "3.0.5", - "chai": "^5.1.2", + "@vitest/spy": "3.0.6", + "@vitest/utils": "3.0.6", + "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, "funding": { @@ -4572,13 +4572,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.5.tgz", - "integrity": "sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.6.tgz", + "integrity": "sha512-KPztr4/tn7qDGZfqlSPQoF2VgJcKxnDNhmfR3VgZ6Fy1bO8T9Fc1stUiTXtqz0yG24VpD00pZP5f8EOFknjNuQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.5", + "@vitest/spy": "3.0.6", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -4599,9 +4599,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", - "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.6.tgz", + "integrity": "sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==", "dev": true, "license": "MIT", "dependencies": { @@ -4612,52 +4612,52 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.5.tgz", - "integrity": "sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.6.tgz", + "integrity": "sha512-JopP4m/jGoaG1+CBqubV/5VMbi7L+NQCJTu1J1Pf6YaUbk7bZtaq5CX7p+8sY64Sjn1UQ1XJparHfcvTTdu9cA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.5", - "pathe": "^2.0.2" + "@vitest/utils": "3.0.6", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner/node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/@vitest/snapshot": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.5.tgz", - "integrity": "sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.6.tgz", + "integrity": "sha512-qKSmxNQwT60kNwwJHMVwavvZsMGXWmngD023OHSgn873pV0lylK7dwBTfYP7e4URy5NiBCHHiQGA9DHkYkqRqg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.5", + "@vitest/pretty-format": "3.0.6", "magic-string": "^0.30.17", - "pathe": "^2.0.2" + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot/node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/@vitest/spy": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.5.tgz", - "integrity": "sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.6.tgz", + "integrity": "sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4668,14 +4668,14 @@ } }, "node_modules/@vitest/utils": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.5.tgz", - "integrity": "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.6.tgz", + "integrity": "sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.5", - "loupe": "^3.1.2", + "@vitest/pretty-format": "3.0.6", + "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, "funding": { @@ -6143,9 +6143,9 @@ } }, "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "license": "MIT", "dependencies": { @@ -12169,9 +12169,9 @@ } }, "node_modules/loupe": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", - "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", "dev": true, "license": "MIT" }, @@ -17444,16 +17444,16 @@ } }, "node_modules/vite-node": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.5.tgz", - "integrity": "sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.6.tgz", + "integrity": "sha512-s51RzrTkXKJrhNbUzQRsarjmAae7VmMPAsRT7lppVpIg6mK3zGthP9Hgz0YQQKuNcF+Ii7DfYk3Fxz40jRmePw==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.4.0", "es-module-lexer": "^1.6.0", - "pathe": "^2.0.2", + "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0" }, "bin": { @@ -17467,9 +17467,9 @@ } }, "node_modules/vite-node/node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, @@ -17938,31 +17938,31 @@ } }, "node_modules/vitest": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.5.tgz", - "integrity": "sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.6.tgz", + "integrity": "sha512-/iL1Sc5VeDZKPDe58oGK4HUFLhw6b5XdY1MYawjuSaDA4sEfYlY9HnS6aCEG26fX+MgUi7MwlduTBHHAI/OvMA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.0.5", - "@vitest/mocker": "3.0.5", - "@vitest/pretty-format": "^3.0.5", - "@vitest/runner": "3.0.5", - "@vitest/snapshot": "3.0.5", - "@vitest/spy": "3.0.5", - "@vitest/utils": "3.0.5", - "chai": "^5.1.2", + "@vitest/expect": "3.0.6", + "@vitest/mocker": "3.0.6", + "@vitest/pretty-format": "^3.0.6", + "@vitest/runner": "3.0.6", + "@vitest/snapshot": "3.0.6", + "@vitest/spy": "3.0.6", + "@vitest/utils": "3.0.6", + "chai": "^5.2.0", "debug": "^4.4.0", "expect-type": "^1.1.0", "magic-string": "^0.30.17", - "pathe": "^2.0.2", + "pathe": "^2.0.3", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.5", + "vite-node": "3.0.6", "why-is-node-running": "^2.3.0" }, "bin": { @@ -17978,8 +17978,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.5", - "@vitest/ui": "3.0.5", + "@vitest/browser": "3.0.6", + "@vitest/ui": "3.0.6", "happy-dom": "*", "jsdom": "*" }, @@ -18008,9 +18008,9 @@ } }, "node_modules/vitest/node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 2503ee043..2ed45fe67 100644 --- a/package.json +++ b/package.json @@ -212,7 +212,7 @@ "@types/ws": "8.5.14", "@types/xml2js": "0.4.14", "@types/yargs": "17.0.33", - "@vitest/coverage-v8": "3.0.5", + "@vitest/coverage-v8": "3.0.6", "cross-env": "7.0.3", "electron": "34.2.0", "esm": "3.2.25", @@ -227,7 +227,7 @@ "tsx": "4.19.2", "typedoc": "0.27.7", "typescript": "5.7.3", - "vitest": "3.0.5", + "vitest": "3.0.6", "webpack": "5.98.0", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2" From fa05f15753fcbfb38129cb9792a063093798d80b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 02:57:15 +0000 Subject: [PATCH 12/22] chore(deps): update electron-forge monorepo to v7.7.0 --- package-lock.json | 455 +++++++++++++--------------------------------- package.json | 16 +- 2 files changed, 139 insertions(+), 332 deletions(-) diff --git a/package-lock.json b/package-lock.json index db09f9241..79fcffd5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,14 +112,14 @@ "trilium": "src/main.js" }, "devDependencies": { - "@electron-forge/cli": "7.6.1", - "@electron-forge/maker-deb": "7.6.1", - "@electron-forge/maker-dmg": "7.6.1", - "@electron-forge/maker-flatpak": "7.6.1", - "@electron-forge/maker-rpm": "7.6.1", - "@electron-forge/maker-squirrel": "7.6.1", - "@electron-forge/maker-zip": "7.6.1", - "@electron-forge/plugin-auto-unpack-natives": "7.6.1", + "@electron-forge/cli": "7.7.0", + "@electron-forge/maker-deb": "7.7.0", + "@electron-forge/maker-dmg": "7.7.0", + "@electron-forge/maker-flatpak": "7.7.0", + "@electron-forge/maker-rpm": "7.7.0", + "@electron-forge/maker-squirrel": "7.7.0", + "@electron-forge/maker-zip": "7.7.0", + "@electron-forge/plugin-auto-unpack-natives": "7.7.0", "@electron/rebuild": "3.7.1", "@playwright/test": "1.50.1", "@types/archiver": "6.0.3", @@ -533,9 +533,9 @@ } }, "node_modules/@electron-forge/cli": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.6.1.tgz", - "integrity": "sha512-Z9OwK5cAVDOj7MWWt9Gw0/4OJO/db+rshLSXg0I+ySv4xrJmZK1w6QEeOrm7eHjuAqKA+gzIaHsRsT0klCL2lg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.7.0.tgz", + "integrity": "sha512-QfnjghmlHMb7dyArR5cbPA+MP9ff/ulWZi6R/a5MkHlKyhrysRfjzDtZDsmkEv9mGQgRwylssgXrZrKHGlxFkw==", "dev": true, "funding": [ { @@ -549,11 +549,12 @@ ], "license": "MIT", "dependencies": { - "@electron-forge/core": "7.6.1", - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/core": "7.7.0", + "@electron-forge/core-utils": "7.7.0", + "@electron-forge/shared-types": "7.7.0", "@electron/get": "^3.0.0", "chalk": "^4.0.0", - "commander": "^4.1.1", + "commander": "^11.1.0", "debug": "^4.3.1", "fs-extra": "^10.0.0", "listr2": "^7.0.2", @@ -597,9 +598,9 @@ } }, "node_modules/@electron-forge/core": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/core/-/core-7.6.1.tgz", - "integrity": "sha512-gODx2GcBl6Y6ls1DeBidhKC0nmI2/xfx89WcSEDa5M3NKm/bBQo1EPjpwG6F+2r4e8KDkY/KrRbIli+wL1zQ7w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/core/-/core-7.7.0.tgz", + "integrity": "sha512-BWhg1Zw1bhpDuZowGH3lXDiL9zZBsYFNjtqyMqmkjcEm5xf9Dzs8mpRpNjtkpf3jit3LB4PNGMLj3c8ix0h4vQ==", "dev": true, "funding": [ { @@ -613,28 +614,28 @@ ], "license": "MIT", "dependencies": { - "@electron-forge/core-utils": "7.6.1", - "@electron-forge/maker-base": "7.6.1", - "@electron-forge/plugin-base": "7.6.1", - "@electron-forge/publisher-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1", - "@electron-forge/template-base": "7.6.1", - "@electron-forge/template-vite": "7.6.1", - "@electron-forge/template-vite-typescript": "7.6.1", - "@electron-forge/template-webpack": "7.6.1", - "@electron-forge/template-webpack-typescript": "7.6.1", - "@electron-forge/tracer": "7.6.1", + "@electron-forge/core-utils": "7.7.0", + "@electron-forge/maker-base": "7.7.0", + "@electron-forge/plugin-base": "7.7.0", + "@electron-forge/publisher-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0", + "@electron-forge/template-base": "7.7.0", + "@electron-forge/template-vite": "7.7.0", + "@electron-forge/template-vite-typescript": "7.7.0", + "@electron-forge/template-webpack": "7.7.0", + "@electron-forge/template-webpack-typescript": "7.7.0", + "@electron-forge/tracer": "7.7.0", "@electron/get": "^3.0.0", "@electron/packager": "^18.3.5", "@electron/rebuild": "^3.7.0", "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", "debug": "^4.3.1", - "detect-package-manager": "^3.0.2", "fast-glob": "^3.2.7", "filenamify": "^4.1.0", "find-up": "^5.0.0", "fs-extra": "^10.0.0", + "global-dirs": "^3.0.0", "got": "^11.8.5", "interpret": "^3.1.1", "listr2": "^7.0.2", @@ -642,7 +643,6 @@ "log-symbols": "^4.0.0", "node-fetch": "^2.6.7", "rechoir": "^0.8.0", - "resolve-package": "^1.0.1", "semver": "^7.2.1", "source-map-support": "^0.5.13", "sudo-prompt": "^9.1.1", @@ -653,18 +653,17 @@ } }, "node_modules/@electron-forge/core-utils": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/core-utils/-/core-utils-7.6.1.tgz", - "integrity": "sha512-RGA3azq0r5bGk8DDmVDP1EML071JEa44hpZEgSsv9zmdC86aTh0cANyDE6sVarAwLx4LQ+zrFE3KSb63j1HD5w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/core-utils/-/core-utils-7.7.0.tgz", + "integrity": "sha512-kgOkiLzqnySkcpt26rBg8AoZsI1ID3f6s/dQlzfRJisWZTKTu4ryiMcaC0F07DVjaYFnEl9SQ86IvkTcyS97mQ==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/shared-types": "7.7.0", "@electron/rebuild": "^3.7.0", "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", "debug": "^4.3.1", - "detect-package-manager": "^3.0.2", "find-up": "^5.0.0", "fs-extra": "^10.0.0", "log-symbols": "^4.0.0", @@ -731,13 +730,13 @@ } }, "node_modules/@electron-forge/maker-base": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-7.6.1.tgz", - "integrity": "sha512-kA6k0z4fFbqfjV++bbYVC46TckiqyqIo/gTW/QexsT6xlutXUbnNevhoRPVfGigftSAjE6T26DwTogC9hNDkwg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-7.7.0.tgz", + "integrity": "sha512-9u+mmBLBAUHuH0+IGw94EGVTDD4CPKX05h5pp5/PIaijy16ss5dymK4vEp3s2XJMFlza2PsCgLLYBgDcAE2Dqg==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/shared-types": "7.7.0", "fs-extra": "^10.0.0", "which": "^2.0.2" }, @@ -774,14 +773,14 @@ } }, "node_modules/@electron-forge/maker-deb": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-deb/-/maker-deb-7.6.1.tgz", - "integrity": "sha512-8pqwxwlMPddH6anfNL8vYE5v2mlPia+z9YcpnLlMbMjWo9ksRcxmrg2t3El9jvk1TkiPoqVcQzCNaQqYQaMoiw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-deb/-/maker-deb-7.7.0.tgz", + "integrity": "sha512-yMT0TWpCwXaC9+AYpSr9PBIhcZR297wdJUk5PnEnIROsvOW2y1sh7ny7YdHXTxkvhWdbqY8sLQruL3BE+CyE8w==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/maker-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1" + "@electron-forge/maker-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0" }, "engines": { "node": ">= 16.4.0" @@ -791,14 +790,14 @@ } }, "node_modules/@electron-forge/maker-dmg": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-dmg/-/maker-dmg-7.6.1.tgz", - "integrity": "sha512-D7cJRE6CGeovLZhu2dRqUm3w/AlkTURYJYgFuUsgwpBuviQKgJd8quZar6IeZ/l83y4Z1dghKb8D3aAj+bRvNQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-dmg/-/maker-dmg-7.7.0.tgz", + "integrity": "sha512-Hq4nsY6eOdtigN4RLc9i2SbLEr46J6FfbdU+r39R/EVIJ82WRk7JPrCqbckEM7KY1TjhmrnhPWeviWoGAjbXhA==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/maker-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/maker-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0", "fs-extra": "^10.0.0" }, "engines": { @@ -837,14 +836,14 @@ } }, "node_modules/@electron-forge/maker-flatpak": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-flatpak/-/maker-flatpak-7.6.1.tgz", - "integrity": "sha512-a9EekF8cNzjizwMs8HObxRii2tkLrTcTNMvWNhQqcJohEkJV81zNOLu9l/OdIMlKQ9cF5SuRvA4/m2bQGfT80w==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-flatpak/-/maker-flatpak-7.7.0.tgz", + "integrity": "sha512-WDNmGTulgPe4FEgxq128TI58EtVyS2Fq3loXhfirNuzoXpBtvt0LHK447cmtKHAvZZ+R802uriTcj28L+Iub3A==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/maker-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/maker-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0", "fs-extra": "^10.0.0" }, "engines": { @@ -883,14 +882,14 @@ } }, "node_modules/@electron-forge/maker-rpm": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-rpm/-/maker-rpm-7.6.1.tgz", - "integrity": "sha512-BShfmto+XTSA01pkZp10r2ktyruVfI24sGC+y4az1vbqkmX2qN9j0Xr+G/ZMHsm76XHju0N/e1Y2pqqu2JM8/A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-rpm/-/maker-rpm-7.7.0.tgz", + "integrity": "sha512-M9cFO6bCnOuA6BwBUUw35FrnWciWeFyLuByO0KOn3zEYeBDqG2fbBgXXS6OKcRHrpnJVTwiLY5S7eviyO1DJzQ==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/maker-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1" + "@electron-forge/maker-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0" }, "engines": { "node": ">= 16.4.0" @@ -900,14 +899,14 @@ } }, "node_modules/@electron-forge/maker-squirrel": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-7.6.1.tgz", - "integrity": "sha512-7EMLcl0QM5GfdY+enfauEqV6ZW14A1S6Eqoev812FXGTm88G8Ik0tPRw6SsIaI8R++YqxsbdCGTQjzdJWY0bJA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-7.7.0.tgz", + "integrity": "sha512-9Gcq8e6+1MuXGeE7bEpk7VTd86c0riXTsDFKW8OqwVozeBYhoCd6GU59RmI3b7mcAIKOY1cBY97B+/5bnZ8ZYg==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/maker-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/maker-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0", "fs-extra": "^10.0.0" }, "engines": { @@ -946,14 +945,14 @@ } }, "node_modules/@electron-forge/maker-zip": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-zip/-/maker-zip-7.6.1.tgz", - "integrity": "sha512-omoBwoY99DpsgabVIu6Qva+r8kwCY04zDV+P60WN6x+JX/MF+Bk3zI271aH6raZaB+YSbvaed/LDG1QmEM9cTA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-zip/-/maker-zip-7.7.0.tgz", + "integrity": "sha512-/rRFiPcojk0hcn+NOfHv2SlMNvghBk1RN0nuLHbbe8r+C0vG4LJV9ee/Y0HhVKkcpapJOQ+MasXJ86fzAp5uAg==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/maker-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/maker-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0", "cross-zip": "^4.0.0", "fs-extra": "^10.0.0", "got": "^11.8.5" @@ -991,53 +990,53 @@ } }, "node_modules/@electron-forge/plugin-auto-unpack-natives": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/plugin-auto-unpack-natives/-/plugin-auto-unpack-natives-7.6.1.tgz", - "integrity": "sha512-sPFSVhlJBvEA70e0QNbYno5AYc8nvmKCgs4YqTwc24ONhIX0TwGAzjuJ7AZBOj88rhhY9+9Rkl9cONVa5GGZvA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-auto-unpack-natives/-/plugin-auto-unpack-natives-7.7.0.tgz", + "integrity": "sha512-cYeD4x2oQXUyK4+DtIR6wMxcIHvyPgsJq1diEuBoQ+MFTh+s6DXZl6JvwtI3scD0XieCkzcmUmf8ygzqs124+w==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/plugin-base": "7.6.1", - "@electron-forge/shared-types": "7.6.1" + "@electron-forge/plugin-base": "7.7.0", + "@electron-forge/shared-types": "7.7.0" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/plugin-base": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/plugin-base/-/plugin-base-7.6.1.tgz", - "integrity": "sha512-RWt+a8At55dVwEgr8BnnmBN05QzZq+DbOHNPeSJEM2d4ZyLUZXTkkwSF+ZMVk5mQCfIf75l+6BEzkXOcVvti2Q==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-base/-/plugin-base-7.7.0.tgz", + "integrity": "sha512-6wisQ4ZKOWey48wFF+JHzih7AuQuVma5KauwNEju2Dh2ibwDMJmPy0FWVolMSg7XUIMbGKLADGilxX6XRv8qNQ==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1" + "@electron-forge/shared-types": "7.7.0" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/publisher-base": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.6.1.tgz", - "integrity": "sha512-VE0DJJYcMRGMxEbeC20q+ynCpra9oqkM6oXd8O1jRyTit9F+PZlscT/p5vLANrTW5vGrV6CXLyyloPxWxOf8DA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.7.0.tgz", + "integrity": "sha512-jHKvUc1peBBSl2t5d1x6M3CNyCMyNB+NnTO9LmA1dWFQ3oRDFwromIH5KjRqPJj6l4AyH0/XJogdO7Nn4Eyn6Q==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1" + "@electron-forge/shared-types": "7.7.0" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/shared-types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.6.1.tgz", - "integrity": "sha512-i6VdZGG8SYEBirpk+FP7bEMYtCNf9wBkK81IcPco8LP0KbsvgR8y7aUSVxG8DLoVwYB5yr0N9MYXOfNp1gkQ7A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.7.0.tgz", + "integrity": "sha512-1zQsmudkAuHv0HnJtSJY3pvTeuN3fnSa9BR6cbeUlcpOfrnG4OTG03FqerHfyIWaBRVy7jGgif0NhKKE9azKyg==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/tracer": "7.6.1", + "@electron-forge/tracer": "7.7.0", "@electron/packager": "^18.3.5", "@electron/rebuild": "^3.7.0", "listr2": "^7.0.2" @@ -1047,13 +1046,14 @@ } }, "node_modules/@electron-forge/template-base": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/template-base/-/template-base-7.6.1.tgz", - "integrity": "sha512-Pk65CIe6jYJa/hv25o0ueyuAOrRTi3qz92g5cYnj+YZzndNmrem1sNQvNKkavw0w0TKEUC5Y0EZ4ejLSYhVIQA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-base/-/template-base-7.7.0.tgz", + "integrity": "sha512-jwnhEHNIyQfbwJ6R8SuZIJApHKBykDr/rSgUF3km9nr2qAUSoUUV7RaJa/uiQJMtvamXenuo5K84C2NzumzS3A==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1", + "@electron-forge/core-utils": "7.7.0", + "@electron-forge/shared-types": "7.7.0", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "fs-extra": "^10.0.0", @@ -1092,14 +1092,14 @@ } }, "node_modules/@electron-forge/template-vite": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/template-vite/-/template-vite-7.6.1.tgz", - "integrity": "sha512-DxRBCXgnpFQHueG3M6yDN1x2pTYDycHXIddLExUydA9bsrxVwlu8Oo7Mm5XOEltebITD/bZ0iQniOVkzUov37g==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite/-/template-vite-7.7.0.tgz", + "integrity": "sha512-6p+U6FDWrmF7XgSLkrO07OOgJcrrrArbnExSckGJdBnupxmIDf1Y+exwfHHKdxX6/FfkA6JST5nRGjgA5CFqcw==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1", - "@electron-forge/template-base": "7.6.1", + "@electron-forge/shared-types": "7.7.0", + "@electron-forge/template-base": "7.7.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1107,14 +1107,14 @@ } }, "node_modules/@electron-forge/template-vite-typescript": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.6.1.tgz", - "integrity": "sha512-7aMq7/woR2xUNbCYCRa/dwinnjoYKuamn17hYBwmyRNJ+YKV9btVK6lq+WR4sJmFM5Fv3qOJlUwrNyxH+HoUCQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.7.0.tgz", + "integrity": "sha512-32C/+PF+hIloTdbRx7OutvqnTkkC7BHeQxNw4/zG2TfQ3cjl7JUD6A2UvTUHtv5KHkK2hDw6ZdahPwpJO41YSA==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1", - "@electron-forge/template-base": "7.6.1", + "@electron-forge/shared-types": "7.7.0", + "@electron-forge/template-base": "7.7.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1178,14 +1178,14 @@ } }, "node_modules/@electron-forge/template-webpack": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack/-/template-webpack-7.6.1.tgz", - "integrity": "sha512-8HXJ7eh5mjphC2tBfBOroEfM71DsWt3yrkEQMGzW6Lc5u2itkCQrEAINm3nuLscWrqLRk4ZsfT1f1VzdwAraXg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack/-/template-webpack-7.7.0.tgz", + "integrity": "sha512-7Hb1wejKqtvPXqhelubUNAh39FtClB/4JDtWzyAsL2iC3XeB5qh6pITz8+nW/rF2qW/JAepc/lnreqKn34P2ig==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1", - "@electron-forge/template-base": "7.6.1", + "@electron-forge/shared-types": "7.7.0", + "@electron-forge/template-base": "7.7.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1193,14 +1193,14 @@ } }, "node_modules/@electron-forge/template-webpack-typescript": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.6.1.tgz", - "integrity": "sha512-ECEd70QOAi7r2ZibIU2U9rh0CVND7oJP5BnKRCP20uUCxdQdO7RTMRDXesm41VTRa1uZ+64pRdOQTDFHB6xitA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.7.0.tgz", + "integrity": "sha512-w1vRAjGy0MjjdEDYPpZcpkMo2e3z5uEwfJdwVOpBeha7p2WM/Y6go21K+7pSqGp8Xmq4zlE20hq5MEx8Bs8eZg==", "dev": true, "license": "MIT", "dependencies": { - "@electron-forge/shared-types": "7.6.1", - "@electron-forge/template-base": "7.6.1", + "@electron-forge/shared-types": "7.7.0", + "@electron-forge/template-base": "7.7.0", "fs-extra": "^10.0.0" }, "engines": { @@ -1264,9 +1264,9 @@ } }, "node_modules/@electron-forge/tracer": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.6.1.tgz", - "integrity": "sha512-nZzVzXT4xdueWYoSbgStS5LfcifW/e/WJj9VOt6xYpFxYOsQHpLkkCAc6nH0gxn+60kiU4FMU0p2kSQ2eQhWuA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.7.0.tgz", + "integrity": "sha512-R/JiGFzWhwfVyc6ioT4l5FFChRLS4Z2tWPeQfPcyoemdpzKpI1rvMHti42gzWXFW8GdzkhG0G3ZWfKiF3y3x/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6575,13 +6575,13 @@ } }, "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=16" } }, "node_modules/compare-version": { @@ -7783,69 +7783,6 @@ "license": "MIT", "optional": true }, - "node_modules/detect-package-manager": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz", - "integrity": "sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/detect-package-manager/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/detect-package-manager/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/detect-package-manager/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-passive-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/detect-passive-events/-/detect-passive-events-1.0.5.tgz", @@ -9269,19 +9206,6 @@ "node": ">=6" } }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expect-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", @@ -10166,16 +10090,6 @@ "get-folder-size": "bin/get-folder-size" } }, - "node_modules/get-installed-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/get-installed-path/-/get-installed-path-2.1.1.tgz", - "integrity": "sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-modules": "1.0.0" - } - }, "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", @@ -10327,56 +10241,30 @@ "node": ">=10.0" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "license": "MIT", "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "ini": "2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=10" } }, "node_modules/globalthis": { @@ -10529,19 +10417,6 @@ "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==", "license": "BSD-3-Clause" }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -10794,16 +10669,6 @@ "node": ">= 14" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -11333,16 +11198,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -13527,16 +13382,6 @@ "node": ">=0.10.0" } }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parse-srcset": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", @@ -14824,34 +14669,6 @@ "node": ">=8" } }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-package/-/resolve-package-1.0.1.tgz", - "integrity": "sha512-rzB7NnQpOkPHBWFPP3prUMqOP6yg3HkRGgcvR+lDyvyHoY3fZLFLYDkPXh78SPVBAE6VTCk/V+j8we4djg6o4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-installed-path": "^2.0.3" - }, - "engines": { - "node": ">=4", - "npm": ">=2" - } - }, "node_modules/resolve-pathname": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", @@ -16101,16 +15918,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", diff --git a/package.json b/package.json index 2503ee043..98bc89638 100644 --- a/package.json +++ b/package.json @@ -167,14 +167,14 @@ "yauzl": "3.2.0" }, "devDependencies": { - "@electron-forge/cli": "7.6.1", - "@electron-forge/maker-deb": "7.6.1", - "@electron-forge/maker-dmg": "7.6.1", - "@electron-forge/maker-flatpak": "7.6.1", - "@electron-forge/maker-rpm": "7.6.1", - "@electron-forge/maker-squirrel": "7.6.1", - "@electron-forge/maker-zip": "7.6.1", - "@electron-forge/plugin-auto-unpack-natives": "7.6.1", + "@electron-forge/cli": "7.7.0", + "@electron-forge/maker-deb": "7.7.0", + "@electron-forge/maker-dmg": "7.7.0", + "@electron-forge/maker-flatpak": "7.7.0", + "@electron-forge/maker-rpm": "7.7.0", + "@electron-forge/maker-squirrel": "7.7.0", + "@electron-forge/maker-zip": "7.7.0", + "@electron-forge/plugin-auto-unpack-natives": "7.7.0", "@electron/rebuild": "3.7.1", "@playwright/test": "1.50.1", "@types/archiver": "6.0.3", From 4e01534d76309510de9225066e4e8a7366c5af8a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 12:27:33 +0200 Subject: [PATCH 13/22] refactor(i18n): move list of locales out of options --- src/routes/api/options.ts | 34 ++-------------------------------- src/services/i18n.ts | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/routes/api/options.ts b/src/routes/api/options.ts index 33cd5fa8c..8be441b61 100644 --- a/src/routes/api/options.ts +++ b/src/routes/api/options.ts @@ -5,7 +5,7 @@ import log from "../../services/log.js"; import searchService from "../../services/search/services/search.js"; import ValidationError from "../../errors/validation_error.js"; import type { Request } from "express"; -import { changeLanguage } from "../../services/i18n.js"; +import { changeLanguage, getLocales } from "../../services/i18n.js"; import { listSyntaxHighlightingThemes } from "../../services/code_block_theme.js"; import type { OptionNames } from "../../services/options_interface.js"; @@ -154,37 +154,7 @@ function getSyntaxHighlightingThemes() { } function getSupportedLocales() { - // TODO: Currently hardcoded, needs to read the list of available languages. - return [ - { - id: "en", - name: "English" - }, - { - id: "de", - name: "Deutsch" - }, - { - id: "es", - name: "Español" - }, - { - id: "fr", - name: "Français" - }, - { - id: "cn", - name: "简体中文" - }, - { - id: "tw", - name: "繁體中文" - }, - { - id: "ro", - name: "Română" - } - ]; + return getLocales(); } function isAllowed(name: string) { diff --git a/src/services/i18n.ts b/src/services/i18n.ts index 4f659cb30..0c0330209 100644 --- a/src/services/i18n.ts +++ b/src/services/i18n.ts @@ -20,6 +20,40 @@ export async function initializeTranslations() { }); } +export function getLocales() { + // TODO: Currently hardcoded, needs to read the list of available languages. + return [ + { + id: "en", + name: "English" + }, + { + id: "de", + name: "Deutsch" + }, + { + id: "es", + name: "Español" + }, + { + id: "fr", + name: "Français" + }, + { + id: "cn", + name: "简体中文" + }, + { + id: "tw", + name: "繁體中文" + }, + { + id: "ro", + name: "Română" + } + ]; +} + function getCurrentLanguage() { let language; if (sql_init.isDbInitialized()) { From 34b4e6d069b714e3ec2fdad818cbd55e04909974 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 12:39:56 +0200 Subject: [PATCH 14/22] feat(test): ensure frontend translations are valid JSON --- src/services/i18n.spec.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/services/i18n.spec.ts diff --git a/src/services/i18n.spec.ts b/src/services/i18n.spec.ts new file mode 100644 index 000000000..03b4fad62 --- /dev/null +++ b/src/services/i18n.spec.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "vitest"; +import * as i18n from "./i18n.js"; +import path from "path"; +import fs from "fs"; + +describe("i18n", () => { + it("frontend translations are valid JSON", () => { + const translationDir = "src/public/translations"; + const locales = i18n.getLocales(); + + for (const locale of locales) { + const translationPath = path.join(translationDir, locale.id, "translation.json"); + const translationFile = fs.readFileSync(translationPath, { encoding: "utf-8" }); + expect(() => { + JSON.parse(translationFile); + }, `JSON error while parsing locale '${locale.id}' at "${translationPath}"`).not.toThrow(); + } + }); +}); From c255af67c9ccd28c791ef3cce7b506b73a7a390f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 12:40:11 +0200 Subject: [PATCH 15/22] fix(i18n): Chinese translations missing due to invalid JSON --- src/public/translations/cn/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/translations/cn/translation.json b/src/public/translations/cn/translation.json index 7deb0d59c..296a46136 100644 --- a/src/public/translations/cn/translation.json +++ b/src/public/translations/cn/translation.json @@ -988,7 +988,7 @@ "web_view": { "web_view": "网页视图", "embed_websites": "网页视图类型的笔记允许您将网站嵌入到 Trilium 中。", - "create_label": "首先,请创建一个带有您要嵌入的 URL 地址的标签,例如 #webViewSrc=\"https://www.bing.com\"", + "create_label": "首先,请创建一个带有您要嵌入的 URL 地址的标签,例如 #webViewSrc=\"https://www.bing.com\"" }, "backend_log": { "refresh": "刷新" From f6b6b2e7402efca153d4b61aca5666c70438f68f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 12:42:42 +0200 Subject: [PATCH 16/22] feat(test): ensure backend translations are valid JSON --- src/services/i18n.spec.ts | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/services/i18n.spec.ts b/src/services/i18n.spec.ts index 03b4fad62..03d711ae0 100644 --- a/src/services/i18n.spec.ts +++ b/src/services/i18n.spec.ts @@ -3,17 +3,24 @@ import * as i18n from "./i18n.js"; import path from "path"; import fs from "fs"; +function checkTranslations(translationDir: string, translationFileName: string) { + const locales = i18n.getLocales(); + + for (const locale of locales) { + const translationPath = path.join(translationDir, locale.id, translationFileName); + const translationFile = fs.readFileSync(translationPath, { encoding: "utf-8" }); + expect(() => { + JSON.parse(translationFile); + }, `JSON error while parsing locale '${locale.id}' at "${translationPath}"`).not.toThrow(); + } +} + describe("i18n", () => { it("frontend translations are valid JSON", () => { - const translationDir = "src/public/translations"; - const locales = i18n.getLocales(); + checkTranslations("src/public/translations", "translation.json"); + }); - for (const locale of locales) { - const translationPath = path.join(translationDir, locale.id, "translation.json"); - const translationFile = fs.readFileSync(translationPath, { encoding: "utf-8" }); - expect(() => { - JSON.parse(translationFile); - }, `JSON error while parsing locale '${locale.id}' at "${translationPath}"`).not.toThrow(); - } + it("backend translations are valid JSON", () => { + checkTranslations("translations", "server.json"); }); }); From ca1d5207d8746331f29a6f70dbdc53302a1b7dcf Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 17:02:34 +0200 Subject: [PATCH 17/22] fix(build): try using ARM runner for building docker --- .github/workflows/main-docker.yml | 73 ++++++++++++++++--------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/.github/workflows/main-docker.yml b/.github/workflows/main-docker.yml index e3f2393b9..0c1be531a 100644 --- a/.github/workflows/main-docker.yml +++ b/.github/workflows/main-docker.yml @@ -33,7 +33,7 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@v4 - + - name: Set IMAGE_NAME to lowercase run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV - name: Set TEST_TAG to lowercase @@ -47,16 +47,16 @@ jobs: with: node-version: 20 cache: "npm" - + - name: Install npm dependencies run: npm ci - name: Install Playwright Browsers run: npx playwright install --with-deps - + - name: Run the TypeScript build run: npx tsc - + - name: Create server-package.json run: cat package.json | grep -v electron > server-package.json @@ -69,12 +69,12 @@ jobs: tags: ${{ env.TEST_TAG }} cache-from: type=gha cache-to: type=gha,mode=max - + - name: Validate container run output run: | CONTAINER_ID=$(docker run -d --log-driver=journald --rm --network=host -e TRILIUM_PORT=8082 --volume ./integration-tests/db:/home/node/trilium-data --name trilium_local ${{ env.TEST_TAG }}) echo "Container ID: $CONTAINER_ID" - + - name: Wait for the healthchecks to pass uses: stringbean/docker-healthcheck-action@v3 with: @@ -82,7 +82,7 @@ jobs: wait-time: 50 require-status: running require-healthy: true - + - name: Run Playwright tests run: TRILIUM_DOCKER=1 npx playwright test - uses: actions/upload-artifact@v4 @@ -100,7 +100,20 @@ jobs: build: name: Build Docker images - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - dockerfile: Dockerfile.alpine + platform: linux/amd64 + image: ubuntu-latest + - dockerfile: Dockerfile + platform: linux/arm64 + image: ubuntu-24.04-arm + - dockerfile: Dockerfile + platform: linux/arm/v7 + image: ubuntu-24.04-arm + runs-on: ${{ matrix.image }} needs: - test_docker permissions: @@ -108,16 +121,6 @@ jobs: packages: write attestations: write id-token: write - strategy: - fail-fast: false - matrix: - include: - - dockerfile: Dockerfile.alpine - platform: linux/amd64 - - dockerfile: Dockerfile - platform: linux/arm64 - - dockerfile: Dockerfile - platform: linux/arm/v7 steps: - name: Prepare run: | @@ -144,13 +147,13 @@ jobs: type=sha flavor: | latest=false - + - name: Set up QEMU uses: docker/setup-qemu-action@v3 - + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - + - name: Set up node & dependencies uses: actions/setup-node@v4 @@ -169,14 +172,14 @@ jobs: registry: ${{ env.GHCR_REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - + - name: Login to DockerHub uses: docker/login-action@v3 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Build and push by digest id: build uses: docker/build-push-action@v6 @@ -186,13 +189,13 @@ jobs: platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} outputs: type=image,name=${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true - + - name: Export digest run: | mkdir -p /tmp/digests digest="${{ steps.build.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - + - name: Upload digest uses: actions/upload-artifact@v4 with: @@ -220,7 +223,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - + - name: Docker meta id: meta uses: docker/metadata-action@v5 @@ -237,14 +240,14 @@ jobs: registry: ${{ env.GHCR_REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - + - name: Login to DockerHub uses: docker/login-action@v3 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Create manifest list and push working-directory: /tmp/digests run: | @@ -255,7 +258,7 @@ jobs: docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \ $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \ $(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) @@ -267,25 +270,25 @@ jobs: docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \ $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \ $(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - + # Small delay to ensure stable tag is fully propagated sleep 5 - + # Now update latest tags docker buildx imagetools create \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable - + docker buildx imagetools create \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable - + fi - + - name: Inspect image run: | docker buildx imagetools inspect ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} From 1c118f2aa9b818600831bb6df61f4ab2f702ee50 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 18:06:19 +0200 Subject: [PATCH 18/22] feat(startup): display migration errors using system modal --- src/services/migration.ts | 16 ++++------------ src/services/utils.ts | 9 +++++++-- translations/en/server.json | 8 ++++++++ translations/ro/server.json | 8 ++++++++ 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/services/migration.ts b/src/services/migration.ts index 08b07f121..f8cbfbc22 100644 --- a/src/services/migration.ts +++ b/src/services/migration.ts @@ -6,6 +6,7 @@ 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"; interface MigrationInfo { dbVersion: number; @@ -18,9 +19,7 @@ async function migrate() { const currentDbVersion = getDbVersion(); if (currentDbVersion < 214) { - log.error("Direct migration from your current version is not supported. Please upgrade to the latest v0.60.4 first and only then to this version."); - - await crash(); + await crash(t("migration.old_version")); return; } @@ -83,10 +82,7 @@ async function migrate() { log.info(`Migration to version ${mig.dbVersion} has been successful.`); } catch (e: any) { - log.error(`error during migration to version ${mig.dbVersion}: ${e.stack}`); - log.error("migration failed, crashing hard"); // this is not very user-friendly :-/ - - crash(); + crash(t("migration.error_message", { version: mig.dbVersion, stack: e.stack })); break; // crash() is sometimes async } } @@ -136,11 +132,7 @@ async function migrateIfNecessary() { const currentDbVersion = getDbVersion(); if (currentDbVersion > appInfo.dbVersion && process.env.TRILIUM_IGNORE_DB_VERSION !== "true") { - log.error( - `Current DB version ${currentDbVersion} is newer than the current DB version ${appInfo.dbVersion}, which means that it was created by a newer and incompatible version of Trilium. Upgrade to the latest version of Trilium to resolve this issue.` - ); - - await crash(); + await crash(t("migration.wrong_db_version", { version: currentDbVersion, targetVersion: appInfo.dbVersion })); } if (!isDbUpToDate()) { diff --git a/src/services/utils.ts b/src/services/utils.ts index 289e1af6b..0da27c3d6 100644 --- a/src/services/utils.ts +++ b/src/services/utils.ts @@ -10,6 +10,8 @@ import path from "path"; import { fileURLToPath } from "url"; import { dirname, join } from "path"; import type NoteMeta from "./meta/note_meta.js"; +import log from "./log.js"; +import { t } from "i18next"; const randtoken = generator({ source: "crypto" }); @@ -105,10 +107,13 @@ export function escapeRegExp(str: string) { return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); } -export async function crash() { +export async function crash(message: string) { if (isElectron) { - (await import("electron")).app.exit(1); + const electron = await import("electron"); + electron.dialog.showErrorBox(t("modals.error_title"), message); + electron.app.exit(1); } else { + log.error(message); process.exit(1); } } diff --git a/translations/en/server.json b/translations/en/server.json index 49e08bb99..de60907cb 100644 --- a/translations/en/server.json +++ b/translations/en/server.json @@ -272,5 +272,13 @@ "today": "Open today's journal note", "new-note": "New note", "show-windows": "Show windows" + }, + "migration": { + "old_version": "Direct migration from your current version is not supported. Please upgrade to the latest v0.60.4 first and only then to this version.", + "error_message": "Error during migration to version {{version}}: {{stack}}", + "wrong_db_version": "Current DB version {{version}} is newer than the current DB version {{targetVersion}}, which means that it was created by a newer and incompatible version of Trilium. Upgrade to the latest version of Trilium to resolve this issue." + }, + "modals": { + "error_title": "Error" } } diff --git a/translations/ro/server.json b/translations/ro/server.json index ebf99082e..0023c0c86 100644 --- a/translations/ro/server.json +++ b/translations/ro/server.json @@ -272,5 +272,13 @@ "today": "Mergi la notița de astăzi", "tooltip": "TriliumNext Notes", "show-windows": "Afișează ferestrele" + }, + "migration": { + "error_message": "Eroare la migrarea către versiunea {{version}}: {{stack}}", + "old_version": "Nu se poate migra la ultima versiune direct de la versiunea dvs. Actualizați mai întâi la versiunea v0.60.4 și ulterior la această versiune.", + "wrong_db_version": "Versiunea actuală a bazei de date ({{version}}) este mai nouă decât versiunea de bază de date suportată de aplicație ({{targetVersion}}), ceea ce înseamnă că a fost creată de către o versiune mai nouă de Trilium. Actualizați aplicația la ultima versiune pentru a putea continua." + }, + "modals": { + "error_title": "Eroare" } } From f9e4ae72105f857caa1d03a4eb172989d889ac01 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 20:25:42 +0200 Subject: [PATCH 19/22] feat(import/zip): treat mdx as markdown (closes #1236) --- package.json | 2 +- src/services/import/mime.ts | 2 +- src/services/import/samples/mdx.zip | Bin 0 -> 336 bytes src/services/import/zip.spec.ts | 45 ++++++++++++++++++++++++++++ src/services/import/zip.ts | 2 +- 5 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/services/import/samples/mdx.zip create mode 100644 src/services/import/zip.spec.ts diff --git a/package.json b/package.json index 2503ee043..a7e69eea6 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "build:webpack": "tsx node_modules/webpack/bin/webpack.js -c webpack.config.ts", "build:prepare-dist": "npm run build:webpack && rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", - "test": "cross-env TRILIUM_DATA_DIR=./integration-tests/db vitest", + "test": "cross-env TRILIUM_DATA_DIR=./integration-tests/db TRILIUM_INTEGRATION_TEST=memory vitest", "test:coverage": "cross-env TRILIUM_DATA_DIR=./integration-tests/db vitest --coverage", "test:playwright": "playwright test", diff --git a/src/services/import/mime.ts b/src/services/import/mime.ts index 339f3b468..b329f12ac 100644 --- a/src/services/import/mime.ts +++ b/src/services/import/mime.ts @@ -88,7 +88,7 @@ function getType(options: TaskData, mime: string) { const mimeLc = mime?.toLowerCase(); switch (true) { - case options.textImportedAsText && ["text/html", "text/markdown", "text/x-markdown"].includes(mimeLc): + case options.textImportedAsText && ["text/html", "text/markdown", "text/x-markdown", "text/mdx"].includes(mimeLc): return "text"; case options.codeImportedAsCode && CODE_MIME_TYPES.has(mimeLc): diff --git a/src/services/import/samples/mdx.zip b/src/services/import/samples/mdx.zip new file mode 100644 index 0000000000000000000000000000000000000000..cb01c501fda30bfaead5853fd3a328405a32752f GIT binary patch literal 336 zcmWIWW@Zs#-~d9GDIrk|NPw3?fgvQdqC~+jza&*JH>IMqf}4Sn=@U)gm)@2%s($}bvSyHCh1Jerp47!}dX<97e<$L{071@?`x|%)>(+MeDlDOnai_PCnJo9J0w!JWY z{VnqVZ+4C~e6wcu03CV4&pEX0MPkt6aWAK literal 0 HcmV?d00001 diff --git a/src/services/import/zip.spec.ts b/src/services/import/zip.spec.ts new file mode 100644 index 000000000..cd1ea9f5c --- /dev/null +++ b/src/services/import/zip.spec.ts @@ -0,0 +1,45 @@ +import { describe, expect, it } from "vitest"; +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; +import zip from "./zip.js"; +import becca from "../../becca/becca.js"; +import BNote from "../../becca/entities/bnote.js"; +import TaskContext from "../task_context.js"; +import cls from "../cls.js"; +import sql_init from "../sql_init.js"; +import { initializeTranslations } from "../i18n.js"; +const scriptDir = dirname(fileURLToPath(import.meta.url)); + +describe("processNoteContent", () => { + it("treats single MDX as Markdown in ZIP as text note", async () => { + const mdxSample = fs.readFileSync(path.join(scriptDir, "samples", "mdx.zip")); + const taskContext = TaskContext.getInstance("import-mdx", "import", { + textImportedAsText: true + }); + + await new Promise((resolve, reject) => { + cls.init(async () => { + initializeTranslations(); + sql_init.initializeDb(); + await sql_init.dbReady; + + const rootNote = becca.getNote("root"); + if (!rootNote) { + expect(rootNote).toBeTruthy(); + return; + } + + const importedNote = await zip.importZip(taskContext, mdxSample, rootNote as BNote); + try { + expect(importedNote.mime).toBe("text/mdx"); + expect(importedNote.type).toBe("text"); + } catch (e) { + reject(e); + } + resolve(); + }); + }); + }); +}) diff --git a/src/services/import/zip.ts b/src/services/import/zip.ts index 61534fed3..504f28382 100644 --- a/src/services/import/zip.ts +++ b/src/services/import/zip.ts @@ -386,7 +386,7 @@ async function importZip(taskContext: TaskContext, fileBuffer: Buffer, importRoo } function processNoteContent(noteMeta: NoteMeta | undefined, type: string, mime: string, content: string | Buffer, noteTitle: string, filePath: string) { - if ((noteMeta?.format === "markdown" || (!noteMeta && taskContext.data?.textImportedAsText && ["text/markdown", "text/x-markdown"].includes(mime))) && typeof content === "string") { + if ((noteMeta?.format === "markdown" || (!noteMeta && taskContext.data?.textImportedAsText && ["text/markdown", "text/x-markdown", "text/mdx"].includes(mime))) && typeof content === "string") { content = markdownService.renderToHtml(content, noteTitle); } From 324a3d0d8b7181115244dc41adcc48517e336ca5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 20:29:00 +0200 Subject: [PATCH 20/22] feat(import): trim .mdx extension from import --- src/services/import/zip.spec.ts | 1 + src/services/utils.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/services/import/zip.spec.ts b/src/services/import/zip.spec.ts index cd1ea9f5c..c29459f93 100644 --- a/src/services/import/zip.spec.ts +++ b/src/services/import/zip.spec.ts @@ -35,6 +35,7 @@ describe("processNoteContent", () => { try { expect(importedNote.mime).toBe("text/mdx"); expect(importedNote.type).toBe("text"); + expect(importedNote.title).toBe("Text Note"); } catch (e) { reject(e); } diff --git a/src/services/utils.ts b/src/services/utils.ts index 0da27c3d6..660bbbcc7 100644 --- a/src/services/utils.ts +++ b/src/services/utils.ts @@ -173,6 +173,7 @@ export function removeTextFileExtension(filePath: string) { switch (extension) { case ".md": + case ".mdx": case ".markdown": case ".html": case ".htm": From 860de346a769862ff86a50911fb455f183aa4faf Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 20:38:58 +0200 Subject: [PATCH 21/22] feat(import/single): treat mdx as markdown --- src/services/import/samples/Text Note.mdx | 21 ++++++++++ src/services/import/single.spec.ts | 49 +++++++++++++++++++++++ src/services/import/single.ts | 2 +- 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/services/import/samples/Text Note.mdx create mode 100644 src/services/import/single.spec.ts diff --git a/src/services/import/samples/Text Note.mdx b/src/services/import/samples/Text Note.mdx new file mode 100644 index 000000000..c0d3c8e5a --- /dev/null +++ b/src/services/import/samples/Text Note.mdx @@ -0,0 +1,21 @@ +Page 1 + +Heading 1 +--------- + +Heading 2 +--------- + +### Heading 3 + +``` +class Foo { + hoistedNoteChangedEvent({ ntxId }) { + if (this.isNoteContext(ntxId)) { + this.refresh(); + } + } +} +``` + +Page 2 \ No newline at end of file diff --git a/src/services/import/single.spec.ts b/src/services/import/single.spec.ts new file mode 100644 index 000000000..716eb7b91 --- /dev/null +++ b/src/services/import/single.spec.ts @@ -0,0 +1,49 @@ +import { describe, expect, it } from "vitest"; +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; +import becca from "../../becca/becca.js"; +import BNote from "../../becca/entities/bnote.js"; +import TaskContext from "../task_context.js"; +import cls from "../cls.js"; +import sql_init from "../sql_init.js"; +import { initializeTranslations } from "../i18n.js"; +import single from "./single.js"; +const scriptDir = dirname(fileURLToPath(import.meta.url)); + +describe("processNoteContent", () => { + it("treats single MDX as Markdown", async () => { + const mdxSample = fs.readFileSync(path.join(scriptDir, "samples", "Text Note.mdx")); + const taskContext = TaskContext.getInstance("import-mdx", "import", { + textImportedAsText: true + }); + + await new Promise((resolve, reject) => { + cls.init(async () => { + initializeTranslations(); + sql_init.initializeDb(); + await sql_init.dbReady; + + const rootNote = becca.getNote("root"); + if (!rootNote) { + reject("Missing root note."); + } + + const importedNote = single.importSingleFile(taskContext, { + originalname: "Text Note.mdx", + mimetype: "text/mdx", + buffer: mdxSample + }, rootNote as BNote); + try { + expect(importedNote.mime).toBe("text/html"); + expect(importedNote.type).toBe("text"); + expect(importedNote.title).toBe("Text Note"); + } catch (e) { + reject(e); + } + resolve(); + }); + }); + }); +}) diff --git a/src/services/import/single.ts b/src/services/import/single.ts index 9356300f4..79f90ca2d 100644 --- a/src/services/import/single.ts +++ b/src/services/import/single.ts @@ -19,7 +19,7 @@ function importSingleFile(taskContext: TaskContext, file: File, parentNote: BNot if (taskContext?.data?.textImportedAsText) { if (mime === "text/html") { return importHtml(taskContext, file, parentNote); - } else if (["text/markdown", "text/x-markdown"].includes(mime)) { + } else if (["text/markdown", "text/x-markdown", "text/mdx"].includes(mime)) { return importMarkdown(taskContext, file, parentNote); } else if (mime === "text/plain") { return importPlainText(taskContext, file, parentNote); From 57b303555963f123519a4b5f6d96217cbd3c7cab Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 20 Feb 2025 21:39:35 +0200 Subject: [PATCH 22/22] feat(geomap): refresh map if color attribute is changed --- src/public/app/widgets/type_widgets/geo_map.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/app/widgets/type_widgets/geo_map.ts b/src/public/app/widgets/type_widgets/geo_map.ts index 4579ab730..32f689e6f 100644 --- a/src/public/app/widgets/type_widgets/geo_map.ts +++ b/src/public/app/widgets/type_widgets/geo_map.ts @@ -361,7 +361,7 @@ export default class GeoMapTypeWidget extends TypeWidget { // If any of note has its location attribute changed. // TODO: Should probably filter by parent here as well. const attributeRows = loadResults.getAttributeRows(); - if (attributeRows.find((at) => at.name === LOCATION_ATTRIBUTE)) { + if (attributeRows.find((at) => [ LOCATION_ATTRIBUTE, "color" ].includes(at.name ?? ""))) { this.#reloadMarkers(); } }