From 9b7cff8af15511bd07219c35ab5d5859ceb734c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Sun, 3 Aug 2025 16:51:58 +0200 Subject: [PATCH 01/33] Clear apk and pnpm cache after installation of packages (#7059) --- Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9e4a0dfb7..1b0a45d1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -107,7 +107,8 @@ RUN \ curl \ git \ ${INSTALL_ABIWORD:+abiword abiword-plugin-command} \ - ${INSTALL_SOFFICE:+libreoffice openjdk8-jre libreoffice-common} + ${INSTALL_SOFFICE:+libreoffice openjdk8-jre libreoffice-common} && \ + rm -rf /var/cache/apk/* USER etherpad @@ -172,7 +173,8 @@ RUN bash -c ./bin/installLocalPlugins.sh RUN bin/installDeps.sh && \ if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \ pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \ - fi + fi && \ + pnpm store prune # Copy the configuration file. COPY --chown=etherpad:etherpad ${SETTINGS} "${EP_DIR}"/settings.json From cca2c895ada9edb086b10df1b2675b5eac267dd8 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 4 Aug 2025 14:04:45 +0200 Subject: [PATCH 02/33] Localisation updates from https://translatewiki.net. --- src/locales/ar.json | 1 + src/locales/de.json | 16 ++++++++-------- src/locales/fa.json | 11 +++++++++-- src/locales/fr.json | 10 +++++++++- src/locales/gl.json | 10 ++++++++-- src/locales/it.json | 4 +++- src/locales/lb.json | 1 + src/locales/mk.json | 9 ++++++++- src/locales/mnw.json | 2 +- src/locales/nl.json | 13 +++++++++---- src/locales/sq.json | 5 +++-- src/locales/zh-hans.json | 10 +++++++++- src/locales/zh-hant.json | 9 ++++++++- 13 files changed, 77 insertions(+), 24 deletions(-) diff --git a/src/locales/ar.json b/src/locales/ar.json index efd9ade1c..9e74210b2 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -67,6 +67,7 @@ "pad.toolbar.savedRevision.title": "حفظ المراجعة", "pad.toolbar.settings.title": "الإعدادات", "pad.toolbar.embed.title": "تبادل و تضمين هذا الباد", + "pad.toolbar.home.title": "العودة إلى المنزل", "pad.toolbar.showusers.title": "عرض المستخدمين على هذا الباد", "pad.colorpicker.save": "حفظ", "pad.colorpicker.cancel": "إلغاء", diff --git a/src/locales/de.json b/src/locales/de.json index 4ef7e68c4..3c324e6a7 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -54,14 +54,14 @@ "index.newPad": "Neues Pad", "index.createOpenPad": "Pad öffnen", "index.openPad": "Öffne ein vorhandenes Pad mit folgendem Namen:", - "index.recentPads": "Zuletzt bearbeitete Pads", - "index.recentPadsEmpty": "Keine kürzlich bearbeiteten Pads gefunden.", - "index.generateNewPad": "Neues Pad generieren", - "index.labelPad": "Padname (optional)", - "index.placeholderPadEnter": "Gib den Namen des Pads ein...", - "index.createAndShareDocuments": "Erstelle und teile Dokumente in Echtzeit", - "index.createAndShareDocumentsDescription": "Etherpad ermöglicht die gemeinsame Bearbeitung von Dokumenten in Echtzeit, ähnlich wie ein Live-Multiplayer-Editor, der in Ihrem Browser läuft.", - "pad.toolbar.bold.title": "Fett (Strg-B)", + "index.recentPads": "Zuletzt bearbeitete Pads", + "index.recentPadsEmpty": "Keine kürzlich bearbeiteten Pads gefunden.", + "index.generateNewPad": "Neues Pad generieren", + "index.labelPad": "Padname (optional)", + "index.placeholderPadEnter": "Gib den Namen des Pads ein...", + "index.createAndShareDocuments": "Erstelle und teile Dokumente in Echtzeit", + "index.createAndShareDocumentsDescription": "Etherpad ermöglicht die gemeinsame Bearbeitung von Dokumenten in Echtzeit, ähnlich wie ein Live-Multiplayer-Editor, der in Ihrem Browser läuft.", + "pad.toolbar.bold.title": "Fett (Strg-B)", "pad.toolbar.italic.title": "Kursiv (Strg-I)", "pad.toolbar.underline.title": "Unterstrichen (Strg-U)", "pad.toolbar.strikethrough.title": "Durchgestrichen (Strg+5)", diff --git a/src/locales/fa.json b/src/locales/fa.json index 567ed0e43..4f03adc3b 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -84,8 +84,10 @@ "pad.settings.fontType": "نوع قلم:", "pad.settings.fontType.normal": "ساده", "pad.settings.language": "زبان:", + "pad.settings.deletePad": "حذف پد", + "pad.delete.confirm": "آیا واقعاً می‌خواهید این پد را حذف کنید؟", "pad.settings.about": "درباره", - "pad.settings.poweredBy": "قدرست‌گرفته از", + "pad.settings.poweredBy": "قدرت‌گرفته از", "pad.importExport.import_export": "درون‌ریزی/برون‌بری", "pad.importExport.import": "بارگذاری پروندهٔ متنی یا سند", "pad.importExport.importSuccessful": "موفقیت آمیز بود!", @@ -121,6 +123,9 @@ "pad.modals.deleted": "پاک شد.", "pad.modals.deleted.explanation": "این دفترچه یادداشت پاک شده است.", "pad.modals.rateLimited": "نرخ محدود شده است.", + "pad.modals.rateLimited.explanation": "پیام‌های زیادی به این پد فرستادید، بنابراین اتصال شما قطع شد.", + "pad.modals.rejected.explanation": "سرور پیامی را که مرورگرتان فرستاده بود، رد کرد.", + "pad.modals.rejected.cause": "ممکن است سرور هنگام مشاهدهٔ پد به‌روزرسانی شده باشد یا شاید باگی در اترپد وجود داشته باشد. صفحه را دوباره بارگذاری کنید.", "pad.modals.disconnected": "اتصال شما قطع شده است.", "pad.modals.disconnected.explanation": "اتصال به سرور قطع شده است.", "pad.modals.disconnected.cause": "ممکن است سرور در دسترس نباشد. اگر این مشکل باز هم رخ داد مدیر حدمت را آگاه کنید.", @@ -133,6 +138,7 @@ "pad.chat.loadmessages": "بارگیری پیام‌های بیشتر", "pad.chat.stick.title": "چسباندن چت به صفحه", "pad.chat.writeMessage.placeholder": "پیام خود را این‌جا بنویسید", + "timeslider.followContents": "پیگیری به‌روزرسانی‌های محتوای پد", "timeslider.pageTitle": "لغزندهٔ زمان {{appTitle}}", "timeslider.toolbar.returnbutton": "بازگشت به دفترچه یادداشت", "timeslider.toolbar.authors": "نویسندگان:", @@ -171,5 +177,6 @@ "pad.impexp.uploadFailed": "آپلود انجام نشد، دوباره تلاش کنید", "pad.impexp.importfailed": "درون‌ریزی انجام نشد", "pad.impexp.copypaste": "کپی پیست کنید", - "pad.impexp.exportdisabled": "برون‌ریزی با قالب {{type}} از کار افتاده است. برای جزئیات بیشتر با مدیر سامانه خودتان تماس بگیرید." + "pad.impexp.exportdisabled": "برون‌ریزی با قالب {{type}} از کار افتاده است. برای جزئیات بیشتر با مدیر سامانه خودتان تماس بگیرید.", + "pad.impexp.maxFileSize": "پرونده خیلی بزرگ است. با مدیر سایت تماس بگیرید تا اندازهٔ مجاز برای وارد کردن پرونده را افزایش دهد." } diff --git a/src/locales/fr.json b/src/locales/fr.json index 997560977..603c5f26d 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -18,6 +18,7 @@ "Mahabarata", "Maxim21", "McDutchie", + "Meaz", "Metroitendo", "Od1n", "Peter17", @@ -66,8 +67,15 @@ "admin_settings.current_save.value": "Enregistrer les paramètres", "admin_settings.page-title": "Paramètres — Etherpad", "index.newPad": "Nouveau bloc-notes", - "index.createOpenPad": "ou créer/ouvrir un bloc-notes intitulé :", + "index.createOpenPad": "Ouvrir le bloc-notes par son nom", "index.openPad": "ouvrir un bloc-note existant avec le nom :", + "index.recentPads": "Bloc-notes récents", + "index.recentPadsEmpty": "Aucun bloc-notes récents trouvés.", + "index.generateNewPad": "Générer un nom de bloc-notes aléatoire", + "index.labelPad": "Nom du bloc-notes (facultatif)", + "index.placeholderPadEnter": "Veuillez saisir un nom de bloc-notes...", + "index.createAndShareDocuments": "Créez et partagez des documents en temps réel", + "index.createAndShareDocumentsDescription": "Etherpad vous permet d'éditer des documents de manière collaborative en temps réel, un peu comme un éditeur multijoueur en direct qui s'exécute dans votre navigateur.", "pad.toolbar.bold.title": "Gras (Ctrl + B)", "pad.toolbar.italic.title": "Italique (Ctrl + I)", "pad.toolbar.underline.title": "Souligné (Ctrl + U)", diff --git a/src/locales/gl.json b/src/locales/gl.json index b878f165b..2384a32db 100644 --- a/src/locales/gl.json +++ b/src/locales/gl.json @@ -40,8 +40,14 @@ "admin_settings.current_save.value": "Gardar axustes", "admin_settings.page-title": "Axustes - Etherpad", "index.newPad": "Novo documento", - "index.createOpenPad": "ou crea/abre un documento co nome:", - "index.openPad": "abrir un Pad existente co nome:", + "index.createOpenPad": "Abrir un documento por nome", + "index.openPad": "abrir un documento existente co nome:", + "index.recentPads": "Documentos recentes", + "index.recentPadsEmpty": "Non se atoparon documentos recentes.", + "index.generateNewPad": "Xerar un nome de documento ao chou", + "index.labelPad": "Nome do documento (opcional)", + "index.createAndShareDocuments": "Crear e compartir documentos en tempo real", + "index.createAndShareDocumentsDescription": "Etherpad permite editar documentos de forma colaborativa en tempo real, de xeito semellante a un editor multixogador en directo que se executa no navegador.", "pad.toolbar.bold.title": "Grosa (Ctrl+B)", "pad.toolbar.italic.title": "Cursiva (Ctrl+I)", "pad.toolbar.underline.title": "Subliñar (Ctrl+U)", diff --git a/src/locales/it.json b/src/locales/it.json index 81a51b297..cd8d453f5 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -24,8 +24,10 @@ "admin_settings": "Impostazioni", "admin_settings.current_save.value": "Salva impostazioni", "index.newPad": "Nuovo pad", - "index.createOpenPad": "o crea/apre un pad con il nome:", + "index.createOpenPad": "Apri pad per nome", "index.openPad": "apri un Pad esistente col nome:", + "index.labelPad": "Nome pad (facoltativo)", + "index.createAndShareDocuments": "Crea e condividi documenti in tempo reale", "pad.toolbar.bold.title": "Grassetto (Ctrl+B)", "pad.toolbar.italic.title": "Corsivo (Ctrl+I)", "pad.toolbar.underline.title": "Sottolineato (Ctrl+U)", diff --git a/src/locales/lb.json b/src/locales/lb.json index 0230b7ce3..a9f1f7fd1 100644 --- a/src/locales/lb.json +++ b/src/locales/lb.json @@ -32,6 +32,7 @@ "pad.toolbar.redo.title": "Widderhuelen (Ctrl-Y)", "pad.toolbar.savedRevision.title": "Versioun späicheren", "pad.toolbar.settings.title": "Astellungen", + "pad.toolbar.home.title": "Zréck op d'Haaptsäit", "pad.toolbar.showusers.title": "Aktuell Benotzer vun dësem Pad uweisen", "pad.colorpicker.save": "Späicheren", "pad.colorpicker.cancel": "Ofbriechen", diff --git a/src/locales/mk.json b/src/locales/mk.json index dc14015c5..5e55f91a7 100644 --- a/src/locales/mk.json +++ b/src/locales/mk.json @@ -40,8 +40,15 @@ "admin_settings.current_save.value": "Зачувај нагодувања", "admin_settings.page-title": "Нагодувања — Etherpad", "index.newPad": "Нова тетратка", - "index.createOpenPad": "или направете/отворете тетратка со името:", + "index.createOpenPad": "Отвори тетратка по име", "index.openPad": "отвори постоечка тетратка наречена:", + "index.recentPads": "Скорешни тетратки", + "index.recentPadsEmpty": "Не најдов скорешни тетратки.", + "index.generateNewPad": "Создај случајно име на тетратка", + "index.labelPad": "Име на тетратка (незадолжително)", + "index.placeholderPadEnter": "Внесете го името на тетратката...", + "index.createAndShareDocuments": "Создавајте и споделувајте документи во живо", + "index.createAndShareDocumentsDescription": "Etherpad ви овозможува соработно уредување на документи во живо, слично како уредувачот за повеќе играчи во живо што работи во вашиот пречистувач.", "pad.toolbar.bold.title": "Задебелено (Ctrl-B)", "pad.toolbar.italic.title": "Косо (Ctrl-I)", "pad.toolbar.underline.title": "Подвлечено (Ctrl-U)", diff --git a/src/locales/mnw.json b/src/locales/mnw.json index db7dfa56e..09b987756 100644 --- a/src/locales/mnw.json +++ b/src/locales/mnw.json @@ -45,7 +45,7 @@ "timeslider.month.april": "ဨပြဳ", "timeslider.month.may": "မေ", "timeslider.month.june": "ဂျောန်", - "timeslider.month.july": "ဂျူလာင်", + "timeslider.month.july": "ဂျူလာၚ်", "timeslider.month.august": "အဝ်ဂေတ်", "timeslider.month.september": "\nသေပ်တေမ်ပါ", "timeslider.month.october": "\nအံက်တဝ်ပါ", diff --git a/src/locales/nl.json b/src/locales/nl.json index 70f0a2288..0ab9813b3 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "ABPMAB", "Dutchy45", "Klaas van Buiten", "KlaasZ4usV", @@ -51,8 +52,11 @@ "admin_settings.current_save.value": "Bewaar instellingen", "admin_settings.page-title": "Instellingen - Etherpad", "index.newPad": "Nieuw pad", - "index.createOpenPad": "of maak/open een pad met de naam:", - "index.openPad": "open een bestaande Pad met de naam:", + "index.createOpenPad": "Open een pad met de naam", + "index.openPad": "open een bestaand pad met de naam:", + "index.generateNewPad": "Genereer willekeurige padnaam", + "index.labelPad": "Padnaam (optioneel)", + "index.createAndShareDocuments": "Maak en deel documenten in realtime", "pad.toolbar.bold.title": "Vet (Ctrl-B)", "pad.toolbar.italic.title": "Cursief (Ctrl-I)", "pad.toolbar.underline.title": "Onderstrepen (Ctrl-U)", @@ -69,12 +73,13 @@ "pad.toolbar.savedRevision.title": "Versie opslaan", "pad.toolbar.settings.title": "Instellingen", "pad.toolbar.embed.title": "Pad delen en insluiten", + "pad.toolbar.home.title": "Terug naar de startpagina", "pad.toolbar.showusers.title": "Gebruikers van dit pad weergeven", "pad.colorpicker.save": "Opslaan", "pad.colorpicker.cancel": "Annuleren", "pad.loading": "Bezig met laden…", "pad.noCookie": "Er kon geen cookie gevonden worden. Zorg ervoor dat uw browser cookies accepteert. Uw sessie en instellingen worden tussen bezoeken niet opgeslagen. Dit kan te wijten zijn aan het feit dat Etherpad in sommige browsers wordt opgenomen in een iFrame. Zorg ervoor dat Etherpad zich op hetzelfde subdomein/domein bevindt als het bovenliggende iFrame.", - "pad.permissionDenied": "U hebt geen rechten om deze pad te bekijken", + "pad.permissionDenied": "U hebt geen rechten om dit pad te bekijken", "pad.settings.padSettings": "Padinstellingen", "pad.settings.myView": "Mijn overzicht", "pad.settings.stickychat": "Chat altijd zichtbaar", @@ -92,7 +97,7 @@ "pad.importExport.import_export": "Importeren/exporteren", "pad.importExport.import": "Tekstbestand of document uploaden", "pad.importExport.importSuccessful": "Afgerond", - "pad.importExport.export": "Huidige pad exporteren als", + "pad.importExport.export": "Huidig pad exporteren als", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Tekst zonder opmaak", diff --git a/src/locales/sq.json b/src/locales/sq.json index b6c2fa285..887e2aedc 100644 --- a/src/locales/sq.json +++ b/src/locales/sq.json @@ -4,7 +4,8 @@ "Besnik b", "Eraldkerciku", "Kosovastar", - "Liridon" + "Liridon", + "Xhulianoo" ] }, "admin.page-title": "Pult Përgjegjësi - Etherpad", @@ -78,7 +79,7 @@ "pad.settings.about": "Mbi", "pad.settings.poweredBy": "Bazuar në", "pad.importExport.import_export": "Import/Eksport", - "pad.importExport.import": "Ngarkoni cilëndo kartelë tekst ose dokument", + "pad.importExport.import": "Ngarko çdo skedar teksti ose dokument", "pad.importExport.importSuccessful": "Me sukses!", "pad.importExport.export": "Eksportojeni bllokun e tanishëm si:", "pad.importExport.exportetherpad": "Etherpad", diff --git a/src/locales/zh-hans.json b/src/locales/zh-hans.json index ed89d2190..2720707f5 100644 --- a/src/locales/zh-hans.json +++ b/src/locales/zh-hans.json @@ -59,8 +59,15 @@ "admin_settings.current_save.value": "保存设置", "admin_settings.page-title": "设置 - Etherpad", "index.newPad": "新记事本", - "index.createOpenPad": "或创建/打开以下名称的记事本:", + "index.createOpenPad": "按名称打开记事本", "index.openPad": "打开一个现有的记事本,名称为:", + "index.recentPads": "最近的记事本", + "index.recentPadsEmpty": "未找到最近的记事本。", + "index.generateNewPad": "生成随机记事本名称", + "index.labelPad": "记事本名称(可选)", + "index.placeholderPadEnter": "输入记事本名称…", + "index.createAndShareDocuments": "实时创建和共享文档", + "index.createAndShareDocumentsDescription": "Etherpad允许您实时协作编辑文档,就像在浏览器中运行的实时多人编辑器一样。", "pad.toolbar.bold.title": "粗体(Ctrl-B)", "pad.toolbar.italic.title": "斜体(Ctrl-I)", "pad.toolbar.underline.title": "下划线(Ctrl-U)", @@ -77,6 +84,7 @@ "pad.toolbar.savedRevision.title": "保存修订", "pad.toolbar.settings.title": "设置", "pad.toolbar.embed.title": "共享并嵌入此记事本", + "pad.toolbar.home.title": "返回首页", "pad.toolbar.showusers.title": "显示此记事本上的用户", "pad.colorpicker.save": "保存", "pad.colorpicker.cancel": "取消", diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json index 6bb3a1f05..5158a68ab 100644 --- a/src/locales/zh-hant.json +++ b/src/locales/zh-hant.json @@ -48,8 +48,15 @@ "admin_settings.current_save.value": "儲存設定", "admin_settings.page-title": "設定 - Etherpad", "index.newPad": "新記事本", - "index.createOpenPad": "或建立/開啟以下名稱的記事本:", + "index.createOpenPad": "依照名稱開啟記事本", "index.openPad": "開啟一個現有的記事本,名稱為:", + "index.recentPads": "近期記事本", + "index.recentPadsEmpty": "找不到近期的記事本。", + "index.generateNewPad": "產生隨機記事本名稱", + "index.labelPad": "記事本名稱(可選)", + "index.placeholderPadEnter": "輸入記事本名稱…", + "index.createAndShareDocuments": "即時建立和共享文件", + "index.createAndShareDocumentsDescription": "Etherpad 允許您即時協作編輯文件,就像在瀏覽器中運作的即時多人編輯器一樣。", "pad.toolbar.bold.title": "粗體(Ctrl+B)", "pad.toolbar.italic.title": "斜體(Ctrl+I)", "pad.toolbar.underline.title": "底線(Ctrl+U)", From 65e794722eb417da9882a2a3f2ce4758c36c4119 Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+SamTV12345@users.noreply.github.com> Date: Mon, 4 Aug 2025 19:00:12 +0200 Subject: [PATCH 03/33] Migrating to express 5 (#6690) * pMigrating to express 5 * Fixed export. * chore: bumped deps * chore: added express * chore: added express * chore: fixed admin ui --- CHANGELOG.md | 5 + pnpm-lock.yaml | 297 +++++++++++-------------- src/ep.json | 6 - src/node/hooks/express/admin.ts | 2 +- src/node/hooks/express/importexport.ts | 4 +- src/node/hooks/express/static.ts | 7 +- src/node/hooks/express/tests.ts | 83 ------- src/node/utils/Minify.ts | 2 +- src/package.json | 6 +- 9 files changed, 151 insertions(+), 261 deletions(-) delete mode 100644 src/node/hooks/express/tests.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 6239ecbfd..96c0869e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 2.5.0 + +### Notable enhancements and fixes +- Updated to express 5.0.0. This is a major update to express that brings a lot of improvements and fixes. + # 2.4.2 ### Notable enhancements and fixes diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 798131ad8..a37bbb9a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -162,11 +162,11 @@ importers: specifier: ^0.25.8 version: 0.25.8 express: - specifier: 4.21.2 - version: 4.21.2 + specifier: ^5.1.0 + version: 5.1.0 express-rate-limit: - specifier: ^8.0.0 - version: 8.0.1(express@4.21.2) + specifier: ^8.0.1 + version: 8.0.1(express@5.1.0) express-session: specifier: ^1.18.2 version: 1.18.2 @@ -262,7 +262,7 @@ importers: version: 10.2.2 swagger-ui-express: specifier: ^5.0.1 - version: 5.0.1(express@4.21.2) + version: 5.0.1(express@5.1.0) tinycon: specifier: 0.6.8 version: 0.6.8 @@ -290,10 +290,10 @@ importers: version: 3.2.24 '@types/cookie-parser': specifier: ^1.4.9 - version: 1.4.9(@types/express@4.17.21) + version: 1.4.9(@types/express@5.0.3) '@types/express': - specifier: ^4.17.21 - version: 4.17.21 + specifier: ^5.0.0 + version: 5.0.3 '@types/express-session': specifier: ^1.18.2 version: 1.18.2 @@ -1576,14 +1576,14 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/express-serve-static-core@4.19.6': - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + '@types/express-serve-static-core@5.0.7': + resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==} '@types/express-session@1.18.2': resolution: {integrity: sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==} - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@5.0.3': + resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} '@types/formidable@3.4.5': resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==} @@ -2052,6 +2052,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2115,9 +2119,6 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.8: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} @@ -2197,9 +2198,9 @@ packages: birpc@2.5.0: resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -2325,6 +2326,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -2342,9 +2347,9 @@ packages: cookie-signature@1.0.7: resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} @@ -2567,10 +2572,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} @@ -2860,9 +2861,9 @@ packages: resolution: {integrity: sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A==} engines: {node: '>= 0.8.0'} - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2916,8 +2917,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} engines: {node: '>= 0.8'} find-root@1.1.0: @@ -2982,6 +2983,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3193,10 +3198,6 @@ packages: typescript: optional: true - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -3328,6 +3329,9 @@ packages: is-promise@1.0.1: resolution: {integrity: sha512-mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3601,16 +3605,13 @@ packages: resolution: {integrity: sha512-SIzGtX1WGDvR59FqcJaGEAqDueBvLBh6W4T/gQaHr5ufcqvQkUHGcfQhlmq77mkeF5Mo+UpD+8hm69CwUVibGw==} engines: {node: '>= 5.12'} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - media-typer@1.1.0: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -3655,11 +3656,6 @@ packages: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - mime@2.6.0: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} @@ -3744,6 +3740,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + netmask@2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} @@ -3905,12 +3905,13 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -3983,10 +3984,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} @@ -4015,10 +4012,6 @@ packages: rate-limiter-flexible@7.1.1: resolution: {integrity: sha512-lsYRcqRSJrKBNt6pMzBJTiCJP5KnwsGWdObMZxd19JFUJRntM+yuHs4/2bs6NZweSLgpsDcykvzyQaumoslWQg==} - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - raw-body@3.0.0: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} engines: {node: '>= 0.8'} @@ -4170,6 +4163,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -4277,16 +4274,16 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -4618,10 +4615,6 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -4734,10 +4727,6 @@ packages: '@types/react': optional: true - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -5987,16 +5976,16 @@ snapshots: '@types/content-disposition@0.5.9': {} - '@types/cookie-parser@1.4.9(@types/express@4.17.21)': + '@types/cookie-parser@1.4.9(@types/express@5.0.3)': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.3 '@types/cookiejar@2.1.5': {} '@types/cookies@0.9.1': dependencies: '@types/connect': 3.4.38 - '@types/express': 4.17.21 + '@types/express': 5.0.3 '@types/keygrip': 1.0.6 '@types/node': 24.1.0 @@ -6014,7 +6003,7 @@ snapshots: '@types/estree@1.0.8': {} - '@types/express-serve-static-core@4.19.6': + '@types/express-serve-static-core@5.0.7': dependencies: '@types/node': 24.1.0 '@types/qs': 6.9.18 @@ -6023,13 +6012,12 @@ snapshots: '@types/express-session@1.18.2': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.3 - '@types/express@4.17.21': + '@types/express@5.0.3': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.18 + '@types/express-serve-static-core': 5.0.7 '@types/serve-static': 1.15.7 '@types/formidable@3.4.5': @@ -6164,7 +6152,7 @@ snapshots: '@types/swagger-ui-express@4.1.8': dependencies: - '@types/express': 4.17.21 + '@types/express': 5.0.3 '@types/serve-static': 1.15.7 '@types/tar@6.1.13': @@ -6563,6 +6551,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -6617,8 +6610,6 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 - array-flatten@1.1.1: {} - array-includes@3.1.8: dependencies: call-bind: 1.0.8 @@ -6706,20 +6697,17 @@ snapshots: birpc@2.5.0: {} - body-parser@1.20.3: + body-parser@2.2.0: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 + debug: 4.4.1(supports-color@8.1.1) http-errors: 2.0.0 - iconv-lite: 0.4.24 + iconv-lite: 0.6.3 on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 transitivePeerDependencies: - supports-color @@ -6850,6 +6838,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-type@1.0.5: {} convert-source-map@2.0.0: {} @@ -6863,7 +6855,7 @@ snapshots: cookie-signature@1.0.7: {} - cookie@0.7.1: {} + cookie-signature@1.2.2: {} cookie@0.7.2: {} @@ -7052,8 +7044,6 @@ snapshots: emoji-regex@9.2.2: {} - encodeurl@1.0.2: {} - encodeurl@2.0.0: {} engine.io-client@6.6.3: @@ -7495,9 +7485,9 @@ snapshots: expect-type@1.2.1: {} - express-rate-limit@8.0.1(express@4.21.2): + express-rate-limit@8.0.1(express@5.1.0): dependencies: - express: 4.21.2 + express: 5.1.0 ip-address: 10.0.1 express-session@1.18.2: @@ -7513,38 +7503,34 @@ snapshots: transitivePeerDependencies: - supports-color - express@4.21.2: + express@5.1.0: dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - content-disposition: 0.5.4 + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.1(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 - fresh: 0.5.2 + finalhandler: 2.1.0 + fresh: 2.0.0 http-errors: 2.0.0 - merge-descriptors: 1.0.3 - methods: 1.1.2 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 on-finished: 2.4.1 + once: 1.4.0 parseurl: 1.3.3 - path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.13.0 + qs: 6.14.0 range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.2 + type-is: 2.0.1 vary: 1.1.2 transitivePeerDependencies: - supports-color @@ -7598,15 +7584,14 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.1: + finalhandler@2.1.0: dependencies: - debug: 2.6.9 + debug: 4.4.1(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -7671,6 +7656,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -7947,10 +7934,6 @@ snapshots: optionalDependencies: typescript: 5.8.3 - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -8073,6 +8056,8 @@ snapshots: is-promise@1.0.1: {} + is-promise@4.0.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -8395,11 +8380,9 @@ snapshots: binary-search: 1.3.6 optional-js: 2.3.0 - media-typer@0.3.0: {} - media-typer@1.1.0: {} - merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} merge2@1.4.1: {} @@ -8439,8 +8422,6 @@ snapshots: dependencies: mime-db: 1.54.0 - mime@1.6.0: {} - mime@2.6.0: {} minimatch@3.1.2: @@ -8519,6 +8500,8 @@ snapshots: negotiator@0.6.3: {} + negotiator@1.0.0: {} + netmask@2.0.2: {} no-case@3.0.4: @@ -8722,10 +8705,10 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.12: {} - path-to-regexp@6.3.0: {} + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} pathe@2.0.3: {} @@ -8788,10 +8771,6 @@ snapshots: punycode@2.3.1: {} - qs@6.13.0: - dependencies: - side-channel: 1.1.0 - qs@6.14.0: dependencies: side-channel: 1.1.0 @@ -8812,13 +8791,6 @@ snapshots: rate-limiter-flexible@7.1.1: {} - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - raw-body@3.0.0: dependencies: bytes: 3.1.2 @@ -8992,6 +8964,16 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.40.1 fsevents: 2.3.3 + router@2.2.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + rrweb-cssom@0.8.0: {} run-parallel@1.2.0: @@ -9076,21 +9058,19 @@ snapshots: semver@7.7.2: {} - send@0.19.0: + send@1.2.0: dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 + debug: 4.4.1(supports-color@8.1.1) + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - fresh: 0.5.2 + fresh: 2.0.0 http-errors: 2.0.0 - mime: 1.6.0 + mime-types: 3.0.1 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -9098,12 +9078,12 @@ snapshots: dependencies: randombytes: 2.1.0 - serve-static@1.16.2: + serve-static@2.2.0: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 1.2.0 transitivePeerDependencies: - supports-color @@ -9401,9 +9381,9 @@ snapshots: dependencies: '@scarf/scarf': 1.4.0 - swagger-ui-express@5.0.1(express@4.21.2): + swagger-ui-express@5.0.1(express@5.1.0): dependencies: - express: 4.21.2 + express: 5.1.0 swagger-ui-dist: 5.20.6 symbol-tree@3.2.4: {} @@ -9496,11 +9476,6 @@ snapshots: type-fest@0.20.2: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -9645,8 +9620,6 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 - utils-merge@1.0.1: {} - vary@1.1.2: {} vfile-location@5.0.3: diff --git a/src/ep.json b/src/ep.json index 83dfc509d..355a9e0b0 100644 --- a/src/ep.json +++ b/src/ep.json @@ -96,12 +96,6 @@ "socketio": "ep_etherpad-lite/node/handler/PadMessageHandler" } }, - { - "name": "tests", - "hooks": { - "expressPreSession": "ep_etherpad-lite/node/hooks/express/tests" - } - }, { "name": "admin", "hooks": { diff --git a/src/node/hooks/express/admin.ts b/src/node/hooks/express/admin.ts index ceefb0155..66f02699a 100644 --- a/src/node/hooks/express/admin.ts +++ b/src/node/hooks/express/admin.ts @@ -22,7 +22,7 @@ exports.expressCreateServer = (hookName: string, args: ArgsExpressType, cb: Func console.error('admin template not found, skipping admin interface. You need to rebuild it in /admin with pnpm run build-copy') return cb(); } - args.app.get('/admin/*', (req: any, res: any) => { + args.app.get('/admin/{*filename}', (req: any, res: any) => { // extract URL path let pathname = path.join(ADMIN_PATH, req.url); pathname = path.normalize(pathname) diff --git a/src/node/hooks/express/importexport.ts b/src/node/hooks/express/importexport.ts index 898606e49..3a361d005 100644 --- a/src/node/hooks/express/importexport.ts +++ b/src/node/hooks/express/importexport.ts @@ -25,8 +25,8 @@ exports.expressCreateServer = (hookName:string, args:ArgsExpressType, cb:Functio }); // handle export requests - args.app.use('/p/:pad/:rev?/export/:type', limiter); - args.app.get('/p/:pad/:rev?/export/:type', (req:any, res:any, next:Function) => { + args.app.use('/p/:pad{/:rev}/export/:type', limiter); + args.app.get('/p/:pad{/:rev}/export/:type', (req:any, res:any, next:Function) => { (async () => { const types = ['pdf', 'doc', 'txt', 'html', 'odt', 'etherpad']; // send a 404 if we don't support this filetype diff --git a/src/node/hooks/express/static.ts b/src/node/hooks/express/static.ts index 07a7f3a21..f83bb382a 100644 --- a/src/node/hooks/express/static.ts +++ b/src/node/hooks/express/static.ts @@ -6,6 +6,7 @@ import {PartType} from "../../types/PartType"; const fs = require('fs').promises; import {minify} from '../../utils/Minify'; import path from 'node:path'; +import {ArgsExpressType} from "../../types/ArgsExpressType"; const plugins = require('../../../static/js/pluginfw/plugin_defs'); const settings = require('../../utils/Settings'); @@ -30,16 +31,16 @@ const getTar = async () => { return tar; }; -exports.expressPreSession = async (hookName:string, {app}:any) => { +exports.expressPreSession = async (hookName:string, {app}:ArgsExpressType) => { // Minify will serve static files compressed (minify enabled). It also has // file-specific hacks for ace/require-kernel/etc. - app.all('/static/:filename(*)', minify); + app.all('/static/*filename', minify); // serve plugin definitions // not very static, but served here so that client can do // require("pluginfw/static/js/plugin-definitions.js"); - app.get('/pluginfw/plugin-definitions.json', (req: any, res:any, next:Function) => { + app.get('/pluginfw/plugin-definitions.json', (_req, res) => { const clientParts = plugins.parts.filter((part: PartType) => part.client_hooks != null); const clientPlugins:MapArrayType = {}; for (const name of new Set(clientParts.map((part: PartType) => part.plugin))) { diff --git a/src/node/hooks/express/tests.ts b/src/node/hooks/express/tests.ts deleted file mode 100644 index f8a1417ef..000000000 --- a/src/node/hooks/express/tests.ts +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -import {Dirent} from "node:fs"; -import {PluginDef} from "../../types/PartType"; - -const path = require('path'); -const fsp = require('fs').promises; -const plugins = require('../../../static/js/pluginfw/plugin_defs'); -const sanitizePathname = require('../../utils/sanitizePathname'); -const settings = require('../../utils/Settings'); - -// Returns all *.js files under specDir (recursively) as relative paths to specDir, using '/' -// instead of path.sep to separate pathname components. -const findSpecs = async (specDir: string) => { - let dirents: Dirent[]; - try { - dirents = await fsp.readdir(specDir, {withFileTypes: true}); - } catch (err:any) { - if (['ENOENT', 'ENOTDIR'].includes(err.code)) return []; - throw err; - } - const specs: string[] = []; - await Promise.all(dirents.map(async (dirent) => { - if (dirent.isDirectory()) { - const subdirSpecs = await findSpecs(path.join(specDir, dirent.name)); - specs.push(...subdirSpecs.map((spec) => `${dirent.name}/${spec}`)); - return; - } - if (!dirent.name.endsWith('.js')) return; - specs.push(dirent.name); - })); - return specs; -}; - -exports.expressPreSession = async (hookName:string, {app}:any) => { - app.get('/tests/frontend/frontendTestSpecs.json', (req:any, res:any, next:Function) => { - (async () => { - const modules:string[] = []; - await Promise.all(Object.entries(plugins.plugins).map(async ([plugin, def]) => { - let {package: {path: pluginPath}} = def as PluginDef; - if (!pluginPath.endsWith(path.sep)) pluginPath += path.sep; - const specDir = `${plugin === 'ep_etherpad-lite' ? '' : 'static/'}tests/frontend/specs`; - for (const spec of await findSpecs(path.join(pluginPath, specDir))) { - if (plugin === 'ep_etherpad-lite' && !settings.enableAdminUITests && - spec.startsWith('admin')) continue; - modules.push(`${plugin}/${specDir}/${spec.replace(/\.js$/, '')}`); - } - })); - // Sort plugin tests before core tests. - modules.sort((a, b) => { - a = String(a); - b = String(b); - const aCore = a.startsWith('ep_etherpad-lite/'); - const bCore = b.startsWith('ep_etherpad-lite/'); - if (aCore === bCore) return a.localeCompare(b); - return aCore ? 1 : -1; - }); - console.debug('Sent browser the following test spec modules:', modules); - res.json(modules); - })().catch((err) => next(err || new Error(err))); - }); - - const rootTestFolder = path.join(settings.root, 'src/tests/frontend/'); - - app.get('/tests/frontend/index.html', (req:any, res:any) => { - res.redirect(['./', ...req.url.split('?').slice(1)].join('?')); - }); - - // The regexp /[\d\D]{0,}/ is equivalent to the regexp /.*/. The Express route path used here - // uses the more verbose /[\d\D]{0,}/ pattern instead of /.*/ because path-to-regexp v0.1.7 (the - // version used with Express v4.x) interprets '.' and '*' differently than regexp. - app.get('/tests/frontend/:file([\\d\\D]{0,})', (req:any, res:any, next:Function) => { - (async () => { - let file = sanitizePathname(req.params.file); - if (['', '.', './'].includes(file)) file = 'index.html'; - res.sendFile(path.join(rootTestFolder, file)); - })().catch((err) => next(err || new Error(err))); - }); - - app.get('/tests/frontend', (req:any, res:any) => { - res.redirect(['./frontend/', ...req.url.split('?').slice(1)].join('?')); - }); -}; diff --git a/src/node/utils/Minify.ts b/src/node/utils/Minify.ts index 9660c9098..dbd4b247b 100644 --- a/src/node/utils/Minify.ts +++ b/src/node/utils/Minify.ts @@ -146,7 +146,7 @@ const compatPaths = { * @param res the Express response */ const _minify = async (req:any, res:any) => { - let filename = req.params.filename; + let filename = req.params.filename.join('/'); try { filename = sanitizePathname(filename); } catch (err) { diff --git a/src/package.json b/src/package.json index 81461d129..f96724207 100644 --- a/src/package.json +++ b/src/package.json @@ -37,8 +37,8 @@ "cross-spawn": "^7.0.6", "ejs": "^3.1.10", "esbuild": "^0.25.8", - "express": "4.21.2", - "express-rate-limit": "^8.0.0", + "express": "^5.1.0", + "express-rate-limit": "^8.0.1", "express-session": "^1.18.2", "fast-deep-equal": "^3.1.3", "find-root": "1.1.0", @@ -85,8 +85,8 @@ "devDependencies": { "@playwright/test": "^1.54.1", "@types/async": "^3.2.24", + "@types/express": "^5.0.0", "@types/cookie-parser": "^1.4.9", - "@types/express": "^4.17.21", "@types/express-session": "^1.18.2", "@types/formidable": "^3.4.5", "@types/http-errors": "^2.0.5", From 0ed56032303c0a5b5f9fa0424ebbe68c75c40662 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 19:21:59 +0200 Subject: [PATCH 04/33] build(deps): bump jose from 5.10.0 to 6.0.12 (#7049) * build(deps): bump jose from 5.10.0 to 6.0.12 Bumps [jose](https://github.com/panva/jose) from 5.10.0 to 6.0.12. - [Release notes](https://github.com/panva/jose/releases) - [Changelog](https://github.com/panva/jose/blob/main/CHANGELOG.md) - [Commits](https://github.com/panva/jose/compare/v5.10.0...v6.0.12) --- updated-dependencies: - dependency-name: jose dependency-version: 6.0.12 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * chore: fixed jose --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: SamTV12345 <40429738+samtv12345@users.noreply.github.com> --- pnpm-lock.yaml | 9 ++------- src/node/security/OAuth2Provider.ts | 13 +++++++------ src/package.json | 2 +- src/static/js/Changeset.ts | 2 +- 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a37bbb9a1..cbdd58dba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -183,8 +183,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 jose: - specifier: ^5.10.0 - version: 5.10.0 + specifier: ^6.0.12 + version: 6.0.12 js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -3390,9 +3390,6 @@ packages: engines: {node: '>=10'} hasBin: true - jose@5.10.0: - resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - jose@6.0.12: resolution: {integrity: sha512-T8xypXs8CpmiIi78k0E+Lk7T2zlK4zDyg+o1CZ4AkOHgDg98ogdP2BeZ61lTFKFyoEwJ9RgAgN+SdM3iPgNonQ==} @@ -8118,8 +8115,6 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 - jose@5.10.0: {} - jose@6.0.12: {} js-cookie@3.0.5: {} diff --git a/src/node/security/OAuth2Provider.ts b/src/node/security/OAuth2Provider.ts index b4abd3249..3ef7d3a3b 100644 --- a/src/node/security/OAuth2Provider.ts +++ b/src/node/security/OAuth2Provider.ts @@ -1,14 +1,13 @@ import {ArgsExpressType} from "../types/ArgsExpressType"; import Provider, {Account, Configuration} from 'oidc-provider'; -import {generateKeyPair, exportJWK, KeyLike} from 'jose' +import {generateKeyPair, exportJWK, CryptoKey} from 'jose' import MemoryAdapter from "./OIDCAdapter"; import path from "path"; const settings = require('../utils/Settings'); import {IncomingForm} from 'formidable' -import express, {Request, Response} from 'express'; +import express from 'express'; import {format} from 'url' import {ParsedUrlQuery} from "node:querystring"; -import {Http2ServerRequest, Http2ServerResponse} from "node:http2"; import {MapArrayType} from "../types/MapType"; const configuration: Configuration = { @@ -64,14 +63,16 @@ const configuration: Configuration = { }; -export let publicKeyExported: KeyLike|null -export let privateKeyExported: KeyLike|null +export let publicKeyExported: CryptoKey|null +export let privateKeyExported: CryptoKey|null /* This function is used to initialize the OAuth2 provider */ export const expressCreateServer = async (hookName: string, args: ArgsExpressType, cb: Function) => { - const {privateKey, publicKey} = await generateKeyPair('RS256'); + const {privateKey, publicKey} = await generateKeyPair('RS256', { + extractable: true + }); const privateKeyJWK = await exportJWK(privateKey); publicKeyExported = publicKey privateKeyExported = privateKey diff --git a/src/package.json b/src/package.json index f96724207..d0cd6a89b 100644 --- a/src/package.json +++ b/src/package.json @@ -44,7 +44,7 @@ "find-root": "1.1.0", "formidable": "^3.5.4", "http-errors": "^2.0.0", - "jose": "^5.10.0", + "jose": "^6.0.12", "js-cookie": "^3.0.5", "jsdom": "^26.1.0", "jsonminify": "0.4.2", diff --git a/src/static/js/Changeset.ts b/src/static/js/Changeset.ts index 8d96e157b..bf4f1b82b 100644 --- a/src/static/js/Changeset.ts +++ b/src/static/js/Changeset.ts @@ -328,7 +328,7 @@ export const checkRep = (cs: string) => { * - `op2` is the current operation from `in2`, to apply to `op1`. Has the same consumption * and advancement semantics as `op1`. * - `opOut` is the result of applying `op2` (before consumption) to `op1` (before - * consumption). If there is no result (perhaps `op1` and `op2` cancelled each other out), + * consumption). If there is no result (perhaps `op1` and `op2` canceled each other out), * either `opOut` must be nullish or `opOut.opcode` must be the empty string. * @returns {string} the integrated changeset */ From 920308a6272144cea6840a8a54307c6d82cf1fe6 Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+SamTV12345@users.noreply.github.com> Date: Mon, 4 Aug 2025 19:59:28 +0200 Subject: [PATCH 05/33] chore: moved first files to esm (#7061) * chore: moved first files to esm * chore: moved first files to esm * chore: fix read only manager --- pnpm-lock.yaml | 36 ++++++++++++++++------- src/node/db/API.ts | 2 +- src/node/db/Pad.ts | 5 ++-- src/node/db/ReadOnlyManager.ts | 26 +++++++++++----- src/node/db/SecurityManager.ts | 2 +- src/node/db/SessionManager.ts | 2 +- src/node/handler/APIKeyHandler.ts | 2 +- src/node/handler/PadMessageHandler.ts | 2 +- src/node/hooks/express/adminsettings.ts | 10 +++---- src/node/hooks/express/importexport.ts | 2 +- src/node/hooks/express/webaccess.ts | 2 +- src/node/server.ts | 12 ++++---- src/node/utils/Cleanup.ts | 19 ++++++------ src/node/utils/NodeVersion.ts | 4 +-- src/node/utils/Settings.ts | 13 ++++---- src/node/utils/UpdateCheck.ts | 14 ++++----- src/node/utils/randomstring.ts | 5 ++-- src/package.json | 6 ++-- src/tests/backend-new/specs/promises.ts | 2 -- src/tests/backend/specs/ExportEtherpad.ts | 2 +- src/tests/backend/specs/messages.ts | 2 +- src/tests/backend/specs/socketio.ts | 2 +- 22 files changed, 96 insertions(+), 76 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbdd58dba..9fbf055df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -136,7 +136,7 @@ importers: devDependencies: vitepress: specifier: ^2.0.0-alpha.9 - version: 2.0.0-alpha.9(@types/node@24.1.0)(axios@1.10.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3) + version: 2.0.0-alpha.9(@types/node@24.1.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3) src: dependencies: @@ -144,8 +144,8 @@ importers: specifier: ^3.2.6 version: 3.2.6 axios: - specifier: ^1.10.0 - version: 1.10.0 + specifier: ^1.11.0 + version: 1.11.0 cookie-parser: specifier: ^1.4.7 version: 1.4.7 @@ -170,9 +170,6 @@ importers: express-session: specifier: ^1.18.2 version: 1.18.2 - fast-deep-equal: - specifier: ^3.1.3 - version: 3.1.3 find-root: specifier: 1.1.0 version: 1.1.0 @@ -312,6 +309,9 @@ importers: '@types/jsdom': specifier: ^21.1.7 version: 21.1.7 + '@types/jsonminify': + specifier: ^0.4.3 + version: 0.4.3 '@types/jsonwebtoken': specifier: ^9.0.10 version: 9.0.10 @@ -1615,6 +1615,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/jsonminify@0.4.3': + resolution: {integrity: sha512-+oz7EbPz1Nwmn/sr3UztgXpRhdFpvFrjGi5ictEYxUri5ZvQMTcdTi36MTfD/gCb1A5xhJKdH8Hwz2uz5k6s9A==} + '@types/jsonwebtoken@9.0.10': resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} @@ -2171,6 +2174,9 @@ packages: axios@1.10.0: resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + axios@1.11.0: + resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -6049,6 +6055,8 @@ snapshots: '@types/json5@0.0.29': {} + '@types/jsonminify@0.4.3': {} + '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 @@ -6527,13 +6535,13 @@ snapshots: '@vueuse/shared': 13.6.0(vue@3.5.18(typescript@5.8.3)) vue: 3.5.18(typescript@5.8.3) - '@vueuse/integrations@13.6.0(axios@1.10.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3))': + '@vueuse/integrations@13.6.0(axios@1.11.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3))': dependencies: '@vueuse/core': 13.6.0(vue@3.5.18(typescript@5.8.3)) '@vueuse/shared': 13.6.0(vue@3.5.18(typescript@5.8.3)) vue: 3.5.18(typescript@5.8.3) optionalDependencies: - axios: 1.10.0 + axios: 1.11.0 focus-trap: 7.6.5 jwt-decode: 4.0.0 @@ -6678,6 +6686,14 @@ snapshots: transitivePeerDependencies: - debug + axios@1.11.0: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + bail@2.0.2: {} balanced-match@1.0.2: {} @@ -9686,7 +9702,7 @@ snapshots: fsevents: 2.3.3 tsx: 4.20.3 - vitepress@2.0.0-alpha.9(@types/node@24.1.0)(axios@1.10.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3): + vitepress@2.0.0-alpha.9(@types/node@24.1.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3): dependencies: '@docsearch/css': 4.0.0-beta.5 '@docsearch/js': 4.0.0-beta.5 @@ -9698,7 +9714,7 @@ snapshots: '@vue/devtools-api': 7.7.7 '@vue/shared': 3.5.18 '@vueuse/core': 13.6.0(vue@3.5.18(typescript@5.8.3)) - '@vueuse/integrations': 13.6.0(axios@1.10.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3)) + '@vueuse/integrations': 13.6.0(axios@1.11.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3)) focus-trap: 7.6.5 mark.js: 8.11.1 minisearch: 7.1.2 diff --git a/src/node/db/API.ts b/src/node/db/API.ts index 88910ca68..9ca5ca03c 100644 --- a/src/node/db/API.ts +++ b/src/node/db/API.ts @@ -26,7 +26,7 @@ import {Attribute} from "../../static/js/types/Attribute"; const CustomError = require('../utils/customError'); const padManager = require('./PadManager'); const padMessageHandler = require('../handler/PadMessageHandler'); -const readOnlyManager = require('./ReadOnlyManager'); +import readOnlyManager from './ReadOnlyManager'; const groupManager = require('./GroupManager'); const authorManager = require('./AuthorManager'); const sessionManager = require('./SessionManager'); diff --git a/src/node/db/Pad.ts b/src/node/db/Pad.ts index 8937fc0eb..e726d8a09 100644 --- a/src/node/db/Pad.ts +++ b/src/node/db/Pad.ts @@ -20,12 +20,11 @@ const padManager = require('./PadManager'); const padMessageHandler = require('../handler/PadMessageHandler'); const groupManager = require('./GroupManager'); const CustomError = require('../utils/customError'); -const readOnlyManager = require('./ReadOnlyManager'); -const randomString = require('../utils/randomstring'); +import readOnlyManager from './ReadOnlyManager'; +import randomString from '../utils/randomstring'; const hooks = require('../../static/js/pluginfw/hooks'); import pad_utils from "../../static/js/pad_utils"; import {SmartOpAssembler} from "../../static/js/SmartOpAssembler"; -import {} from '../utils/promises'; import {timesLimit} from "async"; /** diff --git a/src/node/db/ReadOnlyManager.ts b/src/node/db/ReadOnlyManager.ts index 23639d665..b341dfbe4 100644 --- a/src/node/db/ReadOnlyManager.ts +++ b/src/node/db/ReadOnlyManager.ts @@ -21,7 +21,7 @@ const db = require('./DB'); -const randomString = require('../utils/randomstring'); +import randomString from '../utils/randomstring'; /** @@ -29,14 +29,14 @@ const randomString = require('../utils/randomstring'); * @param {String} id the pad's id * @return {Boolean} true if the id is readonly */ -exports.isReadOnlyId = (id:string) => id.startsWith('r.'); +const isReadOnlyId = (id:string) => id.startsWith('r.'); /** * returns a read only id for a pad * @param {String} padId the id of the pad * @return {String} the read only id */ -exports.getReadOnlyId = async (padId:string) => { +const getReadOnlyId = async (padId:string) => { // check if there is a pad2readonly entry let readOnlyId = await db.get(`pad2readonly:${padId}`); @@ -57,19 +57,29 @@ exports.getReadOnlyId = async (padId:string) => { * @param {String} readOnlyId read only id * @return {String} the padId */ -exports.getPadId = async (readOnlyId:string) => await db.get(`readonly2pad:${readOnlyId}`); +const getPadId = async (readOnlyId:string) => await db.get(`readonly2pad:${readOnlyId}`); /** * returns the padId and readonlyPadId in an object for any id * @param {String} id read only id or real pad id * @return {Object} an object with the padId and readonlyPadId */ -exports.getIds = async (id:string) => { - const readonly = exports.isReadOnlyId(id); +const getIds = async (id:string) => { + const readonly = isReadOnlyId(id); // Might be null, if this is an unknown read-only id - const readOnlyPadId = readonly ? id : await exports.getReadOnlyId(id); - const padId = readonly ? await exports.getPadId(id) : id; + const readOnlyPadId = readonly ? id : await getReadOnlyId(id); + const padId = readonly ? await getPadId(id) : id; return {readOnlyPadId, padId, readonly}; }; + +export default { + isReadOnlyId, + getReadOnlyId, + getPadId, + getIds, + // Export for testing purposes + __getReadOnlyId: getReadOnlyId, // eslint-disable-line no-underscore-dangle + __getPadId: getPadId, // eslint-disable-line no-underscore-dangle +} diff --git a/src/node/db/SecurityManager.ts b/src/node/db/SecurityManager.ts index c2f209a01..3935efba3 100644 --- a/src/node/db/SecurityManager.ts +++ b/src/node/db/SecurityManager.ts @@ -24,7 +24,7 @@ import {UserSettingsObject} from "../types/UserSettingsObject"; const authorManager = require('./AuthorManager'); const hooks = require('../../static/js/pluginfw/hooks'); const padManager = require('./PadManager'); -const readOnlyManager = require('./ReadOnlyManager'); +import readOnlyManager from './ReadOnlyManager'; const sessionManager = require('./SessionManager'); const settings = require('../utils/Settings'); const webaccess = require('../hooks/express/webaccess'); diff --git a/src/node/db/SessionManager.ts b/src/node/db/SessionManager.ts index 2d1327aa6..b8b1b2562 100644 --- a/src/node/db/SessionManager.ts +++ b/src/node/db/SessionManager.ts @@ -22,7 +22,7 @@ const CustomError = require('../utils/customError'); import {firstSatisfies} from '../utils/promises'; -const randomString = require('../utils/randomstring'); +import randomString from '../utils/randomstring'; const db = require('./DB'); const groupManager = require('./GroupManager'); const authorManager = require('./AuthorManager'); diff --git a/src/node/handler/APIKeyHandler.ts b/src/node/handler/APIKeyHandler.ts index 5a00453b1..6f1d67907 100644 --- a/src/node/handler/APIKeyHandler.ts +++ b/src/node/handler/APIKeyHandler.ts @@ -1,7 +1,7 @@ const absolutePaths = require('../utils/AbsolutePaths'); import fs from 'fs'; import log4js from 'log4js'; -const randomString = require('../utils/randomstring'); +import randomString from '../utils/randomstring'; const argv = require('../utils/Cli').argv; const settings = require('../utils/Settings'); diff --git a/src/node/handler/PadMessageHandler.ts b/src/node/handler/PadMessageHandler.ts index 79f4a8182..180324d53 100644 --- a/src/node/handler/PadMessageHandler.ts +++ b/src/node/handler/PadMessageHandler.ts @@ -29,7 +29,7 @@ import AttributePool from '../../static/js/AttributePool'; const AttributeManager = require('../../static/js/AttributeManager'); const authorManager = require('../db/AuthorManager'); import padutils from '../../static/js/pad_utils'; -const readOnlyManager = require('../db/ReadOnlyManager'); +import readOnlyManager from '../db/ReadOnlyManager'; const settings = require('../utils/Settings'); const securityManager = require('../db/SecurityManager'); const plugins = require('../../static/js/pluginfw/plugin_defs'); diff --git a/src/node/hooks/express/adminsettings.ts b/src/node/hooks/express/adminsettings.ts index 4c60a05ad..06411738b 100644 --- a/src/node/hooks/express/adminsettings.ts +++ b/src/node/hooks/express/adminsettings.ts @@ -2,18 +2,16 @@ import {PadQueryResult, PadSearchQuery} from "../../types/PadSearchQuery"; -import {PadType} from "../../types/PadType"; import log4js from 'log4js'; -const eejs = require('../../eejs'); const fsp = require('fs').promises; const hooks = require('../../../static/js/pluginfw/hooks'); const plugins = require('../../../static/js/pluginfw/plugins'); const settings = require('../../utils/Settings'); -const UpdateCheck = require('../../utils/UpdateCheck'); +import {getLatestVersion} from '../../utils/UpdateCheck'; const padManager = require('../../db/PadManager'); const api = require('../../db/API'); -const cleanup = require('../../utils/Cleanup'); +import {deleteRevisions} from '../../utils/Cleanup'; const queryPadLimit = 12; @@ -100,7 +98,7 @@ exports.socketio = (hookName: string, {io}: any) => { installedParts: plugins.getParts(), installedServerHooks: mapToObject(hooks), installedClientHooks: mapToObject(clientHooks), - latestVersion: UpdateCheck.getLatestVersion(), + latestVersion: getLatestVersion(), }) }); @@ -265,7 +263,7 @@ exports.socketio = (hookName: string, {io}: any) => { if (padExists) { logger.info(`Cleanup pad revisions: ${padId}`); try { - const result = await cleanup.deleteRevisions(padId, settings.cleanup.keepRevisions) + const result = await deleteRevisions(padId, settings.cleanup.keepRevisions) if (result) { socket.emit('results:cleanupPadRevisions', { padId: padId, diff --git a/src/node/hooks/express/importexport.ts b/src/node/hooks/express/importexport.ts index 3a361d005..279dea8f3 100644 --- a/src/node/hooks/express/importexport.ts +++ b/src/node/hooks/express/importexport.ts @@ -7,7 +7,7 @@ const settings = require('../../utils/Settings'); const exportHandler = require('../../handler/ExportHandler'); const importHandler = require('../../handler/ImportHandler'); const padManager = require('../../db/PadManager'); -const readOnlyManager = require('../../db/ReadOnlyManager'); +import readOnlyManager from '../../db/ReadOnlyManager'; const rateLimit = require('express-rate-limit'); const securityManager = require('../../db/SecurityManager'); const webaccess = require('./webaccess'); diff --git a/src/node/hooks/express/webaccess.ts b/src/node/hooks/express/webaccess.ts index 00d3d874d..2c8579623 100644 --- a/src/node/hooks/express/webaccess.ts +++ b/src/node/hooks/express/webaccess.ts @@ -8,7 +8,7 @@ import {SettingsUser} from "../../types/SettingsUser"; const httpLogger = log4js.getLogger('http'); const settings = require('../../utils/Settings'); const hooks = require('../../../static/js/pluginfw/hooks'); -const readOnlyManager = require('../../db/ReadOnlyManager'); +import readOnlyManager from '../../db/ReadOnlyManager'; hooks.deprecationNotices.authFailure = 'use the authnFailure and authzFailure hooks instead'; diff --git a/src/node/server.ts b/src/node/server.ts index f81cabdc2..793909bd2 100755 --- a/src/node/server.ts +++ b/src/node/server.ts @@ -68,11 +68,11 @@ if (process.env['https_proxy']) { * early check for version compatibility before calling * any modules that require newer versions of NodeJS */ -const NodeVersion = require('./utils/NodeVersion'); -NodeVersion.enforceMinNodeVersion(pkg.engines.node.replace(">=", "")); -NodeVersion.checkDeprecationStatus(pkg.engines.node.replace(">=", ""), '2.1.0'); +import {enforceMinNodeVersion, checkDeprecationStatus} from './utils/NodeVersion'; +enforceMinNodeVersion(pkg.engines.node.replace(">=", "")); +checkDeprecationStatus(pkg.engines.node.replace(">=", ""), '2.1.0'); -const UpdateCheck = require('./utils/UpdateCheck'); +import {check} from './utils/UpdateCheck'; const db = require('./db/DB'); const express = require('./hooks/express'); const hooks = require('../static/js/pluginfw/hooks'); @@ -128,8 +128,8 @@ exports.start = async () => { startDoneGate = new Gate(); state = State.STARTING; try { - // Check if Etherpad version is up-to-date - UpdateCheck.check(); + // Check if the Etherpad version is up to date + check(); // @ts-ignore stats.gauge('memoryUsage', () => process.memoryUsage().rss); diff --git a/src/node/utils/Cleanup.ts b/src/node/utils/Cleanup.ts index 7e480020d..30967654f 100644 --- a/src/node/utils/Cleanup.ts +++ b/src/node/utils/Cleanup.ts @@ -3,15 +3,16 @@ import {AChangeSet} from "../types/PadType"; import {Revision} from "../types/Revision"; -const promises = require('./promises'); +import {timesLimit, firstSatisfies} from './promises'; const padManager = require('ep_etherpad-lite/node/db/PadManager'); const db = require('ep_etherpad-lite/node/db/DB'); const Changeset = require('ep_etherpad-lite/static/js/Changeset'); const padMessageHandler = require('ep_etherpad-lite/node/handler/PadMessageHandler'); -const log4js = require('log4js'); +import log4js from 'log4js'; const logger = log4js.getLogger('cleanup'); -exports.deleteAllRevisions = async (padID: string): Promise => { + +export const deleteAllRevisions = async (padID: string): Promise => { const randomPadId = padID + 'aertdfdf' + Math.random().toString(10) @@ -39,7 +40,7 @@ const createRevision = async (aChangeset: AChangeSet, timestamp: number, isKeyRe }; } -exports.deleteRevisions = async (padId: string, keepRevisions: number): Promise => { +export const deleteRevisions = async (padId: string, keepRevisions: number): Promise => { logger.debug('Start cleanup revisions', padId) @@ -61,14 +62,14 @@ exports.deleteRevisions = async (padId: string, keepRevisions: number): Promise< const revisions: Revision[] = []; - await promises.timesLimit(keepRevisions + 1, 500, async (i: number) => { + await timesLimit(keepRevisions + 1, 500, async (i: number) => { const rev = i + cleanupUntilRevision revisions[rev] = await pad.getRevision(rev) }); logger.debug('Loaded revisions: ', revisions.length) - await promises.timesLimit(pad.head + 1, 500, async (i: string) => { + await timesLimit(pad.head + 1, 500, async (i: string) => { await db.remove(`pad:${padId}:revs:${i}`, null); }); @@ -105,7 +106,7 @@ exports.deleteRevisions = async (padId: string, keepRevisions: number): Promise< p.push(db.set(`pad:${padId}:revs:0`, revision)) - p.push(promises.timesLimit(keepRevisions, 500, async (i: number) => { + p.push(timesLimit(keepRevisions, 500, async (i: number) => { const rev = i + cleanupUntilRevision + 1 const newRev = rev - cleanupUntilRevision; @@ -135,7 +136,7 @@ exports.deleteRevisions = async (padId: string, keepRevisions: number): Promise< return true } -exports.checkTodos = async () => { +export const checkTodos = async () => { await new Promise(resolve => setTimeout(resolve, 5000)); // TODO: Move to settings @@ -156,7 +157,7 @@ exports.checkTodos = async () => { } try { - const result = await exports.deleteRevisions(padId, settings.keepRevisions) + const result = await deleteRevisions(padId, settings.keepRevisions) if (result) { logger.info('successful cleaned up pad: ', padId) } diff --git a/src/node/utils/NodeVersion.ts b/src/node/utils/NodeVersion.ts index 8507412d1..f24bf1831 100644 --- a/src/node/utils/NodeVersion.ts +++ b/src/node/utils/NodeVersion.ts @@ -26,7 +26,7 @@ const semver = require('semver'); * * @param {String} minNodeVersion Minimum required Node version */ -exports.enforceMinNodeVersion = (minNodeVersion: string) => { +export const enforceMinNodeVersion = (minNodeVersion: string) => { const currentNodeVersion = process.version; // we cannot use template literals, since we still do not know if we are @@ -49,7 +49,7 @@ exports.enforceMinNodeVersion = (minNodeVersion: string) => { * @param {Function} epRemovalVersion Etherpad version that will remove support for deprecated * Node releases */ -exports.checkDeprecationStatus = (lowestNonDeprecatedNodeVersion: string, epRemovalVersion:Function) => { +export const checkDeprecationStatus = (lowestNonDeprecatedNodeVersion: string, epRemovalVersion: string) => { const currentNodeVersion = process.version; if (semver.lt(currentNodeVersion, lowestNonDeprecatedNodeVersion)) { diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts index 645713d44..e5f3fa302 100644 --- a/src/node/utils/Settings.ts +++ b/src/node/utils/Settings.ts @@ -32,14 +32,13 @@ import {SettingsNode, SettingsTree} from "./SettingsTree"; import {coerce} from "semver"; const absolutePaths = require('./AbsolutePaths'); -const deepEqual = require('fast-deep-equal/es6'); -const fs = require('fs'); -const os = require('os'); -const path = require('path'); +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; const argv = require('./Cli').argv; -const jsonminify = require('jsonminify'); -const log4js = require('log4js'); -const randomString = require('./randomstring'); +import jsonminify from 'jsonminify'; +import log4js from 'log4js'; +import randomString from './randomstring'; const suppressDisableMsg = ' -- To suppress these warning messages change ' + 'suppressErrorsInPadText to true in your settings.json\n'; const _ = require('underscore'); diff --git a/src/node/utils/UpdateCheck.ts b/src/node/utils/UpdateCheck.ts index de7d2eea6..764bbcb27 100644 --- a/src/node/utils/UpdateCheck.ts +++ b/src/node/utils/UpdateCheck.ts @@ -1,5 +1,5 @@ 'use strict'; -const semver = require('semver'); +import semver from 'semver'; const settings = require('./Settings'); import axios from 'axios'; const headers = { @@ -37,12 +37,12 @@ const loadEtherpadInformations = () => { } -exports.getLatestVersion = () => { - exports.needsUpdate().catch(); +export const getLatestVersion = () => { + needsUpdate().catch(); return infos?.latestVersion; }; -exports.needsUpdate = async (cb?: Function) => { +const needsUpdate = async (cb?: Function) => { try { const info = await loadEtherpadInformations() if (semver.gt(info!.latestVersion, settings.getEpVersion())) { @@ -54,10 +54,10 @@ exports.needsUpdate = async (cb?: Function) => { } }; -exports.check = () => { - exports.needsUpdate((needsUpdate: boolean) => { +export const check = () => { + needsUpdate((needsUpdate: boolean) => { if (needsUpdate) { console.warn(`Update available: Download the actual version ${infos.latestVersion}`); } - }); + }).then(()=>{}); }; diff --git a/src/node/utils/randomstring.ts b/src/node/utils/randomstring.ts index a86d28566..9b87b55a7 100644 --- a/src/node/utils/randomstring.ts +++ b/src/node/utils/randomstring.ts @@ -1,10 +1,9 @@ -'use strict'; /** * Generates a random String with the given length. Is needed to generate the * Author, Group, readonly, session Ids */ -const cryptoMod = require('crypto'); +import cryptoMod from 'crypto'; const randomString = (len: number) => cryptoMod.randomBytes(len).toString('hex'); -module.exports = randomString; +export default randomString; diff --git a/src/package.json b/src/package.json index d0cd6a89b..477ef4dec 100644 --- a/src/package.json +++ b/src/package.json @@ -31,7 +31,7 @@ ], "dependencies": { "async": "^3.2.6", - "axios": "^1.10.0", + "axios": "^1.11.0", "cookie-parser": "^1.4.7", "cross-env": "^7.0.3", "cross-spawn": "^7.0.6", @@ -40,7 +40,6 @@ "express": "^5.1.0", "express-rate-limit": "^8.0.1", "express-session": "^1.18.2", - "fast-deep-equal": "^3.1.3", "find-root": "1.1.0", "formidable": "^3.5.4", "http-errors": "^2.0.0", @@ -85,14 +84,15 @@ "devDependencies": { "@playwright/test": "^1.54.1", "@types/async": "^3.2.24", - "@types/express": "^5.0.0", "@types/cookie-parser": "^1.4.9", + "@types/express": "^5.0.0", "@types/express-session": "^1.18.2", "@types/formidable": "^3.4.5", "@types/http-errors": "^2.0.5", "@types/jquery": "^3.5.32", "@types/js-cookie": "^3.0.6", "@types/jsdom": "^21.1.7", + "@types/jsonminify": "^0.4.3", "@types/jsonwebtoken": "^9.0.10", "@types/mime-types": "^3.0.1", "@types/mocha": "^10.0.9", diff --git a/src/tests/backend-new/specs/promises.ts b/src/tests/backend-new/specs/promises.ts index 2ce6aed27..b007063ef 100644 --- a/src/tests/backend-new/specs/promises.ts +++ b/src/tests/backend-new/specs/promises.ts @@ -1,5 +1,3 @@ -import {MapArrayType} from "../../../node/types/MapType"; - import {timesLimit} from '../../../node/utils/promises'; import {describe, it, expect} from "vitest"; diff --git a/src/tests/backend/specs/ExportEtherpad.ts b/src/tests/backend/specs/ExportEtherpad.ts index 677890cbb..1ee7ab001 100644 --- a/src/tests/backend/specs/ExportEtherpad.ts +++ b/src/tests/backend/specs/ExportEtherpad.ts @@ -5,7 +5,7 @@ const common = require('../common'); const exportEtherpad = require('../../../node/utils/ExportEtherpad'); const padManager = require('../../../node/db/PadManager'); const plugins = require('../../../static/js/pluginfw/plugin_defs'); -const readOnlyManager = require('../../../node/db/ReadOnlyManager'); +import readOnlyManager from '../../../node/db/ReadOnlyManager'; describe(__filename, function () { let padId:string; diff --git a/src/tests/backend/specs/messages.ts b/src/tests/backend/specs/messages.ts index 9d91b2342..c25057569 100644 --- a/src/tests/backend/specs/messages.ts +++ b/src/tests/backend/specs/messages.ts @@ -7,7 +7,7 @@ const assert = require('assert').strict; const common = require('../common'); const padManager = require('../../../node/db/PadManager'); const plugins = require('../../../static/js/pluginfw/plugin_defs'); -const readOnlyManager = require('../../../node/db/ReadOnlyManager'); +import readOnlyManager from '../../../node/db/ReadOnlyManager'; describe(__filename, function () { let agent:any; diff --git a/src/tests/backend/specs/socketio.ts b/src/tests/backend/specs/socketio.ts index cde554e5e..556f28a69 100644 --- a/src/tests/backend/specs/socketio.ts +++ b/src/tests/backend/specs/socketio.ts @@ -6,7 +6,7 @@ const assert = require('assert').strict; const common = require('../common'); const padManager = require('../../../node/db/PadManager'); const plugins = require('../../../static/js/pluginfw/plugin_defs'); -const readOnlyManager = require('../../../node/db/ReadOnlyManager'); +import readOnlyManager from '../../../node/db/ReadOnlyManager'; const settings = require('../../../node/utils/Settings'); const socketIoRouter = require('../../../node/handler/SocketIORouter'); From 8588d99f12d831040d2fec3258dd5fddcb21945d Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+SamTV12345@users.noreply.github.com> Date: Mon, 4 Aug 2025 22:42:50 +0200 Subject: [PATCH 06/33] chore: migrated settings to esm6 (#7062) * chore: migrated settings to esm6 * chore: fixed frontends * chore: fixed missing usage of specialpages * chore: fixed last errors for settings * chore: fixed favicon test --- bin/createUserSession.ts | 2 +- bin/importSqlFile.ts | 8 +- bin/migrateDB.ts | 2 +- bin/migrateDirtyDBtoRealDB.ts | 7 +- bin/rebuildPad.ts | 2 - pnpm-lock.yaml | 31 +- src/node/db/DB.ts | 6 +- src/node/db/Pad.ts | 2 +- src/node/db/PadManager.ts | 2 +- src/node/db/SecurityManager.ts | 2 +- src/node/eejs/index.ts | 11 +- src/node/handler/APIHandler.ts | 4 +- src/node/handler/APIKeyHandler.ts | 6 +- src/node/handler/ExportHandler.ts | 2 +- src/node/handler/ImportHandler.ts | 2 +- src/node/handler/PadMessageHandler.ts | 12 +- src/node/handler/RestAPI.ts | 2 +- src/node/handler/SocketIORouter.ts | 4 +- src/node/hooks/express.ts | 17 +- src/node/hooks/express/admin.ts | 3 +- src/node/hooks/express/adminsettings.ts | 8 +- src/node/hooks/express/importexport.ts | 4 +- src/node/hooks/express/openapi.ts | 4 +- src/node/hooks/express/pwa.ts | 2 +- src/node/hooks/express/socketio.ts | 2 +- src/node/hooks/express/specialpages.ts | 28 +- src/node/hooks/express/static.ts | 2 +- src/node/hooks/express/webaccess.ts | 2 +- src/node/hooks/i18n.ts | 10 +- src/node/security/OAuth2Provider.ts | 4 +- src/node/server.ts | 2 +- src/node/types/ArgsExpressType.ts | 3 +- src/node/utils/Abiword.ts | 2 +- src/node/utils/AbsolutePaths.ts | 14 +- src/node/utils/Cli.ts | 19 +- src/node/utils/LibreOffice.ts | 2 +- src/node/utils/Minify.ts | 2 +- src/node/utils/Settings.ts | 927 ++++++++++-------- src/node/utils/UpdateCheck.ts | 6 +- src/node/utils/run_cmd.ts | 10 +- src/package.json | 2 + src/static/js/pluginfw/LinkInstaller.ts | 2 +- src/static/js/pluginfw/installer.ts | 11 +- src/static/js/pluginfw/plugins.ts | 6 +- src/templates/pad.html | 5 +- src/templates/timeslider.html | 3 +- src/tests/backend/common.ts | 2 +- src/tests/backend/specs/Pad.ts | 2 +- .../backend/specs/api/importexportGetPost.ts | 2 +- src/tests/backend/specs/export.ts | 2 +- src/tests/backend/specs/favicon.ts | 5 +- src/tests/backend/specs/health.ts | 7 +- src/tests/backend/specs/lowerCasePadIds.ts | 2 +- src/tests/backend/specs/settings.ts | 20 +- src/tests/backend/specs/socketio.ts | 3 +- src/tests/backend/specs/specialpages.ts | 3 +- src/tests/backend/specs/webaccess.ts | 3 +- 57 files changed, 698 insertions(+), 562 deletions(-) diff --git a/bin/createUserSession.ts b/bin/createUserSession.ts index 165cf287a..095cebb0e 100644 --- a/bin/createUserSession.ts +++ b/bin/createUserSession.ts @@ -18,7 +18,7 @@ import process from "node:process"; process.on('unhandledRejection', (err) => { throw err; }); -const settings = require('ep_etherpad-lite/node/utils/Settings'); +import settings from 'ep_etherpad-lite/node/utils/Settings'; (async () => { axios.defaults.baseURL = `http://${settings.ip}:${settings.port}`; const api = axios; diff --git a/bin/importSqlFile.ts b/bin/importSqlFile.ts index 7660fa407..6c501fc72 100644 --- a/bin/importSqlFile.ts +++ b/bin/importSqlFile.ts @@ -3,13 +3,13 @@ // As of v14, Node.js does not exit when there is an unhandled Promise rejection. Convert an // unhandled rejection into an uncaught exception, which does cause Node.js to exit. import util from "node:util"; -const fs = require('fs'); +import fs from 'node:fs'; import log4js from 'log4js'; import readline from 'readline'; -import {Database} from "ueberdb2"; +import {Database, DatabaseType} from "ueberdb2"; import process from "node:process"; -const settings = require('ep_etherpad-lite/node/utils/Settings'); +import settings from 'ep_etherpad-lite/node/utils/Settings'; process.on('unhandledRejection', (err) => { throw err; }); const startTime = Date.now(); @@ -58,7 +58,7 @@ const unescape = (val: string) => { json: false, // data is already json encoded }; const db = new Database( // eslint-disable-line new-cap - settings.dbType, + settings.dbType as DatabaseType, settings.dbSettings, dbWrapperSettings, log4js.getLogger('ueberDB')); diff --git a/bin/migrateDB.ts b/bin/migrateDB.ts index 37f1cda23..d1b373289 100644 --- a/bin/migrateDB.ts +++ b/bin/migrateDB.ts @@ -2,7 +2,7 @@ import {readFileSync} from 'node:fs' import {Database, DatabaseType} from "ueberdb2"; import path from "node:path"; -const settings = require('ep_etherpad-lite/node/utils/Settings'); +import settings from 'ep_etherpad-lite/node/utils/Settings'; // file1 = source, file2 = target diff --git a/bin/migrateDirtyDBtoRealDB.ts b/bin/migrateDirtyDBtoRealDB.ts index 3cd32a85a..8bb095d0b 100644 --- a/bin/migrateDirtyDBtoRealDB.ts +++ b/bin/migrateDirtyDBtoRealDB.ts @@ -1,10 +1,9 @@ 'use strict'; import process from 'node:process'; -import {Database} from "ueberdb2"; +import {Database, DatabaseType} from "ueberdb2"; import log4js from 'log4js'; -import util from 'util'; -const settings = require('ep_etherpad-lite/node/utils/Settings'); +import settings from 'ep_etherpad-lite/node/utils/Settings'; // As of v14, Node.js does not exit when there is an unhandled Promise rejection. Convert an // unhandled rejection into an uncaught exception, which does cause Node.js to exit. @@ -24,7 +23,7 @@ process.on('unhandledRejection', (err) => { throw err; }); writeInterval: 0, // Write directly to the database, don't buffer }; const db = new Database( // eslint-disable-line new-cap - settings.dbType, + settings.dbType as DatabaseType, settings.dbSettings, dbWrapperSettings, log4js.getLogger('ueberDB')); diff --git a/bin/rebuildPad.ts b/bin/rebuildPad.ts index 8bb63ed84..16787e2c1 100644 --- a/bin/rebuildPad.ts +++ b/bin/rebuildPad.ts @@ -1,5 +1,3 @@ -'use strict'; - /* This is a repair tool. It rebuilds an old pad at a new pad location up to a known "good" revision. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9fbf055df..89bfbdcbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,7 +105,7 @@ importers: dependencies: axios: specifier: ^1.10.0 - version: 1.10.0 + version: 1.11.0 ep_etherpad-lite: specifier: workspace:../src version: link:../src @@ -288,6 +288,12 @@ importers: '@types/cookie-parser': specifier: ^1.4.9 version: 1.4.9(@types/express@5.0.3) + '@types/cross-spawn': + specifier: ^6.0.6 + version: 6.0.6 + '@types/ejs': + specifier: ^3.1.5 + version: 3.1.5 '@types/express': specifier: ^5.0.0 version: 5.0.3 @@ -1564,12 +1570,18 @@ packages: '@types/cors@2.8.17': resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + '@types/cross-spawn@6.0.6': + resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/ejs@3.1.5': + resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} + '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} @@ -2171,9 +2183,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} - axios@1.11.0: resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} @@ -5996,12 +6005,18 @@ snapshots: dependencies: '@types/node': 24.1.0 + '@types/cross-spawn@6.0.6': + dependencies: + '@types/node': 24.1.0 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 '@types/deep-eql@4.0.2': {} + '@types/ejs@3.1.5': {} + '@types/estree@1.0.7': {} '@types/estree@1.0.8': {} @@ -6678,14 +6693,6 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axios@1.10.0: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.3 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axios@1.11.0: dependencies: follow-redirects: 1.15.9 diff --git a/src/node/db/DB.ts b/src/node/db/DB.ts index 663946cd6..4b4899fac 100644 --- a/src/node/db/DB.ts +++ b/src/node/db/DB.ts @@ -21,8 +21,8 @@ * limitations under the License. */ -import {Database} from 'ueberdb2'; -const settings = require('../utils/Settings'); +import {Database, DatabaseType} from 'ueberdb2'; +import settings from '../utils/Settings'; import log4js from 'log4js'; const stats = require('../stats') @@ -37,7 +37,7 @@ exports.db = null; * Initializes the database with the settings provided by the settings module */ exports.init = async () => { - exports.db = new Database(settings.dbType, settings.dbSettings, null, logger); + exports.db = new Database(settings.dbType as DatabaseType, settings.dbSettings, null, logger); await exports.db.init(); if (exports.db.metrics != null) { for (const [metric, value] of Object.entries(exports.db.metrics)) { diff --git a/src/node/db/Pad.ts b/src/node/db/Pad.ts index e726d8a09..003ec0831 100644 --- a/src/node/db/Pad.ts +++ b/src/node/db/Pad.ts @@ -14,7 +14,7 @@ import AttributePool from '../../static/js/AttributePool'; const Stream = require('../utils/Stream'); const assert = require('assert').strict; const db = require('./DB'); -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; const authorManager = require('./AuthorManager'); const padManager = require('./PadManager'); const padMessageHandler = require('../handler/PadMessageHandler'); diff --git a/src/node/db/PadManager.ts b/src/node/db/PadManager.ts index 54dbbf089..292261531 100644 --- a/src/node/db/PadManager.ts +++ b/src/node/db/PadManager.ts @@ -25,7 +25,7 @@ import {PadType} from "../types/PadType"; const CustomError = require('../utils/customError'); const Pad = require('../db/Pad'); const db = require('./DB'); -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; /** * A cache of all loaded Pads. diff --git a/src/node/db/SecurityManager.ts b/src/node/db/SecurityManager.ts index 3935efba3..219d3f2be 100644 --- a/src/node/db/SecurityManager.ts +++ b/src/node/db/SecurityManager.ts @@ -26,7 +26,7 @@ const hooks = require('../../static/js/pluginfw/hooks'); const padManager = require('./PadManager'); import readOnlyManager from './ReadOnlyManager'; const sessionManager = require('./SessionManager'); -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; const webaccess = require('../hooks/express/webaccess'); const log4js = require('log4js'); const authLogger = log4js.getLogger('auth'); diff --git a/src/node/eejs/index.ts b/src/node/eejs/index.ts index 5d57e4751..85de034b0 100644 --- a/src/node/eejs/index.ts +++ b/src/node/eejs/index.ts @@ -20,12 +20,13 @@ * require("./index").require("./path/to/template.ejs") */ -const ejs = require('ejs'); -const fs = require('fs'); +import ejs from 'ejs'; +import fs from 'fs'; const hooks = require('../../static/js/pluginfw/hooks'); -const path = require('path'); -const resolve = require('resolve'); -const settings = require('../utils/Settings'); +import path from 'node:path'; +// @ts-ignore +import resolve from 'resolve'; +import settings from '../utils/Settings'; import {pluginInstallPath} from '../../static/js/pluginfw/installer' const templateCache = new Map(); diff --git a/src/node/handler/APIHandler.ts b/src/node/handler/APIHandler.ts index 7886d0b46..32ce9d118 100644 --- a/src/node/handler/APIHandler.ts +++ b/src/node/handler/APIHandler.ts @@ -23,7 +23,7 @@ import {MapArrayType} from "../types/MapType"; import { jwtDecode } from "jwt-decode"; const api = require('../db/API'); const padManager = require('../db/PadManager'); -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; import createHTTPError from 'http-errors'; import {Http2ServerRequest} from "node:http2"; import {publicKeyExported} from "../security/OAuth2Provider"; @@ -183,7 +183,7 @@ exports.handle = async function (apiVersion: string, functionName: string, field throw new createHTTPError.Unauthorized('no or wrong API Key'); } try { - const clientIds: string[] = settings.sso.clients?.map((client: {client_id: string}) => client.client_id); + const clientIds: string[] = settings.sso.clients?.map((client: {client_id: string}) => client.client_id) ?? []; const jwtToCheck = req.headers.authorization.replace("Bearer ", "") const payload = jwtDecode(jwtToCheck) // client_credentials diff --git a/src/node/handler/APIKeyHandler.ts b/src/node/handler/APIKeyHandler.ts index 6f1d67907..bdeee2290 100644 --- a/src/node/handler/APIKeyHandler.ts +++ b/src/node/handler/APIKeyHandler.ts @@ -1,9 +1,9 @@ -const absolutePaths = require('../utils/AbsolutePaths'); +import * as absolutePaths from '../utils/AbsolutePaths'; import fs from 'fs'; import log4js from 'log4js'; import randomString from '../utils/randomstring'; -const argv = require('../utils/Cli').argv; -const settings = require('../utils/Settings'); +import {argv} from '../utils/Cli' +import settings from '../utils/Settings'; const apiHandlerLogger = log4js.getLogger('APIHandler'); diff --git a/src/node/handler/ExportHandler.ts b/src/node/handler/ExportHandler.ts index 0bf57e2d1..e1294171a 100644 --- a/src/node/handler/ExportHandler.ts +++ b/src/node/handler/ExportHandler.ts @@ -24,7 +24,7 @@ const exporthtml = require('../utils/ExportHtml'); const exporttxt = require('../utils/ExportTxt'); const exportEtherpad = require('../utils/ExportEtherpad'); import fs from 'fs'; -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; import os from 'os'; const hooks = require('../../static/js/pluginfw/hooks'); import util from 'util'; diff --git a/src/node/handler/ImportHandler.ts b/src/node/handler/ImportHandler.ts index 286b4fb56..e569c12fa 100644 --- a/src/node/handler/ImportHandler.ts +++ b/src/node/handler/ImportHandler.ts @@ -25,7 +25,7 @@ const padManager = require('../db/PadManager'); const padMessageHandler = require('./PadMessageHandler'); import {promises as fs} from 'fs'; import path from 'path'; -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; const {Formidable} = require('formidable'); import os from 'os'; const importHtml = require('../utils/ImportHtml'); diff --git a/src/node/handler/PadMessageHandler.ts b/src/node/handler/PadMessageHandler.ts index 180324d53..115d69a23 100644 --- a/src/node/handler/PadMessageHandler.ts +++ b/src/node/handler/PadMessageHandler.ts @@ -30,7 +30,11 @@ const AttributeManager = require('../../static/js/AttributeManager'); const authorManager = require('../db/AuthorManager'); import padutils from '../../static/js/pad_utils'; import readOnlyManager from '../db/ReadOnlyManager'; -const settings = require('../utils/Settings'); +import settings, { + exportAvailable, + abiwordAvailable, + sofficeAvailable +} from '../utils/Settings'; const securityManager = require('../db/SecurityManager'); const plugins = require('../../static/js/pluginfw/plugin_defs'); import log4js from 'log4js'; @@ -1021,9 +1025,9 @@ const handleClientReady = async (socket:any, message: ClientReadyMessage) => { serverTimestamp: Date.now(), sessionRefreshInterval: settings.cookie.sessionRefreshInterval, userId: sessionInfo.author, - abiwordAvailable: settings.abiwordAvailable(), - sofficeAvailable: settings.sofficeAvailable(), - exportAvailable: settings.exportAvailable(), + abiwordAvailable: abiwordAvailable(), + sofficeAvailable: sofficeAvailable(), + exportAvailable: exportAvailable(), plugins: { plugins: plugins.plugins, parts: plugins.parts, diff --git a/src/node/handler/RestAPI.ts b/src/node/handler/RestAPI.ts index 7b1b82309..1b0d1d09d 100644 --- a/src/node/handler/RestAPI.ts +++ b/src/node/handler/RestAPI.ts @@ -8,7 +8,7 @@ const apiHandler = require('./APIHandler') import {serve, setup} from 'swagger-ui-express' import express from "express"; -const settings = require('../utils/Settings') +import settings from '../utils/Settings'; type RestAPIMapping = { diff --git a/src/node/handler/SocketIORouter.ts b/src/node/handler/SocketIORouter.ts index 482276834..9e5f4e5cd 100644 --- a/src/node/handler/SocketIORouter.ts +++ b/src/node/handler/SocketIORouter.ts @@ -22,8 +22,8 @@ import {MapArrayType} from "../types/MapType"; import {SocketModule} from "../types/SocketModule"; -const log4js = require('log4js'); -const settings = require('../utils/Settings'); +import log4js from 'log4js'; +import settings from '../utils/Settings'; const stats = require('../../node/stats') const logger = log4js.getLogger('socket.io'); diff --git a/src/node/hooks/express.ts b/src/node/hooks/express.ts index 633a85ae8..fb24cbfe6 100644 --- a/src/node/hooks/express.ts +++ b/src/node/hooks/express.ts @@ -12,7 +12,7 @@ import fs from 'fs'; const hooks = require('../../static/js/pluginfw/hooks'); import log4js from 'log4js'; const SessionStore = require('../db/SessionStore'); -const settings = require('../utils/Settings'); +import settings, {getEpVersion, getGitCommit} from '../utils/Settings'; const stats = require('../stats') import util from 'util'; const webaccess = require('./express/webaccess'); @@ -67,9 +67,9 @@ const closeServer = async () => { exports.createServer = async () => { console.log('Report bugs at https://github.com/ether/etherpad-lite/issues'); - serverName = `Etherpad ${settings.getGitCommit()} (https://etherpad.org)`; + serverName = `Etherpad ${getGitCommit()} (https://etherpad.org)`; - console.log(`Your Etherpad version is ${settings.getEpVersion()} (${settings.getGitCommit()})`); + console.log(`Your Etherpad version is ${getEpVersion()} (${getGitCommit()})`); await exports.restartServer(); @@ -176,7 +176,7 @@ exports.restartServer = async () => { // starts listening to requests as reported in issue #158. Not installing the log4js connect // logger when the log level has a higher severity than INFO since it would not log at that level // anyway. - if (!(settings.loglevel === 'WARN' && settings.loglevel === 'ERROR')) { + if (!(settings.loglevel === 'WARN' || settings.loglevel === 'ERROR')) { app.use(log4js.connectLogger(logger, { level: log4js.levels.DEBUG.levelStr, format: ':status, :method :url', @@ -189,7 +189,12 @@ exports.restartServer = async () => { secretRotator = new SecretRotator( 'expressSessionSecrets', keyRotationInterval, sessionLifetime, settings.sessionKey); await secretRotator.start(); - secret = secretRotator.secrets; + const secrets = secretRotator.secrets; + if (Array.isArray(secrets)) { + secret = secrets[0]; + } else { + secret = secretRotator.secrets as unknown as string; + } } if (!secret) throw new Error('missing cookie signing secret'); @@ -206,7 +211,7 @@ exports.restartServer = async () => { // cleaner :) name: 'express_sid', cookie: { - maxAge: sessionLifetime || null, // Convert 0 to null. + maxAge: sessionLifetime || undefined, // Convert 0 to null. sameSite: settings.cookie.sameSite, // The automatic express-session mechanism for determining if the application is being served diff --git a/src/node/hooks/express/admin.ts b/src/node/hooks/express/admin.ts index 66f02699a..ca0f48668 100644 --- a/src/node/hooks/express/admin.ts +++ b/src/node/hooks/express/admin.ts @@ -2,10 +2,9 @@ import {ArgsExpressType} from "../../types/ArgsExpressType"; import path from "path"; import fs from "fs"; -import * as url from "node:url"; import {MapArrayType} from "../../types/MapType"; -const settings = require('ep_etherpad-lite/node/utils/Settings'); +import settings from 'ep_etherpad-lite/node/utils/Settings'; const ADMIN_PATH = path.join(settings.root, 'src', 'templates'); const PROXY_HEADER = "x-proxy-path" diff --git a/src/node/hooks/express/adminsettings.ts b/src/node/hooks/express/adminsettings.ts index 06411738b..e646323f1 100644 --- a/src/node/hooks/express/adminsettings.ts +++ b/src/node/hooks/express/adminsettings.ts @@ -7,7 +7,7 @@ import log4js from 'log4js'; const fsp = require('fs').promises; const hooks = require('../../../static/js/pluginfw/hooks'); const plugins = require('../../../static/js/pluginfw/plugins'); -const settings = require('../../utils/Settings'); +import settings, {getEpVersion, getGitCommit, reloadSettings} from '../../utils/Settings'; import {getLatestVersion} from '../../utils/UpdateCheck'; const padManager = require('../../db/PadManager'); const api = require('../../db/API'); @@ -73,8 +73,8 @@ exports.socketio = (hookName: string, {io}: any) => { socket.on('help', () => { - const gitCommit = settings.getGitCommit(); - const epVersion = settings.getEpVersion(); + const gitCommit = getGitCommit(); + const epVersion = getEpVersion(); const hooks: Map> = plugins.getHooks('hooks', false); const clientHooks: Map> = plugins.getHooks('client_hooks', false); @@ -287,7 +287,7 @@ exports.socketio = (hookName: string, {io}: any) => { socket.on('restartServer', async () => { logger.info('Admin request to restart server through a socket on /admin/settings'); - settings.reloadSettings(); + reloadSettings(); await plugins.update(); await hooks.aCallAll('loadSettings', {settings}); await hooks.aCallAll('restartServer'); diff --git a/src/node/hooks/express/importexport.ts b/src/node/hooks/express/importexport.ts index 279dea8f3..7f9356844 100644 --- a/src/node/hooks/express/importexport.ts +++ b/src/node/hooks/express/importexport.ts @@ -3,7 +3,7 @@ import {ArgsExpressType} from "../../types/ArgsExpressType"; const hasPadAccess = require('../../padaccess'); -const settings = require('../../utils/Settings'); +import settings, {exportAvailable} from '../../utils/Settings'; const exportHandler = require('../../handler/ExportHandler'); const importHandler = require('../../handler/ImportHandler'); const padManager = require('../../db/PadManager'); @@ -35,7 +35,7 @@ exports.expressCreateServer = (hookName:string, args:ArgsExpressType, cb:Functio } // if abiword is disabled, and this is a format we only support with abiword, output a message - if (settings.exportAvailable() === 'no' && + if (exportAvailable() === 'no' && ['odt', 'pdf', 'doc'].indexOf(req.params.type) !== -1) { console.error(`Impossible to export pad "${req.params.pad}" in ${req.params.type} format.` + ' There is no converter configured'); diff --git a/src/node/hooks/express/openapi.ts b/src/node/hooks/express/openapi.ts index 8b04adf93..ddd557dc1 100644 --- a/src/node/hooks/express/openapi.ts +++ b/src/node/hooks/express/openapi.ts @@ -24,9 +24,9 @@ const cloneDeep = require('lodash.clonedeep'); const createHTTPError = require('http-errors'); const apiHandler = require('../../handler/APIHandler'); -const settings = require('../../utils/Settings'); +import settings from '../../utils/Settings'; -const log4js = require('log4js'); +import log4js from 'log4js'; const logger = log4js.getLogger('API'); // https://github.com/OAI/OpenAPI-Specification/tree/master/schemas/v3.0 diff --git a/src/node/hooks/express/pwa.ts b/src/node/hooks/express/pwa.ts index 918efbc05..a763af5b4 100644 --- a/src/node/hooks/express/pwa.ts +++ b/src/node/hooks/express/pwa.ts @@ -1,5 +1,5 @@ import {ArgsExpressType} from "../../types/ArgsExpressType"; -const settings = require('../../utils/Settings'); +import settings from '../../utils/Settings'; const pwa = { name: settings.title || "Etherpad", diff --git a/src/node/hooks/express/socketio.ts b/src/node/hooks/express/socketio.ts index bbdec1c1c..9184eff88 100644 --- a/src/node/hooks/express/socketio.ts +++ b/src/node/hooks/express/socketio.ts @@ -6,7 +6,7 @@ import events from 'events'; const express = require('../express'); import log4js from 'log4js'; const proxyaddr = require('proxy-addr'); -const settings = require('../../utils/Settings'); +import settings from '../../utils/Settings'; import {Server, Socket} from 'socket.io' const socketIORouter = require('../../handler/SocketIORouter'); const hooks = require('../../../static/js/pluginfw/hooks'); diff --git a/src/node/hooks/express/specialpages.ts b/src/node/hooks/express/specialpages.ts index 4184789d3..5f892ada6 100644 --- a/src/node/hooks/express/specialpages.ts +++ b/src/node/hooks/express/specialpages.ts @@ -6,7 +6,7 @@ import fs from 'node:fs'; const fsp = fs.promises; const toolbar = require('../../utils/toolbar'); const hooks = require('../../../static/js/pluginfw/hooks'); -const settings = require('../../utils/Settings'); +import settings, {getEpVersion} from '../../utils/Settings'; import util from 'node:util'; const webaccess = require('./webaccess'); const plugins = require('../../../static/js/pluginfw/plugin_defs'); @@ -20,14 +20,14 @@ exports.socketio = (hookName: string, {io}: any) => { } -exports.expressPreSession = async (hookName:string, {app, settings}:ArgsExpressType) => { +exports.expressPreSession = async (hookName:string, {app}:ArgsExpressType) => { // This endpoint is intended to conform to: // https://www.ietf.org/archive/id/draft-inadarei-api-health-check-06.html app.get('/health', (req:any, res:any) => { res.set('Content-Type', 'application/health+json'); res.json({ status: 'pass', - releaseId: settings.getEpVersion(), + releaseId: getEpVersion(), }); }); @@ -43,6 +43,10 @@ exports.expressPreSession = async (hookName:string, {app, settings}:ArgsExpressT }); app.get('/robots.txt', (req:any, res:any) => { + if (!settings.skinName) { + // if no skin is set, send the default robots.txt + return res.sendFile(path.join(settings.root, 'src', 'static', 'robots.txt')); + } let filePath = path.join(settings.root, 'src', 'static', 'skins', settings.skinName, 'robots.txt'); res.sendFile(filePath, (err:any) => { @@ -66,11 +70,13 @@ exports.expressPreSession = async (hookName:string, {app, settings}:ArgsExpressT } + console.log("Favicon is", settings.favicon) const fns = [ ...(settings.favicon ? [path.resolve(settings.root, settings.favicon)] : []), - path.join(settings.root, 'src', 'static', 'skins', settings.skinName, 'favicon.ico'), + settings.skinName && path.join(settings.root, 'src', 'static', 'skins', settings.skinName, 'favicon.ico'), path.join(settings.root, 'src', 'static', 'favicon.ico'), - ]; + ].filter(f=>f != null); + console.log('FNS are', fns) for (const fn of fns) { try { await fsp.access(fn, fs.constants.R_OK); @@ -178,7 +184,8 @@ const handleLiveReload = async (args: ArgsExpressType, padString: string, timeSl req, toolbar, isReadOnly, - entrypoint: '/watch/pad?hash=' + hash + entrypoint: '/watch/pad?hash=' + hash, + settings: settings.getPublicSettings() }) res.send(content); }) @@ -207,7 +214,8 @@ const handleLiveReload = async (args: ArgsExpressType, padString: string, timeSl req, toolbar, isReadOnly, - entrypoint: '/watch/timeslider?hash=' + hash + entrypoint: '/watch/timeslider?hash=' + hash, + settings: settings.getPublicSettings() }) res.send(content); }) @@ -334,7 +342,8 @@ exports.expressCreateServer = async (_hookName: string, args: ArgsExpressType, c req, toolbar, isReadOnly, - entrypoint: "../"+fileNamePad + entrypoint: "../"+fileNamePad, + settings: settings.getPublicSettings() }) res.send(content); }); @@ -348,7 +357,8 @@ exports.expressCreateServer = async (_hookName: string, args: ArgsExpressType, c res.send(eejs.require('ep_etherpad-lite/templates/timeslider.html', { req, toolbar, - entrypoint: "../../"+fileNameTimeSlider + entrypoint: "../../"+fileNameTimeSlider, + settings: settings.getPublicSettings() })); }); } else { diff --git a/src/node/hooks/express/static.ts b/src/node/hooks/express/static.ts index f83bb382a..9a8adfa4a 100644 --- a/src/node/hooks/express/static.ts +++ b/src/node/hooks/express/static.ts @@ -8,7 +8,7 @@ import {minify} from '../../utils/Minify'; import path from 'node:path'; import {ArgsExpressType} from "../../types/ArgsExpressType"; const plugins = require('../../../static/js/pluginfw/plugin_defs'); -const settings = require('../../utils/Settings'); +import settings from '../../utils/Settings'; // Rewrite tar to include modules with no extensions and proper rooted paths. const getTar = async () => { diff --git a/src/node/hooks/express/webaccess.ts b/src/node/hooks/express/webaccess.ts index 2c8579623..031224f68 100644 --- a/src/node/hooks/express/webaccess.ts +++ b/src/node/hooks/express/webaccess.ts @@ -6,7 +6,7 @@ import {SocketClientRequest} from "../../types/SocketClientRequest"; import {WebAccessTypes} from "../../types/WebAccessTypes"; import {SettingsUser} from "../../types/SettingsUser"; const httpLogger = log4js.getLogger('http'); -const settings = require('../../utils/Settings'); +import settings from '../../utils/Settings'; const hooks = require('../../../static/js/pluginfw/hooks'); import readOnlyManager from '../../db/ReadOnlyManager'; diff --git a/src/node/hooks/i18n.ts b/src/node/hooks/i18n.ts index 69c313d0d..a59de913f 100644 --- a/src/node/hooks/i18n.ts +++ b/src/node/hooks/i18n.ts @@ -4,12 +4,12 @@ import type {MapArrayType} from "../types/MapType"; import {I18nPluginDefs} from "../types/I18nPluginDefs"; const languages = require('languages4translatewiki'); -const fs = require('fs'); -const path = require('path'); -const _ = require('underscore'); +import fs from 'fs'; +import path from 'path'; +import _ from 'underscore'; const pluginDefs = require('../../static/js/pluginfw/plugin_defs'); import existsSync from '../utils/path_exists'; -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; // returns all existing messages merged together and grouped by langcode // {es: {"foo": "string"}, en:...} @@ -73,7 +73,7 @@ const getAllLocales = () => { 'for Customization for Administrators, under Localization.'); if (settings.customLocaleStrings) { if (typeof settings.customLocaleStrings !== 'object') throw wrongFormatErr; - _.each(settings.customLocaleStrings, (overrides:MapArrayType , langcode:string) => { + _.each(settings.customLocaleStrings, (overrides , langcode) => { if (typeof overrides !== 'object') throw wrongFormatErr; _.each(overrides, (localeString:string|object, key:string) => { if (typeof localeString !== 'string') throw wrongFormatErr; diff --git a/src/node/security/OAuth2Provider.ts b/src/node/security/OAuth2Provider.ts index 3ef7d3a3b..6c069359d 100644 --- a/src/node/security/OAuth2Provider.ts +++ b/src/node/security/OAuth2Provider.ts @@ -3,7 +3,7 @@ import Provider, {Account, Configuration} from 'oidc-provider'; import {generateKeyPair, exportJWK, CryptoKey} from 'jose' import MemoryAdapter from "./OIDCAdapter"; import path from "path"; -const settings = require('../utils/Settings'); +import settings from '../utils/Settings'; import {IncomingForm} from 'formidable' import express from 'express'; import {format} from 'url' @@ -138,7 +138,7 @@ export const expressCreateServer = async (hookName: string, args: ArgsExpressTyp } else if (token.kind === "ClientCredentials") { let extraParams: MapArrayType = {} - settings.sso.clients + settings.sso.clients && settings.sso.clients .filter((client:any) => client.client_id === token.clientId) .forEach((client:any) => { if(client.extraParams !== undefined) { diff --git a/src/node/server.ts b/src/node/server.ts index 793909bd2..5ed8d3073 100755 --- a/src/node/server.ts +++ b/src/node/server.ts @@ -29,7 +29,7 @@ import pkg from '../package.json'; import {checkForMigration} from "../static/js/pluginfw/installer"; import axios from "axios"; -const settings = require('./utils/Settings'); +import settings from './utils/Settings'; let wtfnode: any; if (settings.dumpOnUncleanExit) { diff --git a/src/node/types/ArgsExpressType.ts b/src/node/types/ArgsExpressType.ts index cc409c033..996aee757 100644 --- a/src/node/types/ArgsExpressType.ts +++ b/src/node/types/ArgsExpressType.ts @@ -1,9 +1,10 @@ import {Express} from "express"; import {MapArrayType} from "./MapType"; +import {SettingsType} from "../utils/Settings"; export type ArgsExpressType = { app:Express, io: any, server:any - settings: MapArrayType + settings: SettingsType } diff --git a/src/node/utils/Abiword.ts b/src/node/utils/Abiword.ts index c0937fcd9..fd17497ed 100644 --- a/src/node/utils/Abiword.ts +++ b/src/node/utils/Abiword.ts @@ -24,7 +24,7 @@ import {AsyncQueueTask} from "../types/AsyncQueueTask"; const spawn = require('child_process').spawn; const async = require('async'); -const settings = require('./Settings'); +import settings from './Settings'; const os = require('os'); // on windows we have to spawn a process for each convertion, diff --git a/src/node/utils/AbsolutePaths.ts b/src/node/utils/AbsolutePaths.ts index c257440a1..6423ae4d7 100644 --- a/src/node/utils/AbsolutePaths.ts +++ b/src/node/utils/AbsolutePaths.ts @@ -18,9 +18,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const log4js = require('log4js'); -const path = require('path'); -const _ = require('underscore'); +import log4js from 'log4js'; +import path from 'path'; +import _ from 'underscore'; const absPathLogger = log4js.getLogger('AbsolutePaths'); @@ -74,7 +74,7 @@ const popIfEndsWith = (stringArray: string[], lastDesiredElements: string[]): st * @return {string} The identified absolute base path. If such path cannot be * identified, prints a log and exits the application. */ -exports.findEtherpadRoot = () => { +export const findEtherpadRoot = () => { if (etherpadRoot != null) { return etherpadRoot; } @@ -130,12 +130,12 @@ exports.findEtherpadRoot = () => { * it is returned unchanged. Otherwise it is interpreted * relative to exports.root. */ -exports.makeAbsolute = (somePath: string) => { +export const makeAbsolute = (somePath: string) => { if (path.isAbsolute(somePath)) { return somePath; } - const rewrittenPath = path.join(exports.findEtherpadRoot(), somePath); + const rewrittenPath = path.join(findEtherpadRoot(), somePath); absPathLogger.debug(`Relative path "${somePath}" can be rewritten to "${rewrittenPath}"`); return rewrittenPath; @@ -149,7 +149,7 @@ exports.makeAbsolute = (somePath: string) => { * a subdirectory of the base one * @return {boolean} */ -exports.isSubdir = (parent: string, arbitraryDir: string): boolean => { +export const isSubdir = (parent: string, arbitraryDir: string): boolean => { // modified from: https://stackoverflow.com/questions/37521893/determine-if-a-path-is-subdirectory-of-another-in-node-js#45242825 const relative = path.relative(parent, arbitraryDir); return !!relative && !relative.startsWith('..') && !path.isAbsolute(relative); diff --git a/src/node/utils/Cli.ts b/src/node/utils/Cli.ts index 1579dd3ce..a441c4db3 100644 --- a/src/node/utils/Cli.ts +++ b/src/node/utils/Cli.ts @@ -21,32 +21,33 @@ */ // An object containing the parsed command-line options -exports.argv = {}; -const argv = process.argv.slice(2); +export const argv: Record = {}; + +const argvInternal = process.argv.slice(2); let arg, prevArg; // Loop through args -for (let i = 0; i < argv.length; i++) { - arg = argv[i]; +for (let i = 0; i < argvInternal.length; i++) { + arg = argvInternal[i]; // Override location of settings.json file - if (prevArg === '--settings' || prevArg === '-s') { - exports.argv.settings = arg; + if (prevArg && prevArg === '--settings' || prevArg === '-s') { + argv.settings = arg; } // Override location of credentials.json file - if (prevArg === '--credentials') { + if (prevArg && prevArg === '--credentials') { exports.argv.credentials = arg; } // Override location of settings.json file - if (prevArg === '--sessionkey') { + if (prevArg && prevArg === '--sessionkey') { exports.argv.sessionkey = arg; } // Override location of APIKEY.txt file - if (prevArg === '--apikey') { + if (prevArg && prevArg === '--apikey') { exports.argv.apikey = arg; } diff --git a/src/node/utils/LibreOffice.ts b/src/node/utils/LibreOffice.ts index e89ebe460..e73fd144c 100644 --- a/src/node/utils/LibreOffice.ts +++ b/src/node/utils/LibreOffice.ts @@ -23,7 +23,7 @@ const log4js = require('log4js'); const os = require('os'); const path = require('path'); const runCmd = require('./run_cmd'); -const settings = require('./Settings'); +import settings from './Settings'; const logger = log4js.getLogger('LibreOffice'); diff --git a/src/node/utils/Minify.ts b/src/node/utils/Minify.ts index dbd4b247b..8747ff04b 100644 --- a/src/node/utils/Minify.ts +++ b/src/node/utils/Minify.ts @@ -26,7 +26,7 @@ import mime from 'mime-types'; import log4js from 'log4js'; import {compressCSS, compressJS} from './MinifyWorker' -const settings = require('./Settings'); +import settings from './Settings'; import {promises as fs} from 'fs'; import path from 'node:path'; const plugins = require('../../static/js/pluginfw/plugin_defs'); diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts index e5f3fa302..38aa7dbc5 100644 --- a/src/node/utils/Settings.ts +++ b/src/node/utils/Settings.ts @@ -28,20 +28,19 @@ */ import {MapArrayType} from "../types/MapType"; -import {SettingsNode, SettingsTree} from "./SettingsTree"; -import {coerce} from "semver"; +import {SettingsNode} from "./SettingsTree"; -const absolutePaths = require('./AbsolutePaths'); +import * as absolutePaths from './AbsolutePaths'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -const argv = require('./Cli').argv; +import {argv} from './Cli' import jsonminify from 'jsonminify'; import log4js from 'log4js'; import randomString from './randomstring'; const suppressDisableMsg = ' -- To suppress these warning messages change ' + 'suppressErrorsInPadText to true in your settings.json\n'; -const _ = require('underscore'); +import _ from 'underscore'; const logger = log4js.getLogger('settings'); @@ -63,7 +62,7 @@ const defaultLogLevel = 'INFO'; const defaultLogLayoutType = 'colored'; const initLogging = (config: any) => { - // log4js.configure() modifies exports.logconfig so check for equality first. + // log4js.configure() modifies settings.logconfig so check for equality first. log4js.configure(config); log4js.getLogger('console'); @@ -78,75 +77,278 @@ const initLogging = (config: any) => { // with the user's chosen log level and logger config after the settings have been loaded. initLogging(defaultLogConfig(defaultLogLevel, defaultLogLayoutType)); -/* Root path of the installation */ -exports.root = absolutePaths.findEtherpadRoot(); -logger.info('All relative paths will be interpreted relative to the identified ' + - `Etherpad base dir: ${exports.root}`); -exports.settingsFilename = absolutePaths.makeAbsolute(argv.settings || 'settings.json'); -exports.credentialsFilename = absolutePaths.makeAbsolute(argv.credentials || 'credentials.json'); +// Parse func + + /** - * The app title, visible e.g. in the browser window + * - reads the JSON configuration file settingsFilename from disk + * - strips the comments + * - replaces environment variables calling lookupEnvironmentVariables() + * - returns a parsed Javascript object + * + * The isSettings variable only controls the error logging. */ -exports.title = 'Etherpad'; +const parseSettings = (settingsFilename: string, isSettings: boolean) => { + let settingsStr = ''; -/** - * Pathname of the favicon you want to use. If null, the skin's favicon is - * used if one is provided by the skin, otherwise the default Etherpad favicon - * is used. If this is a relative path it is interpreted as relative to the - * Etherpad root directory. - */ -exports.favicon = null; + let settingsType, notFoundMessage, notFoundFunction; -exports.ttl = { + if (isSettings) { + settingsType = 'settings'; + notFoundMessage = 'Continuing using defaults!'; + notFoundFunction = logger.warn.bind(logger); + } else { + settingsType = 'credentials'; + notFoundMessage = 'Ignoring.'; + notFoundFunction = logger.info.bind(logger); + } + + try { + // read the settings file + settingsStr = fs.readFileSync(settingsFilename).toString(); + } catch (e) { + notFoundFunction(`No ${settingsType} file found in ${settingsFilename}. ${notFoundMessage}`); + + // or maybe undefined! + return null; + } + + try { + settingsStr = jsonminify(settingsStr).replace(',]', ']').replace(',}', '}'); + + const settings = JSON.parse(settingsStr); + + logger.info(`${settingsType} loaded from: ${settingsFilename}`); + + return lookupEnvironmentVariables(settings); + } catch (e: any) { + logger.error(`There was an error processing your ${settingsType} ` + + `file from ${settingsFilename}: ${e.message}`); + + process.exit(1); + } +}; + + +// Provide git version if available +export const getGitCommit = () => { + let version = ''; + try { + let rootPath = settings.root; + if (fs.lstatSync(`${rootPath}/.git`).isFile()) { + rootPath = fs.readFileSync(`${rootPath}/.git`, 'utf8'); + rootPath = rootPath.split(' ').pop()?.trim() ?? ''; + } else { + rootPath += '/.git'; + } + const ref = fs.readFileSync(`${rootPath}/HEAD`, 'utf-8'); + if (ref.startsWith('ref: ')) { + const refPath = `${rootPath}/${ref.substring(5, ref.indexOf('\n'))}`; + version = fs.readFileSync(refPath, 'utf-8'); + } else { + version = ref; + } + version = version.substring(0, 7); + } catch (e: any) { + logger.warn(`Can't get git version for server header\n${e.message}`); + } + return version; +}; + +export type SettingsType = { + root: string, + settingsFilename: string, + credentialsFilename: string, + title: string, + favicon: string | null, + ttl: { + AccessToken: number, + AuthorizationCode: number, + ClientCredentials: number, + IdToken: number, + RefreshToken: number, + }, + updateServer: string, + enableDarkMode: boolean, + skinName: string | null, + skinVariants: string, + ip: string, + port: number | string, + suppressErrorsInPadText: boolean, + ssl: false | { + key: string, + cert: string, + ca: string | null, + }, + socketTransportProtocols: any[], + socketIo: { + maxHttpBufferSize: number, + }, + authenticationMethod: string, + dbType: string, + dbSettings: any, + defaultPadText: string, + padOptions: { + noColors: boolean, + showControls: boolean, + showChat: boolean, + showLineNumbers: boolean, + useMonospaceFont: boolean, + userName: string | null, + userColor: string | null, + rtl: boolean, + alwaysShowChat: boolean, + chatAndUsers: boolean, + lang: string | null, + }, + enableMetrics: boolean, + padShortcutEnabled: { + altF9: boolean, + altC: boolean, + delete: boolean, + cmdShift2: boolean, + return: boolean, + esc: boolean, + cmdS: boolean, + tab: boolean, + cmdZ: boolean, + cmdY: boolean, + cmdB: boolean, + cmdI: boolean, + cmdU: boolean, + cmd5: boolean, + cmdShiftL: boolean, + cmdShiftN: boolean, + cmdShift1: boolean, + cmdShiftC: boolean, + cmdH: boolean, + ctrlHome: boolean, + pageUp: boolean, + pageDown: boolean, + }, + toolbar: { + left: string[][], + right: string[][], + timeslider: string[][], + }, + requireSession: boolean, + editOnly: boolean, + maxAge: number, + minify: boolean, + abiword: string | null, + soffice: string | null, + allowUnknownFileEnds: boolean, + loglevel: string, + logLayoutType: string, + disableIPlogging: boolean, + automaticReconnectionTimeout: number, + loadTest: boolean, + dumpOnUncleanExit: boolean, + indentationOnNewLine: boolean, + logconfig: any | null, + sessionKey: string | null, + trustProxy: boolean, + cookie: { + keyRotationInterval: number, + sameSite: boolean | "lax" | "strict" | "none" | undefined, + sessionLifetime: number, + sessionRefreshInterval: number, + }, + requireAuthentication: boolean, + requireAuthorization: boolean, + users: Record, + sso: { + issuer: string, + clients?: {client_id: string}[] + }, + showSettingsInAdminPage: boolean, + cleanup: { + enabled: boolean, + keepRevisions: number, + }, + scrollWhenFocusLineIsOutOfViewport: { + percentage: { + editionAboveViewport: number, + editionBelowViewport: number, + }, + duration: number, + percentageToScrollWhenUserPressesArrowUp: number, + scrollWhenCaretIsInTheLastLineOfViewport: boolean, + }, + exposeVersion: boolean, + customLocaleStrings: Record, + importExportRateLimiting: { + windowMs?: number, + max: number, + }, + commitRateLimiting: { + duration: number, + points: number, + }, + importMaxFileSize: number, + enableAdminUITests: boolean, + lowerCasePadIds: boolean, + randomVersionString: string, + gitVersion: string + getPublicSettings: () => Pick, +} + +const settings: SettingsType = { + /* Root path of the installation */ + root: absolutePaths.findEtherpadRoot(), + settingsFilename: absolutePaths.makeAbsolute(argv.settings || 'settings.json'), + credentialsFilename: absolutePaths.makeAbsolute(argv.credentials || 'credentials.json'), + /** + * The app title, visible e.g. in the browser window + */ + title: 'Etherpad', + /** + * Pathname of the favicon you want to use. If null, the skin's favicon is + * used if one is provided by the skin, otherwise the default Etherpad favicon + * is used. If this is a relative path it is interpreted as relative to the + * Etherpad root directory. + */ + favicon: null, + ttl: { AccessToken: 1 * 60 * 60, // 1 hour in seconds AuthorizationCode: 10 * 60, // 10 minutes in seconds ClientCredentials: 1 * 60 * 60, // 1 hour in seconds IdToken: 1 * 60 * 60, // 1 hour in seconds RefreshToken: 1 * 24 * 60 * 60, // 1 day in seconds -} - -exports.updateServer = "https://static.etherpad.org" - -exports.enableDarkMode = true; - -/* + }, + updateServer: "https://static.etherpad.org", + enableDarkMode: true, + /* * Skin name. * * Initialized to null, so we can spot an old configuration file and invite the * user to update it before falling back to the default. */ -exports.skinName = null; - -exports.skinVariants = 'super-light-toolbar super-light-editor light-background'; - -/** - * The IP ep-lite should listen to - */ -exports.ip = '0.0.0.0'; - -/** - * The Port ep-lite should listen to - */ -exports.port = process.env.PORT || 9001; - -/** - * Should we suppress Error messages from being in Pad Contents - */ -exports.suppressErrorsInPadText = false; - -/** - * The SSL signed server key and the Certificate Authority's own certificate - * default case: ep-lite does *not* use SSL. A signed server key is not required in this case. - */ -exports.ssl = false; - -/** - * socket.io transport methods - **/ -exports.socketTransportProtocols = ['websocket', 'polling']; - -exports.socketIo = { + skinName: null, + skinVariants: 'super-light-toolbar super-light-editor light-background', + /** + * The IP ep-lite should listen to + */ + ip: '0.0.0.0', + /** + * The Port ep-lite should listen to + */ + port: process.env.PORT || 9001, + /** + * Should we suppress Error messages from being in Pad Contents + */ + suppressErrorsInPadText: false, + /** + * The SSL signed server key and the Certificate Authority's own certificate + * default case: ep-lite does *not* use SSL. A signed server key is not required in this case. + */ + ssl: false, + /** + * socket.io transport methods + **/ + socketTransportProtocols: ['websocket', 'polling'], + socketIo: { /** * Maximum permitted client message size (in bytes). * @@ -156,42 +358,36 @@ exports.socketIo = { * (malicious clients can exhaust memory). */ maxHttpBufferSize: 50000, -}; - - -/* + }, + /* The authentication method used by the server. The default value is sso If you want to use the old authentication system, change this to apikey */ -exports.authenticationMethod = 'sso' - - -/* + authenticationMethod: 'sso', + /* * The Type of the database */ -exports.dbType = 'rustydb'; -/** - * This setting is passed with dbType to ueberDB to set up the database - */ -exports.dbSettings = {filename: path.join(exports.root, 'var/rusty.db')}; - -/** - * The default Text of a new pad - */ -exports.defaultPadText = [ + dbType: 'rustydb', + /** + * This setting is passed with dbType to ueberDB to set up the database + */ + dbSettings: null, + /** + * The default Text of a new pad + */ + defaultPadText: [ 'Welcome to Etherpad!', '', 'This pad text is synchronized as you type, so that everyone viewing this page sees the same ' + 'text. This allows you to collaborate seamlessly on documents!', '', 'Etherpad on Github: https://github.com/ether/etherpad-lite', -].join('\n'); - -/** - * The default Pad Settings for a user (Can be overridden by changing the setting - */ -exports.padOptions = { + ].join('\n'), + /** + * The default Pad Settings for a user (Can be overridden by changing the setting + */ + padOptions: { noColors: false, showControls: true, showChat: true, @@ -203,18 +399,15 @@ exports.padOptions = { alwaysShowChat: false, chatAndUsers: false, lang: null, -}; - - -/** - * Wether to enable the /stats endpoint. The functionality in the admin menu is untouched for this. - */ -exports.enableMetrics = true - -/** - * Whether certain shortcut keys are enabled for a user in the pad - */ -exports.padShortcutEnabled = { + }, + /** + * Wether to enable the /stats endpoint. The functionality in the admin menu is untouched for this. + */ + enableMetrics: true, + /** + * Whether certain shortcut keys are enabled for a user in the pad + */ + padShortcutEnabled: { altF9: true, altC: true, delete: true, @@ -237,208 +430,167 @@ exports.padShortcutEnabled = { ctrlHome: true, pageUp: true, pageDown: true, -}; - -/** - * The toolbar buttons and order. - */ -exports.toolbar = { + }, + /** + * The toolbar buttons and order. + */ + toolbar: { left: [ - ['bold', 'italic', 'underline', 'strikethrough'], - ['orderedlist', 'unorderedlist', 'indent', 'outdent'], - ['undo', 'redo'], - ['clearauthorship'], + ['bold', 'italic', 'underline', 'strikethrough'], + ['orderedlist', 'unorderedlist', 'indent', 'outdent'], + ['undo', 'redo'], + ['clearauthorship'], ], right: [ - ['importexport', 'timeslider', 'savedrevision'], - ['settings', 'embed', 'home'], - ['showusers'], + ['importexport', 'timeslider', 'savedrevision'], + ['settings', 'embed', 'home'], + ['showusers'], ], timeslider: [ - ['timeslider_export', 'timeslider_settings', 'timeslider_returnToPad'], + ['timeslider_export', 'timeslider_settings', 'timeslider_returnToPad'], ], -}; - -/** - * A flag that requires any user to have a valid session (via the api) before accessing a pad - */ -exports.requireSession = false; - -/** - * A flag that prevents users from creating new pads - */ -exports.editOnly = false; - -/** - * Max age that responses will have (affects caching layer). - */ -exports.maxAge = 1000 * 60 * 60 * 6; // 6 hours - -/** - * A flag that shows if minification is enabled or not - */ -exports.minify = true; - -/** - * The path of the abiword executable - */ -exports.abiword = null; - -/** - * The path of the libreoffice executable - */ -exports.soffice = null; - -/** - * Should we support none natively supported file types on import? - */ -exports.allowUnknownFileEnds = true; - -/** - * The log level of log4js - */ -exports.loglevel = defaultLogLevel; - -/** - * The log layout type of log4js - */ -exports.logLayoutType = defaultLogLayoutType; - -/** - * Disable IP logging - */ -exports.disableIPlogging = false; - -/** - * Number of seconds to automatically reconnect pad - */ -exports.automaticReconnectionTimeout = 0; - -/** - * Disable Load Testing - */ -exports.loadTest = false; - -/** - * Disable dump of objects preventing a clean exit - */ -exports.dumpOnUncleanExit = false; - -/** - * Enable indentation on new lines - */ -exports.indentationOnNewLine = true; - -/* + }, + /** + * A flag that requires any user to have a valid session (via the api) before accessing a pad + */ + requireSession: false, + /** + * A flag that prevents users from creating new pads + */ + editOnly: false, + /** + * Max age that responses will have (affects caching layer). + */ + maxAge: 1000 * 60 * 60 * 6, // 6 hours + /** + * A flag that shows if minification is enabled or not + */ + minify: true, + /** + * The path of the abiword executable + */ + abiword: null, + /** + * The path of the libreoffice executable + */ + soffice: null, + /** + * Should we support none natively supported file types on import? + */ + allowUnknownFileEnds: true, + /** + * The log level of log4js + */ + loglevel: defaultLogLevel, + /** + * The log layout type of log4js + */ + logLayoutType: defaultLogLayoutType, + /** + * Disable IP logging + */ + disableIPlogging: false, + /** + * Number of seconds to automatically reconnect pad + */ + automaticReconnectionTimeout: 0, + /** + * Disable Load Testing + */ + loadTest: false, + /** + * Disable dump of objects preventing a clean exit + */ + dumpOnUncleanExit: false, + /** + * Enable indentation on new lines + */ + indentationOnNewLine: true, + /* * log4js appender configuration */ -exports.logconfig = null; - -/* + logconfig: null, + /* * Deprecated cookie signing key. */ -exports.sessionKey = null; - -/* + sessionKey: null, + /* * Trust Proxy, whether or not trust the x-forwarded-for header. */ -exports.trustProxy = false; - -/* + trustProxy: false, + /* * Settings controlling the session cookie issued by Etherpad. */ -exports.cookie = { + cookie: { keyRotationInterval: 1 * 24 * 60 * 60 * 1000, - /* - * Value of the SameSite cookie property. "Lax" is recommended unless - * Etherpad will be embedded in an iframe from another site, in which case - * this must be set to "None". Note: "None" will not work (the browser will - * not send the cookie to Etherpad) unless https is used to access Etherpad - * (either directly or via a reverse proxy with "trustProxy" set to true). - * - * "Strict" is not recommended because it has few security benefits but - * significant usability drawbacks vs. "Lax". See - * https://stackoverflow.com/q/41841880 for discussion. - */ - sameSite: 'Lax', + sameSite: 'lax', sessionLifetime: 10 * 24 * 60 * 60 * 1000, sessionRefreshInterval: 1 * 24 * 60 * 60 * 1000, -}; - -/* + }, + /* * This setting is used if you need authentication and/or * authorization. Note: /admin always requires authentication, and * either authorization by a module, or a user with is_admin set */ -exports.requireAuthentication = false; -exports.requireAuthorization = false; -exports.users = {}; - -/* + requireAuthentication: false, + requireAuthorization: false, + users: {}, + /* * This setting is used for configuring sso */ -exports.sso = { + sso: { issuer: "http://localhost:9001" -} - -/* + }, + /* * Show settings in admin page, by default it is true */ -exports.showSettingsInAdminPage = true; - -/* + showSettingsInAdminPage: true, + /* * Settings for cleanup of pads */ -exports.cleanup = { - enabled: false, - keepRevisions: 100, -} - -/* + cleanup: { + enabled: false, + keepRevisions: 100, + }, + /* * By default, when caret is moved out of viewport, it scrolls the minimum * height needed to make this line visible. */ -exports.scrollWhenFocusLineIsOutOfViewport = { + scrollWhenFocusLineIsOutOfViewport: { /* - * Percentage of viewport height to be additionally scrolled. - */ + * Percentage of viewport height to be additionally scrolled. + */ percentage: { - editionAboveViewport: 0, - editionBelowViewport: 0, + editionAboveViewport: 0, + editionBelowViewport: 0, }, - /* - * Time (in milliseconds) used to animate the scroll transition. Set to 0 to - * disable animation - */ + * Time (in milliseconds) used to animate the scroll transition. Set to 0 to + * disable animation + */ duration: 0, - /* * Percentage of viewport height to be additionally scrolled when user presses arrow up * in the line of the top of the viewport. */ percentageToScrollWhenUserPressesArrowUp: 0, - /* - * Flag to control if it should scroll when user places the caret in the last - * line of the viewport - */ + * Flag to control if it should scroll when user places the caret in the last + * line of the viewport + */ scrollWhenCaretIsInTheLastLineOfViewport: false, -}; - -/* + }, + /* * Expose Etherpad version in the web interface and in the Server http header. * * Do not enable on production machines. */ -exports.exposeVersion = false; - -/* + exposeVersion: false, + /* * Override any strings found in locale directories */ -exports.customLocaleStrings = {}; - -/* + customLocaleStrings: {}, + /* * From Etherpad 1.8.3 onwards, import and export of pads is always rate * limited. * @@ -447,15 +599,13 @@ exports.customLocaleStrings = {}; * * See https://github.com/nfriedly/express-rate-limit for more options */ -exports.importExportRateLimiting = { + importExportRateLimiting: { // duration of the rate limit window (milliseconds) windowMs: 90000, - // maximum number of requests per IP to allow during the rate limit window max: 10, -}; - -/* + }, + /* * From Etherpad 1.9.0 onwards, commits from individual users are rate limited * * The default is to allow at most 10 changes per IP in a 1 second window. @@ -463,53 +613,71 @@ exports.importExportRateLimiting = { * * See https://github.com/animir/node-rate-limiter-flexible/wiki/Overall-example#websocket-single-connection-prevent-flooding for more options */ -exports.commitRateLimiting = { + commitRateLimiting: { // duration of the rate limit window (seconds) duration: 1, - - // maximum number of chanes per IP to allow during the rate limit window + // maximum number of changes per IP to allow during the rate limit window points: 10, -}; - -/* + }, + /* * From Etherpad 1.8.3 onwards, the maximum allowed size for a single imported * file is always bounded. * * File size is specified in bytes. Default is 50 MB. */ -exports.importMaxFileSize = 50 * 1024 * 1024; - -/* + importMaxFileSize: 50 * 1024 * 1024, + /* * Disable Admin UI tests */ -exports.enableAdminUITests = false; - -/* + enableAdminUITests: false, + /* * Enable auto conversion of pad Ids to lowercase. * e.g. /p/EtHeRpAd to /p/etherpad */ -exports.lowerCasePadIds = false; + lowerCasePadIds: false, + randomVersionString: '2123', + getPublicSettings: () => { + return { + gitVersion: settings.gitVersion, + toolbar: settings.toolbar, + exposeVersion: settings.exposeVersion, + randomVersionString: settings.randomVersionString, + title: settings.title, + skinName: settings.skinName, + skinVariants: settings.skinVariants, + } + }, + gitVersion: getGitCommit(), +} + +export default settings; + +/** + * This setting is passed with dbType to ueberDB to set up the database + */ +settings.dbSettings = {filename: path.join(settings.root, 'var/rusty.db')}; +// END OF SETTINGS // checks if abiword is avaiable -exports.abiwordAvailable = () => { - if (exports.abiword != null) { +export const abiwordAvailable = () => { + if (settings.abiword != null) { return os.type().indexOf('Windows') !== -1 ? 'withoutPDF' : 'yes'; } else { return 'no'; } }; -exports.sofficeAvailable = () => { - if (exports.soffice != null) { +export const sofficeAvailable = () => { + if (settings.soffice != null) { return os.type().indexOf('Windows') !== -1 ? 'withoutPDF' : 'yes'; } else { return 'no'; } }; -exports.exportAvailable = () => { - const abiword = exports.abiwordAvailable(); - const soffice = exports.sofficeAvailable(); +export const exportAvailable = () => { + const abiword = abiwordAvailable(); + const soffice = sofficeAvailable(); if (abiword === 'no' && soffice === 'no') { return 'no'; @@ -521,33 +689,9 @@ exports.exportAvailable = () => { } }; -// Provide git version if available -exports.getGitCommit = () => { - let version = ''; - try { - let rootPath = exports.root; - if (fs.lstatSync(`${rootPath}/.git`).isFile()) { - rootPath = fs.readFileSync(`${rootPath}/.git`, 'utf8'); - rootPath = rootPath.split(' ').pop().trim(); - } else { - rootPath += '/.git'; - } - const ref = fs.readFileSync(`${rootPath}/HEAD`, 'utf-8'); - if (ref.startsWith('ref: ')) { - const refPath = `${rootPath}/${ref.substring(5, ref.indexOf('\n'))}`; - version = fs.readFileSync(refPath, 'utf-8'); - } else { - version = ref; - } - version = version.substring(0, 7); - } catch (e: any) { - logger.warn(`Can't get git version for server header\n${e.message}`); - } - return version; -}; // Return etherpad version from package.json -exports.getEpVersion = () => require('../../package.json').version; +export const getEpVersion = () => require('../../package.json').version; @@ -572,11 +716,14 @@ const storeSettings = (settingsObj: any) => { // we know this setting, so we overwrite it // or it's a settings hash, specific to a plugin - if (exports[i] !== undefined || i.indexOf('ep_') === 0) { + // @ts-ignore + if (settings[i] !== undefined || i.indexOf('ep_') === 0) { if (_.isObject(settingsObj[i]) && !Array.isArray(settingsObj[i])) { - exports[i] = _.defaults(settingsObj[i], exports[i]); + // @ts-ignore + settings[i] = _.defaults(settingsObj[i], settings[i]); } else { - exports[i] = settingsObj[i]; + // @ts-ignore + settings[i] = settingsObj[i]; } } else { // this setting is unknown, output a warning and throw it away @@ -782,158 +929,108 @@ const lookupEnvironmentVariables = (obj: MapArrayType) => { }; -/** - * - reads the JSON configuration file settingsFilename from disk - * - strips the comments - * - replaces environment variables calling lookupEnvironmentVariables() - * - returns a parsed Javascript object - * - * The isSettings variable only controls the error logging. - */ -const parseSettings = (settingsFilename: string, isSettings: boolean) => { - let settingsStr = ''; - let settingsType, notFoundMessage, notFoundFunction; - - if (isSettings) { - settingsType = 'settings'; - notFoundMessage = 'Continuing using defaults!'; - notFoundFunction = logger.warn.bind(logger); - } else { - settingsType = 'credentials'; - notFoundMessage = 'Ignoring.'; - notFoundFunction = logger.info.bind(logger); - } - - try { - // read the settings file - settingsStr = fs.readFileSync(settingsFilename).toString(); - } catch (e) { - notFoundFunction(`No ${settingsType} file found in ${settingsFilename}. ${notFoundMessage}`); - - // or maybe undefined! - return null; - } - - try { - settingsStr = jsonminify(settingsStr).replace(',]', ']').replace(',}', '}'); - - const settings = JSON.parse(settingsStr); - - logger.info(`${settingsType} loaded from: ${settingsFilename}`); - - return lookupEnvironmentVariables(settings); - } catch (e: any) { - logger.error(`There was an error processing your ${settingsType} ` + - `file from ${settingsFilename}: ${e.message}`); - - process.exit(1); - } -}; - -exports.reloadSettings = () => { - const settings = parseSettings(exports.settingsFilename, true); - const credentials = parseSettings(exports.credentialsFilename, false); - storeSettings(settings); +export const reloadSettings = () => { + const settingsParsed = parseSettings(settings?.settingsFilename, true); + const credentials = parseSettings(settings.credentialsFilename, false); + storeSettings(settingsParsed); storeSettings(credentials); // Init logging config - exports.logconfig = defaultLogConfig( - exports.loglevel ? exports.loglevel : defaultLogLevel, - exports.logLayoutType ? exports.logLayoutType : defaultLogLayoutType + settings.logconfig = defaultLogConfig( + settings.loglevel ? settings.loglevel : defaultLogLevel, + settings.logLayoutType ? settings.logLayoutType : defaultLogLayoutType ); - logger.warn("loglevel: " + exports.loglevel); - logger.warn("logLayoutType: " + exports.logLayoutType); - initLogging(exports.logconfig); + logger.warn("loglevel: " + settings.loglevel); + logger.warn("logLayoutType: " + settings.logLayoutType); + initLogging(settings.logconfig); - if (!exports.skinName) { + if (!settings.skinName) { logger.warn('No "skinName" parameter found. Please check out settings.json.template and ' + 'update your settings.json. Falling back to the default "colibris".'); - exports.skinName = 'colibris'; + settings.skinName = 'colibris'; } - if (!exports.socketTransportProtocols.includes("websocket") || !exports.socketTransportProtocols.includes("polling")) { + if (!settings.socketTransportProtocols.includes("websocket") || !settings.socketTransportProtocols.includes("polling")) { logger.warn("Invalid socketTransportProtocols setting. Please check out settings.json.template and update your settings.json. Falling back to the default ['websocket', 'polling']."); - exports.socketTransportProtocols = ['websocket', 'polling']; + settings.socketTransportProtocols = ['websocket', 'polling']; } // checks if skinName has an acceptable value, otherwise falls back to "colibris" - if (exports.skinName) { - const skinBasePath = path.join(exports.root, 'src', 'static', 'skins'); - const countPieces = exports.skinName.split(path.sep).length; + if (settings.skinName) { + const skinBasePath = path.join(settings.root, 'src', 'static', 'skins'); + const countPieces = settings.skinName.split(path.sep).length; if (countPieces !== 1) { logger.error(`skinName must be the name of a directory under "${skinBasePath}". This is ` + - `not valid: "${exports.skinName}". Falling back to the default "colibris".`); + `not valid: "${settings.skinName}". Falling back to the default "colibris".`); - exports.skinName = 'colibris'; + settings.skinName = 'colibris'; } // informative variable, just for the log messages - let skinPath = path.join(skinBasePath, exports.skinName); + let skinPath = path.join(skinBasePath, settings.skinName); // what if someone sets skinName == ".." or "."? We catch him! - if (absolutePaths.isSubdir(skinBasePath, skinPath) === false) { + if (!absolutePaths.isSubdir(skinBasePath, skinPath)) { logger.error(`Skin path ${skinPath} must be a subdirectory of ${skinBasePath}. ` + 'Falling back to the default "colibris".'); - exports.skinName = 'colibris'; - skinPath = path.join(skinBasePath, exports.skinName); + settings.skinName = 'colibris'; + skinPath = path.join(skinBasePath, settings.skinName); } - if (fs.existsSync(skinPath) === false) { + if (!fs.existsSync(skinPath)) { logger.error(`Skin path ${skinPath} does not exist. Falling back to the default "colibris".`); - exports.skinName = 'colibris'; - skinPath = path.join(skinBasePath, exports.skinName); + settings.skinName = 'colibris'; + skinPath = path.join(skinBasePath, settings.skinName); } - logger.info(`Using skin "${exports.skinName}" in dir: ${skinPath}`); + logger.info(`Using skin "${settings.skinName}" in dir: ${skinPath}`); } - if (exports.abiword) { + if (settings.abiword) { // Check abiword actually exists - if (exports.abiword != null) { - fs.exists(exports.abiword, (exists: boolean) => { - if (!exists) { - const abiwordError = 'Abiword does not exist at this path, check your settings file.'; - if (!exports.suppressErrorsInPadText) { - exports.defaultPadText += `\nError: ${abiwordError}${suppressDisableMsg}`; - } - logger.error(`${abiwordError} File location: ${exports.abiword}`); - exports.abiword = null; - } - }); + fs.exists(settings.abiword, (exists: boolean) => { + if (!exists) { + const abiwordError = 'Abiword does not exist at this path, check your settings file.'; + if (!settings.suppressErrorsInPadText) { + settings.defaultPadText += `\nError: ${abiwordError}${suppressDisableMsg}`; + } + logger.error(`${abiwordError} File location: ${settings.abiword}`); + settings.abiword = null; } + }); } - if (exports.soffice) { - fs.exists(exports.soffice, (exists: boolean) => { + if (settings.soffice) { + fs.exists(settings.soffice, (exists: boolean) => { if (!exists) { const sofficeError = 'soffice (libreoffice) does not exist at this path, check your settings file.'; - if (!exports.suppressErrorsInPadText) { - exports.defaultPadText += `\nError: ${sofficeError}${suppressDisableMsg}`; + if (!settings.suppressErrorsInPadText) { + settings.defaultPadText += `\nError: ${sofficeError}${suppressDisableMsg}`; } - logger.error(`${sofficeError} File location: ${exports.soffice}`); - exports.soffice = null; + logger.error(`${sofficeError} File location: ${settings.soffice}`); + settings.soffice = null; } }); } const sessionkeyFilename = absolutePaths.makeAbsolute(argv.sessionkey || './SESSIONKEY.txt'); - if (!exports.sessionKey) { + if (!settings.sessionKey) { try { - exports.sessionKey = fs.readFileSync(sessionkeyFilename, 'utf8'); + settings.sessionKey = fs.readFileSync(sessionkeyFilename, 'utf8'); logger.info(`Session key loaded from: ${sessionkeyFilename}`); } catch (err) { /* ignored */ } - const keyRotationEnabled = exports.cookie.keyRotationInterval && exports.cookie.sessionLifetime; - if (!exports.sessionKey && !keyRotationEnabled) { + const keyRotationEnabled = settings.cookie.keyRotationInterval && settings.cookie.sessionLifetime; + if (!settings.sessionKey && !keyRotationEnabled) { logger.info( `Session key file "${sessionkeyFilename}" not found. Creating with random contents.`); - exports.sessionKey = randomString(32); - fs.writeFileSync(sessionkeyFilename, exports.sessionKey, 'utf8'); + settings.sessionKey = randomString(32); + fs.writeFileSync(sessionkeyFilename, settings.sessionKey, 'utf8'); } } else { logger.warn('Declaring the sessionKey in the settings.json is deprecated. ' + @@ -941,28 +1038,28 @@ exports.reloadSettings = () => { 'If you are seeing this error after restarting using the Admin User ' + 'Interface then you can ignore this message.'); } - if (exports.sessionKey) { + if (settings.sessionKey) { logger.warn(`The sessionKey setting and ${sessionkeyFilename} file are deprecated; ` + 'use automatic key rotation instead (see the cookie.keyRotationInterval setting).'); } - if (exports.dbType === 'dirty') { + if (settings.dbType === 'dirty') { const dirtyWarning = 'DirtyDB is used. This is not recommended for production.'; - if (!exports.suppressErrorsInPadText) { - exports.defaultPadText += `\nWarning: ${dirtyWarning}${suppressDisableMsg}`; + if (!settings.suppressErrorsInPadText) { + settings.defaultPadText += `\nWarning: ${dirtyWarning}${suppressDisableMsg}`; } - exports.dbSettings.filename = absolutePaths.makeAbsolute(exports.dbSettings.filename); - logger.warn(`${dirtyWarning} File location: ${exports.dbSettings.filename}`); + settings.dbSettings.filename = absolutePaths.makeAbsolute(settings.dbSettings.filename); + logger.warn(`${dirtyWarning} File location: ${settings.dbSettings.filename}`); } - if (exports.dbType === 'rustydb' || exports.dbType === "sqlite") { - exports.dbSettings.filename = absolutePaths.makeAbsolute(exports.dbSettings.filename); - logger.warn(`File location: ${exports.dbSettings.filename}`); + if (settings.dbType === 'rustydb' || settings.dbType === "sqlite") { + settings.dbSettings.filename = absolutePaths.makeAbsolute(settings.dbSettings.filename); + logger.warn(`File location: ${settings.dbSettings.filename}`); } - if (exports.ip === '') { + if (settings.ip === '') { // using Unix socket for connectivity logger.warn('The settings file contains an empty string ("") for the "ip" parameter. The ' + '"port" parameter will be interpreted as the path to a Unix socket to bind at.'); @@ -979,13 +1076,13 @@ exports.reloadSettings = () => { * ACHTUNG: this may prevent caching HTTP proxies to work * TODO: remove the "?v=randomstring" parameter, and replace with hashed filenames instead */ - exports.randomVersionString = randomString(4); - logger.info(`Random string used for versioning assets: ${exports.randomVersionString}`); + settings.randomVersionString = randomString(4); + logger.info(`Random string used for versioning assets: ${settings.randomVersionString}`); }; -exports.exportedForTestingOnly = { +export const exportedForTestingOnly = { parseSettings, }; // initially load settings -exports.reloadSettings(); +reloadSettings(); diff --git a/src/node/utils/UpdateCheck.ts b/src/node/utils/UpdateCheck.ts index 764bbcb27..da292e373 100644 --- a/src/node/utils/UpdateCheck.ts +++ b/src/node/utils/UpdateCheck.ts @@ -1,9 +1,9 @@ 'use strict'; import semver from 'semver'; -const settings = require('./Settings'); +import settings, {getEpVersion} from './Settings'; import axios from 'axios'; const headers = { - 'User-Agent': 'Etherpad/' + settings.getEpVersion(), + 'User-Agent': 'Etherpad/' + getEpVersion(), } type Infos = { @@ -45,7 +45,7 @@ export const getLatestVersion = () => { const needsUpdate = async (cb?: Function) => { try { const info = await loadEtherpadInformations() - if (semver.gt(info!.latestVersion, settings.getEpVersion())) { + if (semver.gt(info!.latestVersion, getEpVersion())) { if (cb) return cb(true); } } catch (err) { diff --git a/src/node/utils/run_cmd.ts b/src/node/utils/run_cmd.ts index 463b0f076..c7e37b78c 100644 --- a/src/node/utils/run_cmd.ts +++ b/src/node/utils/run_cmd.ts @@ -5,10 +5,10 @@ import {ChildProcess} from "node:child_process"; import {PromiseWithStd} from "../types/PromiseWithStd"; import {Readable} from "node:stream"; -const spawn = require('cross-spawn'); -const log4js = require('log4js'); -const path = require('path'); -const settings = require('./Settings'); +import spawn from 'cross-spawn'; +import log4js from 'log4js'; +import path from 'path'; +import settings from './Settings'; const logger = log4js.getLogger('runCmd'); @@ -123,7 +123,7 @@ module.exports = exports = (args: string[], opts:RunCMDOptions = {}) => { // process's `exit` handler so that we get a useful stack trace. const procFailedErr: Error & ErrorExtended = new Error(); - const proc: ChildProcess = spawn(args[0], args.slice(1), opts); + const proc: ChildProcess = spawn(args[0], args.slice(1), opts as any); const streams:[undefined, Readable|null, Readable|null] = [undefined, proc.stdout, proc.stderr]; let px: { reject: any; resolve: any; }; diff --git a/src/package.json b/src/package.json index 477ef4dec..7060626a5 100644 --- a/src/package.json +++ b/src/package.json @@ -85,6 +85,8 @@ "@playwright/test": "^1.54.1", "@types/async": "^3.2.24", "@types/cookie-parser": "^1.4.9", + "@types/cross-spawn": "^6.0.6", + "@types/ejs": "^3.1.5", "@types/express": "^5.0.0", "@types/express-session": "^1.18.2", "@types/formidable": "^3.4.5", diff --git a/src/static/js/pluginfw/LinkInstaller.ts b/src/static/js/pluginfw/LinkInstaller.ts index e5eaf0b5c..ddb8835ca 100644 --- a/src/static/js/pluginfw/LinkInstaller.ts +++ b/src/static/js/pluginfw/LinkInstaller.ts @@ -4,7 +4,7 @@ import {node_modules, pluginInstallPath} from "./installer"; import {accessSync, constants, rmSync, symlinkSync, unlinkSync} from "node:fs"; import {dependencies, name} from '../../../package.json' import {pathToFileURL} from 'node:url'; -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; import {readFileSync} from "fs"; export class LinkInstaller { diff --git a/src/static/js/pluginfw/installer.ts b/src/static/js/pluginfw/installer.ts index 98590e9e5..a85bc77f1 100644 --- a/src/static/js/pluginfw/installer.ts +++ b/src/static/js/pluginfw/installer.ts @@ -13,10 +13,13 @@ import {promises as fs} from "fs"; const plugins = require('./plugins'); const hooks = require('./hooks'); const runCmd = require('../../../node/utils/run_cmd'); -const settings = require('../../../node/utils/Settings'); +import settings, { + getEpVersion, + reloadSettings +} from '../../../node/utils/Settings'; import {LinkInstaller} from "./LinkInstaller"; -const {findEtherpadRoot} = require('../../../node/utils/AbsolutePaths'); +import {findEtherpadRoot} from '../../../node/utils/AbsolutePaths'; const logger = log4js.getLogger('plugins'); export const pluginInstallPath = path.join(settings.root, 'src','plugin_packages'); @@ -27,13 +30,13 @@ export const installedPluginsPath = path.join(settings.root, 'var/installed_plug const onAllTasksFinished = async () => { await plugins.update(); await persistInstalledPlugins(); - settings.reloadSettings(); + reloadSettings(); await hooks.aCallAll('loadSettings', {settings}); await hooks.aCallAll('restartServer'); }; const headers = { - 'User-Agent': `Etherpad/${settings.getEpVersion()}`, + 'User-Agent': `Etherpad/${getEpVersion()}`, }; let tasks = 0; diff --git a/src/static/js/pluginfw/plugins.ts b/src/static/js/pluginfw/plugins.ts index 97c1694e2..f3ca51427 100644 --- a/src/static/js/pluginfw/plugins.ts +++ b/src/static/js/pluginfw/plugins.ts @@ -9,7 +9,9 @@ const runCmd = require('../../../node/utils/run_cmd'); const tsort = require('./tsort'); const pluginUtils = require('./shared'); const defs = require('./plugin_defs'); -const settings = require('../../../node/utils/Settings'); +import settings, { + getEpVersion, +} from '../../../node/utils/Settings'; const logger = log4js.getLogger('plugins'); @@ -136,7 +138,7 @@ exports.getPackages = async () => { newDependencies['ep_etherpad-lite'] = { name: 'ep_etherpad-lite', - version: settings.getEpVersion(), + version: getEpVersion(), path: path.join(settings.root, 'node_modules/ep_etherpad-lite'), realPath: path.join(settings.root, 'src'), }; diff --git a/src/templates/pad.html b/src/templates/pad.html index abc9b7a7d..bb6962b89 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -1,6 +1,5 @@ <% - var settings = require("ep_etherpad-lite/node/utils/Settings") - , langs = require("ep_etherpad-lite/node/hooks/i18n").availableLangs + var langs = require("ep_etherpad-lite/node/hooks/i18n").availableLangs , pluginUtils = require('ep_etherpad-lite/static/js/pluginfw/shared') ; %> @@ -168,7 +167,7 @@

About

Powered by Etherpad - <% if (settings.exposeVersion) { %>(commit <%=settings.getGitCommit()%>)<% } %> + <% if (settings.exposeVersion) { %>(commit <%=settings.gitVersion()%>)<% } %> diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html index 02db40648..b5c673326 100644 --- a/src/templates/timeslider.html +++ b/src/templates/timeslider.html @@ -1,6 +1,5 @@ <% - var settings = require("ep_etherpad-lite/node/utils/Settings") - , langs = require("ep_etherpad-lite/node/hooks/i18n").availableLangs + var langs = require("ep_etherpad-lite/node/hooks/i18n").availableLangs %> diff --git a/src/tests/backend/common.ts b/src/tests/backend/common.ts index 271fb43d4..73bc3f781 100644 --- a/src/tests/backend/common.ts +++ b/src/tests/backend/common.ts @@ -10,7 +10,7 @@ import padutils from '../../static/js/pad_utils'; const process = require('process'); const server = require('../../node/server'); const setCookieParser = require('set-cookie-parser'); -const settings = require('../../node/utils/Settings'); +import settings from '../../node/utils/Settings'; import supertest from 'supertest'; import TestAgent from "supertest/lib/agent"; import {Http2Server} from "node:http2"; diff --git a/src/tests/backend/specs/Pad.ts b/src/tests/backend/specs/Pad.ts index b77bdf672..42bcc33d8 100644 --- a/src/tests/backend/specs/Pad.ts +++ b/src/tests/backend/specs/Pad.ts @@ -9,7 +9,7 @@ const authorManager = require('../../../node/db/AuthorManager'); const common = require('../common'); const padManager = require('../../../node/db/PadManager'); const plugins = require('../../../static/js/pluginfw/plugin_defs'); -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; describe(__filename, function () { const backups:MapArrayType = {}; diff --git a/src/tests/backend/specs/api/importexportGetPost.ts b/src/tests/backend/specs/api/importexportGetPost.ts index 355699bc2..1e3fb5b02 100644 --- a/src/tests/backend/specs/api/importexportGetPost.ts +++ b/src/tests/backend/specs/api/importexportGetPost.ts @@ -11,7 +11,7 @@ import TestAgent from "supertest/lib/agent"; const assert = require('assert').strict; const common = require('../../common'); const fs = require('fs'); -const settings = require('../../../../node/utils/Settings'); +import settings from '../../../../node/utils/Settings'; const superagent = require('superagent'); const padManager = require('../../../../node/db/PadManager'); const plugins = require('../../../../static/js/pluginfw/plugin_defs'); diff --git a/src/tests/backend/specs/export.ts b/src/tests/backend/specs/export.ts index de436f88c..0abe24cda 100644 --- a/src/tests/backend/specs/export.ts +++ b/src/tests/backend/specs/export.ts @@ -4,7 +4,7 @@ import {MapArrayType} from "../../../node/types/MapType"; const common = require('../common'); const padManager = require('../../../node/db/PadManager'); -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; describe(__filename, function () { let agent:any; diff --git a/src/tests/backend/specs/favicon.ts b/src/tests/backend/specs/favicon.ts index 6b6230b4b..98042dcbf 100644 --- a/src/tests/backend/specs/favicon.ts +++ b/src/tests/backend/specs/favicon.ts @@ -7,7 +7,7 @@ const common = require('../common'); const fs = require('fs'); const fsp = fs.promises; const path = require('path'); -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; const superagent = require('superagent'); describe(__filename, function () { @@ -29,10 +29,13 @@ describe(__filename, function () { backupSettings = {...settings}; skinDir = await fsp.mkdtemp(path.join(settings.root, 'src', 'static', 'skins', 'test-')); settings.skinName = path.basename(skinDir); + }); afterEach(async function () { + // @ts-ignore delete settings.favicon; + // @ts-ignore delete settings.skinName; Object.assign(settings, backupSettings); try { diff --git a/src/tests/backend/specs/health.ts b/src/tests/backend/specs/health.ts index 97364a7e5..89ee3aad5 100644 --- a/src/tests/backend/specs/health.ts +++ b/src/tests/backend/specs/health.ts @@ -4,7 +4,9 @@ import {MapArrayType} from "../../../node/types/MapType"; const assert = require('assert').strict; const common = require('../common'); -const settings = require('../../../node/utils/Settings'); +import settings, { + getEpVersion +} from '../../../node/utils/Settings'; const superagent = require('superagent'); describe(__filename, function () { @@ -25,6 +27,7 @@ describe(__filename, function () { beforeEach(async function () { backup.settings = {}; for (const setting of ['requireAuthentication', 'requireAuthorization']) { + // @ts-ignore backup.settings[setting] = settings[setting]; } }); @@ -36,7 +39,7 @@ describe(__filename, function () { it('/health works', async function () { const res = await getHealth(); assert.equal(res.body.status, 'pass'); - assert.equal(res.body.releaseId, settings.getEpVersion()); + assert.equal(res.body.releaseId, getEpVersion()); }); it('auth is not required', async function () { diff --git a/src/tests/backend/specs/lowerCasePadIds.ts b/src/tests/backend/specs/lowerCasePadIds.ts index c85d16c3f..12e8ed831 100644 --- a/src/tests/backend/specs/lowerCasePadIds.ts +++ b/src/tests/backend/specs/lowerCasePadIds.ts @@ -3,7 +3,7 @@ const assert = require('assert').strict; const common = require('../common'); const padManager = require('../../../node/db/PadManager'); -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; describe(__filename, function () { let agent:any; diff --git a/src/tests/backend/specs/settings.ts b/src/tests/backend/specs/settings.ts index d6dcaf71a..89f4bc7b1 100644 --- a/src/tests/backend/specs/settings.ts +++ b/src/tests/backend/specs/settings.ts @@ -1,7 +1,7 @@ 'use strict'; const assert = require('assert').strict; -const {parseSettings} = require('../../../node/utils/Settings').exportedForTestingOnly; +import {exportedForTestingOnly} from '../../../node/utils/Settings' import path from 'path'; import process from 'process'; @@ -21,7 +21,7 @@ describe(__filename, function () { before(async function () { for (const tc of envVarSubstTestCases) process.env[tc.var] = tc.val; delete process.env.UNSET_VAR; - settings = parseSettings(path.join(__dirname, 'settings.json'), true); + settings = exportedForTestingOnly.parseSettings(path.join(__dirname, 'settings.json'), true); assert(settings != null); }); @@ -67,26 +67,26 @@ describe(__filename, function () { }) it('should parse plugin settings', async function () { - let settings = parseSettings(path.join(__dirname, 'settings.json'), true); - assert.equal(settings.ADMIN.PASSWORD, "test"); + let settings = exportedForTestingOnly.parseSettings(path.join(__dirname, 'settings.json'), true); + assert.equal(settings!.ADMIN.PASSWORD, "test"); }) it('should bundle settings with same path', async function () { process.env["EP__ADMIN__USERNAME"] = "test" - let settings = parseSettings(path.join(__dirname, 'settings.json'), true); - assert.deepEqual(settings.ADMIN, {PASSWORD: "test", USERNAME: "test"}); + let settings = exportedForTestingOnly.parseSettings(path.join(__dirname, 'settings.json'), true); + assert.deepEqual(settings!.ADMIN, {PASSWORD: "test", USERNAME: "test"}); }) it("Can set the ep themes", async function () { process.env["EP__ep_themes__default_theme"] = "hacker" - let settings = parseSettings(path.join(__dirname, 'settings.json'), true); - assert.deepEqual(settings.ep_themes, {"default_theme": "hacker"}); + let settings = exportedForTestingOnly.parseSettings(path.join(__dirname, 'settings.json'), true); + assert.deepEqual(settings!.ep_themes, {"default_theme": "hacker"}); }) it("can set the ep_webrtc settings", async function () { process.env["EP__ep_webrtc__enabled"] = "true" - let settings = parseSettings(path.join(__dirname, 'settings.json'), true); - assert.deepEqual(settings.ep_webrtc, {"enabled": true}); + let settings = exportedForTestingOnly.parseSettings(path.join(__dirname, 'settings.json'), true); + assert.deepEqual(settings!.ep_webrtc, {"enabled": true}); }) }) }); diff --git a/src/tests/backend/specs/socketio.ts b/src/tests/backend/specs/socketio.ts index 556f28a69..b235974aa 100644 --- a/src/tests/backend/specs/socketio.ts +++ b/src/tests/backend/specs/socketio.ts @@ -7,7 +7,7 @@ const common = require('../common'); const padManager = require('../../../node/db/PadManager'); const plugins = require('../../../static/js/pluginfw/plugin_defs'); import readOnlyManager from '../../../node/db/ReadOnlyManager'; -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; const socketIoRouter = require('../../../node/handler/SocketIORouter'); describe(__filename, function () { @@ -35,6 +35,7 @@ describe(__filename, function () { } backups.settings = {}; for (const setting of ['editOnly', 'requireAuthentication', 'requireAuthorization', 'users']) { + // @ts-ignore backups.settings[setting] = settings[setting]; } settings.editOnly = false; diff --git a/src/tests/backend/specs/specialpages.ts b/src/tests/backend/specs/specialpages.ts index fbb446c49..edb675ee5 100644 --- a/src/tests/backend/specs/specialpages.ts +++ b/src/tests/backend/specs/specialpages.ts @@ -3,7 +3,7 @@ import {MapArrayType} from "../../../node/types/MapType"; const common = require('../common'); -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; @@ -15,6 +15,7 @@ describe(__filename, function () { beforeEach(async function () { backups.settings = {}; for (const setting of ['requireAuthentication', 'requireAuthorization']) { + // @ts-ignore backups.settings[setting] = settings[setting]; } settings.requireAuthentication = false; diff --git a/src/tests/backend/specs/webaccess.ts b/src/tests/backend/specs/webaccess.ts index 96c2265fc..919bb1a41 100644 --- a/src/tests/backend/specs/webaccess.ts +++ b/src/tests/backend/specs/webaccess.ts @@ -7,7 +7,7 @@ import {SettingsUser} from "../../../node/types/SettingsUser"; const assert = require('assert').strict; const common = require('../common'); const plugins = require('../../../static/js/pluginfw/plugin_defs'); -const settings = require('../../../node/utils/Settings'); +import settings from '../../../node/utils/Settings'; describe(__filename, function () { this.timeout(30000); @@ -32,6 +32,7 @@ describe(__filename, function () { } backups.settings = {}; for (const setting of ['requireAuthentication', 'requireAuthorization', 'users']) { + // @ts-ignore backups.settings[setting] = settings[setting]; } settings.requireAuthentication = false; From 84160a7143a42348b36cabead369ff3af37ffba8 Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+samtv12345@users.noreply.github.com> Date: Tue, 5 Aug 2025 17:52:00 +0200 Subject: [PATCH 07/33] chore: updated to node 24 runner --- .github/workflows/backend-tests.yml | 4 ++-- .github/workflows/frontend-admin-tests.yml | 2 +- .github/workflows/upgrade-from-latest-release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index a1d8be074..6c5247670 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: false matrix: - node: [20, 22, 23] + node: [20, 22, 24] steps: - name: Checkout repository @@ -84,7 +84,7 @@ jobs: strategy: fail-fast: false matrix: - node: [20, 22, 23] + node: [20, 22, 24] steps: - name: Checkout repository diff --git a/.github/workflows/frontend-admin-tests.yml b/.github/workflows/frontend-admin-tests.yml index 94f790efa..cb00f3332 100644 --- a/.github/workflows/frontend-admin-tests.yml +++ b/.github/workflows/frontend-admin-tests.yml @@ -17,7 +17,7 @@ jobs: strategy: fail-fast: false matrix: - node: [20, 22, 23] + node: [20, 22, 24] steps: - diff --git a/.github/workflows/upgrade-from-latest-release.yml b/.github/workflows/upgrade-from-latest-release.yml index 66df392ef..a06c098fe 100644 --- a/.github/workflows/upgrade-from-latest-release.yml +++ b/.github/workflows/upgrade-from-latest-release.yml @@ -24,7 +24,7 @@ jobs: strategy: fail-fast: false matrix: - node: [20, 22, 23] + node: [20, 22, 24] steps: - name: Check out latest release From aa766825cbd2e3632eede605cd479575cf896692 Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+SamTV12345@users.noreply.github.com> Date: Tue, 5 Aug 2025 18:24:19 +0200 Subject: [PATCH 08/33] chore: fixed fastRun.sh script (#7063) --- bin/fastRun.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/fastRun.sh b/bin/fastRun.sh index b18469edb..b67e723f6 100755 --- a/bin/fastRun.sh +++ b/bin/fastRun.sh @@ -19,4 +19,4 @@ cd "${MY_DIR}/.." || exit 1 echo "Running directly, without checking/installing dependencies" # run Etherpad main class -exec node --import tsx src/node/server.ts "$@" +exec pnpm run prod "$@" From d13a7b34359df1a268ad0ee769594bc1f13a91d7 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 7 Aug 2025 14:04:21 +0200 Subject: [PATCH 09/33] Localisation updates from https://translatewiki.net. --- src/locales/fi.json | 2 +- src/locales/fr.json | 16 +++++----- src/locales/gl.json | 3 +- src/locales/ia.json | 75 +++++++++++++++++++++++++-------------------- src/locales/ko.json | 1 + src/locales/ru.json | 5 ++- src/locales/sw.json | 4 ++- 7 files changed, 60 insertions(+), 46 deletions(-) diff --git a/src/locales/fi.json b/src/locales/fi.json index d05404e2d..80a48ada5 100644 --- a/src/locales/fi.json +++ b/src/locales/fi.json @@ -55,7 +55,7 @@ "admin_settings.current_save.value": "Tallenna asetukset", "admin_settings.page-title": "asetukset - Etherpad", "index.newPad": "Uusi muistio", - "index.createOpenPad": "tai luo tai avaa muistio nimellä:", + "index.createOpenPad": "Avaa muistio nimellä", "index.openPad": "avaa olemassa oleva muistio nimellä:", "pad.toolbar.bold.title": "Lihavointi (Ctrl-B)", "pad.toolbar.italic.title": "Kursivointi (Ctrl-I)", diff --git a/src/locales/fr.json b/src/locales/fr.json index 603c5f26d..b45e04248 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -114,7 +114,7 @@ "pad.settings.about": "À propos", "pad.settings.poweredBy": "Propulsé par", "pad.importExport.import_export": "Importer/Exporter", - "pad.importExport.import": "Charger un texte ou un document", + "pad.importExport.import": "Téléverser un texte ou un document", "pad.importExport.importSuccessful": "Réussi !", "pad.importExport.export": "Exporter le bloc-notes actuel en :", "pad.importExport.exportetherpad": "Etherpad", @@ -133,7 +133,7 @@ "pad.modals.userdup.explanation": "Ce bloc-notes semble être ouvert dans plusieurs fenêtres sur cet ordinateur.", "pad.modals.userdup.advice": "Se reconnecter en utilisant plutôt cette fenêtre.", "pad.modals.unauth": "Non autorisé", - "pad.modals.unauth.explanation": "Vos autorisations ont été changées lors de l’affichage de cette page. Essayez de vous reconnecter.", + "pad.modals.unauth.explanation": "Vos autorisations ont changées lors de l’affichage de cette page. Essayez de vous reconnecter.", "pad.modals.looping.explanation": "Nous éprouvons des problèmes de communication au serveur de synchronisation.", "pad.modals.looping.cause": "Il est possible que vous soyez connecté avec un pare-feu ou un mandataire incompatible.", "pad.modals.initsocketfail": "Le serveur est introuvable.", @@ -147,12 +147,12 @@ "pad.modals.corruptPad.cause": "Cela peut être dû à une mauvaise configuration du serveur ou à un autre comportement inattendu. Veuillez contacter l’administrateur du service.", "pad.modals.deleted": "Supprimé.", "pad.modals.deleted.explanation": "Ce bloc-notes a été supprimé.", - "pad.modals.rateLimited": "Flot limité.", + "pad.modals.rateLimited": "Débit limité.", "pad.modals.rateLimited.explanation": "Vous avez envoyé trop de messages à ce bloc-notes, il vous a donc déconnecté.", "pad.modals.rejected.explanation": "Le serveur a rejeté un message qui a été envoyé par votre navigateur.", "pad.modals.rejected.cause": "Le serveur peut avoir été mis à jour pendant que vous regardiez le bloc-notes, ou il y a peut-être une anomalie dans Etherpad. Essayez de recharger la page.", "pad.modals.disconnected": "Vous avez été déconnecté.", - "pad.modals.disconnected.explanation": "La connexion au serveur a échoué.", + "pad.modals.disconnected.explanation": "La connexion au serveur a échoué", "pad.modals.disconnected.cause": "Il se peut que le serveur soit indisponible. Si le problème persiste, veuillez en informer l’administrateur du service.", "pad.share": "Partager ce bloc-notes", "pad.share.readonly": "Lecture seule", @@ -193,13 +193,13 @@ "pad.savedrevs.timeslider": "Vous pouvez voir les révisions enregistrées en ouvrant l’historique", "pad.userlist.entername": "Saisissez votre nom", "pad.userlist.unnamed": "anonyme", - "pad.editbar.clearcolors": "Effacer le surlignage par auteur dans tout le document ? Cette action ne peut être annulée.", + "pad.editbar.clearcolors": "Effacer le surlignage par auteur dans tout le document ? Cette action n'est pas réversible.", "pad.impexp.importbutton": "Importer maintenant", "pad.impexp.importing": "Importation en cours...", "pad.impexp.confirmimport": "Importer un fichier écrasera le contenu actuel du bloc-notes. Êtes-vous sûr de vouloir le faire ?", - "pad.impexp.convertFailed": "Nous ne pouvons pas importer ce fichier. Veuillez utiliser un autre format de document ou faire manuellement un copier/coller du texte brut", - "pad.impexp.padHasData": "Nous n’avons pas pu importer ce fichier parce que ce bloc-notes a déjà été modifié ; veuillez l’importer vers un nouveau bloc-notes.", - "pad.impexp.uploadFailed": "Le téléversement a échoué, veuillez réessayer.", + "pad.impexp.convertFailed": "Nous ne pouvons pas importer ce fichier. Veuillez utiliser un autre format de document ou faire manuellement", + "pad.impexp.padHasData": "Nous n’avons pas pu importer ce fichier parce que ce bloc-notes a déjà été modifié ; veuillez l’importer vers un nouveau bloc-notes", + "pad.impexp.uploadFailed": "Le téléversement a échoué, veuillez réessayer", "pad.impexp.importfailed": "Échec de l’import", "pad.impexp.copypaste": "Veuillez copier-coller", "pad.impexp.exportdisabled": "L’exportation au format {{type}} est désactivée. Veuillez contacter votre administrateur système pour plus de détails.", diff --git a/src/locales/gl.json b/src/locales/gl.json index 2384a32db..b602e7e89 100644 --- a/src/locales/gl.json +++ b/src/locales/gl.json @@ -46,7 +46,8 @@ "index.recentPadsEmpty": "Non se atoparon documentos recentes.", "index.generateNewPad": "Xerar un nome de documento ao chou", "index.labelPad": "Nome do documento (opcional)", - "index.createAndShareDocuments": "Crear e compartir documentos en tempo real", + "index.placeholderPadEnter": "Escribe un nome para o documento...", + "index.createAndShareDocuments": "Crea e comparte documentos en tempo real", "index.createAndShareDocumentsDescription": "Etherpad permite editar documentos de forma colaborativa en tempo real, de xeito semellante a un editor multixogador en directo que se executa no navegador.", "pad.toolbar.bold.title": "Grosa (Ctrl+B)", "pad.toolbar.italic.title": "Cursiva (Ctrl+I)", diff --git a/src/locales/ia.json b/src/locales/ia.json index 86773cc09..c26acdf20 100644 --- a/src/locales/ia.json +++ b/src/locales/ia.json @@ -37,33 +37,40 @@ "admin_settings.current_restart.value": "Reinitiar Etherpad", "admin_settings.current_save.value": "Salveguardar parametros", "admin_settings.page-title": "Parametros – Etherpad", - "index.newPad": "Nove pad", - "index.createOpenPad": "o crear/aperir un pad con le nomine:", - "index.openPad": "aperir un Pad existente con le nomine:", - "pad.toolbar.bold.title": "Grasse (Ctrl-B)", - "pad.toolbar.italic.title": "Italic (Ctrl-I)", - "pad.toolbar.underline.title": "Sublinear (Ctrl-U)", + "index.newPad": "Nove nota", + "index.createOpenPad": "Aperir le nota con le nomine", + "index.openPad": "aperir un nota existente con le nomine:", + "index.recentPads": "Notas recente", + "index.recentPadsEmpty": "Necun nota recente trovate.", + "index.generateNewPad": "Generar un nomine de nota aleatori", + "index.labelPad": "Nomine del nota (optional)", + "index.placeholderPadEnter": "Per favor insere un nomine de nota…", + "index.createAndShareDocuments": "Crear e condivider documentos in tempore real", + "index.createAndShareDocumentsDescription": "Etherpad permitte modificar documentos de maniera collaborative e in tempore real. Es un editor multi-usator in directo que se executa in tu navigator.", + "pad.toolbar.bold.title": "Grasse (Ctrl+B)", + "pad.toolbar.italic.title": "Italic (Ctrl+I)", + "pad.toolbar.underline.title": "Sublineate (Ctrl+U)", "pad.toolbar.strikethrough.title": "Barrate (Ctrl+5)", "pad.toolbar.ol.title": "Lista ordinate (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Lista non ordinate (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Indentar (TAB)", "pad.toolbar.unindent.title": "Disindentar (Shift+TAB)", - "pad.toolbar.undo.title": "Disfacer (Ctrl-Z)", - "pad.toolbar.redo.title": "Refacer (Ctrl-Y)", + "pad.toolbar.undo.title": "Disfacer (Ctrl+Z)", + "pad.toolbar.redo.title": "Refacer (Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "Rader colores de autor (Ctrl+Shift+C)", - "pad.toolbar.import_export.title": "Importar/exportar in differente formatos de file", + "pad.toolbar.import_export.title": "Importar/exportar inter differente formatos de file", "pad.toolbar.timeslider.title": "Glissa-tempore", - "pad.toolbar.savedRevision.title": "Version salveguardate", - "pad.toolbar.settings.title": "Configuration", - "pad.toolbar.embed.title": "Condivider e incorporar iste pad", + "pad.toolbar.savedRevision.title": "Salveguardar version", + "pad.toolbar.settings.title": "Parametros", + "pad.toolbar.embed.title": "Condivider e incorporar iste nota", "pad.toolbar.home.title": "Retro al initio", - "pad.toolbar.showusers.title": "Monstrar le usatores de iste pad", + "pad.toolbar.showusers.title": "Monstrar le usatores de iste nota", "pad.colorpicker.save": "Salveguardar", "pad.colorpicker.cancel": "Cancellar", "pad.loading": "Cargamento…", - "pad.noCookie": "Le cookie non pote esser trovate. Per favor permitte le cookies in tu navigator! Tu session e parametros non essera salveguardate inter visitas. Isto pote esser debite al facto que Etherpad ha essite includite in un iFrame in alcun navigatores. Assecura te que Etherpad es sure le mesme subdominio/dominio que su iFrame parente.", - "pad.permissionDenied": "Tu non ha le permission de acceder a iste pad", - "pad.settings.padSettings": "Configuration del pad", + "pad.noCookie": "Le cookie non pote esser trovate. Per favor permitte le cookies in tu navigator! Tu session e parametros non essera salveguardate inter visitas. In alcun navigatores, isto pote esser debite al facto que Etherpad ha essite includite in un iFrame. Assecura te que Etherpad es sur le mesme subdominio/dominio que su iFrame genitor.", + "pad.permissionDenied": "Tu non ha le permission de acceder a iste nota", + "pad.settings.padSettings": "Parametros del nota", "pad.settings.myView": "Mi vista", "pad.settings.stickychat": "Chat sempre visibile", "pad.settings.chatandusers": "Monstrar chat e usatores", @@ -73,14 +80,14 @@ "pad.settings.fontType": "Typo de litteras:", "pad.settings.fontType.normal": "Normal", "pad.settings.language": "Lingua:", - "pad.settings.deletePad": "Deler pad", - "pad.delete.confirm": "Es tu secur de voler deler iste pad?", + "pad.settings.deletePad": "Deler nota", + "pad.delete.confirm": "Es tu secur de voler deler iste nota?", "pad.settings.about": "A proposito", "pad.settings.poweredBy": "Actionate per", "pad.importExport.import_export": "Importar/Exportar", "pad.importExport.import": "Incargar qualcunque file de texto o documento", "pad.importExport.importSuccessful": "Succedite!", - "pad.importExport.export": "Exportar le pad actual como:", + "pad.importExport.export": "Exportar le nota actual como:", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Texto simple", @@ -89,12 +96,12 @@ "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.abiword.innerHTML": "Tu pote solmente importar files in formato de texto simple o HTML. Pro functionalitate de importation plus extense, installa AbiWord o LibreOffice.", "pad.modals.connected": "Connectite.", - "pad.modals.reconnecting": "Reconnexion a tu pad…", + "pad.modals.reconnecting": "Reconnexion a tu nota…", "pad.modals.forcereconnect": "Fortiar reconnexion", "pad.modals.reconnecttimer": "Tentativa de reconnexion in", "pad.modals.cancel": "Cancellar", "pad.modals.userdup": "Aperte in un altere fenestra", - "pad.modals.userdup.explanation": "Iste pad pare esser aperte in plus de un fenestra de navigator in iste computator.", + "pad.modals.userdup.explanation": "Iste nota pare esser aperte in plus de un fenestra de navigator in iste computator.", "pad.modals.userdup.advice": "Reconnecte pro usar iste fenestra.", "pad.modals.unauth": "Non autorisate", "pad.modals.unauth.explanation": "Tu permissiones ha cambiate durante que tu legeva iste pagina. Tenta reconnecter.", @@ -107,38 +114,38 @@ "pad.modals.slowcommit.cause": "Isto pote esser causate per problemas con le connexion al rete.", "pad.modals.badChangeset.explanation": "Un modification que tu ha facite ha essite classificate como incorrecte per le servitor de synchronisation.", "pad.modals.badChangeset.cause": "Isto pote esser causate per un configuration incorrecte del servitor o per alcun altere comportamento impreviste. Per favor contacta le administrator del servicio si tu pensa que se tracta de un error. Tenta reconnecter te pro continuar a modificar.", - "pad.modals.corruptPad.explanation": "Le pad al qual tu tenta acceder es corrumpite.", + "pad.modals.corruptPad.explanation": "Le nota al qual tu tenta acceder es corrumpite.", "pad.modals.corruptPad.cause": "Isto pote esser debite a un configuration incorrecte del servitor o a alcun altere comportamento impreviste. Per favor contacta le administrator del servicio.", "pad.modals.deleted": "Delite.", - "pad.modals.deleted.explanation": "Iste pad ha essite removite.", + "pad.modals.deleted.explanation": "Iste nota ha essite removite.", "pad.modals.rateLimited": "Frequentia limitate.", - "pad.modals.rateLimited.explanation": "Tu ha inviate troppo de messages a iste pad, dunque illo te ha disconnectite.", + "pad.modals.rateLimited.explanation": "Tu ha inviate troppo de messages a iste nota, dunque illo te ha disconnectite.", "pad.modals.rejected.explanation": "Le servitor ha rejectate un message que tu navigator ha inviate.", - "pad.modals.rejected.cause": "Es possibile que le servitor ha essite actualisate durante que tu legeva le pad, o que il ha un falta in Etherpad. Tenta recargar le pagina.", + "pad.modals.rejected.cause": "Es possibile que le servitor ha essite actualisate durante que tu legeva le nota, o que il ha un falta in Etherpad. Tenta recargar le pagina.", "pad.modals.disconnected": "Tu ha essite disconnectite.", "pad.modals.disconnected.explanation": "Le connexion al servitor ha essite perdite.", "pad.modals.disconnected.cause": "Le servitor pote esser indisponibile. Per favor notifica le administrator del servicio si isto continua a producer se.", - "pad.share": "Diffunder iste pad", + "pad.share": "Condivider iste nota", "pad.share.readonly": "Lectura solmente", "pad.share.link": "Ligamine", "pad.share.emebdcode": "Codice de incorporation", "pad.chat": "Chat", - "pad.chat.title": "Aperir le chat pro iste pad.", + "pad.chat.title": "Aperir le conversation pro iste nota.", "pad.chat.loadmessages": "Cargar plus messages", "pad.chat.stick.title": "Ancorar le chat sur le schermo", "pad.chat.writeMessage.placeholder": "Scribe tu message hic", - "timeslider.followContents": "Sequer le actualisationes de contento del pad", + "timeslider.followContents": "Sequer le nove contento del nota", "timeslider.pageTitle": "Glissa-tempore pro {{appTitle}}", - "timeslider.toolbar.returnbutton": "Retornar al pad", + "timeslider.toolbar.returnbutton": "Retornar al nota", "timeslider.toolbar.authors": "Autores:", "timeslider.toolbar.authorsList": "Nulle autor", "timeslider.toolbar.exportlink.title": "Exportar", "timeslider.exportCurrent": "Exportar le version actual como:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Salveguardate le {{day}} de {{month}} {{year}}", - "timeslider.playPause": "Reproducer/pausar le contento del pad", - "timeslider.backRevision": "Recular un version in iste pad", - "timeslider.forwardRevision": "Avantiar un version in iste pad", + "timeslider.playPause": "Reproducer/pausar le contento del nota", + "timeslider.backRevision": "Recular un version in iste nota", + "timeslider.forwardRevision": "Avantiar un version in iste nota", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januario", "timeslider.month.february": "februario", @@ -160,9 +167,9 @@ "pad.editbar.clearcolors": "Rader le colores de autor in tote le documento? Isto non pote esser disfacite", "pad.impexp.importbutton": "Importar ora", "pad.impexp.importing": "Importation in curso…", - "pad.impexp.confirmimport": "Le importation de un file superscribera le texto actual del pad. Es tu secur de voler continuar?", + "pad.impexp.confirmimport": "Le importation de un file superscribera le texto actual del nota. Es tu secur de voler continuar?", "pad.impexp.convertFailed": "Nos non ha potite importar iste file. Per favor usa un altere formato de documento o copia e colla le texto manualmente.", - "pad.impexp.padHasData": "Nos non ha potite importar iste file perque iste Pad ha jam habite cambiamentos. Per favor importa lo a un nove pad.", + "pad.impexp.padHasData": "Non es possibile importar iste file perque iste nota ha ja essite modificate. Per favor importa lo in un nove nota.", "pad.impexp.uploadFailed": "Le incargamento ha fallite. Per favor reproba.", "pad.impexp.importfailed": "Importation fallite", "pad.impexp.copypaste": "Per favor copia e colla", diff --git a/src/locales/ko.json b/src/locales/ko.json index d21b2d2f4..3e2a13d3f 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -66,6 +66,7 @@ "pad.toolbar.savedRevision.title": "판 저장", "pad.toolbar.settings.title": "설정", "pad.toolbar.embed.title": "이 패드를 공유하고 포함하기", + "pad.toolbar.home.title": "홈으로 돌아가기", "pad.toolbar.showusers.title": "이 패드의 사용자 보기", "pad.colorpicker.save": "저장", "pad.colorpicker.cancel": "취소", diff --git a/src/locales/ru.json b/src/locales/ru.json index 92e9b8352..99e622f96 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -53,8 +53,11 @@ "admin_settings.current_save.value": "Сохранить настройки", "admin_settings.page-title": "Настройки — Etherpad", "index.newPad": "Создать", - "index.createOpenPad": "или создать/открыть документ с именем:", + "index.createOpenPad": "Открыть документ по имени", "index.openPad": "откройте существующий документ с именем:", + "index.recentPads": "Последние документы", + "index.labelPad": "Название документа (необязательно)", + "index.placeholderPadEnter": "Введите название документа…", "pad.toolbar.bold.title": "Полужирный (Ctrl-B)", "pad.toolbar.italic.title": "Курсив (Ctrl-I)", "pad.toolbar.underline.title": "подчёркивание (Ctrl-U)", diff --git a/src/locales/sw.json b/src/locales/sw.json index 33d24add2..c45ed08e9 100644 --- a/src/locales/sw.json +++ b/src/locales/sw.json @@ -3,7 +3,8 @@ "authors": [ "Andibecker", "Edwingudfriend", - "Muddyb" + "Muddyb", + "Samuel Kiongo" ] }, "admin.page-title": "Dashibodi ya Usimamizi - Etherpad", @@ -42,6 +43,7 @@ "index.newPad": "Pad Mpya", "index.createOpenPad": "au tunga/fungua Pad yenye jina:", "index.openPad": "fungua Pad iliyopo na jina:", + "index.placeholderPadEnter": "Tafadhali weka jina la mtumiaji.", "pad.toolbar.bold.title": "Koozesha (Ctrl+B)", "pad.toolbar.italic.title": "Mlalo (Ctrl+I)", "pad.toolbar.underline.title": "Pigia mstari (Ctrl+U)", From f92851243405276904babf23e95e91b2c6abcb2b Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 11 Aug 2025 14:03:48 +0200 Subject: [PATCH 10/33] Localisation updates from https://translatewiki.net. --- src/locales/ar.json | 9 ++++++++- src/locales/ia.json | 4 ++-- src/locales/ko.json | 14 +++++++------- src/locales/pms.json | 9 ++++++++- src/locales/ps.json | 2 +- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/locales/ar.json b/src/locales/ar.json index 9e74210b2..787c0422f 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -49,8 +49,15 @@ "admin_settings.current_save.value": "حفظ الإعدادات", "admin_settings.page-title": "الإعدادات - Etherpad", "index.newPad": "باد جديد", - "index.createOpenPad": "أو صنع/فتح باد بوضع اسمه:", + "index.createOpenPad": "افتح الوسادة حسب الاسم", "index.openPad": "افتح باد موجودة بالاسم:", + "index.recentPads": "الوسادات الأخيرة", + "index.recentPadsEmpty": "لم يتم العثور على أي وسادات حديثة.", + "index.generateNewPad": "إنشاء اسم لوحة عشوائي", + "index.labelPad": "اسم الوسادة (اختياري)", + "index.placeholderPadEnter": "الرجاء إدخال اسم الوسادة...", + "index.createAndShareDocuments": "إنشاء المستندات ومشاركتها في الوقت الفعلي", + "index.createAndShareDocumentsDescription": "يتيح لك Etherpad تحرير المستندات بشكل تعاوني في الوقت الفعلي، تمامًا مثل محرر متعدد اللاعبين مباشر يعمل في متصفحك.", "pad.toolbar.bold.title": "سميك (Ctrl+B)", "pad.toolbar.italic.title": "مائل (Ctrl+I)", "pad.toolbar.underline.title": "تسطير (Ctrl+U)", diff --git a/src/locales/ia.json b/src/locales/ia.json index c26acdf20..9023a76a6 100644 --- a/src/locales/ia.json +++ b/src/locales/ia.json @@ -94,7 +94,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "Tu pote solmente importar files in formato de texto simple o HTML. Pro functionalitate de importation plus extense, installa AbiWord o LibreOffice.", + "pad.importExport.abiword.innerHTML": "Es possibile importar solmente le files in formato de texto simple o HTML. Pro functionalitate de importation plus extense, installa AbiWord o LibreOffice.", "pad.modals.connected": "Connectite.", "pad.modals.reconnecting": "Reconnexion a tu nota…", "pad.modals.forcereconnect": "Fortiar reconnexion", @@ -168,7 +168,7 @@ "pad.impexp.importbutton": "Importar ora", "pad.impexp.importing": "Importation in curso…", "pad.impexp.confirmimport": "Le importation de un file superscribera le texto actual del nota. Es tu secur de voler continuar?", - "pad.impexp.convertFailed": "Nos non ha potite importar iste file. Per favor usa un altere formato de documento o copia e colla le texto manualmente.", + "pad.impexp.convertFailed": "Non esseva possibile importar iste file. Per favor usa un altere formato de documento o copia e colla le texto manualmente.", "pad.impexp.padHasData": "Non es possibile importar iste file perque iste nota ha ja essite modificate. Per favor importa lo in un nove nota.", "pad.impexp.uploadFailed": "Le incargamento ha fallite. Per favor reproba.", "pad.impexp.importfailed": "Importation fallite", diff --git a/src/locales/ko.json b/src/locales/ko.json index 3e2a13d3f..efe471aee 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -42,8 +42,8 @@ "admin_plugins_info.version_number": "버전 번호", "admin_settings": "설정", "admin_settings.current": "현재 구성", - "admin_settings.current_example-devel": "예시 개발용 설정 템플릿", - "admin_settings.current_example-prod": "예시 운영용 설정 템플릿", + "admin_settings.current_example-devel": "예시 개발용 설정 틀", + "admin_settings.current_example-prod": "예시 운영용 설정 틀", "admin_settings.current_restart.value": "이더패드 다시 시작", "admin_settings.current_save.value": "설정 저장", "admin_settings.page-title": "설정 - 이더패드", @@ -84,8 +84,8 @@ "pad.settings.fontType.normal": "보통", "pad.settings.language": "언어:", "pad.settings.deletePad": "패드 삭제", - "pad.delete.confirm": "이 패드를 삭제하시겠습니까?", - "pad.settings.about": "소개", + "pad.delete.confirm": "정말로 이 패드를 삭제하겠습니까?", + "pad.settings.about": "정보", "pad.settings.poweredBy": "제공:", "pad.importExport.import_export": "가져오기/내보내기", "pad.importExport.import": "텍스트 파일이나 문서 올리기", @@ -94,11 +94,11 @@ "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "일반 텍스트", - "pad.importExport.exportword": "마이크로소프트 워드", + "pad.importExport.exportword": "Microsoft 워드", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format, 개방형 문서 형식)", "pad.importExport.abiword.innerHTML": "일반 텍스트나 HTML 형식으로만 가져올 수 있습니다. 고급 가져오기 기능에 대해서는 AbiWord를 설치하세요.", - "pad.modals.connected": "연결했습니다.", + "pad.modals.connected": "연결함.", "pad.modals.reconnecting": "내 패드에 다시 연결하는 중...", "pad.modals.forcereconnect": "강제로 다시 연결", "pad.modals.reconnecttimer": "다시 접속 시도 중", @@ -107,7 +107,7 @@ "pad.modals.userdup.explanation": "이 패드는 이 컴퓨터에 하나 이상의 브라우저 창에서 열린 것 같습니다.", "pad.modals.userdup.advice": "대신 이 창을 사용해 다시 연결합니다.", "pad.modals.unauth": "권한이 없음", - "pad.modals.unauth.explanation": "이 페이지를 보는 동안 권한이 바뀌었습니다. 연결을 다시 시도하세요.", + "pad.modals.unauth.explanation": "이 문서를 보는 동안 권한이 바뀌었습니다. 연결을 다시 시도하세요.", "pad.modals.looping.explanation": "동기화 서버와 통신 문제가 있습니다.", "pad.modals.looping.cause": "아마 호환되지 않는 방화벽이나 프록시를 통해 연결되어 있습니다.", "pad.modals.initsocketfail": "서버에 연결할 수 없습니다.", diff --git a/src/locales/pms.json b/src/locales/pms.json index d3270f81d..cd0410b0b 100644 --- a/src/locales/pms.json +++ b/src/locales/pms.json @@ -38,8 +38,15 @@ "admin_settings.current_save.value": "Argistré ij paràmeter", "admin_settings.page-title": "Paràmeter - Etherpad", "index.newPad": "Feuj neuv", - "index.createOpenPad": "o creé/duverté un feuj antitolà:", + "index.createOpenPad": "Duverté ël blochèt con sò nòm", "index.openPad": "duverté un Pad esistent con ël nòm:", + "index.recentPads": "Blochèt recent", + "index.recentPadsEmpty": "Gnun blochèt recent trovà.", + "index.generateNewPad": "Generé un nòm ëd blochèt a l'ancàpit", + "index.labelPad": "Nòm dël blochèt (facoltativ)", + "index.placeholderPadEnter": "Për piasì, ch'a anserissa un nòm ëd blochèt...", + "index.createAndShareDocuments": "Creé e partagé dij document an temp real", + "index.createAndShareDocumentsDescription": "Etherpad a-j përmet ëd modifiché dij document an manera colaborativa an temp real, un pò coma n'editor multi-giugador che a marcia an sò navigador.", "pad.toolbar.bold.title": "Grassèt (Ctrl+B)", "pad.toolbar.italic.title": "Corsiv (Ctrl+I)", "pad.toolbar.underline.title": "Sotlignà (Ctrl+U)", diff --git a/src/locales/ps.json b/src/locales/ps.json index 59ee52f10..bad3d5f66 100644 --- a/src/locales/ps.json +++ b/src/locales/ps.json @@ -6,7 +6,7 @@ ] }, "index.newPad": "نوې ليکچه", - "index.createOpenPad": "يا په همدې نوم يوه نوې ليکچه جوړول/پرانېستل:", + "index.createOpenPad": "ليکچه د نوم له مخې پرانېستل", "pad.toolbar.bold.title": "زغرد (Ctrl-B)", "pad.toolbar.italic.title": "رېوند (Ctrl-I)", "pad.toolbar.underline.title": "لرکرښن (Ctrl+U)", From c1d214300d506872663e9c48fb904a1f00a053e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:21:29 +0200 Subject: [PATCH 11/33] build(deps): bump actions/checkout from 4 to 5 (#7067) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/backend-tests.yml | 8 ++++---- .github/workflows/build-and-deploy-docs.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dependency-review.yml | 2 +- .github/workflows/docker.yml | 4 ++-- .github/workflows/frontend-admin-tests.yml | 2 +- .github/workflows/frontend-tests.yml | 6 +++--- .github/workflows/load-test.yml | 6 +++--- .github/workflows/perform-type-check.yml | 2 +- .github/workflows/rate-limit.yml | 2 +- .github/workflows/release.yml | 4 ++-- .github/workflows/upgrade-from-latest-release.yml | 4 ++-- .github/workflows/windows.yml | 2 +- 13 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index 6c5247670..575de6d57 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: @@ -88,7 +88,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: @@ -160,7 +160,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: @@ -217,7 +217,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/build-and-deploy-docs.yml b/.github/workflows/build-and-deploy-docs.yml index eab0eec43..43cbfccdd 100644 --- a/.github/workflows/build-and-deploy-docs.yml +++ b/.github/workflows/build-and-deploy-docs.yml @@ -32,7 +32,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup Pages uses: actions/configure-pages@v5 - uses: pnpm/action-setup@v4 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 94dd1ac75..46476c3ca 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 9a9dcfebb..662f3bbaa 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -15,6 +15,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: 'Dependency Review' uses: actions/dependency-review-action@v4 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 81be50e4f..81ba26344 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Check out - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: etherpad @@ -123,7 +123,7 @@ jobs: enable-url-completion: true - name: Check out if: github.event_name == 'push' && github.ref == 'refs/heads/develop' - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: ether-charts repository: ether/ether-charts diff --git a/.github/workflows/frontend-admin-tests.yml b/.github/workflows/frontend-admin-tests.yml index cb00f3332..d7fd22048 100644 --- a/.github/workflows/frontend-admin-tests.yml +++ b/.github/workflows/frontend-admin-tests.yml @@ -28,7 +28,7 @@ jobs: printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}-node${{ matrix.node }}' - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/frontend-tests.yml b/.github/workflows/frontend-tests.yml index d6238ed1f..2a00bedc3 100644 --- a/.github/workflows/frontend-tests.yml +++ b/.github/workflows/frontend-tests.yml @@ -22,7 +22,7 @@ jobs: printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}' - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: @@ -96,7 +96,7 @@ jobs: printf %s\\n '::set-output name=name::${{ github.workflow }} - ${{ github.job }}' printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}' - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: 22 @@ -169,7 +169,7 @@ jobs: printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}' - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/load-test.yml b/.github/workflows/load-test.yml index 16a783b18..1661d1c39 100644 --- a/.github/workflows/load-test.yml +++ b/.github/workflows/load-test.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: @@ -68,7 +68,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: @@ -139,7 +139,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/perform-type-check.yml b/.github/workflows/perform-type-check.yml index fb5f6d3c8..6543041f6 100644 --- a/.github/workflows/perform-type-check.yml +++ b/.github/workflows/perform-type-check.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: node-version: 20 diff --git a/.github/workflows/rate-limit.yml b/.github/workflows/rate-limit.yml index 3b3417864..521e007ac 100644 --- a/.github/workflows/rate-limit.yml +++ b/.github/workflows/rate-limit.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9ec1cbdae..52f58012f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: ether/etherpad-lite path: etherpad @@ -37,7 +37,7 @@ jobs: git checkout develop git reset --hard origin/develop - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: ether/ether.github.com path: ether.github.com diff --git a/.github/workflows/upgrade-from-latest-release.yml b/.github/workflows/upgrade-from-latest-release.yml index a06c098fe..dac366e0e 100644 --- a/.github/workflows/upgrade-from-latest-release.yml +++ b/.github/workflows/upgrade-from-latest-release.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Check out latest release - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: ref: develop #FIXME change to master when doing release - @@ -97,7 +97,7 @@ jobs: - name: Install all dependencies and symlink for ep_etherpad-lite run: ./bin/installDeps.sh - # Because actions/checkout@v4 is called with "ref: master" and without + # Because actions/checkout@v5 is called with "ref: master" and without # "fetch-depth: 0", the local clone does not have the ${GITHUB_SHA} # commit. Fetch ${GITHUB_REF} to get the ${GITHUB_SHA} commit. Note that a # plain "git fetch" only fetches "normal" references (refs/heads/* and diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 3b56b8452..6a1494be1 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -31,7 +31,7 @@ jobs: zip - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - uses: actions/setup-node@v4 with: From a9c91ac0d4d739ecfb209f68937a7fcd486a6fe5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:21:38 +0200 Subject: [PATCH 12/33] build(deps): bump awalsh128/cache-apt-pkgs-action from 1.5.1 to 1.5.3 (#7068) Bumps [awalsh128/cache-apt-pkgs-action](https://github.com/awalsh128/cache-apt-pkgs-action) from 1.5.1 to 1.5.3. - [Release notes](https://github.com/awalsh128/cache-apt-pkgs-action/releases) - [Commits](https://github.com/awalsh128/cache-apt-pkgs-action/compare/v1.5.1...v1.5.3) --- updated-dependencies: - dependency-name: awalsh128/cache-apt-pkgs-action dependency-version: 1.5.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/backend-tests.yml | 4 ++-- .github/workflows/upgrade-from-latest-release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index 575de6d57..bc910a8c5 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -53,7 +53,7 @@ jobs: run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.1 + uses: awalsh128/cache-apt-pkgs-action@v1.5.3 with: packages: libreoffice libreoffice-pdfimport version: 1.0 @@ -113,7 +113,7 @@ jobs: run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.1 + uses: awalsh128/cache-apt-pkgs-action@v1.5.3 with: packages: libreoffice libreoffice-pdfimport version: 1.0 diff --git a/.github/workflows/upgrade-from-latest-release.yml b/.github/workflows/upgrade-from-latest-release.yml index dac366e0e..37214427f 100644 --- a/.github/workflows/upgrade-from-latest-release.yml +++ b/.github/workflows/upgrade-from-latest-release.yml @@ -43,7 +43,7 @@ jobs: - name: Only install direct dependencies run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.1 + uses: awalsh128/cache-apt-pkgs-action@v1.5.3 with: packages: libreoffice libreoffice-pdfimport version: 1.0 @@ -62,7 +62,7 @@ jobs: run: pnpm config set auto-install-peers false - name: Install libreoffice - uses: awalsh128/cache-apt-pkgs-action@v1.5.1 + uses: awalsh128/cache-apt-pkgs-action@v1.5.3 with: packages: libreoffice libreoffice-pdfimport version: 1.0 From 4c9bce73cece6ea44448b2e926b240a2f1ad3ebe Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+samtv12345@users.noreply.github.com> Date: Tue, 12 Aug 2025 21:44:28 +0200 Subject: [PATCH 13/33] chore: fixed recentPads being null --- src/node/hooks/express/specialpages.ts | 2 -- src/static/js/pad_userlist.ts | 18 ++++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/node/hooks/express/specialpages.ts b/src/node/hooks/express/specialpages.ts index 5f892ada6..8d42a43bb 100644 --- a/src/node/hooks/express/specialpages.ts +++ b/src/node/hooks/express/specialpages.ts @@ -70,13 +70,11 @@ exports.expressPreSession = async (hookName:string, {app}:ArgsExpressType) => { } - console.log("Favicon is", settings.favicon) const fns = [ ...(settings.favicon ? [path.resolve(settings.root, settings.favicon)] : []), settings.skinName && path.join(settings.root, 'src', 'static', 'skins', settings.skinName, 'favicon.ico'), path.join(settings.root, 'src', 'static', 'favicon.ico'), ].filter(f=>f != null); - console.log('FNS are', fns) for (const fn of fns) { try { await fsp.access(fn, fs.constants.R_OK); diff --git a/src/static/js/pad_userlist.ts b/src/static/js/pad_userlist.ts index 3bed27ab3..85bb32a98 100644 --- a/src/static/js/pad_userlist.ts +++ b/src/static/js/pad_userlist.ts @@ -489,15 +489,17 @@ const paduserlist = (() => { online++; } } - const recentPadsList = JSON.parse(localStorage.getItem('recentPads')); - const pathSegments = window.location.pathname.split('/'); - const padName = pathSegments[pathSegments.length - 1]; - const existingPad = recentPadsList.find((pad) => pad.name === padName); - if (existingPad) { - existingPad.members = online; - } - localStorage.setItem('recentPads', JSON.stringify(recentPadsList)); + if (localStorage.getItem('recentPads') != null) { + const recentPadsList = JSON.parse(localStorage.getItem('recentPads')); + const pathSegments = window.location.pathname.split('/'); + const padName = pathSegments[pathSegments.length - 1]; + const existingPad = recentPadsList.find((pad) => pad.name === padName); + if (existingPad) { + existingPad.members = online; + } + localStorage.setItem('recentPads', JSON.stringify(recentPadsList)); + } $('#online_count').text(online); From 52f8c2df8c39cab299e33093d3fbcc697572fd48 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 14 Aug 2025 14:04:18 +0200 Subject: [PATCH 14/33] Localisation updates from https://translatewiki.net. --- src/locales/ru.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/locales/ru.json b/src/locales/ru.json index 99e622f96..8edfd81d8 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -56,8 +56,12 @@ "index.createOpenPad": "Открыть документ по имени", "index.openPad": "откройте существующий документ с именем:", "index.recentPads": "Последние документы", + "index.recentPadsEmpty": "Свежих документов не найдено.", + "index.generateNewPad": "Создать случайное имя документа", "index.labelPad": "Название документа (необязательно)", "index.placeholderPadEnter": "Введите название документа…", + "index.createAndShareDocuments": "Создать и поделиться документами в режиме реального времени", + "index.createAndShareDocumentsDescription": "Etherpad позволяет вам совместно редактировать документы в режиме реального времени, подобно многопользовательскому редактору, работающему в вашем браузере.", "pad.toolbar.bold.title": "Полужирный (Ctrl-B)", "pad.toolbar.italic.title": "Курсив (Ctrl-I)", "pad.toolbar.underline.title": "подчёркивание (Ctrl-U)", From 43ceda1bfd887450e8c08e7739bdc44ad14269e9 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 18 Aug 2025 14:04:18 +0200 Subject: [PATCH 15/33] Localisation updates from https://translatewiki.net. --- src/locales/be-tarask.json | 7 ++- src/locales/el.json | 2 + src/locales/it.json | 34 +++++++++++ src/locales/nl.json | 118 ++++++++++++++++++------------------- 4 files changed, 101 insertions(+), 60 deletions(-) diff --git a/src/locales/be-tarask.json b/src/locales/be-tarask.json index e59d2c4da..095997695 100644 --- a/src/locales/be-tarask.json +++ b/src/locales/be-tarask.json @@ -41,8 +41,13 @@ "admin_settings.current_save.value": "Захаваць налады", "admin_settings.page-title": "Налады — Etherpad", "index.newPad": "Стварыць", - "index.createOpenPad": "ці тварыць/адкрыць дакумэнт з назвай:", + "index.createOpenPad": "Адкрыць дакумэнт паводле назвы", "index.openPad": "адкрыць існы Нататнік з назваю:", + "index.recentPads": "Нядаўнія дакумэнты", + "index.recentPadsEmpty": "Нядаўнія дакумэнты ня знойдзеныя.", + "index.generateNewPad": "Стварыць выпадковую назву дакумэнта", + "index.labelPad": "Назва дакумэнта (неабавязкова)", + "index.placeholderPadEnter": "Калі ласка, увядзіце назву дакумэнта…", "pad.toolbar.bold.title": "Тоўсты (Ctrl-B)", "pad.toolbar.italic.title": "Курсіў (Ctrl-I)", "pad.toolbar.underline.title": "Падкрэсьліваньне (Ctrl-U)", diff --git a/src/locales/el.json b/src/locales/el.json index 80fef9b34..0ebcdf077 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -4,6 +4,7 @@ "Evropi", "Geraki", "Glavkos", + "Jimkats", "Monopatis", "Norhorn", "Papspyr", @@ -61,6 +62,7 @@ "pad.toolbar.savedRevision.title": "Αποθήκευση Αναθεώρησης", "pad.toolbar.settings.title": "Ρυθμίσεις", "pad.toolbar.embed.title": "Διαμοίραση και Ενσωμάτωση αυτού του κοινόχρηστου πίνακα", + "pad.toolbar.home.title": "Επιστροφή στην αρχή", "pad.toolbar.showusers.title": "Εμφάνιση των χρηστών αυτού του κοινόχρηστου πίνακα", "pad.colorpicker.save": "Αποθήκευση", "pad.colorpicker.cancel": "Ακύρωση", diff --git a/src/locales/it.json b/src/locales/it.json index cd8d453f5..7e0647494 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -2,6 +2,7 @@ "@metadata": { "authors": [ "Ajeje Brazorf", + "Albano", "Beta16", "Gianfranco", "Jack", @@ -16,18 +17,44 @@ "admin_plugins": "Gestione plugin", "admin_plugins.available": "Plugin disponibili", "admin_plugins.available_not-found": "Nessun plugin trovato.", + "admin_plugins.available_fetching": "Recupero in corso…", "admin_plugins.available_install.value": "Installa", + "admin_plugins.available_search.placeholder": "Cerca i plugin da installare", + "admin_plugins.description": "Descrizione", + "admin_plugins.installed": "Plugin installati", + "admin_plugins.installed_fetching": "Recupero dei plugin installati…", + "admin_plugins.installed_nothing": "Non hai ancora installato alcun plugin.", "admin_plugins.installed_uninstall.value": "Disinstalla", "admin_plugins.last-update": "Ultimo aggiornamento", "admin_plugins.name": "Nome", + "admin_plugins.page-title": "Gestore dei plugin - Etherpad", "admin_plugins.version": "Versione", + "admin_plugins_info": "Informazioni sulla risoluzione dei problemi", + "admin_plugins_info.hooks_client": "Hook lato client", + "admin_plugins_info.hooks_server": "Hook lato server", + "admin_plugins_info.parts": "Parti installate", + "admin_plugins_info.plugins": "Plugin installati", + "admin_plugins_info.page-title": "Informazioni sul plugin - Etherpad", + "admin_plugins_info.version": "Versione di Etherpad", + "admin_plugins_info.version_latest": "Ultima versione disponibile", + "admin_plugins_info.version_number": "Numero di versione", "admin_settings": "Impostazioni", + "admin_settings.current": "Configurazione attuale", + "admin_settings.current_example-devel": "Esempio di modello di impostazioni di sviluppo", + "admin_settings.current_example-prod": "Esempio di modello di impostazioni di produzione", + "admin_settings.current_restart.value": "Riavvia Etherpad", "admin_settings.current_save.value": "Salva impostazioni", + "admin_settings.page-title": "Impostazioni - Etherpad", "index.newPad": "Nuovo pad", "index.createOpenPad": "Apri pad per nome", "index.openPad": "apri un Pad esistente col nome:", + "index.recentPads": "Pad recenti", + "index.recentPadsEmpty": "Nessun Pad recente trovato.", + "index.generateNewPad": "Genera un nome casuale per il pad", "index.labelPad": "Nome pad (facoltativo)", + "index.placeholderPadEnter": "Inserisci un nome per il pad...", "index.createAndShareDocuments": "Crea e condividi documenti in tempo reale", + "index.createAndShareDocumentsDescription": "Etherpad consente di modificare documenti in modo collaborativo e in tempo reale, proprio come un editor multi-player in tempo reale eseguito nel browser.", "pad.toolbar.bold.title": "Grassetto (Ctrl+B)", "pad.toolbar.italic.title": "Corsivo (Ctrl+I)", "pad.toolbar.underline.title": "Sottolineato (Ctrl+U)", @@ -61,6 +88,8 @@ "pad.settings.fontType": "Tipo di carattere:", "pad.settings.fontType.normal": "Normale", "pad.settings.language": "Lingua:", + "pad.settings.deletePad": "Elimina Pad", + "pad.delete.confirm": "Vuoi veramente cancellare questo pad?", "pad.settings.about": "Informazioni", "pad.settings.poweredBy": "Realizzato con", "pad.importExport.import_export": "Importazione/esportazione", @@ -97,6 +126,10 @@ "pad.modals.corruptPad.cause": "Ciò potrebbe essere causato da una errata configurazione del server o qualche altro comportamento imprevisto. Si prega di contattare l'amministratore del servizio.", "pad.modals.deleted": "Cancellato.", "pad.modals.deleted.explanation": "Questo Pad è stato rimosso.", + "pad.modals.rateLimited": "Limite di richieste.", + "pad.modals.rateLimited.explanation": "Hai inviato troppi messaggi a questo pad e la connessione è stata interrotta.", + "pad.modals.rejected.explanation": "Il server ha rifiutato un messaggio inviato dal tuo browser.", + "pad.modals.rejected.cause": "Il server potrebbe essere stato aggiornato mentre stavi visualizzando il pad, oppure potrebbe esserci un bug in Etherpad. Prova a ricaricare la pagina.", "pad.modals.disconnected": "Sei stato disconnesso.", "pad.modals.disconnected.explanation": "La connessione al server è stata persa", "pad.modals.disconnected.cause": "Il server potrebbe essere non disponibile. Informa l'amministrazione del servizio se il problema persiste.", @@ -109,6 +142,7 @@ "pad.chat.loadmessages": "Carica altri messaggi", "pad.chat.stick.title": "Ancora chat nello schermo", "pad.chat.writeMessage.placeholder": "Scrivi il tuo messaggio qui", + "timeslider.followContents": "Segui gli aggiornamenti sui contenuti del pad", "timeslider.pageTitle": "Cronologia {{appTitle}}", "timeslider.toolbar.returnbutton": "Ritorna al Pad", "timeslider.toolbar.authors": "Autori:", diff --git a/src/locales/nl.json b/src/locales/nl.json index 0ab9813b3..fb63a0fb0 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -18,21 +18,21 @@ "woeterman94" ] }, - "admin.page-title": "Admin Dashboard - Etherpad", - "admin_plugins": "Plugin Beheer", - "admin_plugins.available": "Beschikbare plugins", - "admin_plugins.available_not-found": "Geen plugins gevonden.", + "admin.page-title": "Beheerdashboard – Etherpad", + "admin_plugins": "Beheer plug-ins", + "admin_plugins.available": "Beschikbare plug-ins", + "admin_plugins.available_not-found": "Geen plug-ins gevonden.", "admin_plugins.available_fetching": "Ophalen…", "admin_plugins.available_install.value": "Installeren", - "admin_plugins.available_search.placeholder": "Zoek achter plugins om te installeren", + "admin_plugins.available_search.placeholder": "Zoeken naar plug-ins om te installeren", "admin_plugins.description": "Beschrijving", - "admin_plugins.installed": "Geïnstalleerd plugins", - "admin_plugins.installed_fetching": "Geïnstalleerd plugins worden opgehaald…", - "admin_plugins.installed_nothing": "Je hebt nog geen plugins geïnstalleerd.", + "admin_plugins.installed": "Geïnstalleerde plug-ins", + "admin_plugins.installed_fetching": "Geïnstalleerd plug-ins worden opgehaald…", + "admin_plugins.installed_nothing": "U hebt nog geen plug-ins geïnstalleerd.", "admin_plugins.installed_uninstall.value": "Verwijderen", - "admin_plugins.last-update": "Laatste update", + "admin_plugins.last-update": "Laatst bijgewerkt", "admin_plugins.name": "Naam", - "admin_plugins.page-title": "Plugin beheer - Etherpad", + "admin_plugins.page-title": "Beheer plug-ins – Etherpad", "admin_plugins.version": "Versie", "admin_plugins_info": "Probleemoplossingsinformatie", "admin_plugins_info.hooks": "Geïnstalleerde hooks", @@ -51,36 +51,36 @@ "admin_settings.current_restart.value": "Herstart Etherpad", "admin_settings.current_save.value": "Bewaar instellingen", "admin_settings.page-title": "Instellingen - Etherpad", - "index.newPad": "Nieuw pad", - "index.createOpenPad": "Open een pad met de naam", - "index.openPad": "open een bestaand pad met de naam:", - "index.generateNewPad": "Genereer willekeurige padnaam", - "index.labelPad": "Padnaam (optioneel)", + "index.newPad": "Nieuwe notitie", + "index.createOpenPad": "Open een notitie met de naam", + "index.openPad": "open een bestaande notitie met de naam:", + "index.generateNewPad": "Genereer willekeurige notitienaam", + "index.labelPad": "Notitienaam (optioneel)", "index.createAndShareDocuments": "Maak en deel documenten in realtime", - "pad.toolbar.bold.title": "Vet (Ctrl-B)", - "pad.toolbar.italic.title": "Cursief (Ctrl-I)", - "pad.toolbar.underline.title": "Onderstrepen (Ctrl-U)", + "pad.toolbar.bold.title": "Vet (Ctrl+B)", + "pad.toolbar.italic.title": "Cursief (Ctrl+I)", + "pad.toolbar.underline.title": "Onderstrepen (Ctrl+U)", "pad.toolbar.strikethrough.title": "Doorhalen (Ctrl+5)", "pad.toolbar.ol.title": "Geordende lijst (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Ongeordende lijst (Ctrl+Shift+L)", - "pad.toolbar.indent.title": "Inspringen (Tab)", - "pad.toolbar.unindent.title": "Uitspringen (Shift+Tab)", - "pad.toolbar.undo.title": "Ongedaan maken (Ctrl-Z)", - "pad.toolbar.redo.title": "Opnieuw uitvoeren (Ctrl-Y)", + "pad.toolbar.indent.title": "Inspringen (TAB)", + "pad.toolbar.unindent.title": "Uitspringen (Shift+TAB)", + "pad.toolbar.undo.title": "Ongedaan maken (Ctrl+Z)", + "pad.toolbar.redo.title": "Opnieuw uitvoeren (Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "Kleuren auteurs wissen (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Naar/van andere opmaak exporteren/importeren", "pad.toolbar.timeslider.title": "Tijdlijn", "pad.toolbar.savedRevision.title": "Versie opslaan", "pad.toolbar.settings.title": "Instellingen", - "pad.toolbar.embed.title": "Pad delen en insluiten", + "pad.toolbar.embed.title": "Deze notitie delen en insluiten", "pad.toolbar.home.title": "Terug naar de startpagina", - "pad.toolbar.showusers.title": "Gebruikers van dit pad weergeven", + "pad.toolbar.showusers.title": "Gebruikers van deze notitie weergeven", "pad.colorpicker.save": "Opslaan", "pad.colorpicker.cancel": "Annuleren", "pad.loading": "Bezig met laden…", "pad.noCookie": "Er kon geen cookie gevonden worden. Zorg ervoor dat uw browser cookies accepteert. Uw sessie en instellingen worden tussen bezoeken niet opgeslagen. Dit kan te wijten zijn aan het feit dat Etherpad in sommige browsers wordt opgenomen in een iFrame. Zorg ervoor dat Etherpad zich op hetzelfde subdomein/domein bevindt als het bovenliggende iFrame.", - "pad.permissionDenied": "U hebt geen rechten om dit pad te bekijken", - "pad.settings.padSettings": "Padinstellingen", + "pad.permissionDenied": "U hebt geen toestemming om deze notitie te openen", + "pad.settings.padSettings": "Notitie-instellingen", "pad.settings.myView": "Mijn overzicht", "pad.settings.stickychat": "Chat altijd zichtbaar", "pad.settings.chatandusers": "Chat en gebruikers weergeven", @@ -90,72 +90,72 @@ "pad.settings.fontType": "Lettertype:", "pad.settings.fontType.normal": "Normaal", "pad.settings.language": "Taal:", - "pad.settings.deletePad": "Pad verwijderen", - "pad.delete.confirm": "Wilt u dit pad echt verwijderen?", + "pad.settings.deletePad": "Notitie verwijderen", + "pad.delete.confirm": "Wilt u deze notitie echt verwijderen?", "pad.settings.about": "Over", - "pad.settings.poweredBy": "Aangedreven door", + "pad.settings.poweredBy": "Mogelijk gemaakt door", "pad.importExport.import_export": "Importeren/exporteren", "pad.importExport.import": "Tekstbestand of document uploaden", - "pad.importExport.importSuccessful": "Afgerond", - "pad.importExport.export": "Huidig pad exporteren als", + "pad.importExport.importSuccessful": "Gelukt!", + "pad.importExport.export": "Huidige notitie exporteren als:", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Tekst zonder opmaak", "pad.importExport.exportword": "Microsoft Word", - "pad.importExport.exportpdf": "Pdf", + "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.abiword.innerHTML": "U kunt alleen importeren vanuit tekst zonder opmaak of met HTML-opmaak. Installeer AbiWord of LibreOffice om meer geavanceerde importmogelijkheden te krijgen.", "pad.modals.connected": "Verbonden.", - "pad.modals.reconnecting": "Opnieuw verbinding maken met uw pad…", + "pad.modals.reconnecting": "De verbinding met uw notitie wordt hersteld…", "pad.modals.forcereconnect": "Opnieuw verbinden", - "pad.modals.reconnecttimer": "Proberen te verbinden over", + "pad.modals.reconnecttimer": "Nieuwe verbindingspoging over", "pad.modals.cancel": "Annuleren", "pad.modals.userdup": "In een ander venster geopend", - "pad.modals.userdup.explanation": "Dit pad is meer dan één keer geopend in een browservenster op deze computer.", + "pad.modals.userdup.explanation": "Deze notitie is blijkbaar in meer dan één browservenster op deze computer geopend.", "pad.modals.userdup.advice": "Maak opnieuw verbinding als u dit venster wilt gebruiken.", "pad.modals.unauth": "Niet toegestaan", "pad.modals.unauth.explanation": "Uw rechten zijn gewijzigd terwijl u de pagina aan het bekijken was. Probeer opnieuw te verbinden.", "pad.modals.looping.explanation": "Er is een probleem opgetreden tijdens de communicatie met de synchronisatieserver.", - "pad.modals.looping.cause": "Mogelijk gebruikt de server een niet compatibele firewall of proxy server.", + "pad.modals.looping.cause": "Mogelijk hebt u verbinding gemaakt via een niet-compatibele firewall of proxy.", "pad.modals.initsocketfail": "De server is niet bereikbaar.", "pad.modals.initsocketfail.explanation": "Het was niet mogelijk te verbinden met de synchronisatieserver.", - "pad.modals.initsocketfail.cause": "Mogelijk komt dit door uw browser of internetverbinding.", + "pad.modals.initsocketfail.cause": "Dit komt waarschijnlijk door een probleem met uw browser of uw internetverbinding.", "pad.modals.slowcommit.explanation": "De server reageert niet.", "pad.modals.slowcommit.cause": "Dit komt mogelijk door netwerkproblemen.", "pad.modals.badChangeset.explanation": "Een door u gemaakte bewerking is door de synchronisatieserver als incorrect aangemerkt.", - "pad.modals.badChangeset.cause": "Dit kan komen door een onjuiste serverinstelling of door ander onverwacht gedrag. Neem contact op met de servicebeheerder als u denkt dat er een onverwachte uitkomst is. Probeer opnieuw te verbinden om door te gaan met bewerken.", - "pad.modals.corruptPad.explanation": "Het pad dat u wilt openen is beschadigd.", + "pad.modals.badChangeset.cause": "Dit kan komen door een onjuiste serverinstelling of door ander onverwacht gedrag. Neem contact op met de servicebeheerder als u denkt dat dit een fout is. Probeer opnieuw te verbinden om door te gaan met bewerken.", + "pad.modals.corruptPad.explanation": "De notitie die u wilt openen is beschadigd.", "pad.modals.corruptPad.cause": "Dit kan komen door een onjuiste serverinstelling of door ander onverwacht gedrag. Neem contact op met de servicebeheerder.", "pad.modals.deleted": "Verwijderd.", - "pad.modals.deleted.explanation": "Dit pad is verwijderd.", + "pad.modals.deleted.explanation": "Deze notitie is verwijderd.", "pad.modals.rateLimited": "Snelheid begrensd.", - "pad.modals.rateLimited.explanation": "Je hebt te veel berichten naar deze pad gestuurd. Daarom is je verbinding verbroken.", - "pad.modals.rejected.explanation": "De server heeft een bericht afgewezen dat door je browser is verzonden.", - "pad.modals.rejected.cause": "Mogelijks is de server bijgewerkt terwijl je de pad aan het bekijken was. Of misschien is er een bug in Etherpad. Probeer de pagina opnieuw te laden.", + "pad.modals.rateLimited.explanation": "U hebt te veel berichten naar deze notitie gestuurd. Daarom is uw verbinding verbroken.", + "pad.modals.rejected.explanation": "De server heeft een bericht verworpen dat door uw browser is verzonden.", + "pad.modals.rejected.cause": "Mogelijk is de server bijgewerkt terwijl u de notitie aan het bekijken was. Of misschien is er een bug in Etherpad. Probeer de pagina opnieuw te laden.", "pad.modals.disconnected": "Uw verbinding is verbroken.", "pad.modals.disconnected.explanation": "De verbinding met de server is verbroken", - "pad.modals.disconnected.cause": "De server is mogelijk niet beschikbaar. Stel de servicebeheerder op de hoogte.", - "pad.share": "Pad delen", - "pad.share.readonly": "Alleen-lezen", + "pad.modals.disconnected.cause": "De server is mogelijk niet beschikbaar. Stel de servicebeheerder op de hoogte als dit probleem aanhoudt.", + "pad.share": "Deze notitie delen", + "pad.share.readonly": "Alleen lezen", "pad.share.link": "Koppeling", - "pad.share.emebdcode": "URL insluiten", + "pad.share.emebdcode": "URL voor insluiten", "pad.chat": "Chatten", - "pad.chat.title": "Chat voor dit pad opnenen", + "pad.chat.title": "De chat voor deze notitie openen.", "pad.chat.loadmessages": "Meer berichten laden", "pad.chat.stick.title": "Chat op scherm vastzetten", - "pad.chat.writeMessage.placeholder": "Schrijf je bericht hier", - "timeslider.followContents": "Volg de inhoudelijke updates van de pad", + "pad.chat.writeMessage.placeholder": "Schrijf uw bericht hier", + "timeslider.followContents": "Volg het bijwerken van de inhoud van deze notitie", "timeslider.pageTitle": "Tijdlijn voor {{appTitle}}", - "timeslider.toolbar.returnbutton": "Terug naar pad", + "timeslider.toolbar.returnbutton": "Terug naar notitie", "timeslider.toolbar.authors": "Auteurs:", "timeslider.toolbar.authorsList": "Geen auteurs", "timeslider.toolbar.exportlink.title": "Exporteren", "timeslider.exportCurrent": "Huidige versie exporteren als:", "timeslider.version": "Versie {{version}}", "timeslider.saved": "Opgeslagen op {{day}} {{month}} {{year}}", - "timeslider.playPause": "Padinhoud afspelen of pauzeren", - "timeslider.backRevision": "Een versie teruggaan voor deze pad", - "timeslider.forwardRevision": "Een versie vooruit gaan voor deze pad", + "timeslider.playPause": "Notitie-inhoud afspelen of pauzeren", + "timeslider.backRevision": "Een versie teruggaan in deze notitie", + "timeslider.forwardRevision": "Een versie vooruit gaan in deze notitie", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januari", "timeslider.month.february": "februari", @@ -174,15 +174,15 @@ "pad.savedrevs.timeslider": "U kunt opgeslagen versies bekijken via de tijdschuiver.", "pad.userlist.entername": "Geef uw naam op", "pad.userlist.unnamed": "zonder naam", - "pad.editbar.clearcolors": "Auteurskleuren voor het hele document wissen? Dit kan je niet ongedaan maken", + "pad.editbar.clearcolors": "Auteurskleuren voor het hele document wissen? Dit kan niet ongedaan worden gemaakt.", "pad.impexp.importbutton": "Nu importeren", "pad.impexp.importing": "Bezig met importeren…", - "pad.impexp.confirmimport": "Door een bestand te importeren overschrijft u de huidige tekst van de pad. Wilt u echt doorgaan?", + "pad.impexp.confirmimport": "Door een bestand te importeren overschrijft u de huidige tekst van de notitie. Wilt u echt doorgaan?", "pad.impexp.convertFailed": "Het was niet mogelijk dit bestand te importeren. Gebruik een andere documentopmaak of kopieer en plak de inhoud handmatig", - "pad.impexp.padHasData": "Het was niet mogelijk dit bestand te importeren omdat er al wijzigingen aan de etherpad zijn gemaakt. Importeer naar een nieuwe etherpad.", + "pad.impexp.padHasData": "Het was niet mogelijk dit bestand te importeren omdat er al wijzigingen aan de notitie zijn aangebracht. Importeer in een nieuwe notitie.", "pad.impexp.uploadFailed": "Het uploaden is mislukt. Probeer het opnieuw", "pad.impexp.importfailed": "Importeren is mislukt", "pad.impexp.copypaste": "Gebruik kopiëren en plakken", - "pad.impexp.exportdisabled": "Exporteren als {{type}} is uitgeschakeld. Neem contact op met de systeembeheerder voor details.", - "pad.impexp.maxFileSize": "Het bestand is te groot. Neem contact op met je sitebeheerder om de toegestane bestandsgrootte voor importeren te vergroten." + "pad.impexp.exportdisabled": "Het exporteren in de indeling {{type}} is uitgeschakeld. Neem contact op met de systeembeheerder voor details.", + "pad.impexp.maxFileSize": "Het bestand is te groot. Neem contact op met uw sitebeheerder om de toegestane bestandsgrootte voor importeren te vergroten." } From 01abebdc1d274acd3ded8f457b89a048fcbed618 Mon Sep 17 00:00:00 2001 From: Prashant Patil <123833919+prashant1177@users.noreply.github.com> Date: Wed, 20 Aug 2025 23:14:52 +0530 Subject: [PATCH 16/33] After delete the user will now redirected to home page (#7072) --- src/static/js/pad_editor.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/static/js/pad_editor.ts b/src/static/js/pad_editor.ts index a68217a88..2403c3e7a 100644 --- a/src/static/js/pad_editor.ts +++ b/src/static/js/pad_editor.ts @@ -86,6 +86,8 @@ const padeditor = (() => { $('#delete-pad').on('click', () => { if (window.confirm(html10n.get('pad.delete.confirm'))) { pad.collabClient.sendMessage({type: 'PAD_DELETE', data:{padId: pad.getPadId()}}); + // redirect to home page after deletion + window.location.href = '/'; } }) From 601c15f89dcb352526ca67ca295bb717f0987637 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 21 Aug 2025 14:04:46 +0200 Subject: [PATCH 17/33] Localisation updates from https://translatewiki.net. --- src/locales/eu.json | 10 ++++++++++ src/locales/he.json | 20 ++++++++++++++------ src/locales/ko.json | 3 ++- src/locales/nl.json | 18 +++++++++++------- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/locales/eu.json b/src/locales/eu.json index ca1d20f5e..9032fd8fb 100644 --- a/src/locales/eu.json +++ b/src/locales/eu.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "Alexgabi", "An13sa", "HairyFotr", "Izendegi", @@ -46,6 +47,12 @@ "index.newPad": "Pad berria", "index.createOpenPad": "edo sortu/ireki Pad bat honako izenarekin:", "index.openPad": "ireki existitzen den eta hurrengo izena duen Pad-a:", + "index.recentPadsEmpty": "Ez da aurkitu duela gutxiko pad-ik", + "index.generateNewPad": "Sortu pad izen aleatorioa", + "index.labelPad": "Pad izena (aukerakoa)", + "index.placeholderPadEnter": "Mesedez sartu pad izen bat...", + "index.createAndShareDocuments": "Sortu eta partekatu dokumentuak denbora errealean", + "index.createAndShareDocumentsDescription": "Etherpadek aukera ematen dizu dokumentuak elkarlanean editatzeko zure nabigatzailean exekutatzen den idazle anitzeko editore bat bezala.", "pad.toolbar.bold.title": "Lodia (Ctrl+B)", "pad.toolbar.italic.title": "Etzana (Ctrl+I)", "pad.toolbar.underline.title": "Azpimarratua (Ctrl+U)", @@ -62,6 +69,7 @@ "pad.toolbar.savedRevision.title": "Gorde berrikuspena", "pad.toolbar.settings.title": "Ezarpenak", "pad.toolbar.embed.title": "Partekatu eta Txertatu pad hau", + "pad.toolbar.home.title": "Atzera hasierara", "pad.toolbar.showusers.title": "Erakutsi pad honetako erabiltzaileak", "pad.colorpicker.save": "Gorde", "pad.colorpicker.cancel": "Utzi", @@ -78,6 +86,8 @@ "pad.settings.fontType": "Letra-mota:", "pad.settings.fontType.normal": "Arrunta", "pad.settings.language": "Hizkuntza:", + "pad.settings.deletePad": "Ezabatu pad-a", + "pad.delete.confirm": "Benetan pad hau ezabatu nahi duzu?", "pad.settings.about": "Honi buruz", "pad.settings.poweredBy": "Honek garatua:", "pad.importExport.import_export": "Inportatu/Esportatu", diff --git a/src/locales/he.json b/src/locales/he.json index e45f1f079..152b7d2db 100644 --- a/src/locales/he.json +++ b/src/locales/he.json @@ -42,12 +42,19 @@ "admin_settings.current_save.value": "שמירת הגדרות", "admin_settings.page-title": "הגדרות - Etherpad", "index.newPad": "פנקס חדש", - "index.createOpenPad": "ליצור או לפתוח פנקס בשם:", + "index.createOpenPad": "פתיחת פנקס לפי שם", "index.openPad": "פתיחת פנקס קיים עם השם:", - "pad.toolbar.bold.title": "בולט (Ctrl-B)", - "pad.toolbar.italic.title": "נטוי (Ctrl-I)", - "pad.toolbar.underline.title": "קו תחתי (Ctrl-U)", - "pad.toolbar.strikethrough.title": "קו מוחק (Ctrl+5)", + "index.recentPads": "פנקסים אחרונים", + "index.recentPadsEmpty": "לא נמצאו פנקסים אחרונים.", + "index.generateNewPad": "יצירת שם אקראי לפנקס", + "index.labelPad": "שם הפנקס (רשות)", + "index.placeholderPadEnter": "נא למלא שם לפנקס...", + "index.createAndShareDocuments": "יצירה ושיתוף של מסמכים בזמן אמת", + "index.createAndShareDocumentsDescription": "Etherpad מאפשר לך לערוך מסמכים באופן שיתופי בזמן אמת, כמו עורך רב־שחקנים בזמן אחר שרץ בדפדפן שלך.", + "pad.toolbar.bold.title": "מודגש (Ctrl+B)", + "pad.toolbar.italic.title": "נטוי (Ctrl+I)", + "pad.toolbar.underline.title": "קו תחתי (Ctrl+U)", + "pad.toolbar.strikethrough.title": "קו חוצה (Ctrl+5)", "pad.toolbar.ol.title": "רשימה ממוספרת (Ctrl+Shift+N)", "pad.toolbar.ul.title": "רשימת תבליטים (Ctrl+Shift+L)", "pad.toolbar.indent.title": "הזחה (טאב)", @@ -60,6 +67,7 @@ "pad.toolbar.savedRevision.title": "שמירת גרסה", "pad.toolbar.settings.title": "הגדרות", "pad.toolbar.embed.title": "שיתוף והטמעה של הפנקס הזה", + "pad.toolbar.home.title": "חזרה לדף הבית", "pad.toolbar.showusers.title": "הצגת המשתמשים בפנקס הזה", "pad.colorpicker.save": "שמירה", "pad.colorpicker.cancel": "ביטול", @@ -69,7 +77,7 @@ "pad.settings.padSettings": "הגדרות פנקס", "pad.settings.myView": "התצוגה שלי", "pad.settings.stickychat": "השיחה תמיד על המסך", - "pad.settings.chatandusers": "הצגת צ'אט ומשתמשים", + "pad.settings.chatandusers": "הצגת צ׳אט ומשתמשים", "pad.settings.colorcheck": "צביעה לפי מחבר", "pad.settings.linenocheck": "מספרי שורות", "pad.settings.rtlcheck": "לקרוא את התוכן מימין לשמאל?", diff --git a/src/locales/ko.json b/src/locales/ko.json index efe471aee..174fa2eb0 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -9,6 +9,7 @@ "Revi", "SeoJeongHo", "Suleiman the Magnificent Television", + "YeBoy371", "Ykhwong", "그냥기여자", "아라" @@ -71,7 +72,7 @@ "pad.colorpicker.save": "저장", "pad.colorpicker.cancel": "취소", "pad.loading": "불러오는 중...", - "pad.noCookie": "쿠키를 찾지 못했습니다. 브라우저에서 쿠키를 허용해 주십시오! 세션과 설정은 방문 간 저장되지 않습니다. 일부 브라우저의 iFrame에 이더패드가 포함된 것이 그 이유일 수 있습니다. 이더패드가 부모 iFrame과 동일한 서브도메인/도메인에 위치하는지 확인해 주십시오", + "pad.noCookie": "쿠키를 찾지 못했습니다. 브라우저에서 쿠키를 허용해 주십시오! 세션과 설정은 방문 간 저장되지 않습니다. 일부 브라우저의 iFrame에 이더패드가 포함된 것이 그 이유일 수 있습니다. 이더패드가 상위 iFrame과 동일한 서브도메인/도메인에 위치하는지 확인해 주십시오", "pad.permissionDenied": "이 패드에 접근할 권한이 없습니다", "pad.settings.padSettings": "패드 설정", "pad.settings.myView": "내 보기", diff --git a/src/locales/nl.json b/src/locales/nl.json index fb63a0fb0..9f67fd20a 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -39,24 +39,28 @@ "admin_plugins_info.hooks_client": "Client-side hooks", "admin_plugins_info.hooks_server": "Server-side hooks", "admin_plugins_info.parts": "Geïnstalleerde onderdelen", - "admin_plugins_info.plugins": "Geïnstalleerde plugins", - "admin_plugins_info.page-title": "Plugin info - Etherpad", - "admin_plugins_info.version": "Etherpad versie", + "admin_plugins_info.plugins": "Geïnstalleerde plug-ins", + "admin_plugins_info.page-title": "Plug-in-informatie – Etherpad", + "admin_plugins_info.version": "Versie van Etherpad", "admin_plugins_info.version_latest": "Meest recente versie", - "admin_plugins_info.version_number": "Versie nummer", + "admin_plugins_info.version_number": "Versienummer", "admin_settings": "Instellingen", "admin_settings.current": "Huidige configuratie", "admin_settings.current_example-devel": "Voorbeeldsjabloon voor ontwikkelingsinstellingen", - "admin_settings.current_example-prod": "Productie instellingen template", + "admin_settings.current_example-prod": "Voorbeeldsjabloon voor productie-instellingen", "admin_settings.current_restart.value": "Herstart Etherpad", "admin_settings.current_save.value": "Bewaar instellingen", "admin_settings.page-title": "Instellingen - Etherpad", "index.newPad": "Nieuwe notitie", "index.createOpenPad": "Open een notitie met de naam", "index.openPad": "open een bestaande notitie met de naam:", + "index.recentPads": "Recente notities", + "index.recentPadsEmpty": "Geen recente notities gevonden.", "index.generateNewPad": "Genereer willekeurige notitienaam", "index.labelPad": "Notitienaam (optioneel)", + "index.placeholderPadEnter": "Voer de naam van een notitie in…", "index.createAndShareDocuments": "Maak en deel documenten in realtime", + "index.createAndShareDocumentsDescription": "Met Etherpad kunt u in samenwerking met anderen tegelijkertijd hetzelfde document bewerken. Het is zoals een live multiplayer-editor die in uw browser draait.", "pad.toolbar.bold.title": "Vet (Ctrl+B)", "pad.toolbar.italic.title": "Cursief (Ctrl+I)", "pad.toolbar.underline.title": "Onderstrepen (Ctrl+U)", @@ -118,7 +122,7 @@ "pad.modals.looping.explanation": "Er is een probleem opgetreden tijdens de communicatie met de synchronisatieserver.", "pad.modals.looping.cause": "Mogelijk hebt u verbinding gemaakt via een niet-compatibele firewall of proxy.", "pad.modals.initsocketfail": "De server is niet bereikbaar.", - "pad.modals.initsocketfail.explanation": "Het was niet mogelijk te verbinden met de synchronisatieserver.", + "pad.modals.initsocketfail.explanation": "Er kon geen verbinding worden gemaakt met de synchronisatieserver.", "pad.modals.initsocketfail.cause": "Dit komt waarschijnlijk door een probleem met uw browser of uw internetverbinding.", "pad.modals.slowcommit.explanation": "De server reageert niet.", "pad.modals.slowcommit.cause": "Dit komt mogelijk door netwerkproblemen.", @@ -171,7 +175,7 @@ "timeslider.month.december": "december", "timeslider.unnamedauthors": "{{num}} onbekende {[plural(num) one: auteur, other: auteurs ]}", "pad.savedrevs.marked": "Deze versie is nu gemarkeerd als opgeslagen versie", - "pad.savedrevs.timeslider": "U kunt opgeslagen versies bekijken via de tijdschuiver.", + "pad.savedrevs.timeslider": "U kunt opgeslagen versies bekijken via de tijdlijn", "pad.userlist.entername": "Geef uw naam op", "pad.userlist.unnamed": "zonder naam", "pad.editbar.clearcolors": "Auteurskleuren voor het hele document wissen? Dit kan niet ongedaan worden gemaakt.", From d06d525b43d02db90aee0fe892ab1fdc1fca6a54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 19:14:45 +0200 Subject: [PATCH 18/33] build(deps): bump actions/upload-pages-artifact from 3 to 4 (#7087) Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-pages-artifact dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-and-deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy-docs.yml b/.github/workflows/build-and-deploy-docs.yml index 43cbfccdd..f3850a6c1 100644 --- a/.github/workflows/build-and-deploy-docs.yml +++ b/.github/workflows/build-and-deploy-docs.yml @@ -61,7 +61,7 @@ jobs: env: COMMIT_REF: ${{ github.sha }} - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: # Upload entire repository path: './doc/.vitepress/dist' From fae29a03c71c77b4e621da1ccc5db0406eaff578 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 19:15:07 +0200 Subject: [PATCH 19/33] build(deps-dev): bump the dev-dependencies group across 1 directory with 24 updates (#7086) Bumps the dev-dependencies group with 24 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@playwright/test](https://github.com/microsoft/playwright) | `1.54.1` | `1.55.0` | | [@types/async](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/async) | `3.2.24` | `3.2.25` | | [@types/jquery](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jquery) | `3.5.32` | `3.5.33` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `24.1.0` | `24.3.0` | | [eslint](https://github.com/eslint/eslint) | `9.32.0` | `9.33.0` | | [typescript](https://github.com/microsoft/TypeScript) | `5.8.3` | `5.9.2` | | [@radix-ui/react-dialog](https://github.com/radix-ui/primitives) | `1.1.14` | `1.1.15` | | [@radix-ui/react-toast](https://github.com/radix-ui/primitives) | `1.2.14` | `1.2.15` | | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `8.38.0` | `8.40.0` | | [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `8.38.0` | `8.40.0` | | [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc) | `3.10.2` | `4.0.1` | | [i18next](https://github.com/i18next/i18next) | `25.3.2` | `25.4.0` | | [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) | `0.525.0` | `0.541.0` | | [react](https://github.com/facebook/react/tree/HEAD/packages/react) | `19.1.0` | `19.1.1` | | [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) | `19.1.8` | `19.1.10` | | [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) | `19.1.0` | `19.1.1` | | [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) | `19.1.6` | `19.1.7` | | [react-hook-form](https://github.com/react-hook-form/react-hook-form) | `7.61.1` | `7.62.0` | | [react-i18next](https://github.com/i18next/react-i18next) | `15.6.1` | `15.7.1` | | [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) | `7.7.1` | `7.8.1` | | [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) | `7.0.6` | `7.1.3` | | [vite-plugin-static-copy](https://github.com/sapphi-red/vite-plugin-static-copy) | `3.1.1` | `3.1.2` | | [zustand](https://github.com/pmndrs/zustand) | `5.0.6` | `5.0.8` | | [vitepress](https://github.com/vuejs/vitepress) | `2.0.0-alpha.9` | `2.0.0-alpha.12` | Updates `@playwright/test` from 1.54.1 to 1.55.0 - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.54.1...v1.55.0) Updates `@types/async` from 3.2.24 to 3.2.25 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/async) Updates `@types/jquery` from 3.5.32 to 3.5.33 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jquery) Updates `@types/node` from 24.1.0 to 24.3.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `eslint` from 9.32.0 to 9.33.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.32.0...v9.33.0) Updates `typescript` from 5.8.3 to 5.9.2 - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.3...v5.9.2) Updates `@radix-ui/react-dialog` from 1.1.14 to 1.1.15 - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) Updates `@radix-ui/react-toast` from 1.2.14 to 1.2.15 - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) Updates `@typescript-eslint/eslint-plugin` from 8.38.0 to 8.40.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.40.0/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 8.38.0 to 8.40.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.40.0/packages/parser) Updates `@vitejs/plugin-react-swc` from 3.10.2 to 4.0.1 - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.0.1/packages/plugin-react-swc) Updates `i18next` from 25.3.2 to 25.4.0 - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v25.3.2...v25.4.0) Updates `lucide-react` from 0.525.0 to 0.541.0 - [Release notes](https://github.com/lucide-icons/lucide/releases) - [Commits](https://github.com/lucide-icons/lucide/commits/0.541.0/packages/lucide-react) Updates `react` from 19.1.0 to 19.1.1 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react) Updates `@types/react` from 19.1.8 to 19.1.10 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) Updates `react-dom` from 19.1.0 to 19.1.1 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react-dom) Updates `@types/react-dom` from 19.1.6 to 19.1.7 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) Updates `react-hook-form` from 7.61.1 to 7.62.0 - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.61.1...v7.62.0) Updates `react-i18next` from 15.6.1 to 15.7.1 - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v15.6.1...v15.7.1) Updates `react-router-dom` from 7.7.1 to 7.8.1 - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.8.1/packages/react-router-dom) Updates `vite` from 7.0.6 to 7.1.3 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v7.1.3/packages/vite) Updates `vite-plugin-static-copy` from 3.1.1 to 3.1.2 - [Release notes](https://github.com/sapphi-red/vite-plugin-static-copy/releases) - [Changelog](https://github.com/sapphi-red/vite-plugin-static-copy/blob/main/CHANGELOG.md) - [Commits](https://github.com/sapphi-red/vite-plugin-static-copy/compare/vite-plugin-static-copy@3.1.1...vite-plugin-static-copy@3.1.2) Updates `zustand` from 5.0.6 to 5.0.8 - [Release notes](https://github.com/pmndrs/zustand/releases) - [Commits](https://github.com/pmndrs/zustand/compare/v5.0.6...v5.0.8) Updates `vitepress` from 2.0.0-alpha.9 to 2.0.0-alpha.12 - [Release notes](https://github.com/vuejs/vitepress/releases) - [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md) - [Commits](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.9...v2.0.0-alpha.12) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-version: 1.55.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: "@types/async" dependency-version: 3.2.25 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: "@types/jquery" dependency-version: 3.5.33 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: "@types/node" dependency-version: 24.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: eslint dependency-version: 9.33.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: typescript dependency-version: 5.9.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: "@radix-ui/react-dialog" dependency-version: 1.1.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: "@radix-ui/react-toast" dependency-version: 1.2.15 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.40.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: "@typescript-eslint/parser" dependency-version: 8.40.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: "@vitejs/plugin-react-swc" dependency-version: 4.0.1 dependency-type: direct:development update-type: version-update:semver-major dependency-group: dev-dependencies - dependency-name: i18next dependency-version: 25.4.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: lucide-react dependency-version: 0.541.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: react dependency-version: 19.1.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: "@types/react" dependency-version: 19.1.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: react-dom dependency-version: 19.1.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: "@types/react-dom" dependency-version: 19.1.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: react-hook-form dependency-version: 7.62.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: react-i18next dependency-version: 15.7.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: react-router-dom dependency-version: 7.8.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: vite dependency-version: 7.1.3 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: vite-plugin-static-copy dependency-version: 3.1.2 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: zustand dependency-version: 5.0.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: vitepress dependency-version: 2.0.0-alpha.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- admin/package.json | 38 +- bin/package.json | 4 +- doc/package.json | 2 +- pnpm-lock.yaml | 2116 +++++++++++++++++++++++++------------------- src/package.json | 12 +- ui/package.json | 4 +- 6 files changed, 1242 insertions(+), 934 deletions(-) diff --git a/admin/package.json b/admin/package.json index 20723272e..0cbda008b 100644 --- a/admin/package.json +++ b/admin/package.json @@ -14,29 +14,29 @@ "@radix-ui/react-switch": "^1.2.5" }, "devDependencies": { - "@radix-ui/react-dialog": "^1.1.14", - "@radix-ui/react-toast": "^1.2.14", - "@types/react": "^19.1.8", - "@types/react-dom": "^19.1.6", - "@typescript-eslint/eslint-plugin": "^8.37.0", - "@typescript-eslint/parser": "^8.37.0", - "@vitejs/plugin-react-swc": "^3.10.2", - "eslint": "^9.31.0", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-toast": "^1.2.15", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", + "@typescript-eslint/eslint-plugin": "^8.40.0", + "@typescript-eslint/parser": "^8.40.0", + "@vitejs/plugin-react-swc": "^4.0.1", + "eslint": "^9.33.0", "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", - "i18next": "^25.3.2", + "i18next": "^25.4.0", "i18next-browser-languagedetector": "^8.2.0", - "lucide-react": "^0.525.0", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "react-hook-form": "^7.60.0", - "react-i18next": "^15.6.0", - "react-router-dom": "^7.6.3", + "lucide-react": "^0.541.0", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-hook-form": "^7.62.0", + "react-i18next": "^15.7.1", + "react-router-dom": "^7.8.1", "socket.io-client": "^4.8.1", - "typescript": "^5.8.2", - "vite": "^7.0.4", - "vite-plugin-static-copy": "^3.1.1", + "typescript": "^5.9.2", + "vite": "^7.1.3", + "vite-plugin-static-copy": "^3.1.2", "vite-plugin-svgr": "^4.3.0", - "zustand": "^5.0.6" + "zustand": "^5.0.8" } } diff --git a/bin/package.json b/bin/package.json index 46d128ca2..309f8d0de 100644 --- a/bin/package.json +++ b/bin/package.json @@ -15,9 +15,9 @@ "ueberdb2": "^5.0.14" }, "devDependencies": { - "@types/node": "^24.0.14", + "@types/node": "^24.3.0", "@types/semver": "^7.7.0", - "typescript": "^5.8.2" + "typescript": "^5.9.2" }, "scripts": { "makeDocs": "node --import tsx make_docs.ts", diff --git a/doc/package.json b/doc/package.json index 50bb14a74..02c322569 100644 --- a/doc/package.json +++ b/doc/package.json @@ -1,6 +1,6 @@ { "devDependencies": { - "vitepress": "^2.0.0-alpha.9" + "vitepress": "^2.0.0-alpha.12" }, "scripts": { "docs:dev": "vitepress dev", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 89bfbdcbf..cbf06af55 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,80 +26,80 @@ importers: dependencies: '@radix-ui/react-switch': specifier: ^1.2.5 - version: 1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.2.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@radix-ui/react-dialog': - specifier: ^1.1.14 - version: 1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@radix-ui/react-toast': - specifier: ^1.2.14 - version: 1.2.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.2.15 + version: 1.2.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@types/react': - specifier: ^19.1.8 - version: 19.1.8 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': - specifier: ^19.1.6 - version: 19.1.6(@types/react@19.1.8) + specifier: ^19.1.7 + version: 19.1.7(@types/react@19.1.10) '@typescript-eslint/eslint-plugin': - specifier: ^8.37.0 - version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) + specifier: ^8.40.0 + version: 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0)(typescript@5.9.2))(eslint@9.33.0)(typescript@5.9.2) '@typescript-eslint/parser': - specifier: ^8.37.0 - version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) + specifier: ^8.40.0 + version: 8.40.0(eslint@9.33.0)(typescript@5.9.2) '@vitejs/plugin-react-swc': - specifier: ^3.10.2 - version: 3.10.2(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) + specifier: ^4.0.1 + version: 4.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) eslint: - specifier: ^9.31.0 - version: 9.32.0 + specifier: ^9.33.0 + version: 9.33.0 eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.32.0) + version: 5.2.0(eslint@9.33.0) eslint-plugin-react-refresh: specifier: ^0.4.20 - version: 0.4.20(eslint@9.32.0) + version: 0.4.20(eslint@9.33.0) i18next: - specifier: ^25.3.2 - version: 25.3.2(typescript@5.8.3) + specifier: ^25.4.0 + version: 25.4.0(typescript@5.9.2) i18next-browser-languagedetector: specifier: ^8.2.0 version: 8.2.0 lucide-react: - specifier: ^0.525.0 - version: 0.525.0(react@19.1.0) + specifier: ^0.541.0 + version: 0.541.0(react@19.1.1) react: - specifier: ^19.1.0 - version: 19.1.0 + specifier: ^19.1.1 + version: 19.1.1 react-dom: - specifier: ^19.1.0 - version: 19.1.0(react@19.1.0) + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) react-hook-form: - specifier: ^7.60.0 - version: 7.61.1(react@19.1.0) + specifier: ^7.62.0 + version: 7.62.0(react@19.1.1) react-i18next: - specifier: ^15.6.0 - version: 15.6.1(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^15.7.1 + version: 15.7.1(i18next@25.4.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) react-router-dom: - specifier: ^7.6.3 - version: 7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^7.8.1 + version: 7.8.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) socket.io-client: specifier: ^4.8.1 version: 4.8.1 typescript: - specifier: ^5.8.2 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 vite: - specifier: ^7.0.4 - version: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + specifier: ^7.1.3 + version: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) vite-plugin-static-copy: - specifier: ^3.1.1 - version: 3.1.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) + specifier: ^3.1.2 + version: 3.1.2(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.40.1)(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) + version: 4.3.0(rollup@4.47.1)(typescript@5.9.2)(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) zustand: - specifier: ^5.0.6 - version: 5.0.6(@types/react@19.1.8)(react@19.1.0) + specifier: ^5.0.8 + version: 5.0.8(@types/react@19.1.10)(react@19.1.1) bin: dependencies: @@ -123,20 +123,20 @@ importers: version: 5.0.14 devDependencies: '@types/node': - specifier: ^24.0.14 - version: 24.1.0 + specifier: ^24.3.0 + version: 24.3.0 '@types/semver': specifier: ^7.7.0 version: 7.7.0 typescript: - specifier: ^5.8.2 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 doc: devDependencies: vitepress: - specifier: ^2.0.0-alpha.9 - version: 2.0.0-alpha.9(@types/node@24.1.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3) + specifier: ^2.0.0-alpha.12 + version: 2.0.0-alpha.12(@types/node@24.3.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2) src: dependencies: @@ -280,11 +280,11 @@ importers: version: 0.10.0 devDependencies: '@playwright/test': - specifier: ^1.54.1 - version: 1.54.1 + specifier: ^1.55.0 + version: 1.55.0 '@types/async': - specifier: ^3.2.24 - version: 3.2.24 + specifier: ^3.2.25 + version: 3.2.25 '@types/cookie-parser': specifier: ^1.4.9 version: 1.4.9(@types/express@5.0.3) @@ -307,8 +307,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 '@types/jquery': - specifier: ^3.5.32 - version: 3.5.32 + specifier: ^3.5.33 + version: 3.5.33 '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 @@ -328,8 +328,8 @@ importers: specifier: ^10.0.9 version: 10.0.10 '@types/node': - specifier: ^24.0.14 - version: 24.1.0 + specifier: ^24.3.0 + version: 24.3.0 '@types/oidc-provider': specifier: ^9.1.1 version: 9.1.1 @@ -355,11 +355,11 @@ importers: specifier: ^4.0.3 version: 4.0.3 eslint: - specifier: ^9.31.0 - version: 9.32.0 + specifier: ^9.33.0 + version: 9.33.0 eslint-config-etherpad: specifier: ^4.0.4 - version: 4.0.4(eslint@9.32.0)(typescript@5.8.3) + version: 4.0.4(eslint@9.33.0)(typescript@5.9.2) etherpad-cli-client: specifier: ^3.0.4 version: 3.0.4 @@ -388,11 +388,11 @@ importers: specifier: ^7.1.3 version: 7.1.4 typescript: - specifier: ^5.8.2 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jsdom@26.1.0)(tsx@4.20.3) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jsdom@26.1.0)(tsx@4.20.3) ui: devDependencies: @@ -400,11 +400,11 @@ importers: specifier: workspace:../src version: link:../src typescript: - specifier: ^5.8.2 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 vite: - specifier: ^7.0.4 - version: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + specifier: ^7.1.3 + version: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) packages: @@ -478,8 +478,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} hasBin: true @@ -487,6 +487,10 @@ packages: resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.28.3': + resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.0': resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} @@ -531,11 +535,11 @@ packages: resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} - '@docsearch/css@4.0.0-beta.5': - resolution: {integrity: sha512-bZy+gIXRZch0KNPC7MLoj4wkEcNVeEHBXOKJtonoJ2EaLw2vbO1PLGIXxtPgW7Ab7TvI0StkrmGuEQqE2q/1QA==} + '@docsearch/css@4.0.0-beta.7': + resolution: {integrity: sha512-hBIwf14yLasrUcDNS7jrneM1ibFD/JFJVDjdxd1h/LUHx7eyLrS726pKHVr3cTdToNXP/7jrTbnC1MAuDHPoow==} - '@docsearch/js@4.0.0-beta.5': - resolution: {integrity: sha512-FEtkwdblZDrTkd0mYwmfR94Vo/jgkXVIbS6vD2FcKazK/L5RmgNb7KAUDUWW11V/fIcS5XHvHprIxEnoB9gllQ==} + '@docsearch/js@4.0.0-beta.7': + resolution: {integrity: sha512-0RJALbDpLMuFy3H/26rjms/qwi5KjsGMN8Lu4k/bs6kBfOWHUN6Dzg/ybj8qB2OLdT2UegsavRIDZKW3QrzQ4Q==} '@emnapi/core@1.4.0': resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} @@ -558,6 +562,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.25.5': resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} @@ -570,6 +580,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.25.5': resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} @@ -582,6 +598,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.25.5': resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} @@ -594,6 +616,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.25.5': resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} @@ -606,6 +634,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.25.5': resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} @@ -618,6 +652,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.25.5': resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} @@ -630,6 +670,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.25.5': resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} @@ -642,6 +688,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.25.5': resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} @@ -654,6 +706,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.25.5': resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} @@ -666,6 +724,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.25.5': resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} @@ -678,6 +742,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.25.5': resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} @@ -690,6 +760,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.25.5': resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} @@ -702,6 +778,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.25.5': resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} @@ -714,6 +796,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.25.5': resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} @@ -726,6 +814,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.25.5': resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} @@ -738,6 +832,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.25.5': resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} @@ -750,6 +850,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.25.5': resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} @@ -762,6 +868,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.25.5': resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} @@ -774,6 +886,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.25.5': resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} @@ -786,6 +904,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.25.5': resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} @@ -798,12 +922,24 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openharmony-arm64@0.25.8': resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.25.5': resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} @@ -816,6 +952,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.25.5': resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} @@ -828,6 +970,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.25.5': resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} @@ -840,6 +988,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.25.5': resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} @@ -852,6 +1006,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -866,32 +1026,28 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.0': - resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.32.0': - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + '@eslint/js@9.33.0': + resolution: {integrity: sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.4': - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -914,8 +1070,8 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify-json/simple-icons@1.2.45': - resolution: {integrity: sha512-POOz+NjYQDy2fy1u+sIZi05N6r6oSooIGBaBcZLh7w8QOmLgJAZ6mBt+7Messp7ku9ucRua61if33BPoOZCwRQ==} + '@iconify-json/simple-icons@1.2.48': + resolution: {integrity: sha512-EACOtZMoPJtERiAbX1De0asrrCtlwI27+03c9OJlYWsly9w1O5vcD8rTzh+kDPjo+K8FOVnq2Qy+h/CzljSKDA==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -939,6 +1095,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -983,14 +1142,17 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.54.1': - resolution: {integrity: sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==} + '@playwright/test@1.55.0': + resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} engines: {node: '>=18'} hasBin: true '@radix-ui/primitive@1.1.2': resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + '@radix-ui/react-collection@1.1.7': resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} peerDependencies: @@ -1022,8 +1184,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-dialog@1.1.14': - resolution: {integrity: sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==} + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1035,8 +1197,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-dismissable-layer@1.1.10': - resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==} + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1048,8 +1210,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-focus-guards@1.1.2': - resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} peerDependencies: '@types/react': '*' react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc @@ -1092,8 +1254,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-presence@1.1.4': - resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==} + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1140,8 +1302,8 @@ packages: '@types/react-dom': optional: true - '@radix-ui/react-toast@1.2.14': - resolution: {integrity: sha512-nAP5FBxBJGQ/YfUB+r+O6USFVkWq3gAInkxyEnmvEV5jtSbfDhfa4hwX8CraCnbjMLsE7XSf/K75l9xXY7joWg==} + '@radix-ui/react-toast@1.2.15': + resolution: {integrity: sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -1229,12 +1391,12 @@ packages: '@types/react-dom': optional: true - '@rolldown/pluginutils@1.0.0-beta.11': - resolution: {integrity: sha512-L/gAA/hyCSuzTF1ftlzUSI/IKr2POHsv1Dd78GfqkR83KMNuswWD61JxGV2L7nRwBBBSDr6R1gCkdTmoN7W4ag==} - '@rolldown/pluginutils@1.0.0-beta.29': resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==} + '@rolldown/pluginutils@1.0.0-beta.32': + resolution: {integrity: sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==} + '@rollup/pluginutils@5.1.4': resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} @@ -1244,103 +1406,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.40.1': - resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} + '@rollup/rollup-android-arm-eabi@4.47.1': + resolution: {integrity: sha512-lTahKRJip0knffA/GTNFJMrToD+CM+JJ+Qt5kjzBK/sFQ0EWqfKW3AYQSlZXN98tX0lx66083U9JYIMioMMK7g==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.40.1': - resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} + '@rollup/rollup-android-arm64@4.47.1': + resolution: {integrity: sha512-uqxkb3RJLzlBbh/bbNQ4r7YpSZnjgMgyoEOY7Fy6GCbelkDSAzeiogxMG9TfLsBbqmGsdDObo3mzGqa8hps4MA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.40.1': - resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} + '@rollup/rollup-darwin-arm64@4.47.1': + resolution: {integrity: sha512-tV6reObmxBDS4DDyLzTDIpymthNlxrLBGAoQx6m2a7eifSNEZdkXQl1PE4ZjCkEDPVgNXSzND/k9AQ3mC4IOEQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.40.1': - resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} + '@rollup/rollup-darwin-x64@4.47.1': + resolution: {integrity: sha512-XuJRPTnMk1lwsSnS3vYyVMu4x/+WIw1MMSiqj5C4j3QOWsMzbJEK90zG+SWV1h0B1ABGCQ0UZUjti+TQK35uHQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.40.1': - resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} + '@rollup/rollup-freebsd-arm64@4.47.1': + resolution: {integrity: sha512-79BAm8Ag/tmJ5asCqgOXsb3WY28Rdd5Lxj8ONiQzWzy9LvWORd5qVuOnjlqiWWZJw+dWewEktZb5yiM1DLLaHw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.40.1': - resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} + '@rollup/rollup-freebsd-x64@4.47.1': + resolution: {integrity: sha512-OQ2/ZDGzdOOlyfqBiip0ZX/jVFekzYrGtUsqAfLDbWy0jh1PUU18+jYp8UMpqhly5ltEqotc2miLngf9FPSWIA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': - resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} + '@rollup/rollup-linux-arm-gnueabihf@4.47.1': + resolution: {integrity: sha512-HZZBXJL1udxlCVvoVadstgiU26seKkHbbAMLg7680gAcMnRNP9SAwTMVet02ANA94kXEI2VhBnXs4e5nf7KG2A==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.40.1': - resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} + '@rollup/rollup-linux-arm-musleabihf@4.47.1': + resolution: {integrity: sha512-sZ5p2I9UA7T950JmuZ3pgdKA6+RTBr+0FpK427ExW0t7n+QwYOcmDTK/aRlzoBrWyTpJNlS3kacgSlSTUg6P/Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.40.1': - resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} + '@rollup/rollup-linux-arm64-gnu@4.47.1': + resolution: {integrity: sha512-3hBFoqPyU89Dyf1mQRXCdpc6qC6At3LV6jbbIOZd72jcx7xNk3aAp+EjzAtN6sDlmHFzsDJN5yeUySvorWeRXA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.40.1': - resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} + '@rollup/rollup-linux-arm64-musl@4.47.1': + resolution: {integrity: sha512-49J4FnMHfGodJWPw73Ve+/hsPjZgcXQGkmqBGZFvltzBKRS+cvMiWNLadOMXKGnYRhs1ToTGM0sItKISoSGUNA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': - resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.47.1': + resolution: {integrity: sha512-4yYU8p7AneEpQkRX03pbpLmE21z5JNys16F1BZBZg5fP9rIlb0TkeQjn5du5w4agConCCEoYIG57sNxjryHEGg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': - resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} + '@rollup/rollup-linux-ppc64-gnu@4.47.1': + resolution: {integrity: sha512-fAiq+J28l2YMWgC39jz/zPi2jqc0y3GSRo1yyxlBHt6UN0yYgnegHSRPa3pnHS5amT/efXQrm0ug5+aNEu9UuQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.40.1': - resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} + '@rollup/rollup-linux-riscv64-gnu@4.47.1': + resolution: {integrity: sha512-daoT0PMENNdjVYYU9xec30Y2prb1AbEIbb64sqkcQcSaR0zYuKkoPuhIztfxuqN82KYCKKrj+tQe4Gi7OSm1ow==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.40.1': - resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} + '@rollup/rollup-linux-riscv64-musl@4.47.1': + resolution: {integrity: sha512-JNyXaAhWtdzfXu5pUcHAuNwGQKevR+6z/poYQKVW+pLaYOj9G1meYc57/1Xv2u4uTxfu9qEWmNTjv/H/EpAisw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.40.1': - resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} + '@rollup/rollup-linux-s390x-gnu@4.47.1': + resolution: {integrity: sha512-U/CHbqKSwEQyZXjCpY43/GLYcTVKEXeRHw0rMBJP7fP3x6WpYG4LTJWR3ic6TeYKX6ZK7mrhltP4ppolyVhLVQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.40.1': - resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} + '@rollup/rollup-linux-x64-gnu@4.47.1': + resolution: {integrity: sha512-uTLEakjxOTElfeZIGWkC34u2auLHB1AYS6wBjPGI00bWdxdLcCzK5awjs25YXpqB9lS8S0vbO0t9ZcBeNibA7g==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.40.1': - resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} + '@rollup/rollup-linux-x64-musl@4.47.1': + resolution: {integrity: sha512-Ft+d/9DXs30BK7CHCTX11FtQGHUdpNDLJW0HHLign4lgMgBcPFN3NkdIXhC5r9iwsMwYreBBc4Rho5ieOmKNVQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.40.1': - resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} + '@rollup/rollup-win32-arm64-msvc@4.47.1': + resolution: {integrity: sha512-N9X5WqGYzZnjGAFsKSfYFtAShYjwOmFJoWbLg3dYixZOZqU7hdMq+/xyS14zKLhFhZDhP9VfkzQnsdk0ZDS9IA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.40.1': - resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} + '@rollup/rollup-win32-ia32-msvc@4.47.1': + resolution: {integrity: sha512-O+KcfeCORZADEY8oQJk4HK8wtEOCRE4MdOkb8qGZQNun3jzmj2nmhV/B/ZaaZOkPmJyvm/gW9n0gsB4eRa1eiQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.40.1': - resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} + '@rollup/rollup-win32-x64-msvc@4.47.1': + resolution: {integrity: sha512-CpKnYa8eHthJa3c+C38v/E+/KZyF1Jdh2Cz3DyKZqEWYgrM1IHFArXNWvBLPQCKUEsAqqKX27tTqVEFbDNUcOA==} cpu: [x64] os: [win32] @@ -1353,26 +1515,26 @@ packages: '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} - '@shikijs/core@3.9.1': - resolution: {integrity: sha512-W5Vwen0KJCtR7KFRo+3JLGAqLUPsfW7e+wZ4yaRBGIogwI9ZlnkpRm9ZV8JtfzMxOkIwZwMmmN0hNErLtm3AYg==} + '@shikijs/core@3.11.0': + resolution: {integrity: sha512-oJwU+DxGqp6lUZpvtQgVOXNZcVsirN76tihOLBmwILkKuRuwHteApP8oTXmL4tF5vS5FbOY0+8seXmiCoslk4g==} - '@shikijs/engine-javascript@3.9.1': - resolution: {integrity: sha512-4hGenxYpAmtALryKsdli2K58F0s7RBYpj/RSDcAAGfRM6eTEGI5cZnt86mr+d9/4BaZ5sH5s4p3VU5irIdhj9Q==} + '@shikijs/engine-javascript@3.11.0': + resolution: {integrity: sha512-6/ov6pxrSvew13k9ztIOnSBOytXeKs5kfIR7vbhdtVRg+KPzvp2HctYGeWkqv7V6YIoLicnig/QF3iajqyElZA==} - '@shikijs/engine-oniguruma@3.9.1': - resolution: {integrity: sha512-WPlL/xqviwS3te4unSGGGfflKsuHLMI6tPdNYvgz/IygcBT6UiwDFSzjBKyebwi5GGSlXsjjdoJLIBnAplmEZw==} + '@shikijs/engine-oniguruma@3.11.0': + resolution: {integrity: sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==} - '@shikijs/langs@3.9.1': - resolution: {integrity: sha512-Vyy2Yv9PP3Veh3VSsIvNncOR+O93wFsNYgN2B6cCCJlS7H9SKFYc55edsqernsg8WT/zam1cfB6llJsQWLnVhA==} + '@shikijs/langs@3.11.0': + resolution: {integrity: sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==} - '@shikijs/themes@3.9.1': - resolution: {integrity: sha512-zAykkGECNICCMXpKeVvq04yqwaSuAIvrf8MjsU5bzskfg4XreU+O0B5wdNCYRixoB9snd3YlZ373WV5E/g5T9A==} + '@shikijs/themes@3.11.0': + resolution: {integrity: sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==} - '@shikijs/transformers@3.9.1': - resolution: {integrity: sha512-QI4Bh565EhKGaefiDAyn5o7S8rQIUGXcOjZANSiQHa/KSGCyJTZP9UUiRbvdovVpaI/nagODX6mspFk/vcYOQQ==} + '@shikijs/transformers@3.11.0': + resolution: {integrity: sha512-fhSpVoq0FoCtKbBpzE3mXcIbr0b7ozFDSSWiVjWrQy+wrOfaFfwxgJqh8kY3Pbv/i+4pcuMIVismLD2MfO62eQ==} - '@shikijs/types@3.9.1': - resolution: {integrity: sha512-rqM3T7a0iM1oPKz9iaH/cVgNX9Vz1HERcUcXJ94/fulgVdwqfnhXzGxO4bLrAnh/o5CPLy3IcYedogfV+Ns0Qg==} + '@shikijs/types@3.11.0': + resolution: {integrity: sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1457,68 +1619,68 @@ packages: peerDependencies: '@svgr/core': '*' - '@swc/core-darwin-arm64@1.12.1': - resolution: {integrity: sha512-nUjWVcJ3YS2N40ZbKwYO2RJ4+o2tWYRzNOcIQp05FqW0+aoUCVMdAUUzQinPDynfgwVshDAXCKemY8X7nN5MaA==} + '@swc/core-darwin-arm64@1.13.4': + resolution: {integrity: sha512-CGbTu9dGBwgklUj+NAQAYyPjBuoHaNRWK4QXJRv1QNIkhtE27aY7QA9uEON14SODxsio3t8+Pjjl2Mzx1Pxf+g==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.12.1': - resolution: {integrity: sha512-OGm4a4d3OeJn+tRt8H/eiHgTFrJbS6r8mi/Ob65tAEXZGHN900T2kR7c5ALr0V2hBOQ8BfhexwPoQlGQP/B95w==} + '@swc/core-darwin-x64@1.13.4': + resolution: {integrity: sha512-qLFwYmLrqHNCf+JO9YLJT6IP/f9LfbXILTaqyfluFLW1GCfJyvUrSt3CWaL2lwwyT1EbBh6BVaAAecXiJIo3vg==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.12.1': - resolution: {integrity: sha512-76YeeQKyK0EtNkQiNBZ0nbVGooPf9IucY0WqVXVpaU4wuG7ZyLEE2ZAIgXafIuzODGQoLfetue7I8boMxh1/MA==} + '@swc/core-linux-arm-gnueabihf@1.13.4': + resolution: {integrity: sha512-y7SeNIA9em3+smNMpr781idKuNwJNAqewiotv+pIR5FpXdXXNjHWW+jORbqQYd61k6YirA5WQv+Af4UzqEX17g==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.12.1': - resolution: {integrity: sha512-BxJDIJPq1+aCh9UsaSAN6wo3tuln8UhNXruOrzTI8/ElIig/3sAueDM6Eq7GvZSGGSA7ljhNATMJ0elD7lFatQ==} + '@swc/core-linux-arm64-gnu@1.13.4': + resolution: {integrity: sha512-u0c51VdzRmXaphLgghY9+B2Frzler6nIv+J788nqIh6I0ah3MmMW8LTJKZfdaJa3oFxzGNKXsJiaU2OFexNkug==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.12.1': - resolution: {integrity: sha512-NhLdbffSXvY0/FwUSAl4hKBlpe5GHQGXK8DxTo3HHjLsD9sCPYieo3vG0NQoUYAy4ZUY1WeGjyxeq4qZddJzEQ==} + '@swc/core-linux-arm64-musl@1.13.4': + resolution: {integrity: sha512-Z92GJ98x8yQHn4I/NPqwAQyHNkkMslrccNVgFcnY1msrb6iGSw5uFg2H2YpvQ5u2/Yt6CRpLIUVVh8SGg1+gFA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.12.1': - resolution: {integrity: sha512-CrYnV8SZIgArQ9LKH0xEF95PKXzX9WkRSc5j55arOSBeDCeDUQk1Bg/iKdnDiuj5HC1hZpvzwMzSBJjv+Z70jA==} + '@swc/core-linux-x64-gnu@1.13.4': + resolution: {integrity: sha512-rSUcxgpFF0L8Fk1CbUf946XCX1CRp6eaHfKqplqFNWCHv8HyqAtSFvgCHhT+bXru6Ca/p3sLC775SUeSWhsJ9w==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.12.1': - resolution: {integrity: sha512-BQMl3d0HaGB0/h2xcKlGtjk/cGRn2tnbsaChAKcjFdCepblKBCz1pgO/mL7w5iXq3s57wMDUn++71/a5RAkZOA==} + '@swc/core-linux-x64-musl@1.13.4': + resolution: {integrity: sha512-qY77eFUvmdXNSmTW+I1fsz4enDuB0I2fE7gy6l9O4koSfjcCxkXw2X8x0lmKLm3FRiINS1XvZSg2G+q4NNQCRQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.12.1': - resolution: {integrity: sha512-b7NeGnpqTfmIGtUqXBl0KqoSmOnH64nRZoT5l4BAGdvwY7nxitWR94CqZuwyLPty/bLywmyDA9uO12Kvgb3+gg==} + '@swc/core-win32-arm64-msvc@1.13.4': + resolution: {integrity: sha512-xjPeDrOf6elCokxuyxwoskM00JJFQMTT2hTQZE24okjG3JiXzSFV+TmzYSp+LWNxPpnufnUUy/9Ee8+AcpslGw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.12.1': - resolution: {integrity: sha512-iU/29X2D7cHBp1to62cUg/5Xk8K+lyOJiKIGGW5rdzTW/c2zz3d/ehgpzVP/rqC4NVr88MXspqHU4il5gmDajw==} + '@swc/core-win32-ia32-msvc@1.13.4': + resolution: {integrity: sha512-Ta+Bblc9tE9X9vQlpa3r3+mVnHYdKn09QsZ6qQHvuXGKWSS99DiyxKTYX2vxwMuoTObR0BHvnhNbaGZSV1VwNA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.12.1': - resolution: {integrity: sha512-+Zh+JKDwiFqV5N9yAd2DhYVGPORGh9cfenu1ptr9yge+eHAf7vZJcC3rnj6QMR1QJh0Y5VC9+YBjRFjZVA7XDw==} + '@swc/core-win32-x64-msvc@1.13.4': + resolution: {integrity: sha512-pHnb4QwGiuWs4Z9ePSgJ48HP3NZIno6l75SB8YLCiPVDiLhvCLKEjz/caPRsFsmet9BEP8e3bAf2MV8MXgaTSg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.12.1': - resolution: {integrity: sha512-aKXdDTqxTVFl/bKQZ3EQUjEMBEoF6JBv29moMZq0kbVO43na6u/u+3Vcbhbrh+A2N0X5OL4RaveuWfAjEgOmeA==} + '@swc/core@1.13.4': + resolution: {integrity: sha512-bCq2GCuKV16DSOOEdaRqHMm1Ok4YEoLoNdgdzp8BS/Hxxr/0NVCHBUgRLLRy/TlJGv20Idx+djd5FIDvsnqMaw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -1529,8 +1691,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.23': - resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} + '@swc/types@0.1.24': + resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==} '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -1541,8 +1703,8 @@ packages: '@types/accepts@1.3.7': resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} - '@types/async@3.2.24': - resolution: {integrity: sha512-8iHVLHsCCOBKjCF2KwFe0p9Z3rfM9mL+sSP8btyR5vTjJRAqpBYD28/ZLgXPf0pjG1VxOvtCV/BgXkQbpSe8Hw==} + '@types/async@3.2.25': + resolution: {integrity: sha512-O6Th/DI18XjrL9TX8LO9F/g26qAz5vynmQqlXt/qLGrskvzCKXKc5/tATz3G2N6lM8eOf3M8/StB14FncAmocg==} '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -1582,9 +1744,6 @@ packages: '@types/ejs@3.1.5': resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1612,8 +1771,8 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - '@types/jquery@3.5.32': - resolution: {integrity: sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==} + '@types/jquery@3.5.33': + resolution: {integrity: sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g==} '@types/js-cookie@3.0.6': resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} @@ -1642,12 +1801,21 @@ packages: '@types/koa@2.15.0': resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + '@types/lockfile@1.0.4': resolution: {integrity: sha512-Q8oFIHJHr+htLrTXN2FuZfg+WXVHQRwU/hC2GpUu+Q8e3FUM9EDkS2pE3R2AO1ZGu56f479ybdMCNF1DAu8cAQ==} + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} @@ -1666,8 +1834,8 @@ packages: '@types/node-fetch@2.6.12': resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - '@types/node@24.1.0': - resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} + '@types/node@24.3.0': + resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} '@types/oidc-provider@9.1.1': resolution: {integrity: sha512-sG4UcE4AbUwAsEpyrcyoqZ383wJiQObZU+gTa1Iv288+l09HwSr88hBZE2IBLlXS+RKmLId0i4B430PBFO/XRA==} @@ -1678,13 +1846,13 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + '@types/react-dom@19.1.7': + resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} peerDependencies: '@types/react': ^19.0.0 - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} + '@types/react@19.1.10': + resolution: {integrity: sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==} '@types/semver@7.7.0': resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} @@ -1745,13 +1913,13 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.38.0': - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + '@typescript-eslint/eslint-plugin@8.40.0': + resolution: {integrity: sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.38.0 + '@typescript-eslint/parser': ^8.40.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/parser@7.18.0': resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} @@ -1763,32 +1931,32 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + '@typescript-eslint/parser@8.40.0': + resolution: {integrity: sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + '@typescript-eslint/project-service@8.40.0': + resolution: {integrity: sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/scope-manager@7.18.0': resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + '@typescript-eslint/scope-manager@8.40.0': + resolution: {integrity: sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + '@typescript-eslint/tsconfig-utils@8.40.0': + resolution: {integrity: sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/type-utils@7.18.0': resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} @@ -1800,19 +1968,19 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.38.0': - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + '@typescript-eslint/type-utils@8.40.0': + resolution: {integrity: sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/types@7.18.0': resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + '@typescript-eslint/types@8.40.0': + resolution: {integrity: sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -1824,11 +1992,11 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + '@typescript-eslint/typescript-estree@8.40.0': + resolution: {integrity: sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/utils@7.18.0': resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} @@ -1836,19 +2004,19 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.38.0': - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + '@typescript-eslint/utils@8.40.0': + resolution: {integrity: sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/visitor-keys@7.18.0': resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + '@typescript-eslint/visitor-keys@8.40.0': + resolution: {integrity: sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -1929,10 +2097,11 @@ packages: cpu: [x64] os: [win32] - '@vitejs/plugin-react-swc@3.10.2': - resolution: {integrity: sha512-xD3Rdvrt5LgANug7WekBn1KhcvLn1H3jNBfJRL3reeOIua/WnZOEV5qi5qIBq5T8R0jUDmRtxuvk4bPhzGHDWw==} + '@vitejs/plugin-react-swc@4.0.1': + resolution: {integrity: sha512-NQhPjysi5duItyrMd5JWZFf2vNOuSMyw+EoZyTBDzk+DkfYD8WNrsUs09sELV2cr1P15nufsN25hsUBt4CKF9Q==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - vite: ^4 || ^5 || ^6 || ^7.0.0-beta.0 + vite: ^4 || ^5 || ^6 || ^7 '@vitejs/plugin-vue@6.0.1': resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==} @@ -1970,51 +2139,51 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vue/compiler-core@3.5.18': - resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} + '@vue/compiler-core@3.5.19': + resolution: {integrity: sha512-/afpyvlkrSNYbPo94Qu8GtIOWS+g5TRdOvs6XZNw6pWQQmj5pBgSZvEPOIZlqWq0YvoUhDDQaQ2TnzuJdOV4hA==} - '@vue/compiler-dom@3.5.18': - resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==} + '@vue/compiler-dom@3.5.19': + resolution: {integrity: sha512-Drs6rPHQZx/pN9S6ml3Z3K/TWCIRPvzG2B/o5kFK9X0MNHt8/E+38tiRfojufrYBfA6FQUFB2qBBRXlcSXWtOA==} - '@vue/compiler-sfc@3.5.18': - resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==} + '@vue/compiler-sfc@3.5.19': + resolution: {integrity: sha512-YWCm1CYaJ+2RvNmhCwI7t3I3nU+hOrWGWMsn+Z/kmm1jy5iinnVtlmkiZwbLlbV1SRizX7vHsc0/bG5dj0zRTg==} - '@vue/compiler-ssr@3.5.18': - resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==} + '@vue/compiler-ssr@3.5.19': + resolution: {integrity: sha512-/wx0VZtkWOPdiQLWPeQeqpHWR/LuNC7bHfSX7OayBTtUy8wur6vT6EQIX6Et86aED6J+y8tTw43qo2uoqGg5sw==} - '@vue/devtools-api@7.7.7': - resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==} + '@vue/devtools-api@8.0.0': + resolution: {integrity: sha512-I2jF/knesMU36zTw1hnExjoixDZvDoantiWKVrHpLd2J160zqqe8vp3vrGfjWdfuHmPJwSXe/YNG3rYOYiwy1Q==} - '@vue/devtools-kit@7.7.7': - resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==} + '@vue/devtools-kit@8.0.0': + resolution: {integrity: sha512-b11OeQODkE0bctdT0RhL684pEV2DPXJ80bjpywVCbFn1PxuL3bmMPDoJKjbMnnoWbrnUYXYzFfmMWBZAMhORkQ==} - '@vue/devtools-shared@7.7.7': - resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==} + '@vue/devtools-shared@8.0.0': + resolution: {integrity: sha512-jrKnbjshQCiOAJanoeJjTU7WaCg0Dz2BUal6SaR6VM/P3hiFdX5Q6Pxl73ZMnrhCxNK9nAg5hvvRGqs+6dtU1g==} - '@vue/reactivity@3.5.18': - resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==} + '@vue/reactivity@3.5.19': + resolution: {integrity: sha512-4bueZg2qs5MSsK2dQk3sssV0cfvxb/QZntTC8v7J448GLgmfPkQ+27aDjlt40+XFqOwUq5yRxK5uQh14Fc9eVA==} - '@vue/runtime-core@3.5.18': - resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==} + '@vue/runtime-core@3.5.19': + resolution: {integrity: sha512-TaooCr8Hge1sWjLSyhdubnuofs3shhzZGfyD11gFolZrny76drPwBVQj28/z/4+msSFb18tOIg6VVVgf9/IbIA==} - '@vue/runtime-dom@3.5.18': - resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==} + '@vue/runtime-dom@3.5.19': + resolution: {integrity: sha512-qmahqeok6ztuUTmV8lqd7N9ymbBzctNF885n8gL3xdCC1u2RnM/coX16Via0AiONQXUoYpxPojL3U1IsDgSWUQ==} - '@vue/server-renderer@3.5.18': - resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==} + '@vue/server-renderer@3.5.19': + resolution: {integrity: sha512-ZJ/zV9SQuaIO+BEEVq/2a6fipyrSYfjKMU3267bPUk+oTx/hZq3RzV7VCh0Unlppt39Bvh6+NzxeopIFv4HJNg==} peerDependencies: - vue: 3.5.18 + vue: 3.5.19 - '@vue/shared@3.5.18': - resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==} + '@vue/shared@3.5.19': + resolution: {integrity: sha512-IhXCOn08wgKrLQxRFKKlSacWg4Goi1BolrdEeLYn6tgHjJNXVrWJ5nzoxZqNwl5p88aLlQ8LOaoMa3AYvaKJ/Q==} - '@vueuse/core@13.6.0': - resolution: {integrity: sha512-DJbD5fV86muVmBgS9QQPddVX7d9hWYswzlf4bIyUD2dj8GC46R1uNClZhVAmsdVts4xb2jwp1PbpuiA50Qee1A==} + '@vueuse/core@13.7.0': + resolution: {integrity: sha512-myagn09+c6BmS6yHc1gTwwsdZilAovHslMjyykmZH3JNyzI5HoWhv114IIdytXiPipdHJ2gDUx0PB93jRduJYg==} peerDependencies: vue: ^3.5.0 - '@vueuse/integrations@13.6.0': - resolution: {integrity: sha512-dVFdgwYvkYjdizRL3ESdUW+Hg84i9Yhuzs+Ec3kEcuzJmT5xhiL/IGdw4z394qSBngUQvFi+wbHwhHX3EGbAxQ==} + '@vueuse/integrations@13.7.0': + resolution: {integrity: sha512-Na5p0ONLepNV/xCBi8vBMuzCOZh9CFT/OHnrUlABWXgWTWSHM3wrVaLS1xvAijPLU5B1ysyJDDW/hKak80oLGA==} peerDependencies: async-validator: ^4 axios: ^1 @@ -2055,11 +2224,11 @@ packages: universal-cookie: optional: true - '@vueuse/metadata@13.6.0': - resolution: {integrity: sha512-rnIH7JvU7NjrpexTsl2Iwv0V0yAx9cw7+clymjKuLSXG0QMcLD0LDgdNmXic+qL0SGvgSVPEpM9IDO/wqo1vkQ==} + '@vueuse/metadata@13.7.0': + resolution: {integrity: sha512-8okFhS/1ite8EwUdZZfvTYowNTfXmVCOrBFlA31O0HD8HKXhY+WtTRyF0LwbpJfoFPc+s9anNJIXMVrvP7UTZg==} - '@vueuse/shared@13.6.0': - resolution: {integrity: sha512-pDykCSoS2T3fsQrYqf9SyF0QXWHmcGPQ+qiOVjlYSzlWd9dgppB2bFSM1GgKKkt7uzn0BBMV3IbJsUfHG2+BCg==} + '@vueuse/shared@13.7.0': + resolution: {integrity: sha512-Wi2LpJi4UA9kM0OZ0FCZslACp92HlVNw1KPaDY6RAzvQ+J1s7seOtcOpmkfbD5aBSmMn9NvOakc8ZxMxmDXTIg==} peerDependencies: vue: ^3.5.0 @@ -2654,6 +2823,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2808,8 +2982,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.32.0: - resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + eslint@9.33.0: + resolution: {integrity: sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2905,8 +3079,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -3006,8 +3181,8 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} engines: {node: '>=14.14'} fs-extra@8.1.0: @@ -3205,8 +3380,8 @@ packages: i18next-browser-languagedetector@8.2.0: resolution: {integrity: sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g==} - i18next@25.3.2: - resolution: {integrity: sha512-JSnbZDxRVbphc5jiptxr3o2zocy5dEqpVm9qCGdJwRNO+9saUJS0/u4LnM/13C23fUEWxAylPqKU/NpMV/IjqA==} + i18next@25.4.0: + resolution: {integrity: sha512-UH5aiamXsO3cfrZFurCHiB6YSs3C+s+XY9UaJllMMSbmaoXILxFgqDEZu4NbfzJFjmUo3BNMa++Rjkr3ofjfLw==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -3469,6 +3644,9 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonminify@0.4.2: resolution: {integrity: sha512-mEtP5ECD0293D+s45JhDutqF5mFCkWY8ClrPFxjSFR2KUoantofky7noSzyKnAnD9Gd8pXHZSUd5bgzLDUBbfA==} engines: {node: '>=0.8.0', npm: '>=1.1.0'} @@ -3595,14 +3773,17 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lucide-react@0.525.0: - resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} + lucide-react@0.541.0: + resolution: {integrity: sha512-s0Vircsu5WaGv2KoJZ5+SoxiAJ3UXV5KqEM3eIFDHaHkcLIFdIWgXtZ412+Gh02UsdS7Was+jvEpBvPCWQISlg==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.18: + resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} + mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} @@ -3953,13 +4134,13 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - playwright-core@1.54.1: - resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} + playwright-core@1.55.0: + resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} engines: {node: '>=18'} hasBin: true - playwright@1.54.1: - resolution: {integrity: sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==} + playwright@1.55.0: + resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} engines: {node: '>=18'} hasBin: true @@ -3978,8 +4159,8 @@ packages: promise@1.3.0: resolution: {integrity: sha512-R9WrbTF3EPkVtWjp7B7umQGVndpsi+rsDAfrR4xAALQpFLa/+2OriecLhawxzvii2gd9+DZFwROWDuUUaqS5yA==} - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -4028,21 +4209,21 @@ packages: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} engines: {node: '>= 0.8'} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: - react: ^19.1.0 + react: ^19.1.1 - react-hook-form@7.61.1: - resolution: {integrity: sha512-2vbXUFDYgqEgM2RcXcAT2PwDW/80QARi+PKmHy5q2KhuKvOlG8iIYgf7eIlIANR5trW9fJbP4r5aub3a4egsew==} + react-hook-form@7.62.0: + resolution: {integrity: sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-i18next@15.6.1: - resolution: {integrity: sha512-uGrzSsOUUe2sDBG/+FJq2J1MM+Y4368/QW8OLEKSFvnDflHBbZhSd1u3UkW0Z06rMhZmnB/AQrhCpYfE5/5XNg==} + react-i18next@15.7.1: + resolution: {integrity: sha512-o4VsKh30fy7p0z5ACHuyWqB6xu9WpQIQy2/ZcbCqopNnrnTVOPn/nAv9uYP4xYAWg99QMpvZ9Bu/si3eGurzGw==} peerDependencies: - i18next: '>= 23.2.3' + i18next: '>= 23.4.0' react: '>= 16.8.0' react-dom: '*' react-native: '*' @@ -4075,15 +4256,15 @@ packages: '@types/react': optional: true - react-router-dom@7.7.1: - resolution: {integrity: sha512-bavdk2BA5r3MYalGKZ01u8PGuDBloQmzpBZVhDLrOOv1N943Wq6dcM9GhB3x8b7AbqPMEezauv4PeGkAJfy7FQ==} + react-router-dom@7.8.1: + resolution: {integrity: sha512-NkgBCF3sVgCiAWIlSt89GR2PLaksMpoo3HDCorpRfnCEfdtRPLiuTf+CNXvqZMI5SJLZCLpVCvcZrTdtGW64xQ==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.7.1: - resolution: {integrity: sha512-jVKHXoWRIsD/qS6lvGveckwb862EekvapdHJN/cGmzw40KnJH5gg53ujOJ4qX6EKIK9LSBfFed/xiQ5yeXNrUA==} + react-router@7.8.1: + resolution: {integrity: sha512-5cy/M8DHcG51/KUIka1nfZ2QeylS4PJRs6TT8I4PF5axVsI5JUxp0hC0NZ/AEEj8Vw7xsEoD7L/6FY+zoYaOGA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -4102,8 +4283,8 @@ packages: '@types/react': optional: true - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} readdirp@3.6.0: @@ -4170,8 +4351,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.40.1: - resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} + rollup@4.47.1: + resolution: {integrity: sha512-iasGAQoZ5dWDzULEUX3jiW0oB1qyFOepSyDyoU6S/OhVlDIwj5knI5QBa5RRQ0sK7OE0v+8VIi2JuV+G+3tfNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4323,8 +4504,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@3.9.1: - resolution: {integrity: sha512-HogZ8nMnv9VAQMrG+P7BleJFhrKHm3fi6CYyHRbUu61gJ0lpqLr6ecYEui31IYG1Cn9Bad7N2vf332iXHnn0bQ==} + shiki@3.11.0: + resolution: {integrity: sha512-VgKumh/ib38I1i3QkMn6mAQA6XjjQubqaAYhfge71glAll0/4xnt8L2oSuC45Qcr/G5Kbskj4RliMQddGmy/Og==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -4647,8 +4828,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -4667,8 +4848,8 @@ packages: underscore@1.13.7: resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -4757,8 +4938,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite-plugin-static-copy@3.1.1: - resolution: {integrity: sha512-oR53SkL5cX4KT1t18E/xU50vJDo0N8oaHza4EMk0Fm+2/u6nQivxavOfrDk3udWj+dizRizB/QnBvJOOQrTTAQ==} + vite-plugin-static-copy@3.1.2: + resolution: {integrity: sha512-aVmYOzptLVOI2b1jL+cmkF7O6uhRv1u5fvOkQgbohWZp2CbR22kn9ZqkCUIt9umKF7UhdbsEpshn1rf4720QFg==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4768,8 +4949,8 @@ packages: peerDependencies: vite: '>=2.6.0' - vite@7.0.6: - resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + vite@7.1.3: + resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4808,12 +4989,12 @@ packages: yaml: optional: true - vitepress@2.0.0-alpha.9: - resolution: {integrity: sha512-oUdZiT8ZCLf80Nw02Ha+v25aaabwik6iSMTEBXg46bMypNS/5i6AfMgFqpTuR5l3qG9XfNmau/SLT0sRiks2Zg==} + vitepress@2.0.0-alpha.12: + resolution: {integrity: sha512-yZwCwRRepcpN5QeAhwSnEJxS3I6zJcVixqL1dnm6km4cnriLpQyy2sXQDsE5Ti3pxGPbhU51nTMwI+XC1KNnJg==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4 - oxc-minify: ^0.78.0 + oxc-minify: ^0.82.1 postcss: ^8 peerDependenciesMeta: markdown-it-mathjax3: @@ -4855,8 +5036,8 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - vue@3.5.18: - resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==} + vue@3.5.19: + resolution: {integrity: sha512-ZRh0HTmw6KChRYWgN8Ox/wi7VhpuGlvMPrHjIsdRbzKNgECFLzy+dKL5z9yGaBSjCpmcfJCbh3I1tNSRmBz2tg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5004,8 +5185,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zustand@5.0.6: - resolution: {integrity: sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==} + zustand@5.0.8: + resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=18.0.0' @@ -5125,12 +5306,14 @@ snapshots: dependencies: '@babel/types': 7.27.0 - '@babel/parser@7.28.0': + '@babel/parser@7.28.3': dependencies: '@babel/types': 7.28.2 '@babel/runtime@7.27.6': {} + '@babel/runtime@7.28.3': {} + '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 @@ -5179,9 +5362,9 @@ snapshots: '@csstools/css-tokenizer@3.0.4': {} - '@docsearch/css@4.0.0-beta.5': {} + '@docsearch/css@4.0.0-beta.7': {} - '@docsearch/js@4.0.0-beta.5': {} + '@docsearch/js@4.0.0-beta.7': {} '@emnapi/core@1.4.0': dependencies: @@ -5205,156 +5388,234 @@ snapshots: '@esbuild/aix-ppc64@0.25.8': optional: true + '@esbuild/aix-ppc64@0.25.9': + optional: true + '@esbuild/android-arm64@0.25.5': optional: true '@esbuild/android-arm64@0.25.8': optional: true + '@esbuild/android-arm64@0.25.9': + optional: true + '@esbuild/android-arm@0.25.5': optional: true '@esbuild/android-arm@0.25.8': optional: true + '@esbuild/android-arm@0.25.9': + optional: true + '@esbuild/android-x64@0.25.5': optional: true '@esbuild/android-x64@0.25.8': optional: true + '@esbuild/android-x64@0.25.9': + optional: true + '@esbuild/darwin-arm64@0.25.5': optional: true '@esbuild/darwin-arm64@0.25.8': optional: true + '@esbuild/darwin-arm64@0.25.9': + optional: true + '@esbuild/darwin-x64@0.25.5': optional: true '@esbuild/darwin-x64@0.25.8': optional: true + '@esbuild/darwin-x64@0.25.9': + optional: true + '@esbuild/freebsd-arm64@0.25.5': optional: true '@esbuild/freebsd-arm64@0.25.8': optional: true + '@esbuild/freebsd-arm64@0.25.9': + optional: true + '@esbuild/freebsd-x64@0.25.5': optional: true '@esbuild/freebsd-x64@0.25.8': optional: true + '@esbuild/freebsd-x64@0.25.9': + optional: true + '@esbuild/linux-arm64@0.25.5': optional: true '@esbuild/linux-arm64@0.25.8': optional: true + '@esbuild/linux-arm64@0.25.9': + optional: true + '@esbuild/linux-arm@0.25.5': optional: true '@esbuild/linux-arm@0.25.8': optional: true + '@esbuild/linux-arm@0.25.9': + optional: true + '@esbuild/linux-ia32@0.25.5': optional: true '@esbuild/linux-ia32@0.25.8': optional: true + '@esbuild/linux-ia32@0.25.9': + optional: true + '@esbuild/linux-loong64@0.25.5': optional: true '@esbuild/linux-loong64@0.25.8': optional: true + '@esbuild/linux-loong64@0.25.9': + optional: true + '@esbuild/linux-mips64el@0.25.5': optional: true '@esbuild/linux-mips64el@0.25.8': optional: true + '@esbuild/linux-mips64el@0.25.9': + optional: true + '@esbuild/linux-ppc64@0.25.5': optional: true '@esbuild/linux-ppc64@0.25.8': optional: true + '@esbuild/linux-ppc64@0.25.9': + optional: true + '@esbuild/linux-riscv64@0.25.5': optional: true '@esbuild/linux-riscv64@0.25.8': optional: true + '@esbuild/linux-riscv64@0.25.9': + optional: true + '@esbuild/linux-s390x@0.25.5': optional: true '@esbuild/linux-s390x@0.25.8': optional: true + '@esbuild/linux-s390x@0.25.9': + optional: true + '@esbuild/linux-x64@0.25.5': optional: true '@esbuild/linux-x64@0.25.8': optional: true + '@esbuild/linux-x64@0.25.9': + optional: true + '@esbuild/netbsd-arm64@0.25.5': optional: true '@esbuild/netbsd-arm64@0.25.8': optional: true + '@esbuild/netbsd-arm64@0.25.9': + optional: true + '@esbuild/netbsd-x64@0.25.5': optional: true '@esbuild/netbsd-x64@0.25.8': optional: true + '@esbuild/netbsd-x64@0.25.9': + optional: true + '@esbuild/openbsd-arm64@0.25.5': optional: true '@esbuild/openbsd-arm64@0.25.8': optional: true + '@esbuild/openbsd-arm64@0.25.9': + optional: true + '@esbuild/openbsd-x64@0.25.5': optional: true '@esbuild/openbsd-x64@0.25.8': optional: true + '@esbuild/openbsd-x64@0.25.9': + optional: true + '@esbuild/openharmony-arm64@0.25.8': optional: true + '@esbuild/openharmony-arm64@0.25.9': + optional: true + '@esbuild/sunos-x64@0.25.5': optional: true '@esbuild/sunos-x64@0.25.8': optional: true + '@esbuild/sunos-x64@0.25.9': + optional: true + '@esbuild/win32-arm64@0.25.5': optional: true '@esbuild/win32-arm64@0.25.8': optional: true + '@esbuild/win32-arm64@0.25.9': + optional: true + '@esbuild/win32-ia32@0.25.5': optional: true '@esbuild/win32-ia32@0.25.8': optional: true + '@esbuild/win32-ia32@0.25.9': + optional: true + '@esbuild/win32-x64@0.25.5': optional: true '@esbuild/win32-x64@0.25.8': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': + '@esbuild/win32-x64@0.25.9': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0)': dependencies: - eslint: 9.32.0 + eslint: 9.33.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5367,13 +5628,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.15.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/core@0.15.1': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 @@ -5391,13 +5648,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.32.0': {} + '@eslint/js@9.33.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.4': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.15.1 + '@eslint/core': 0.15.2 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -5413,7 +5670,7 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify-json/simple-icons@1.2.45': + '@iconify-json/simple-icons@1.2.48': dependencies: '@iconify/types': 2.0.0 @@ -5440,6 +5697,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -5490,292 +5749,294 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.54.1': + '@playwright/test@1.55.0': dependencies: - playwright: 1.54.1 + playwright: 1.55.0 '@radix-ui/primitive@1.1.2': {} - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - react: 19.1.0 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-context@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.10)(react@19.1.1)': dependencies: - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - '@radix-ui/react-dialog@1.1.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.10 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) aria-hidden: 1.2.6 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.10)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.10)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.10 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) + + '@radix-ui/react-id@1.1.1(@types/react@19.1.10)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.10 + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) + + '@radix-ui/react-slot@1.2.3(@types/react@19.1.10)(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.10 + + '@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-toast@1.2.15(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - react: 19.1.0 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.10 - '@radix-ui/react-id@1.1.1(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.10)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.10 - '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.10 - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.10 - '@radix-ui/react-slot@1.2.3(@types/react@19.1.8)(react@19.1.0)': + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - '@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.10)(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.10)(react@19.1.1) + react: 19.1.1 optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@types/react': 19.1.10 - '@radix-ui/react-toast@1.2.14(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.8 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.8 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.8)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.8 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.8 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.8 - - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.8)(react@19.1.0)': - dependencies: - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.8 - - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0) - react: 19.1.0 - optionalDependencies: - '@types/react': 19.1.8 - - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - optionalDependencies: - '@types/react': 19.1.8 - '@types/react-dom': 19.1.6(@types/react@19.1.8) - - '@rolldown/pluginutils@1.0.0-beta.11': {} + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) '@rolldown/pluginutils@1.0.0-beta.29': {} - '@rollup/pluginutils@5.1.4(rollup@4.40.1)': + '@rolldown/pluginutils@1.0.0-beta.32': {} + + '@rollup/pluginutils@5.1.4(rollup@4.47.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.2 + picomatch: 4.0.3 optionalDependencies: - rollup: 4.40.1 + rollup: 4.47.1 - '@rollup/rollup-android-arm-eabi@4.40.1': + '@rollup/rollup-android-arm-eabi@4.47.1': optional: true - '@rollup/rollup-android-arm64@4.40.1': + '@rollup/rollup-android-arm64@4.47.1': optional: true - '@rollup/rollup-darwin-arm64@4.40.1': + '@rollup/rollup-darwin-arm64@4.47.1': optional: true - '@rollup/rollup-darwin-x64@4.40.1': + '@rollup/rollup-darwin-x64@4.47.1': optional: true - '@rollup/rollup-freebsd-arm64@4.40.1': + '@rollup/rollup-freebsd-arm64@4.47.1': optional: true - '@rollup/rollup-freebsd-x64@4.40.1': + '@rollup/rollup-freebsd-x64@4.47.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': + '@rollup/rollup-linux-arm-gnueabihf@4.47.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.40.1': + '@rollup/rollup-linux-arm-musleabihf@4.47.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.40.1': + '@rollup/rollup-linux-arm64-gnu@4.47.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.40.1': + '@rollup/rollup-linux-arm64-musl@4.47.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': + '@rollup/rollup-linux-loongarch64-gnu@4.47.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': + '@rollup/rollup-linux-ppc64-gnu@4.47.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.40.1': + '@rollup/rollup-linux-riscv64-gnu@4.47.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.40.1': + '@rollup/rollup-linux-riscv64-musl@4.47.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.40.1': + '@rollup/rollup-linux-s390x-gnu@4.47.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.40.1': + '@rollup/rollup-linux-x64-gnu@4.47.1': optional: true - '@rollup/rollup-linux-x64-musl@4.40.1': + '@rollup/rollup-linux-x64-musl@4.47.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.40.1': + '@rollup/rollup-win32-arm64-msvc@4.47.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.40.1': + '@rollup/rollup-win32-ia32-msvc@4.47.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.40.1': + '@rollup/rollup-win32-x64-msvc@4.47.1': optional: true '@rtsao/scc@1.1.0': {} @@ -5784,38 +6045,38 @@ snapshots: '@scarf/scarf@1.4.0': {} - '@shikijs/core@3.9.1': + '@shikijs/core@3.11.0': dependencies: - '@shikijs/types': 3.9.1 + '@shikijs/types': 3.11.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.9.1': + '@shikijs/engine-javascript@3.11.0': dependencies: - '@shikijs/types': 3.9.1 + '@shikijs/types': 3.11.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.9.1': + '@shikijs/engine-oniguruma@3.11.0': dependencies: - '@shikijs/types': 3.9.1 + '@shikijs/types': 3.11.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.9.1': + '@shikijs/langs@3.11.0': dependencies: - '@shikijs/types': 3.9.1 + '@shikijs/types': 3.11.0 - '@shikijs/themes@3.9.1': + '@shikijs/themes@3.11.0': dependencies: - '@shikijs/types': 3.9.1 + '@shikijs/types': 3.11.0 - '@shikijs/transformers@3.9.1': + '@shikijs/transformers@3.11.0': dependencies: - '@shikijs/core': 3.9.1 - '@shikijs/types': 3.9.1 + '@shikijs/core': 3.11.0 + '@shikijs/types': 3.11.0 - '@shikijs/types@3.9.1': + '@shikijs/types@3.11.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -5882,12 +6143,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.10) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.10) - '@svgr/core@8.1.0(typescript@5.8.3)': + '@svgr/core@8.1.0(typescript@5.9.2)': dependencies: '@babel/core': 7.26.10 '@svgr/babel-preset': 8.1.0(@babel/core@7.26.10) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.8.3) + cosmiconfig: 8.3.6(typescript@5.9.2) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -5898,65 +6159,65 @@ snapshots: '@babel/types': 7.27.0 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.8.3))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.2))': dependencies: '@babel/core': 7.26.10 '@svgr/babel-preset': 8.1.0(@babel/core@7.26.10) - '@svgr/core': 8.1.0(typescript@5.8.3) + '@svgr/core': 8.1.0(typescript@5.9.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@swc/core-darwin-arm64@1.12.1': + '@swc/core-darwin-arm64@1.13.4': optional: true - '@swc/core-darwin-x64@1.12.1': + '@swc/core-darwin-x64@1.13.4': optional: true - '@swc/core-linux-arm-gnueabihf@1.12.1': + '@swc/core-linux-arm-gnueabihf@1.13.4': optional: true - '@swc/core-linux-arm64-gnu@1.12.1': + '@swc/core-linux-arm64-gnu@1.13.4': optional: true - '@swc/core-linux-arm64-musl@1.12.1': + '@swc/core-linux-arm64-musl@1.13.4': optional: true - '@swc/core-linux-x64-gnu@1.12.1': + '@swc/core-linux-x64-gnu@1.13.4': optional: true - '@swc/core-linux-x64-musl@1.12.1': + '@swc/core-linux-x64-musl@1.13.4': optional: true - '@swc/core-win32-arm64-msvc@1.12.1': + '@swc/core-win32-arm64-msvc@1.13.4': optional: true - '@swc/core-win32-ia32-msvc@1.12.1': + '@swc/core-win32-ia32-msvc@1.13.4': optional: true - '@swc/core-win32-x64-msvc@1.12.1': + '@swc/core-win32-x64-msvc@1.13.4': optional: true - '@swc/core@1.12.1': + '@swc/core@1.13.4': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.23 + '@swc/types': 0.1.24 optionalDependencies: - '@swc/core-darwin-arm64': 1.12.1 - '@swc/core-darwin-x64': 1.12.1 - '@swc/core-linux-arm-gnueabihf': 1.12.1 - '@swc/core-linux-arm64-gnu': 1.12.1 - '@swc/core-linux-arm64-musl': 1.12.1 - '@swc/core-linux-x64-gnu': 1.12.1 - '@swc/core-linux-x64-musl': 1.12.1 - '@swc/core-win32-arm64-msvc': 1.12.1 - '@swc/core-win32-ia32-msvc': 1.12.1 - '@swc/core-win32-x64-msvc': 1.12.1 + '@swc/core-darwin-arm64': 1.13.4 + '@swc/core-darwin-x64': 1.13.4 + '@swc/core-linux-arm-gnueabihf': 1.13.4 + '@swc/core-linux-arm64-gnu': 1.13.4 + '@swc/core-linux-arm64-musl': 1.13.4 + '@swc/core-linux-x64-gnu': 1.13.4 + '@swc/core-linux-x64-musl': 1.13.4 + '@swc/core-win32-arm64-msvc': 1.13.4 + '@swc/core-win32-ia32-msvc': 1.13.4 + '@swc/core-win32-x64-msvc': 1.13.4 '@swc/counter@0.1.3': {} - '@swc/types@0.1.23': + '@swc/types@0.1.24': dependencies: '@swc/counter': 0.1.3 @@ -5969,14 +6230,14 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 - '@types/async@3.2.24': {} + '@types/async@3.2.25': {} '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/chai@5.2.2': dependencies: @@ -5984,7 +6245,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/content-disposition@0.5.9': {} @@ -5999,15 +6260,15 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.3 '@types/keygrip': 1.0.6 - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/cors@2.8.17': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/debug@4.1.12': dependencies: @@ -6017,13 +6278,11 @@ snapshots: '@types/ejs@3.1.5': {} - '@types/estree@1.0.7': {} - '@types/estree@1.0.8': {} '@types/express-serve-static-core@5.0.7': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -6040,11 +6299,11 @@ snapshots: '@types/formidable@3.4.5': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/hast@3.0.4': dependencies: @@ -6054,7 +6313,7 @@ snapshots: '@types/http-errors@2.0.5': {} - '@types/jquery@3.5.32': + '@types/jquery@3.5.33': dependencies: '@types/sizzle': 2.3.9 @@ -6062,7 +6321,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -6075,7 +6334,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/keygrip@1.0.6': {} @@ -6092,14 +6351,23 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 24.1.0 + '@types/node': 24.3.0 + + '@types/linkify-it@5.0.0': {} '@types/lockfile@1.0.4': {} + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 + '@types/mdurl@2.0.0': {} + '@types/methods@1.1.4': {} '@types/mime-types@3.0.1': {} @@ -6112,28 +6380,28 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 form-data: 4.0.3 - '@types/node@24.1.0': + '@types/node@24.3.0': dependencies: - undici-types: 7.8.0 + undici-types: 7.10.0 '@types/oidc-provider@9.1.1': dependencies: '@types/keygrip': 1.0.6 '@types/koa': 2.15.0 - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/qs@6.9.18': {} '@types/range-parser@1.2.7': {} - '@types/react-dom@19.1.6(@types/react@19.1.8)': + '@types/react-dom@19.1.7(@types/react@19.1.10)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - '@types/react@19.1.8': + '@types/react@19.1.10': dependencies: csstype: 3.1.3 @@ -6142,12 +6410,12 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.1.0 + '@types/node': 24.3.0 '@types/send': 0.17.4 '@types/sinon@17.0.4': @@ -6162,7 +6430,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 24.1.0 + '@types/node': 24.3.0 form-data: 4.0.3 '@types/supertest@6.0.3': @@ -6177,7 +6445,7 @@ snapshots: '@types/tar@6.1.13': dependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 minipass: 4.2.8 '@types/tough-cookie@4.0.5': {} @@ -6192,72 +6460,72 @@ snapshots: '@types/whatwg-mimetype@3.0.2': {} - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2))(eslint@9.33.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.33.0)(typescript@5.9.2) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/type-utils': 7.18.0(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/utils': 7.18.0(eslint@9.33.0)(typescript@5.9.2) '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 9.32.0 + eslint: 9.33.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.33.0)(typescript@5.9.2))(eslint@9.33.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.32.0 + '@typescript-eslint/parser': 8.40.0(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.40.0 + '@typescript-eslint/type-utils': 8.40.0(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.40.0 + eslint: 9.33.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.32.0 + eslint: 9.33.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.40.0(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/scope-manager': 8.40.0 + '@typescript-eslint/types': 8.40.0 + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.40.0 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.32.0 - typescript: 5.8.3 + eslint: 9.33.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.40.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2) + '@typescript-eslint/types': 8.40.0 debug: 4.4.1(supports-color@8.1.1) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6266,44 +6534,44 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.38.0': + '@typescript-eslint/scope-manager@8.40.0': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/types': 8.40.0 + '@typescript-eslint/visitor-keys': 8.40.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.40.0(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - '@typescript-eslint/type-utils@7.18.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.9.2) + '@typescript-eslint/utils': 7.18.0(eslint@9.33.0)(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.32.0 - ts-api-utils: 1.4.3(typescript@5.8.3) + eslint: 9.33.0 + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.40.0(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/types': 8.40.0 + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.40.0(eslint@9.33.0)(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) - eslint: 9.32.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + eslint: 9.33.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/types@8.40.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -6312,47 +6580,47 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.40.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/project-service': 8.40.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.40.0(typescript@5.9.2) + '@typescript-eslint/types': 8.40.0 + '@typescript-eslint/visitor-keys': 8.40.0 debug: 4.4.1(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/utils@7.18.0(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) - eslint: 9.32.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.9.2) + eslint: 9.33.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.40.0(eslint@9.33.0)(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - eslint: 9.32.0 - typescript: 5.8.3 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) + '@typescript-eslint/scope-manager': 8.40.0 + '@typescript-eslint/types': 8.40.0 + '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.2) + eslint: 9.33.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6361,9 +6629,9 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.38.0': + '@typescript-eslint/visitor-keys@8.40.0': dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.40.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -6415,19 +6683,19 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.3.3': optional: true - '@vitejs/plugin-react-swc@3.10.2(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))': + '@vitejs/plugin-react-swc@4.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))': dependencies: - '@rolldown/pluginutils': 1.0.0-beta.11 - '@swc/core': 1.12.1 - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + '@rolldown/pluginutils': 1.0.0-beta.32 + '@swc/core': 1.13.4 + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-vue@6.0.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))(vue@3.5.18(typescript@5.8.3))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))(vue@3.5.19(typescript@5.9.2))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) - vue: 3.5.18(typescript@5.8.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vue: 3.5.19(typescript@5.9.2) '@vitest/expect@3.2.4': dependencies: @@ -6437,13 +6705,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))': + '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) '@vitest/pretty-format@3.2.4': dependencies: @@ -6471,43 +6739,43 @@ snapshots: loupe: 3.2.0 tinyrainbow: 2.0.0 - '@vue/compiler-core@3.5.18': + '@vue/compiler-core@3.5.19': dependencies: - '@babel/parser': 7.28.0 - '@vue/shared': 3.5.18 + '@babel/parser': 7.28.3 + '@vue/shared': 3.5.19 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.18': + '@vue/compiler-dom@3.5.19': dependencies: - '@vue/compiler-core': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/compiler-core': 3.5.19 + '@vue/shared': 3.5.19 - '@vue/compiler-sfc@3.5.18': + '@vue/compiler-sfc@3.5.19': dependencies: - '@babel/parser': 7.28.0 - '@vue/compiler-core': 3.5.18 - '@vue/compiler-dom': 3.5.18 - '@vue/compiler-ssr': 3.5.18 - '@vue/shared': 3.5.18 + '@babel/parser': 7.28.3 + '@vue/compiler-core': 3.5.19 + '@vue/compiler-dom': 3.5.19 + '@vue/compiler-ssr': 3.5.19 + '@vue/shared': 3.5.19 estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.18 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.18': + '@vue/compiler-ssr@3.5.19': dependencies: - '@vue/compiler-dom': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/compiler-dom': 3.5.19 + '@vue/shared': 3.5.19 - '@vue/devtools-api@7.7.7': + '@vue/devtools-api@8.0.0': dependencies: - '@vue/devtools-kit': 7.7.7 + '@vue/devtools-kit': 8.0.0 - '@vue/devtools-kit@7.7.7': + '@vue/devtools-kit@8.0.0': dependencies: - '@vue/devtools-shared': 7.7.7 + '@vue/devtools-shared': 8.0.0 birpc: 2.5.0 hookable: 5.5.3 mitt: 3.0.1 @@ -6515,56 +6783,56 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.2 - '@vue/devtools-shared@7.7.7': + '@vue/devtools-shared@8.0.0': dependencies: rfdc: 1.4.1 - '@vue/reactivity@3.5.18': + '@vue/reactivity@3.5.19': dependencies: - '@vue/shared': 3.5.18 + '@vue/shared': 3.5.19 - '@vue/runtime-core@3.5.18': + '@vue/runtime-core@3.5.19': dependencies: - '@vue/reactivity': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/reactivity': 3.5.19 + '@vue/shared': 3.5.19 - '@vue/runtime-dom@3.5.18': + '@vue/runtime-dom@3.5.19': dependencies: - '@vue/reactivity': 3.5.18 - '@vue/runtime-core': 3.5.18 - '@vue/shared': 3.5.18 + '@vue/reactivity': 3.5.19 + '@vue/runtime-core': 3.5.19 + '@vue/shared': 3.5.19 csstype: 3.1.3 - '@vue/server-renderer@3.5.18(vue@3.5.18(typescript@5.8.3))': + '@vue/server-renderer@3.5.19(vue@3.5.19(typescript@5.9.2))': dependencies: - '@vue/compiler-ssr': 3.5.18 - '@vue/shared': 3.5.18 - vue: 3.5.18(typescript@5.8.3) + '@vue/compiler-ssr': 3.5.19 + '@vue/shared': 3.5.19 + vue: 3.5.19(typescript@5.9.2) - '@vue/shared@3.5.18': {} + '@vue/shared@3.5.19': {} - '@vueuse/core@13.6.0(vue@3.5.18(typescript@5.8.3))': + '@vueuse/core@13.7.0(vue@3.5.19(typescript@5.9.2))': dependencies: '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 13.6.0 - '@vueuse/shared': 13.6.0(vue@3.5.18(typescript@5.8.3)) - vue: 3.5.18(typescript@5.8.3) + '@vueuse/metadata': 13.7.0 + '@vueuse/shared': 13.7.0(vue@3.5.19(typescript@5.9.2)) + vue: 3.5.19(typescript@5.9.2) - '@vueuse/integrations@13.6.0(axios@1.11.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3))': + '@vueuse/integrations@13.7.0(axios@1.11.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.19(typescript@5.9.2))': dependencies: - '@vueuse/core': 13.6.0(vue@3.5.18(typescript@5.8.3)) - '@vueuse/shared': 13.6.0(vue@3.5.18(typescript@5.8.3)) - vue: 3.5.18(typescript@5.8.3) + '@vueuse/core': 13.7.0(vue@3.5.19(typescript@5.9.2)) + '@vueuse/shared': 13.7.0(vue@3.5.19(typescript@5.9.2)) + vue: 3.5.19(typescript@5.9.2) optionalDependencies: axios: 1.11.0 focus-trap: 7.6.5 jwt-decode: 4.0.0 - '@vueuse/metadata@13.6.0': {} + '@vueuse/metadata@13.7.0': {} - '@vueuse/shared@13.6.0(vue@3.5.18(typescript@5.8.3))': + '@vueuse/shared@13.7.0(vue@3.5.19(typescript@5.9.2))': dependencies: - vue: 3.5.18(typescript@5.8.3) + vue: 3.5.19(typescript@5.9.2) accepts@1.3.8: dependencies: @@ -6897,14 +7165,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@8.3.6(typescript@5.8.3): + cosmiconfig@8.3.6(typescript@5.9.2): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 cross-env@7.0.3: dependencies: @@ -7083,7 +7351,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.17 - '@types/node': 24.1.0 + '@types/node': 24.3.0 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -7242,6 +7510,35 @@ snapshots: '@esbuild/win32-ia32': 0.25.8 '@esbuild/win32-x64': 0.25.8 + esbuild@0.25.9: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -7258,24 +7555,24 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@9.32.0): + eslint-compat-utils@0.5.1(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 semver: 7.7.2 - eslint-config-etherpad@4.0.4(eslint@9.32.0)(typescript@5.8.3): + eslint-config-etherpad@4.0.4(eslint@9.33.0)(typescript@5.9.2): dependencies: '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) - eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.32.0) - eslint-plugin-cypress: 2.15.2(eslint@9.32.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.32.0) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0) - eslint-plugin-mocha: 10.5.0(eslint@9.32.0) - eslint-plugin-n: 16.6.2(eslint@9.32.0) - eslint-plugin-prefer-arrow: 1.2.3(eslint@9.32.0) - eslint-plugin-promise: 6.6.0(eslint@9.32.0) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2))(eslint@9.33.0)(typescript@5.9.2) + '@typescript-eslint/parser': 7.18.0(eslint@9.33.0)(typescript@5.9.2) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.33.0) + eslint-plugin-cypress: 2.15.2(eslint@9.33.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.33.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.33.0) + eslint-plugin-mocha: 10.5.0(eslint@9.33.0) + eslint-plugin-n: 16.6.2(eslint@9.33.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@9.33.0) + eslint-plugin-promise: 6.6.0(eslint@9.33.0) eslint-plugin-you-dont-need-lodash-underscore: 6.14.0 transitivePeerDependencies: - eslint @@ -7292,51 +7589,51 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.32.0): + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.33.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) - eslint: 9.32.0 + eslint: 9.33.0 get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.14 unrs-resolver: 1.3.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.33.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.33.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) - eslint: 9.32.0 + '@typescript-eslint/parser': 7.18.0(eslint@9.33.0)(typescript@5.9.2) + eslint: 9.33.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.32.0) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.33.0) transitivePeerDependencies: - supports-color - eslint-plugin-cypress@2.15.2(eslint@9.32.0): + eslint-plugin-cypress@2.15.2(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 globals: 13.24.0 - eslint-plugin-es-x@7.8.0(eslint@9.32.0): + eslint-plugin-es-x@7.8.0(eslint@9.33.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) '@eslint-community/regexpp': 4.12.1 - eslint: 9.32.0 - eslint-compat-utils: 0.5.1(eslint@9.32.0) + eslint: 9.33.0 + eslint-compat-utils: 0.5.1(eslint@9.33.0) - eslint-plugin-eslint-comments@3.2.0(eslint@9.32.0): + eslint-plugin-eslint-comments@3.2.0(eslint@9.33.0): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.32.0 + eslint: 9.33.0 ignore: 5.3.2 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.33.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -7345,9 +7642,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.32.0 + eslint: 9.33.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.32.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.33.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.33.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7359,25 +7656,25 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.33.0)(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-mocha@10.5.0(eslint@9.32.0): + eslint-plugin-mocha@10.5.0(eslint@9.33.0): dependencies: - eslint: 9.32.0 - eslint-utils: 3.0.0(eslint@9.32.0) + eslint: 9.33.0 + eslint-utils: 3.0.0(eslint@9.33.0) globals: 13.24.0 rambda: 7.5.0 - eslint-plugin-n@16.6.2(eslint@9.32.0): + eslint-plugin-n@16.6.2(eslint@9.33.0): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) builtins: 5.1.0 - eslint: 9.32.0 - eslint-plugin-es-x: 7.8.0(eslint@9.32.0) + eslint: 9.33.0 + eslint-plugin-es-x: 7.8.0(eslint@9.33.0) get-tsconfig: 4.10.1 globals: 13.24.0 ignore: 5.3.2 @@ -7387,21 +7684,21 @@ snapshots: resolve: 1.22.10 semver: 7.7.2 - eslint-plugin-prefer-arrow@1.2.3(eslint@9.32.0): + eslint-plugin-prefer-arrow@1.2.3(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 - eslint-plugin-promise@6.6.0(eslint@9.32.0): + eslint-plugin-promise@6.6.0(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 - eslint-plugin-react-hooks@5.2.0(eslint@9.32.0): + eslint-plugin-react-hooks@5.2.0(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 - eslint-plugin-react-refresh@0.4.20(eslint@9.32.0): + eslint-plugin-react-refresh@0.4.20(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 eslint-plugin-you-dont-need-lodash-underscore@6.14.0: dependencies: @@ -7412,9 +7709,9 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@9.32.0): + eslint-utils@3.0.0(eslint@9.33.0): dependencies: - eslint: 9.32.0 + eslint: 9.33.0 eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -7423,16 +7720,16 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.32.0: + eslint@9.33.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.15.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 - '@eslint/plugin-kit': 0.3.4 + '@eslint/js': 9.33.0 + '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -7579,7 +7876,7 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.6(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -7684,10 +7981,10 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@11.3.0: + fs-extra@11.3.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-extra@8.1.0: @@ -7848,7 +8145,7 @@ snapshots: '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 - property-information: 7.0.0 + property-information: 7.1.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -7878,7 +8175,7 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 @@ -7892,7 +8189,7 @@ snapshots: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 he@1.2.0: {} @@ -7948,11 +8245,11 @@ snapshots: dependencies: '@babel/runtime': 7.27.6 - i18next@25.3.2(typescript@5.8.3): + i18next@25.4.0(typescript@5.9.2): dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.3 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 iconv-lite@0.6.3: dependencies: @@ -8207,6 +8504,12 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsonminify@0.4.2: {} jsonschema-draft4@1.0.0: {} @@ -8369,14 +8672,18 @@ snapshots: lru-cache@7.18.3: {} - lucide-react@0.525.0(react@19.1.0): + lucide-react@0.541.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.18: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + mark.js@8.11.1: {} math-intrinsics@1.1.0: {} @@ -8743,11 +9050,11 @@ snapshots: picomatch@4.0.3: {} - playwright-core@1.54.1: {} + playwright-core@1.55.0: {} - playwright@1.54.1: + playwright@1.55.0: dependencies: - playwright-core: 1.54.1 + playwright-core: 1.55.0 optionalDependencies: fsevents: 2.3.2 @@ -8765,7 +9072,7 @@ snapshots: dependencies: is-promise: 1.0.1 - property-information@7.0.0: {} + property-information@7.1.0: {} proxy-addr@2.0.7: dependencies: @@ -8816,67 +9123,67 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 - react-dom@19.1.0(react@19.1.0): + react-dom@19.1.1(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 scheduler: 0.26.0 - react-hook-form@7.61.1(react@19.1.0): + react-hook-form@7.62.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 - react-i18next@15.6.1(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + react-i18next@15.7.1(i18next@25.4.0(typescript@5.9.2))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2): dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.3 html-parse-stringify: 3.0.1 - i18next: 25.3.2(typescript@5.8.3) - react: 19.1.0 + i18next: 25.4.0(typescript@5.9.2) + react: 19.1.1 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) - typescript: 5.8.3 + react-dom: 19.1.1(react@19.1.1) + typescript: 5.9.2 - react-remove-scroll-bar@2.3.8(@types/react@19.1.8)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.1.10)(react@19.1.1): dependencies: - react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-style-singleton: 2.2.3(@types/react@19.1.10)(react@19.1.1) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - react-remove-scroll@2.7.1(@types/react@19.1.8)(react@19.1.0): + react-remove-scroll@2.7.1(@types/react@19.1.10)(react@19.1.1): dependencies: - react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.8)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0) + react: 19.1.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.10)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.10)(react@19.1.1) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.8)(react@19.1.0) - use-sidecar: 1.1.3(@types/react@19.1.8)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.1.10)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.10)(react@19.1.1) optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - react-router-dom@7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router-dom@7.8.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - react-router: 7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-router: 7.8.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - react-router@7.7.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-router@7.8.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: cookie: 1.0.2 - react: 19.1.0 + react: 19.1.1 set-cookie-parser: 2.7.1 optionalDependencies: - react-dom: 19.1.0(react@19.1.0) + react-dom: 19.1.1(react@19.1.1) - react-style-singleton@2.2.3(@types/react@19.1.8)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.1.10)(react@19.1.1): dependencies: get-nonce: 1.0.1 - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - react@19.1.0: {} + react@19.1.1: {} readdirp@3.6.0: dependencies: @@ -8956,30 +9263,30 @@ snapshots: rfdc@1.4.1: {} - rollup@4.40.1: + rollup@4.47.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.1 - '@rollup/rollup-android-arm64': 4.40.1 - '@rollup/rollup-darwin-arm64': 4.40.1 - '@rollup/rollup-darwin-x64': 4.40.1 - '@rollup/rollup-freebsd-arm64': 4.40.1 - '@rollup/rollup-freebsd-x64': 4.40.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 - '@rollup/rollup-linux-arm-musleabihf': 4.40.1 - '@rollup/rollup-linux-arm64-gnu': 4.40.1 - '@rollup/rollup-linux-arm64-musl': 4.40.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-musl': 4.40.1 - '@rollup/rollup-linux-s390x-gnu': 4.40.1 - '@rollup/rollup-linux-x64-gnu': 4.40.1 - '@rollup/rollup-linux-x64-musl': 4.40.1 - '@rollup/rollup-win32-arm64-msvc': 4.40.1 - '@rollup/rollup-win32-ia32-msvc': 4.40.1 - '@rollup/rollup-win32-x64-msvc': 4.40.1 + '@rollup/rollup-android-arm-eabi': 4.47.1 + '@rollup/rollup-android-arm64': 4.47.1 + '@rollup/rollup-darwin-arm64': 4.47.1 + '@rollup/rollup-darwin-x64': 4.47.1 + '@rollup/rollup-freebsd-arm64': 4.47.1 + '@rollup/rollup-freebsd-x64': 4.47.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.47.1 + '@rollup/rollup-linux-arm-musleabihf': 4.47.1 + '@rollup/rollup-linux-arm64-gnu': 4.47.1 + '@rollup/rollup-linux-arm64-musl': 4.47.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.47.1 + '@rollup/rollup-linux-ppc64-gnu': 4.47.1 + '@rollup/rollup-linux-riscv64-gnu': 4.47.1 + '@rollup/rollup-linux-riscv64-musl': 4.47.1 + '@rollup/rollup-linux-s390x-gnu': 4.47.1 + '@rollup/rollup-linux-x64-gnu': 4.47.1 + '@rollup/rollup-linux-x64-musl': 4.47.1 + '@rollup/rollup-win32-arm64-msvc': 4.47.1 + '@rollup/rollup-win32-ia32-msvc': 4.47.1 + '@rollup/rollup-win32-x64-msvc': 4.47.1 fsevents: 2.3.3 router@2.2.0: @@ -9137,14 +9444,14 @@ snapshots: shebang-regex@3.0.0: {} - shiki@3.9.1: + shiki@3.11.0: dependencies: - '@shikijs/core': 3.9.1 - '@shikijs/engine-javascript': 3.9.1 - '@shikijs/engine-oniguruma': 3.9.1 - '@shikijs/langs': 3.9.1 - '@shikijs/themes': 3.9.1 - '@shikijs/types': 3.9.1 + '@shikijs/core': 3.11.0 + '@shikijs/engine-javascript': 3.11.0 + '@shikijs/engine-oniguruma': 3.11.0 + '@shikijs/langs': 3.11.0 + '@shikijs/themes': 3.11.0 + '@shikijs/types': 3.11.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -9281,7 +9588,7 @@ snapshots: streamroller@3.1.5: dependencies: date-format: 4.0.14 - debug: 4.4.1(supports-color@8.1.1) + debug: 4.4.0 fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -9425,7 +9732,7 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 tinypool@1.1.1: {} @@ -9458,13 +9765,13 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.4.3(typescript@5.8.3): + ts-api-utils@1.4.3(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 tsconfig-paths@3.15.0: dependencies: @@ -9533,7 +9840,7 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript@5.8.3: {} + typescript@5.9.2: {} ueberdb2@5.0.14: {} @@ -9550,7 +9857,7 @@ snapshots: underscore@1.13.7: {} - undici-types@7.8.0: {} + undici-types@7.10.0: {} unified@11.0.5: dependencies: @@ -9623,20 +9930,20 @@ snapshots: url-join@4.0.1: {} - use-callback-ref@1.3.3(@types/react@19.1.8)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.10)(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 - use-sidecar@1.1.3(@types/react@19.1.8)(react@19.1.0): + use-sidecar@1.1.3(@types/react@19.1.10)(react@19.1.1): dependencies: detect-node-es: 1.1.0 - react: 19.1.0 + react: 19.1.1 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.10 vary@1.1.2: {} @@ -9655,13 +9962,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.2.4(@types/node@24.1.0)(tsx@4.20.3): + vite-node@3.2.4(@types/node@24.3.0)(tsx@4.20.3): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) transitivePeerDependencies: - '@types/node' - jiti @@ -9676,58 +9983,59 @@ snapshots: - tsx - yaml - vite-plugin-static-copy@3.1.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)): + vite-plugin-static-copy@3.1.2(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)): dependencies: chokidar: 3.6.0 - fs-extra: 11.3.0 + fs-extra: 11.3.1 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.14 - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) - vite-plugin-svgr@4.3.0(rollup@4.40.1)(typescript@5.8.3)(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)): + vite-plugin-svgr@4.3.0(rollup@4.47.1)(typescript@5.9.2)(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)): dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.40.1) - '@svgr/core': 8.1.0(typescript@5.8.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) + '@rollup/pluginutils': 5.1.4(rollup@4.47.1) + '@svgr/core': 8.1.0(typescript@5.9.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2)) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) transitivePeerDependencies: - rollup - supports-color - typescript - vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3): + vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3): dependencies: - esbuild: 0.25.5 - fdir: 6.4.6(picomatch@4.0.3) + esbuild: 0.25.9 + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.40.1 + rollup: 4.47.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.1.0 + '@types/node': 24.3.0 fsevents: 2.3.3 tsx: 4.20.3 - vitepress@2.0.0-alpha.9(@types/node@24.1.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.3): + vitepress@2.0.0-alpha.12(@types/node@24.3.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2): dependencies: - '@docsearch/css': 4.0.0-beta.5 - '@docsearch/js': 4.0.0-beta.5 - '@iconify-json/simple-icons': 1.2.45 - '@shikijs/core': 3.9.1 - '@shikijs/transformers': 3.9.1 - '@shikijs/types': 3.9.1 - '@vitejs/plugin-vue': 6.0.1(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3))(vue@3.5.18(typescript@5.8.3)) - '@vue/devtools-api': 7.7.7 - '@vue/shared': 3.5.18 - '@vueuse/core': 13.6.0(vue@3.5.18(typescript@5.8.3)) - '@vueuse/integrations': 13.6.0(axios@1.11.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.18(typescript@5.8.3)) + '@docsearch/css': 4.0.0-beta.7 + '@docsearch/js': 4.0.0-beta.7 + '@iconify-json/simple-icons': 1.2.48 + '@shikijs/core': 3.11.0 + '@shikijs/transformers': 3.11.0 + '@shikijs/types': 3.11.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 6.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))(vue@3.5.19(typescript@5.9.2)) + '@vue/devtools-api': 8.0.0 + '@vue/shared': 3.5.19 + '@vueuse/core': 13.7.0(vue@3.5.19(typescript@5.9.2)) + '@vueuse/integrations': 13.7.0(axios@1.11.0)(focus-trap@7.6.5)(jwt-decode@4.0.0)(vue@3.5.19(typescript@5.9.2)) focus-trap: 7.6.5 mark.js: 8.11.1 minisearch: 7.1.2 - shiki: 3.9.1 - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) - vue: 3.5.18(typescript@5.8.3) + shiki: 3.11.0 + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vue: 3.5.19(typescript@5.9.2) optionalDependencies: postcss: 8.5.6 transitivePeerDependencies: @@ -9755,11 +10063,11 @@ snapshots: - universal-cookie - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.1.0)(jsdom@26.1.0)(tsx@4.20.3): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jsdom@26.1.0)(tsx@4.20.3): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.6(@types/node@24.1.0)(tsx@4.20.3)) + '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -9777,12 +10085,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.6(@types/node@24.1.0)(tsx@4.20.3) - vite-node: 3.2.4(@types/node@24.1.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite-node: 3.2.4(@types/node@24.3.0)(tsx@4.20.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 24.1.0 + '@types/node': 24.3.0 jsdom: 26.1.0 transitivePeerDependencies: - jiti @@ -9800,15 +10108,15 @@ snapshots: void-elements@3.1.0: {} - vue@3.5.18(typescript@5.8.3): + vue@3.5.19(typescript@5.9.2): dependencies: - '@vue/compiler-dom': 3.5.18 - '@vue/compiler-sfc': 3.5.18 - '@vue/runtime-dom': 3.5.18 - '@vue/server-renderer': 3.5.18(vue@3.5.18(typescript@5.8.3)) - '@vue/shared': 3.5.18 + '@vue/compiler-dom': 3.5.19 + '@vue/compiler-sfc': 3.5.19 + '@vue/runtime-dom': 3.5.19 + '@vue/server-renderer': 3.5.19(vue@3.5.19(typescript@5.9.2)) + '@vue/shared': 3.5.19 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 w3c-xmlserializer@5.0.0: dependencies: @@ -9940,9 +10248,9 @@ snapshots: yocto-queue@0.1.0: {} - zustand@5.0.6(@types/react@19.1.8)(react@19.1.0): + zustand@5.0.8(@types/react@19.1.10)(react@19.1.1): optionalDependencies: - '@types/react': 19.1.8 - react: 19.1.0 + '@types/react': 19.1.10 + react: 19.1.1 zwitch@2.0.4: {} diff --git a/src/package.json b/src/package.json index 7060626a5..5c9bce403 100644 --- a/src/package.json +++ b/src/package.json @@ -82,8 +82,8 @@ "etherpad-lite": "node/server.ts" }, "devDependencies": { - "@playwright/test": "^1.54.1", - "@types/async": "^3.2.24", + "@playwright/test": "^1.55.0", + "@types/async": "^3.2.25", "@types/cookie-parser": "^1.4.9", "@types/cross-spawn": "^6.0.6", "@types/ejs": "^3.1.5", @@ -91,14 +91,14 @@ "@types/express-session": "^1.18.2", "@types/formidable": "^3.4.5", "@types/http-errors": "^2.0.5", - "@types/jquery": "^3.5.32", + "@types/jquery": "^3.5.33", "@types/js-cookie": "^3.0.6", "@types/jsdom": "^21.1.7", "@types/jsonminify": "^0.4.3", "@types/jsonwebtoken": "^9.0.10", "@types/mime-types": "^3.0.1", "@types/mocha": "^10.0.9", - "@types/node": "^24.0.14", + "@types/node": "^24.3.0", "@types/oidc-provider": "^9.1.1", "@types/semver": "^7.7.0", "@types/sinon": "^17.0.3", @@ -107,7 +107,7 @@ "@types/underscore": "^1.13.0", "@types/whatwg-mimetype": "^3.0.2", "chokidar": "^4.0.3", - "eslint": "^9.31.0", + "eslint": "^9.33.0", "eslint-config-etherpad": "^4.0.4", "etherpad-cli-client": "^3.0.4", "mocha": "^11.7.1", @@ -118,7 +118,7 @@ "sinon": "^21.0.0", "split-grid": "^1.0.11", "supertest": "^7.1.3", - "typescript": "^5.8.2", + "typescript": "^5.9.2", "vitest": "^3.2.4" }, "engines": { diff --git a/ui/package.json b/ui/package.json index 788475036..a6f975acc 100644 --- a/ui/package.json +++ b/ui/package.json @@ -11,7 +11,7 @@ }, "devDependencies": { "ep_etherpad-lite": "workspace:../src", - "typescript": "^5.8.2", - "vite": "^7.0.4" + "typescript": "^5.9.2", + "vite": "^7.1.3" } } From b10b28bdbe3638f89b5c3273f03f1eb2805bee6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:49:42 +0200 Subject: [PATCH 20/33] build(deps): bump jose from 6.0.12 to 6.0.13 (#7083) Bumps [jose](https://github.com/panva/jose) from 6.0.12 to 6.0.13. - [Release notes](https://github.com/panva/jose/releases) - [Changelog](https://github.com/panva/jose/blob/main/CHANGELOG.md) - [Commits](https://github.com/panva/jose/compare/v6.0.12...v6.0.13) --- updated-dependencies: - dependency-name: jose dependency-version: 6.0.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 12 ++++++------ src/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbf06af55..18c06ed7a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -180,8 +180,8 @@ importers: specifier: ^2.0.0 version: 2.0.0 jose: - specifier: ^6.0.12 - version: 6.0.12 + specifier: ^6.0.13 + version: 6.0.13 js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -3580,8 +3580,8 @@ packages: engines: {node: '>=10'} hasBin: true - jose@6.0.12: - resolution: {integrity: sha512-T8xypXs8CpmiIi78k0E+Lk7T2zlK4zDyg+o1CZ4AkOHgDg98ogdP2BeZ61lTFKFyoEwJ9RgAgN+SdM3iPgNonQ==} + jose@6.0.13: + resolution: {integrity: sha512-Yms4GpbmdANamS51kKK6w4hRlKx8KTxbWyAAKT/MhUMtqbIqh5mb2HjhTNUbk7TFL8/MBB5zWSDohL7ed4k/UA==} js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} @@ -8435,7 +8435,7 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 - jose@6.0.12: {} + jose@6.0.13: {} js-cookie@3.0.5: {} @@ -8893,7 +8893,7 @@ snapshots: '@koa/router': 13.1.1 debug: 4.4.1(supports-color@8.1.1) eta: 3.5.0 - jose: 6.0.12 + jose: 6.0.13 jsesc: 3.1.0 koa: 3.0.0 nanoid: 5.1.5 diff --git a/src/package.json b/src/package.json index 5c9bce403..9a616a306 100644 --- a/src/package.json +++ b/src/package.json @@ -43,7 +43,7 @@ "find-root": "1.1.0", "formidable": "^3.5.4", "http-errors": "^2.0.0", - "jose": "^6.0.12", + "jose": "^6.0.13", "js-cookie": "^3.0.5", "jsdom": "^26.1.0", "jsonminify": "0.4.2", From f470c951b483bb50f9996c10ab1760d5d02a592f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:49:50 +0200 Subject: [PATCH 21/33] build(deps): bump superagent from 10.2.2 to 10.2.3 (#7076) Bumps [superagent](https://github.com/ladjs/superagent) from 10.2.2 to 10.2.3. - [Release notes](https://github.com/ladjs/superagent/releases) - [Changelog](https://github.com/forwardemail/superagent/blob/master/HISTORY.md) - [Commits](https://github.com/ladjs/superagent/compare/v10.2.2...v10.2.3) --- updated-dependencies: - dependency-name: superagent dependency-version: 10.2.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 38 ++++---------------------------------- src/package.json | 2 +- 2 files changed, 5 insertions(+), 35 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18c06ed7a..7fab591f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -255,8 +255,8 @@ importers: specifier: ^4.8.1 version: 4.8.1 superagent: - specifier: 10.2.2 - version: 10.2.2 + specifier: 10.2.3 + version: 10.2.3 swagger-ui-express: specifier: ^5.0.1 version: 5.0.1(express@5.1.0) @@ -3149,10 +3149,6 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.3: - resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} - engines: {node: '>= 6'} - form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} @@ -4658,10 +4654,6 @@ packages: strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - superagent@10.2.2: - resolution: {integrity: sha512-vWMq11OwWCC84pQaFPzF/VO3BrjkCeewuvJgt1jfV0499Z1QSAWN4EqfMM5WlFDDX9/oP8JjlDKpblrmEoyu4Q==} - engines: {node: '>=14.18.0'} - superagent@10.2.3: resolution: {integrity: sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==} engines: {node: '>=14.18.0'} @@ -6381,7 +6373,7 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: '@types/node': 24.3.0 - form-data: 4.0.3 + form-data: 4.0.4 '@types/node@24.3.0': dependencies: @@ -6431,7 +6423,7 @@ snapshots: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 '@types/node': 24.3.0 - form-data: 4.0.3 + form-data: 4.0.4 '@types/supertest@6.0.3': dependencies: @@ -7943,14 +7935,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - form-data@4.0.4: dependencies: asynckit: 0.4.0 @@ -9649,20 +9633,6 @@ snapshots: dependencies: js-tokens: 9.0.1 - superagent@10.2.2: - dependencies: - component-emitter: 1.3.1 - cookiejar: 2.1.4 - debug: 4.4.1(supports-color@8.1.1) - fast-safe-stringify: 2.1.1 - form-data: 4.0.3 - formidable: 3.5.4 - methods: 1.1.2 - mime: 2.6.0 - qs: 6.14.0 - transitivePeerDependencies: - - supports-color - superagent@10.2.3: dependencies: component-emitter: 1.3.1 diff --git a/src/package.json b/src/package.json index 9a616a306..03273159b 100644 --- a/src/package.json +++ b/src/package.json @@ -68,7 +68,7 @@ "semver": "^7.7.2", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1", - "superagent": "10.2.2", + "superagent": "10.2.3", "swagger-ui-express": "^5.0.1", "tinycon": "0.6.8", "tsx": "4.20.3", From 5f8035e72874892fbf26b4fd7df12014bada656d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:50:02 +0200 Subject: [PATCH 22/33] build(deps): bump tsx from 4.20.3 to 4.20.4 (#7085) Bumps [tsx](https://github.com/privatenumber/tsx) from 4.20.3 to 4.20.4. - [Release notes](https://github.com/privatenumber/tsx/releases) - [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs) - [Commits](https://github.com/privatenumber/tsx/compare/v4.20.3...v4.20.4) --- updated-dependencies: - dependency-name: tsx dependency-version: 4.20.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- bin/package.json | 2 +- pnpm-lock.yaml | 330 ++++++----------------------------------------- src/package.json | 2 +- 3 files changed, 38 insertions(+), 296 deletions(-) diff --git a/bin/package.json b/bin/package.json index 309f8d0de..c9ce601a3 100644 --- a/bin/package.json +++ b/bin/package.json @@ -11,7 +11,7 @@ "ep_etherpad-lite": "workspace:../src", "log4js": "^6.9.1", "semver": "^7.7.2", - "tsx": "^4.20.3", + "tsx": "^4.20.5", "ueberdb2": "^5.0.14" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7fab591f6..058437e6d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,7 +48,7 @@ importers: version: 8.40.0(eslint@9.33.0)(typescript@5.9.2) '@vitejs/plugin-react-swc': specifier: ^4.0.1 - version: 4.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) + version: 4.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5)) eslint: specifier: ^9.33.0 version: 9.33.0 @@ -90,13 +90,13 @@ importers: version: 5.9.2 vite: specifier: ^7.1.3 - version: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + version: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) vite-plugin-static-copy: specifier: ^3.1.2 - version: 3.1.2(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) + version: 3.1.2(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5)) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.47.1)(typescript@5.9.2)(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) + version: 4.3.0(rollup@4.47.1)(typescript@5.9.2)(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5)) zustand: specifier: ^5.0.8 version: 5.0.8(@types/react@19.1.10)(react@19.1.1) @@ -116,8 +116,8 @@ importers: specifier: ^7.7.2 version: 7.7.2 tsx: - specifier: ^4.20.3 - version: 4.20.3 + specifier: ^4.20.5 + version: 4.20.5 ueberdb2: specifier: ^5.0.14 version: 5.0.14 @@ -136,7 +136,7 @@ importers: devDependencies: vitepress: specifier: ^2.0.0-alpha.12 - version: 2.0.0-alpha.12(@types/node@24.3.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2) + version: 2.0.0-alpha.12(@types/node@24.3.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2) src: dependencies: @@ -264,8 +264,8 @@ importers: specifier: 0.6.8 version: 0.6.8 tsx: - specifier: 4.20.3 - version: 4.20.3 + specifier: 4.20.5 + version: 4.20.5 ueberdb2: specifier: ^5.0.14 version: 5.0.14 @@ -392,7 +392,7 @@ importers: version: 5.9.2 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jsdom@26.1.0)(tsx@4.20.3) + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jsdom@26.1.0)(tsx@4.20.5) ui: devDependencies: @@ -404,7 +404,7 @@ importers: version: 5.9.2 vite: specifier: ^7.1.3 - version: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + version: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) packages: @@ -550,12 +550,6 @@ packages: '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.8': resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} @@ -568,12 +562,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.8': resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} engines: {node: '>=18'} @@ -586,12 +574,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.8': resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} engines: {node: '>=18'} @@ -604,12 +586,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.8': resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} engines: {node: '>=18'} @@ -622,12 +598,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.8': resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} engines: {node: '>=18'} @@ -640,12 +610,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.8': resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} engines: {node: '>=18'} @@ -658,12 +622,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.8': resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} engines: {node: '>=18'} @@ -676,12 +634,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} engines: {node: '>=18'} @@ -694,12 +646,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.8': resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} engines: {node: '>=18'} @@ -712,12 +658,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.8': resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} engines: {node: '>=18'} @@ -730,12 +670,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.8': resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} engines: {node: '>=18'} @@ -748,12 +682,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.8': resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} engines: {node: '>=18'} @@ -766,12 +694,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.8': resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} engines: {node: '>=18'} @@ -784,12 +706,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.8': resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} engines: {node: '>=18'} @@ -802,12 +718,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.8': resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} engines: {node: '>=18'} @@ -820,12 +730,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.8': resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} engines: {node: '>=18'} @@ -838,12 +742,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.8': resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} engines: {node: '>=18'} @@ -856,12 +754,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.8': resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} engines: {node: '>=18'} @@ -874,12 +766,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} engines: {node: '>=18'} @@ -892,12 +778,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.8': resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} engines: {node: '>=18'} @@ -910,12 +790,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} engines: {node: '>=18'} @@ -940,12 +814,6 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.8': resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} engines: {node: '>=18'} @@ -958,12 +826,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.8': resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} engines: {node: '>=18'} @@ -976,12 +838,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.8': resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} engines: {node: '>=18'} @@ -994,12 +850,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.8': resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} engines: {node: '>=18'} @@ -2813,11 +2663,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.8: resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} @@ -4779,8 +4624,8 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} - tsx@4.20.3: - resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + tsx@4.20.5: + resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} engines: {node: '>=18.0.0'} hasBin: true @@ -5374,189 +5219,126 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.5': - optional: true - '@esbuild/aix-ppc64@0.25.8': optional: true '@esbuild/aix-ppc64@0.25.9': optional: true - '@esbuild/android-arm64@0.25.5': - optional: true - '@esbuild/android-arm64@0.25.8': optional: true '@esbuild/android-arm64@0.25.9': optional: true - '@esbuild/android-arm@0.25.5': - optional: true - '@esbuild/android-arm@0.25.8': optional: true '@esbuild/android-arm@0.25.9': optional: true - '@esbuild/android-x64@0.25.5': - optional: true - '@esbuild/android-x64@0.25.8': optional: true '@esbuild/android-x64@0.25.9': optional: true - '@esbuild/darwin-arm64@0.25.5': - optional: true - '@esbuild/darwin-arm64@0.25.8': optional: true '@esbuild/darwin-arm64@0.25.9': optional: true - '@esbuild/darwin-x64@0.25.5': - optional: true - '@esbuild/darwin-x64@0.25.8': optional: true '@esbuild/darwin-x64@0.25.9': optional: true - '@esbuild/freebsd-arm64@0.25.5': - optional: true - '@esbuild/freebsd-arm64@0.25.8': optional: true '@esbuild/freebsd-arm64@0.25.9': optional: true - '@esbuild/freebsd-x64@0.25.5': - optional: true - '@esbuild/freebsd-x64@0.25.8': optional: true '@esbuild/freebsd-x64@0.25.9': optional: true - '@esbuild/linux-arm64@0.25.5': - optional: true - '@esbuild/linux-arm64@0.25.8': optional: true '@esbuild/linux-arm64@0.25.9': optional: true - '@esbuild/linux-arm@0.25.5': - optional: true - '@esbuild/linux-arm@0.25.8': optional: true '@esbuild/linux-arm@0.25.9': optional: true - '@esbuild/linux-ia32@0.25.5': - optional: true - '@esbuild/linux-ia32@0.25.8': optional: true '@esbuild/linux-ia32@0.25.9': optional: true - '@esbuild/linux-loong64@0.25.5': - optional: true - '@esbuild/linux-loong64@0.25.8': optional: true '@esbuild/linux-loong64@0.25.9': optional: true - '@esbuild/linux-mips64el@0.25.5': - optional: true - '@esbuild/linux-mips64el@0.25.8': optional: true '@esbuild/linux-mips64el@0.25.9': optional: true - '@esbuild/linux-ppc64@0.25.5': - optional: true - '@esbuild/linux-ppc64@0.25.8': optional: true '@esbuild/linux-ppc64@0.25.9': optional: true - '@esbuild/linux-riscv64@0.25.5': - optional: true - '@esbuild/linux-riscv64@0.25.8': optional: true '@esbuild/linux-riscv64@0.25.9': optional: true - '@esbuild/linux-s390x@0.25.5': - optional: true - '@esbuild/linux-s390x@0.25.8': optional: true '@esbuild/linux-s390x@0.25.9': optional: true - '@esbuild/linux-x64@0.25.5': - optional: true - '@esbuild/linux-x64@0.25.8': optional: true '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.5': - optional: true - '@esbuild/netbsd-arm64@0.25.8': optional: true '@esbuild/netbsd-arm64@0.25.9': optional: true - '@esbuild/netbsd-x64@0.25.5': - optional: true - '@esbuild/netbsd-x64@0.25.8': optional: true '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.5': - optional: true - '@esbuild/openbsd-arm64@0.25.8': optional: true '@esbuild/openbsd-arm64@0.25.9': optional: true - '@esbuild/openbsd-x64@0.25.5': - optional: true - '@esbuild/openbsd-x64@0.25.8': optional: true @@ -5569,36 +5351,24 @@ snapshots: '@esbuild/openharmony-arm64@0.25.9': optional: true - '@esbuild/sunos-x64@0.25.5': - optional: true - '@esbuild/sunos-x64@0.25.8': optional: true '@esbuild/sunos-x64@0.25.9': optional: true - '@esbuild/win32-arm64@0.25.5': - optional: true - '@esbuild/win32-arm64@0.25.8': optional: true '@esbuild/win32-arm64@0.25.9': optional: true - '@esbuild/win32-ia32@0.25.5': - optional: true - '@esbuild/win32-ia32@0.25.8': optional: true '@esbuild/win32-ia32@0.25.9': optional: true - '@esbuild/win32-x64@0.25.5': - optional: true - '@esbuild/win32-x64@0.25.8': optional: true @@ -6675,18 +6445,18 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.3.3': optional: true - '@vitejs/plugin-react-swc@4.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))': + '@vitejs/plugin-react-swc@4.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.32 '@swc/core': 1.13.4 - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-vue@6.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))(vue@3.5.19(typescript@5.9.2))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5))(vue@3.5.19(typescript@5.9.2))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) vue: 3.5.19(typescript@5.9.2) '@vitest/expect@3.2.4': @@ -6697,13 +6467,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))': + '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) '@vitest/pretty-format@3.2.4': dependencies: @@ -7445,34 +7215,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 - esbuild@0.25.8: optionalDependencies: '@esbuild/aix-ppc64': 0.25.8 @@ -9754,9 +9496,9 @@ snapshots: tsscmp@1.0.6: {} - tsx@4.20.3: + tsx@4.20.5: dependencies: - esbuild: 0.25.5 + esbuild: 0.25.9 get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 @@ -9932,13 +9674,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.2.4(@types/node@24.3.0)(tsx@4.20.3): + vite-node@3.2.4(@types/node@24.3.0)(tsx@4.20.5): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) transitivePeerDependencies: - '@types/node' - jiti @@ -9953,27 +9695,27 @@ snapshots: - tsx - yaml - vite-plugin-static-copy@3.1.2(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)): + vite-plugin-static-copy@3.1.2(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5)): dependencies: chokidar: 3.6.0 fs-extra: 11.3.1 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.14 - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) - vite-plugin-svgr@4.3.0(rollup@4.47.1)(typescript@5.9.2)(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)): + vite-plugin-svgr@4.3.0(rollup@4.47.1)(typescript@5.9.2)(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5)): dependencies: '@rollup/pluginutils': 5.1.4(rollup@4.47.1) '@svgr/core': 8.1.0(typescript@5.9.2) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2)) - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) transitivePeerDependencies: - rollup - supports-color - typescript - vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3): + vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5): dependencies: esbuild: 0.25.9 fdir: 6.5.0(picomatch@4.0.3) @@ -9984,9 +9726,9 @@ snapshots: optionalDependencies: '@types/node': 24.3.0 fsevents: 2.3.3 - tsx: 4.20.3 + tsx: 4.20.5 - vitepress@2.0.0-alpha.12(@types/node@24.3.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.9.2): + vitepress@2.0.0-alpha.12(@types/node@24.3.0)(axios@1.11.0)(jwt-decode@4.0.0)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2): dependencies: '@docsearch/css': 4.0.0-beta.7 '@docsearch/js': 4.0.0-beta.7 @@ -9995,7 +9737,7 @@ snapshots: '@shikijs/transformers': 3.11.0 '@shikijs/types': 3.11.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 6.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3))(vue@3.5.19(typescript@5.9.2)) + '@vitejs/plugin-vue': 6.0.1(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5))(vue@3.5.19(typescript@5.9.2)) '@vue/devtools-api': 8.0.0 '@vue/shared': 3.5.19 '@vueuse/core': 13.7.0(vue@3.5.19(typescript@5.9.2)) @@ -10004,7 +9746,7 @@ snapshots: mark.js: 8.11.1 minisearch: 7.1.2 shiki: 3.11.0 - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) vue: 3.5.19(typescript@5.9.2) optionalDependencies: postcss: 8.5.6 @@ -10033,11 +9775,11 @@ snapshots: - universal-cookie - yaml - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jsdom@26.1.0)(tsx@4.20.3): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jsdom@26.1.0)(tsx@4.20.5): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.3)) + '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@24.3.0)(tsx@4.20.5)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -10055,8 +9797,8 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.3) - vite-node: 3.2.4(@types/node@24.3.0)(tsx@4.20.3) + vite: 7.1.3(@types/node@24.3.0)(tsx@4.20.5) + vite-node: 3.2.4(@types/node@24.3.0)(tsx@4.20.5) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 diff --git a/src/package.json b/src/package.json index 03273159b..3970c4b60 100644 --- a/src/package.json +++ b/src/package.json @@ -71,7 +71,7 @@ "superagent": "10.2.3", "swagger-ui-express": "^5.0.1", "tinycon": "0.6.8", - "tsx": "4.20.3", + "tsx": "4.20.5", "ueberdb2": "^5.0.14", "underscore": "1.13.7", "unorm": "1.6.0", From 734a3caf593716695a89dedd179ca2ef95f5405a Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+SamTV12345@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:50:16 +0200 Subject: [PATCH 23/33] chore: adapted documentation for migrateDB.ts (#7088) --- bin/migrateDB.ts | 4 ++-- doc/cli.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/migrateDB.ts b/bin/migrateDB.ts index d1b373289..dcedf71a1 100644 --- a/bin/migrateDB.ts +++ b/bin/migrateDB.ts @@ -6,11 +6,11 @@ import settings from 'ep_etherpad-lite/node/utils/Settings'; // file1 = source, file2 = target -// pnpm run migrateDB --file1 --file2 +// pnpm run --filter bin migrateDB --file1 --file2 const arg = process.argv.slice(2); if (arg.length != 4) { - console.error('Wrong number of arguments!. Call with pnpm run migrateDB --file1 source.json target.json') + console.error('Wrong number of arguments!. Call with pnpm run --filter bin migrateDB --file1 source.json target.json') process.exit(1) } diff --git a/doc/cli.md b/doc/cli.md index b80191e14..59f2c3ed2 100644 --- a/doc/cli.md +++ b/doc/cli.md @@ -26,4 +26,4 @@ In this example we migrate from the old dirty db to the new rustydb engine. So w After that we need to move the data from dirty to rustydb. -Therefore, we call `pnpm run migrateDB --file1 test1.json --file2 test2.json` with these two files in our root directories. After some time the data should be copied over to the new database. +Therefore, we call `pnpm run --filter bin migrateDB --file1 test1.json --file2 test2.json` with these two files in our root directories. After some time the data should be copied over to the new database. From 969922244e4af1022d7ebbf590ab444e73c240b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:51:19 +0200 Subject: [PATCH 24/33] build(deps): bump @radix-ui/react-switch from 1.2.5 to 1.2.6 (#7082) Bumps [@radix-ui/react-switch](https://github.com/radix-ui/primitives) from 1.2.5 to 1.2.6. - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) --- updated-dependencies: - dependency-name: "@radix-ui/react-switch" dependency-version: 1.2.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- admin/package.json | 2 +- pnpm-lock.yaml | 17 ++++++----------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/admin/package.json b/admin/package.json index 0cbda008b..06762f002 100644 --- a/admin/package.json +++ b/admin/package.json @@ -11,7 +11,7 @@ "preview": "vite preview" }, "dependencies": { - "@radix-ui/react-switch": "^1.2.5" + "@radix-ui/react-switch": "^1.2.6" }, "devDependencies": { "@radix-ui/react-dialog": "^1.1.15", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 058437e6d..d9d8f47f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,8 +25,8 @@ importers: admin: dependencies: '@radix-ui/react-switch': - specifier: ^1.2.5 - version: 1.2.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^1.2.6 + version: 1.2.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) devDependencies: '@radix-ui/react-dialog': specifier: ^1.1.15 @@ -997,9 +997,6 @@ packages: engines: {node: '>=18'} hasBin: true - '@radix-ui/primitive@1.1.2': - resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} - '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -1139,8 +1136,8 @@ packages: '@types/react': optional: true - '@radix-ui/react-switch@1.2.5': - resolution: {integrity: sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==} + '@radix-ui/react-switch@1.2.6': + resolution: {integrity: sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' @@ -5515,8 +5512,6 @@ snapshots: dependencies: playwright: 1.55.0 - '@radix-ui/primitive@1.1.2': {} - '@radix-ui/primitive@1.1.3': {} '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': @@ -5638,9 +5633,9 @@ snapshots: optionalDependencies: '@types/react': 19.1.10 - '@radix-ui/react-switch@1.2.5(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@radix-ui/react-switch@1.2.6(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@radix-ui/primitive': 1.1.2 + '@radix-ui/primitive': 1.1.3 '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-context': 1.1.2(@types/react@19.1.10)(react@19.1.1) '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) From 174a3676a420d0b3d4c316367b46ee73d57452a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:51:36 +0200 Subject: [PATCH 25/33] build(deps): bump oidc-provider and @types/oidc-provider (#7080) Bumps [oidc-provider](https://github.com/panva/node-oidc-provider) and [@types/oidc-provider](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/oidc-provider). These dependencies needed to be updated together. Updates `oidc-provider` from 9.3.0 to 9.4.1 - [Release notes](https://github.com/panva/node-oidc-provider/releases) - [Changelog](https://github.com/panva/node-oidc-provider/blob/main/CHANGELOG.md) - [Commits](https://github.com/panva/node-oidc-provider/compare/v9.3.0...v9.4.1) Updates `@types/oidc-provider` from 9.1.1 to 9.1.2 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/oidc-provider) --- updated-dependencies: - dependency-name: oidc-provider dependency-version: 9.4.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: "@types/oidc-provider" dependency-version: 9.1.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 90 ++++++++++++++++-------------------------------- src/package.json | 4 +-- 2 files changed, 32 insertions(+), 62 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d9d8f47f2..848b8b046 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,8 +219,8 @@ importers: specifier: ^3.0.1 version: 3.0.1 oidc-provider: - specifier: ^9.3.0 - version: 9.3.0 + specifier: ^9.4.2 + version: 9.4.2 openapi-backend: specifier: ^5.13.0 version: 5.13.0 @@ -331,8 +331,8 @@ importers: specifier: ^24.3.0 version: 24.3.0 '@types/oidc-provider': - specifier: ^9.1.1 - version: 9.1.1 + specifier: ^9.1.2 + version: 9.1.2 '@types/semver': specifier: ^7.7.0 version: 7.7.0 @@ -958,9 +958,9 @@ packages: resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} - '@koa/router@13.1.1': - resolution: {integrity: sha512-JQEuMANYRVHs7lm7KY9PCIjkgJk73h4m4J+g2mkw2Vo1ugPZ17UJVqEH8F+HeAdjKz5do1OaLe7ArDz+z308gw==} - engines: {node: '>= 18'} + '@koa/router@14.0.0': + resolution: {integrity: sha512-LBSu5K0qAaaQcXX/0WIB9PGDevyCxxpnc1uq13vV/CgObaVxuis5hKl3Eboq/8gcb6ebnkAStW9NB/Em2eYyFA==} + engines: {node: '>= 20'} '@napi-rs/wasm-runtime@0.2.8': resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} @@ -1645,8 +1645,8 @@ packages: '@types/koa-compose@3.2.8': resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} - '@types/koa@2.15.0': - resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + '@types/koa@3.0.0': + resolution: {integrity: sha512-MOcVYdVYmkSutVHZZPh8j3+dAjLyR5Tl59CN0eKgpkE1h/LBSmPAsQQuWs+bKu7WtGNn+hKfJH9Gzml+PulmDg==} '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} @@ -1684,8 +1684,8 @@ packages: '@types/node@24.3.0': resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} - '@types/oidc-provider@9.1.1': - resolution: {integrity: sha512-sG4UcE4AbUwAsEpyrcyoqZ383wJiQObZU+gTa1Iv288+l09HwSr88hBZE2IBLlXS+RKmLId0i4B430PBFO/XRA==} + '@types/oidc-provider@9.1.2': + resolution: {integrity: sha512-JAreXkbWsZR72Gt3eigG652wq1qBcjhuy421PXU2a8PS0mM00XlG+UdXbM/QPihM3ko0YF8cwvt0H2kacXGcsg==} '@types/qs@6.9.18': resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} @@ -2269,10 +2269,6 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -3522,8 +3518,8 @@ packages: koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - koa@3.0.0: - resolution: {integrity: sha512-Usyqf1o+XN618R3Jzq4S4YWbKsRtPcGpgyHXD4APdGYQQyqQ59X+Oyc7fXHS2429stzLsBiDjj6zqqYe8kknfw==} + koa@3.0.1: + resolution: {integrity: sha512-oDxVkRwPOHhGlxKIDiDB2h+/l05QPtefD7nSqRgDfZt8P+QVYFWjfeK8jANf5O2YXjk8egd7KntvXKYx82wOag==} engines: {node: '>= 18'} languages4translatewiki@0.1.3: @@ -3832,12 +3828,8 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - oidc-provider@9.3.0: - resolution: {integrity: sha512-JVocwYM+Fs76nOCED2hMf3iMfrzhN4jISmCYVuFhBEnZiFk3QlODzQXkO1XS/Spw8VwRlKxwIl3otkiintFIjw==} - - oidc-token-hash@5.1.0: - resolution: {integrity: sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==} - engines: {node: ^10.13.0 || >=12.0.0} + oidc-provider@9.4.2: + resolution: {integrity: sha512-8+/7XnKHSrg9Io+kzkI5NlZoONWXg2b2dyXRbe4f4AOMqtyjG912dzD6yNOPKakXG1a1NZ5F6e+QZ+DTtotgQw==} on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -3936,9 +3928,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-to-regexp@8.2.0: resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} engines: {node: '>=16'} @@ -4022,8 +4011,8 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@7.0.1: - resolution: {integrity: sha512-kLjThirJMkWKutUKbZ8ViqFc09tDQhlbQo2MNuVeLWbRauqYP96Sm6nzlQ24F0HFjUNZ4i9+AgldJ9H6DZXi7g==} + quick-lru@7.1.0: + resolution: {integrity: sha512-Pzd/4IFnTb8E+I1P5rbLQoqpUHcXKg48qTYKi4EANg+sTPwGFEMOcYGiiZz6xuQcOMZP7MPsrdAPx+16Q8qahg==} engines: {node: '>=18'} rambda@7.5.0: @@ -5011,10 +5000,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5469,12 +5454,12 @@ snapshots: dependencies: vary: 1.1.2 - '@koa/router@13.1.1': + '@koa/router@14.0.0': dependencies: debug: 4.4.1(supports-color@8.1.1) http-errors: 2.0.0 koa-compose: 4.1.0 - path-to-regexp: 6.3.0 + path-to-regexp: 8.2.0 transitivePeerDependencies: - supports-color @@ -6097,9 +6082,9 @@ snapshots: '@types/koa-compose@3.2.8': dependencies: - '@types/koa': 2.15.0 + '@types/koa': 3.0.0 - '@types/koa@2.15.0': + '@types/koa@3.0.0': dependencies: '@types/accepts': 1.3.7 '@types/content-disposition': 0.5.9 @@ -6144,10 +6129,10 @@ snapshots: dependencies: undici-types: 7.10.0 - '@types/oidc-provider@9.1.1': + '@types/oidc-provider@9.1.2': dependencies: '@types/keygrip': 1.0.6 - '@types/koa': 2.15.0 + '@types/koa': 3.0.0 '@types/node': 24.3.0 '@types/qs@6.9.18': {} @@ -6790,11 +6775,6 @@ snapshots: cac@6.7.14: {} - cache-content-type@1.0.1: - dependencies: - mime-types: 2.1.35 - ylru: 1.4.0 - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -8275,14 +8255,12 @@ snapshots: koa-compose@4.1.0: {} - koa@3.0.0: + koa@3.0.1: dependencies: accepts: 1.3.8 - cache-content-type: 1.0.1 content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.4.1(supports-color@8.1.1) delegates: 1.0.0 destroy: 1.2.0 encodeurl: 2.0.0 @@ -8291,13 +8269,12 @@ snapshots: http-assert: 1.5.0 http-errors: 2.0.0 koa-compose: 4.1.0 + mime-types: 3.0.1 on-finished: 2.4.1 parseurl: 1.3.3 statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 - transitivePeerDependencies: - - supports-color languages4translatewiki@0.1.3: {} @@ -8608,24 +8585,21 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - oidc-provider@9.3.0: + oidc-provider@9.4.2: dependencies: '@koa/cors': 5.0.0 - '@koa/router': 13.1.1 + '@koa/router': 14.0.0 debug: 4.4.1(supports-color@8.1.1) eta: 3.5.0 jose: 6.0.13 jsesc: 3.1.0 - koa: 3.0.0 + koa: 3.0.1 nanoid: 5.1.5 - oidc-token-hash: 5.1.0 - quick-lru: 7.0.1 + quick-lru: 7.1.0 raw-body: 3.0.0 transitivePeerDependencies: - supports-color - oidc-token-hash@5.1.0: {} - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -8751,8 +8725,6 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@6.3.0: {} - path-to-regexp@8.2.0: {} path-type@4.0.0: {} @@ -8823,7 +8795,7 @@ snapshots: queue-microtask@1.2.3: {} - quick-lru@7.0.1: {} + quick-lru@7.1.0: {} rambda@7.5.0: {} @@ -9951,8 +9923,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - ylru@1.4.0: {} - yocto-queue@0.1.0: {} zustand@5.0.8(@types/react@19.1.10)(react@19.1.1): diff --git a/src/package.json b/src/package.json index 3970c4b60..3994c8e42 100644 --- a/src/package.json +++ b/src/package.json @@ -56,7 +56,7 @@ "lru-cache": "^11.1.0", "measured-core": "^2.0.0", "mime-types": "^3.0.1", - "oidc-provider": "^9.3.0", + "oidc-provider": "^9.4.2", "openapi-backend": "^5.13.0", "proxy-addr": "^2.0.7", "rate-limiter-flexible": "^7.1.1", @@ -99,7 +99,7 @@ "@types/mime-types": "^3.0.1", "@types/mocha": "^10.0.9", "@types/node": "^24.3.0", - "@types/oidc-provider": "^9.1.1", + "@types/oidc-provider": "^9.1.2", "@types/semver": "^7.7.0", "@types/sinon": "^17.0.3", "@types/supertest": "^6.0.2", From b69aa11a09dee3506c301252a52d286cfd627515 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 20:54:37 +0200 Subject: [PATCH 26/33] build(deps): bump esbuild from 0.25.8 to 0.25.9 (#7084) Bumps [esbuild](https://github.com/evanw/esbuild) from 0.25.8 to 0.25.9. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.25.8...v0.25.9) --- updated-dependencies: - dependency-name: esbuild dependency-version: 0.25.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 272 +---------------------------------------------- src/package.json | 2 +- 2 files changed, 3 insertions(+), 271 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 848b8b046..62e6f8d1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -159,8 +159,8 @@ importers: specifier: ^3.1.10 version: 3.1.10 esbuild: - specifier: ^0.25.8 - version: 0.25.8 + specifier: ^0.25.9 + version: 0.25.9 express: specifier: ^5.1.0 version: 5.1.0 @@ -550,312 +550,156 @@ packages: '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.9': resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.9': resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.9': resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.9': resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.9': resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.9': resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.9': resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.9': resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.9': resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.9': resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.9': resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.9': resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.9': resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.9': resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.9': resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.9': resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.9': resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.9': resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.9': resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.9': resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.9': resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/openharmony-arm64@0.25.9': resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.9': resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.9': resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.9': resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.9': resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} @@ -2656,11 +2500,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.9: resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} @@ -5201,159 +5040,81 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.8': - optional: true - '@esbuild/aix-ppc64@0.25.9': optional: true - '@esbuild/android-arm64@0.25.8': - optional: true - '@esbuild/android-arm64@0.25.9': optional: true - '@esbuild/android-arm@0.25.8': - optional: true - '@esbuild/android-arm@0.25.9': optional: true - '@esbuild/android-x64@0.25.8': - optional: true - '@esbuild/android-x64@0.25.9': optional: true - '@esbuild/darwin-arm64@0.25.8': - optional: true - '@esbuild/darwin-arm64@0.25.9': optional: true - '@esbuild/darwin-x64@0.25.8': - optional: true - '@esbuild/darwin-x64@0.25.9': optional: true - '@esbuild/freebsd-arm64@0.25.8': - optional: true - '@esbuild/freebsd-arm64@0.25.9': optional: true - '@esbuild/freebsd-x64@0.25.8': - optional: true - '@esbuild/freebsd-x64@0.25.9': optional: true - '@esbuild/linux-arm64@0.25.8': - optional: true - '@esbuild/linux-arm64@0.25.9': optional: true - '@esbuild/linux-arm@0.25.8': - optional: true - '@esbuild/linux-arm@0.25.9': optional: true - '@esbuild/linux-ia32@0.25.8': - optional: true - '@esbuild/linux-ia32@0.25.9': optional: true - '@esbuild/linux-loong64@0.25.8': - optional: true - '@esbuild/linux-loong64@0.25.9': optional: true - '@esbuild/linux-mips64el@0.25.8': - optional: true - '@esbuild/linux-mips64el@0.25.9': optional: true - '@esbuild/linux-ppc64@0.25.8': - optional: true - '@esbuild/linux-ppc64@0.25.9': optional: true - '@esbuild/linux-riscv64@0.25.8': - optional: true - '@esbuild/linux-riscv64@0.25.9': optional: true - '@esbuild/linux-s390x@0.25.8': - optional: true - '@esbuild/linux-s390x@0.25.9': optional: true - '@esbuild/linux-x64@0.25.8': - optional: true - '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.8': - optional: true - '@esbuild/netbsd-arm64@0.25.9': optional: true - '@esbuild/netbsd-x64@0.25.8': - optional: true - '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.8': - optional: true - '@esbuild/openbsd-arm64@0.25.9': optional: true - '@esbuild/openbsd-x64@0.25.8': - optional: true - '@esbuild/openbsd-x64@0.25.9': optional: true - '@esbuild/openharmony-arm64@0.25.8': - optional: true - '@esbuild/openharmony-arm64@0.25.9': optional: true - '@esbuild/sunos-x64@0.25.8': - optional: true - '@esbuild/sunos-x64@0.25.9': optional: true - '@esbuild/win32-arm64@0.25.8': - optional: true - '@esbuild/win32-arm64@0.25.9': optional: true - '@esbuild/win32-ia32@0.25.8': - optional: true - '@esbuild/win32-ia32@0.25.9': optional: true - '@esbuild/win32-x64@0.25.8': - optional: true - '@esbuild/win32-x64@0.25.9': optional: true @@ -7190,35 +6951,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.8: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 - esbuild@0.25.9: optionalDependencies: '@esbuild/aix-ppc64': 0.25.9 diff --git a/src/package.json b/src/package.json index 3994c8e42..b7e135abc 100644 --- a/src/package.json +++ b/src/package.json @@ -36,7 +36,7 @@ "cross-env": "^7.0.3", "cross-spawn": "^7.0.6", "ejs": "^3.1.10", - "esbuild": "^0.25.8", + "esbuild": "^0.25.9", "express": "^5.1.0", "express-rate-limit": "^8.0.1", "express-session": "^1.18.2", From f44ee8b20fe51b93fdd8cf378740cf2cc4cdfb38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 21:05:49 +0200 Subject: [PATCH 27/33] build(deps): bump ueberdb2 from 5.0.14 to 5.0.15 (#7081) Bumps [ueberdb2](https://github.com/ether/ueberDB) from 5.0.14 to 5.0.15. - [Changelog](https://github.com/ether/ueberDB/blob/main/CHANGELOG.md) - [Commits](https://github.com/ether/ueberDB/compare/v5.0.14...v5.0.15) --- updated-dependencies: - dependency-name: ueberdb2 dependency-version: 5.0.15 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- bin/package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- src/package.json | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bin/package.json b/bin/package.json index c9ce601a3..7b2119a77 100644 --- a/bin/package.json +++ b/bin/package.json @@ -12,7 +12,7 @@ "log4js": "^6.9.1", "semver": "^7.7.2", "tsx": "^4.20.5", - "ueberdb2": "^5.0.14" + "ueberdb2": "^5.0.15" }, "devDependencies": { "@types/node": "^24.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62e6f8d1e..618d3ef51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,8 +119,8 @@ importers: specifier: ^4.20.5 version: 4.20.5 ueberdb2: - specifier: ^5.0.14 - version: 5.0.14 + specifier: ^5.0.15 + version: 5.0.15 devDependencies: '@types/node': specifier: ^24.3.0 @@ -267,8 +267,8 @@ importers: specifier: 4.20.5 version: 4.20.5 ueberdb2: - specifier: ^5.0.14 - version: 5.0.14 + specifier: ^5.0.15 + version: 5.0.15 underscore: specifier: 1.13.7 version: 1.13.7 @@ -4495,8 +4495,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - ueberdb2@5.0.14: - resolution: {integrity: sha512-WMhRgctxoCQ0Ix5v/Xmpsx73B0n6QP08arbF7wKG6zrI8uF7Gfo1HtYEV+3MTSbzFwfKP3MrrL3JjAMfMo1s2A==} + ueberdb2@5.0.15: + resolution: {integrity: sha512-aBHstZ4E40GjOOR46VlJ2LVjY7EAGYQsy/MeQ6ExyWSzxYQqCk6w/KIpsJ11bew/GR1e3S3I1FgGaLz0FSMyEQ==} engines: {node: '>=16.20.1'} uid-safe@2.1.5: @@ -9253,7 +9253,7 @@ snapshots: typescript@5.9.2: {} - ueberdb2@5.0.14: {} + ueberdb2@5.0.15: {} uid-safe@2.1.5: dependencies: diff --git a/src/package.json b/src/package.json index b7e135abc..b44ced27e 100644 --- a/src/package.json +++ b/src/package.json @@ -72,7 +72,7 @@ "swagger-ui-express": "^5.0.1", "tinycon": "0.6.8", "tsx": "4.20.5", - "ueberdb2": "^5.0.14", + "ueberdb2": "^5.0.15", "underscore": "1.13.7", "unorm": "1.6.0", "wtfnode": "^0.10.0" From c133bd323b404e1ee9f51660b3cc2a3d0a5006ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 21:27:03 +0200 Subject: [PATCH 28/33] build(deps): bump rate-limiter-flexible from 7.1.1 to 7.2.0 (#7079) Bumps [rate-limiter-flexible](https://github.com/animir/node-rate-limiter-flexible) from 7.1.1 to 7.2.0. - [Release notes](https://github.com/animir/node-rate-limiter-flexible/releases) - [Commits](https://github.com/animir/node-rate-limiter-flexible/compare/v7.1.1...v7.2.0) --- updated-dependencies: - dependency-name: rate-limiter-flexible dependency-version: 7.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 10 +++++----- src/package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 618d3ef51..ad6d1a249 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,8 +228,8 @@ importers: specifier: ^2.0.7 version: 2.0.7 rate-limiter-flexible: - specifier: ^7.1.1 - version: 7.1.1 + specifier: ^7.2.0 + version: 7.2.0 rehype: specifier: ^13.0.2 version: 13.0.2 @@ -3868,8 +3868,8 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - rate-limiter-flexible@7.1.1: - resolution: {integrity: sha512-lsYRcqRSJrKBNt6pMzBJTiCJP5KnwsGWdObMZxd19JFUJRntM+yuHs4/2bs6NZweSLgpsDcykvzyQaumoslWQg==} + rate-limiter-flexible@7.2.0: + resolution: {integrity: sha512-hrf0vIS/WOBegnHg+uPXxsXhuQYlNGfZiCmK5Wgudb12xlZUhpv9yD23yp/EW6BKQosshqnIQRQV+r3jyfIGQg==} raw-body@3.0.0: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} @@ -8539,7 +8539,7 @@ snapshots: range-parser@1.2.1: {} - rate-limiter-flexible@7.1.1: {} + rate-limiter-flexible@7.2.0: {} raw-body@3.0.0: dependencies: diff --git a/src/package.json b/src/package.json index b44ced27e..4c059f51d 100644 --- a/src/package.json +++ b/src/package.json @@ -59,7 +59,7 @@ "oidc-provider": "^9.4.2", "openapi-backend": "^5.13.0", "proxy-addr": "^2.0.7", - "rate-limiter-flexible": "^7.1.1", + "rate-limiter-flexible": "^7.2.0", "rehype": "^13.0.2", "rehype-minify-whitespace": "^6.0.2", "resolve": "1.22.10", From 16d4913702c72388d4a756de9b414e8618bb19c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 21:27:29 +0200 Subject: [PATCH 29/33] build(deps): bump cross-env from 7.0.3 to 10.0.0 (#7078) Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 7.0.3 to 10.0.0. - [Release notes](https://github.com/kentcdodds/cross-env/releases) - [Changelog](https://github.com/kentcdodds/cross-env/blob/main/CHANGELOG.md) - [Commits](https://github.com/kentcdodds/cross-env/compare/v7.0.3...v10.0.0) --- updated-dependencies: - dependency-name: cross-env dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 18 ++++++++++++------ src/package.json | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad6d1a249..a18a455ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,8 +150,8 @@ importers: specifier: ^1.4.7 version: 1.4.7 cross-env: - specifier: ^7.0.3 - version: 7.0.3 + specifier: ^10.0.0 + version: 10.0.0 cross-spawn: specifier: ^7.0.6 version: 7.0.6 @@ -550,6 +550,9 @@ packages: '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@epic-web/invariant@1.0.0': + resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} + '@esbuild/aix-ppc64@0.25.9': resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} @@ -2254,9 +2257,9 @@ packages: typescript: optional: true - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + cross-env@10.0.0: + resolution: {integrity: sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==} + engines: {node: '>=20'} hasBin: true cross-spawn@7.0.6: @@ -5040,6 +5043,8 @@ snapshots: tslib: 2.8.1 optional: true + '@epic-web/invariant@1.0.0': {} + '@esbuild/aix-ppc64@0.25.9': optional: true @@ -6672,8 +6677,9 @@ snapshots: optionalDependencies: typescript: 5.9.2 - cross-env@7.0.3: + cross-env@10.0.0: dependencies: + '@epic-web/invariant': 1.0.0 cross-spawn: 7.0.6 cross-spawn@7.0.6: diff --git a/src/package.json b/src/package.json index 4c059f51d..35f79f81c 100644 --- a/src/package.json +++ b/src/package.json @@ -33,7 +33,7 @@ "async": "^3.2.6", "axios": "^1.11.0", "cookie-parser": "^1.4.7", - "cross-env": "^7.0.3", + "cross-env": "^10.0.0", "cross-spawn": "^7.0.6", "ejs": "^3.1.10", "esbuild": "^0.25.9", From 6970c3aca2b5970591b28828771ca62a3b61864e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 24 Aug 2025 21:27:37 +0200 Subject: [PATCH 30/33] build(deps): bump openapi-backend from 5.13.0 to 5.15.0 (#7077) Bumps [openapi-backend](https://github.com/openapistack/openapi-backend) from 5.13.0 to 5.15.0. - [Release notes](https://github.com/openapistack/openapi-backend/releases) - [Commits](https://github.com/openapistack/openapi-backend/compare/5.13.0...5.15.0) --- updated-dependencies: - dependency-name: openapi-backend dependency-version: 5.15.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 10 +++++----- src/package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a18a455ea..545d9c2a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -222,8 +222,8 @@ importers: specifier: ^9.4.2 version: 9.4.2 openapi-backend: - specifier: ^5.13.0 - version: 5.13.0 + specifier: ^5.15.0 + version: 5.15.0 proxy-addr: specifier: ^2.0.7 version: 2.0.7 @@ -3690,8 +3690,8 @@ packages: oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - openapi-backend@5.13.0: - resolution: {integrity: sha512-dE2f0MCpL2ZKctVG4w+Nl+1C4GQput5dQ4QYy6XeblGvM2Z1b3JcP2FzL6DrLzzDYEKTLgAaQM3jD7yhftwKSg==} + openapi-backend@5.15.0: + resolution: {integrity: sha512-yox0nCv511YWUeBNCdKY6xmUB92yEN+N9rHO4BHA5GOAZaNtY+zzuftAdfEwIbCsCcvZJ9ysENCguqBg+hLlWw==} engines: {node: '>=12.0.0'} openapi-schema-validation@0.4.2: @@ -8356,7 +8356,7 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 - openapi-backend@5.13.0: + openapi-backend@5.15.0: dependencies: '@apidevtools/json-schema-ref-parser': 11.9.3 ajv: 8.17.1 diff --git a/src/package.json b/src/package.json index 35f79f81c..916839eae 100644 --- a/src/package.json +++ b/src/package.json @@ -57,7 +57,7 @@ "measured-core": "^2.0.0", "mime-types": "^3.0.1", "oidc-provider": "^9.4.2", - "openapi-backend": "^5.13.0", + "openapi-backend": "^5.15.0", "proxy-addr": "^2.0.7", "rate-limiter-flexible": "^7.2.0", "rehype": "^13.0.2", From b8e61b4606433ab10ab0f2f49906189c7fb8fa68 Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+SamTV12345@users.noreply.github.com> Date: Sun, 24 Aug 2025 22:17:18 +0200 Subject: [PATCH 31/33] chore: fixed git determination and fixed no skin css issues (#7089) --- src/node/utils/Settings.ts | 2 +- src/static/skins/no-skin/index.css | 56 ++++++++++++++++++++++++++++++ src/static/skins/no-skin/index.js | 10 ++++++ 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/node/utils/Settings.ts b/src/node/utils/Settings.ts index 38aa7dbc5..886350c59 100644 --- a/src/node/utils/Settings.ts +++ b/src/node/utils/Settings.ts @@ -135,7 +135,7 @@ const parseSettings = (settingsFilename: string, isSettings: boolean) => { export const getGitCommit = () => { let version = ''; try { - let rootPath = settings.root; + let rootPath = absolutePaths.findEtherpadRoot(); if (fs.lstatSync(`${rootPath}/.git`).isFile()) { rootPath = fs.readFileSync(`${rootPath}/.git`, 'utf8'); rootPath = rootPath.split(' ').pop()?.trim() ?? ''; diff --git a/src/static/skins/no-skin/index.css b/src/static/skins/no-skin/index.css index 236251d9c..ce666fe87 100644 --- a/src/static/skins/no-skin/index.css +++ b/src/static/skins/no-skin/index.css @@ -6,3 +6,59 @@ #editbar LI {border:1px solid #d5d5d5;} from pad.css */ +#button { + font-size: 90%; + width: 100%; + position: unset; +} + +button[type="submit"], input[type="text"] { + position: unset; +} + +button[type="submit"] { + width: auto; +} + +#label { + display: none; +} + + +#padname { + max-width: 80%; +} + + + +#inner { + max-width: 400px; +} + + +body { + border-top: none; +} + +.body { + display: grid; + place-items: center; + height: 100%; +} + +#wrapper { + width: 100%; + margin-top: 0; + padding: 15px 0 15px 0; +} + + +form { + display: flex; + gap: 10px; + background-color: transparent; + border: none; + height: 4rem; + flex-direction: row; + margin-top: 1rem; +} diff --git a/src/static/skins/no-skin/index.js b/src/static/skins/no-skin/index.js index 633db7267..edbc8979b 100644 --- a/src/static/skins/no-skin/index.js +++ b/src/static/skins/no-skin/index.js @@ -4,4 +4,14 @@ window.customStart = () => { // define your javascript here // jquery is available - except index.js // you can load extra scripts with $.getScript http://api.jquery.com/jQuery.getScript/ + const divHoldingPlaceHolderLabel = document + .querySelector('[data-l10n-id="index.placeholderPadEnter"]'); + + const observer = new MutationObserver(() => { + document.querySelector('#go2Name input') + .setAttribute('placeholder', divHoldingPlaceHolderLabel.textContent); + }); + + observer + .observe(divHoldingPlaceHolderLabel, {childList: true, subtree: true, characterData: true}); }; From b595ef9a093b22d2450cb45b921e8cc19839457a Mon Sep 17 00:00:00 2001 From: SamTV12345 <40429738+samtv12345@users.noreply.github.com> Date: Sun, 24 Aug 2025 22:22:32 +0200 Subject: [PATCH 32/33] chore: added changelog for 2.5.0 --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 96c0869e0..5b4a62b3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,10 @@ # 2.5.0 ### Notable enhancements and fixes -- Updated to express 5.0.0. This is a major update to express that brings a lot of improvements and fixes. + +- Updated to express 5.0.0. This is a major update to express that brings a lot of improvements and fixes. Please update all your plugins to the latest version to ensure compatibility. A lot changed in the route matching, and thus old plugins will throw errors and crash Etherpad. +- Fixed an issue with the no-skin theme with cookie recentPadList feature +- Fixed layout issues with the no-skin theme # 2.4.2 From 1cb243f128a8f79cac02ef9d99fd67ca95aa917b Mon Sep 17 00:00:00 2001 From: Etherpad Release Bot Date: Sun, 24 Aug 2025 20:36:27 +0000 Subject: [PATCH 33/33] bump version --- admin/package.json | 2 +- bin/package.json | 2 +- package.json | 2 +- src/package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/package.json b/admin/package.json index 06762f002..b659eb0fd 100644 --- a/admin/package.json +++ b/admin/package.json @@ -1,7 +1,7 @@ { "name": "admin", "private": true, - "version": "2.4.2", + "version": "2.5.0", "type": "module", "scripts": { "dev": "vite", diff --git a/bin/package.json b/bin/package.json index 7b2119a77..60abb63f8 100644 --- a/bin/package.json +++ b/bin/package.json @@ -1,6 +1,6 @@ { "name": "bin", - "version": "2.4.2", + "version": "2.5.0", "description": "", "main": "checkAllPads.js", "directories": { diff --git a/package.json b/package.json index 05938017d..bb3acfb0b 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,6 @@ "type": "git", "url": "https://github.com/ether/etherpad-lite.git" }, - "version": "2.4.2", + "version": "2.5.0", "license": "Apache-2.0" } diff --git a/src/package.json b/src/package.json index 916839eae..d8097591f 100644 --- a/src/package.json +++ b/src/package.json @@ -146,6 +146,6 @@ "debug:socketio": "cross-env DEBUG=socket.io* node --require tsx/cjs node/server.ts", "test:vitest": "vitest" }, - "version": "2.4.2", + "version": "2.5.0", "license": "Apache-2.0" }