From fdee9ecd44ad91db8f57602e37cd5fefdf0318ac Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 18:55:30 +0000 Subject: [PATCH 01/96] metainfo: add entry for v1.2.4 --- meta/app.legcord.Legcord.metainfo.xml | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/meta/app.legcord.Legcord.metainfo.xml b/meta/app.legcord.Legcord.metainfo.xml index d30a1c1..ff91d33 100644 --- a/meta/app.legcord.Legcord.metainfo.xml +++ b/meta/app.legcord.Legcord.metainfo.xml @@ -29,6 +29,50 @@ + + https://github.com/Legcord/Legcord/releases/tag/v1.2.4 + +

What’s New in Legcord v1.2.4 ✨

+
    +
  • 🐧 **Huge streaming performance improvements on Linux**
  • +
+
    +
  • 🔄 **Separate “No Bundle Updates” setting for each client mod**
  • +
+
    +
  • 💾 **Backup & Restore added**
  • +
+
    +
  • 🎮 **Improved macOS game detection**
  • +
+
    +
  • 🛡️ **New CSP options setting**
  • +
+
    +
  • 🪟 **Window material setting added** for supported systems ([https://github.com/Legcord/Legcord/pull/1025](https://github.com/Legcord/Legcord/pull/1025) by @passionvine).
  • +
  • 📦 **OPTIONAL automatic Linux updates added** ([https://github.com/Legcord/Legcord/pull/1027](https://github.com/Legcord/Legcord/pull/1027) by @KarboXXX).
  • +
  • 🎛️ **Support banner popup added**
  • +
+
    +
  • 🖥️ Fixed Linux `StartupWMClass` to `legcord` ([https://github.com/Legcord/Legcord/pull/1021](https://github.com/Legcord/Legcord/pull/1021) by @khancyr).
  • +
  • 📺 Fixed screensharing quality, FPS, and audio ([https://github.com/Legcord/Legcord/pull/1026](https://github.com/Legcord/Legcord/pull/1026) by @KarboXXX).
  • +
  • 🎚️ Fixed scrollbar styling on file preview ([https://github.com/Legcord/Legcord/pull/1024](https://github.com/Legcord/Legcord/pull/1024) by @MahmodZE).
  • +
  • 🔊 Fixed mute toggle sound effect playback ([https://github.com/Legcord/Legcord/pull/1031](https://github.com/Legcord/Legcord/pull/1031) by @psw01).
  • +
  • 🎮 Fixed RPC status not disappearing properly ([https://github.com/Legcord/Legcord/pull/1032](https://github.com/Legcord/Legcord/pull/1032) by @Adrigamer2950).
  • +
  • 🔐 Fixed security prompt appearing with no passkey ([https://github.com/Legcord/Legcord/pull/1033](https://github.com/Legcord/Legcord/pull/1033) by @dequeues).
  • +
  • 🇫🇷 Added missing French translations for settings categories ([https://github.com/Legcord/Legcord/pull/1028](https://github.com/Legcord/Legcord/pull/1028) by @youtsuhodev).
  • +
  • ⌨️ Polished keybinds UI ([https://github.com/Legcord/Legcord/pull/1038](https://github.com/Legcord/Legcord/pull/1038) by @youtsuhodev).
  • +
  • 🎥 Fixed camera/mic device switching not working ([https://github.com/Legcord/Legcord/pull/1051](https://github.com/Legcord/Legcord/pull/1051) by @narasaka).
  • +
  • ⚙️ Fixed settings shortcut behavior ([https://github.com/Legcord/Legcord/pull/1046](https://github.com/Legcord/Legcord/pull/1046) by @KirobotDev).
  • +
  • 📏 Fixed dropdown height limit in Games settings ([https://github.com/Legcord/Legcord/pull/1045](https://github.com/Legcord/Legcord/pull/1045) by @youtsuhodev).
  • +
  • 📐 Fixed dropdown max height calculation ([https://github.com/Legcord/Legcord/pull/1059](https://github.com/Legcord/Legcord/pull/1059) by @MahmodZE).
  • +
  • 🧹 Cleanup of old fix-me notes and code polish ([https://github.com/Legcord/Legcord/pull/1060](https://github.com/Legcord/Legcord/pull/1060) by @KirobotDev).
  • +
  • 📂 Fixed restore zip path traversal issue ([https://github.com/Legcord/Legcord/pull/1061](https://github.com/Legcord/Legcord/pull/1061) by @youtsuhodev).
  • +
  • 🛡️ Added stricter CSP, better permission handling, and mod validation ([https://github.com/Legcord/Legcord/pull/1069](https://github.com/Legcord/Legcord/pull/1069) by @KirobotDev).
  • +
  • Fixed first time setup
  • +
+
+
https://github.com/Legcord/Legcord/releases/tag/v1.2.3 From b3d18900a9132ceeb5cbaef82f8b9526c7c2a37e Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 16 Apr 2026 19:10:10 +0200 Subject: [PATCH 02/96] chore: translations update [skip ci] Co-authored-by: Blueberry Translate-URL: https://hosted.weblate.org/projects/armcord/client/ru/ Translation: Legcord/Client --- assets/lang/ru.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/lang/ru.json b/assets/lang/ru.json index 54fdb41..1d7d007 100644 --- a/assets/lang/ru.json +++ b/assets/lang/ru.json @@ -16,9 +16,9 @@ "settings-theme": "Стиль окна", "settings-theme-desc": "Стиль окна определяет, какой заголовок использует Legcord.", "settings-theme-default": "По умолчанию (настраиваемая)", - "settings-theme-native": "Нативная", - "settings-autoHideMenuBar": "Авто-скрытие строки меню", - "settings-autoHideMenuBar-desc": "Авто-скрытие строки меню, когда она не используется.", + "settings-theme-native": "Встроенная", + "settings-autoHideMenuBar": "Автоскрытие строки меню", + "settings-autoHideMenuBar-desc": "Автоскрытие строки меню, когда она не используется.", "settings-sleepInBackground": "Переходить в спящий режим в фоне", "settings-sleepInBackground-desc": "Включает ограничение скорости фоновой работы Chromium. Может снизить энергопотребление, но приводит к некорректной работе уведомлений.", "settings-transparency": "Прозрачность", From 355072866b523c43273751f23c66cb318516d9ed Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 23 Apr 2026 11:09:54 +0200 Subject: [PATCH 03/96] chore: translations update [skip ci] Co-authored-by: Arif Budiman Co-authored-by: Dmitry Warkentin Co-authored-by: Forsan Translate-URL: https://hosted.weblate.org/projects/armcord/client/hu/ Translate-URL: https://hosted.weblate.org/projects/armcord/client/id/ Translate-URL: https://hosted.weblate.org/projects/armcord/client/ru/ Translation: Legcord/Client --- assets/lang/hu.json | 6 ++++- assets/lang/id.json | 61 +++++++++++++++++++++++++++++++++++++++++++-- assets/lang/ru.json | 3 ++- 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/assets/lang/hu.json b/assets/lang/hu.json index 383e77a..f0b222c 100644 --- a/assets/lang/hu.json +++ b/assets/lang/hu.json @@ -339,5 +339,9 @@ "settings-material-mica": "Mica", "settings-material-mica-alt": "Mica Alt", "settings-material-acrylic": "Akril", - "settings-material-none": "None" + "settings-material-none": "None", + "settings-csp-vanilla": "Vanilla", + "settings-csp": "Tartalombiztonsági irányelv", + "settings-csp-strict": "Szigorú", + "settings-csp-none": "Nincs" } diff --git a/assets/lang/id.json b/assets/lang/id.json index 28144f7..08a583c 100644 --- a/assets/lang/id.json +++ b/assets/lang/id.json @@ -49,7 +49,7 @@ "settings-audio": "Audio", "settings-audio-desc": "Pilih metode yang digunakan Legcord untuk mengambil audio dari sistem Anda selama berbagi layar.", "settings-openCustomIconDialog": "Atur ikon desktop", - "settings-csp-desc": "Legcord CSP adalah sistem kami yang mengelola pemuatan konten kustom ke dalam aplikasi Discord. Fitur seperti mod klien dan tema bergantung padanya. Nonaktifkan jika Anda ingin menghapus mod dan gaya kustom.", + "settings-csp-desc": "Atur tingkat keketatan Kebijakan Keamanan Konten Legcord. CSP ketat memberikan keamanan lebih baik tetapi dapat menyebabkan masalah kompatibilitas dengan beberapa mod/tema/plugin klien.", "settings-mintoTray": "Bekerja di latar belakang", "settings-mintoTray-desc": "Ketika dinonaktifkan, Legcord akan ditutup seperti jendela lainnya saat ditutup, sedangkan jika tidak, ia akan tetap berada di area sistem tray Anda untuk digunakan nanti.", "settings-startMinimized": "Mulai dalam mode minimized", @@ -286,5 +286,62 @@ "contextMenu-searchGoogle": "Cari dengan Google", "contextMenu-searchDuckDuckGo": "Cari dengan DuckDuckGo", "touchbar-servers": "Server", - "splash-title": "Legcord" + "splash-title": "Legcord", + "settings-material": "Material Jendela", + "settings-material-desc": "Atur material latar belakang Jendela yang digunakan Legcord.", + "settings-material-mica": "Mica", + "settings-material-mica-alt": "Mica Alt", + "settings-material-acrylic": "Acrylic", + "settings-material-none": "Tidak ada", + "settings-csp": "Kebijakan Keamanan Konten", + "settings-csp-strict": "Ketat", + "settings-csp-none": "Tidak ada", + "settings-csp-vanilla": "Vanilla", + "settings-automaticClientUpdates": "Pembaruan klien otomatis", + "settings-automaticClientUpdates-desc": "Menonaktifkan pembaruan Legcord otomatis", + "settings-vaapi": "VAAPI", + "settings-vaapi-desc": "Gunakan VAAPI (akselerasi HW) untuk decoding video di Linux. Ini sangat mengurangi penggunaan CPU selama berbagi layar tetapi dapat menyebabkan masalah pada beberapa sistem. Nonaktifkan jika Anda mengalami crash atau layar hitam selama berbagi layar.", + "settings-mod-shelter": "Shelter", + "settings-mod-custom": "Kustom", + "settings-quickCss": "CSS Cepat", + "settings-quickCss-desc": "Edit CSS Anda dengan cepat di editor teks sederhana. Perubahan diterapkan segera setelah menyimpan file.", + "keybind-pushToTalk": "Tekan untuk berbicara", + "games-lastDetected": "Game yang terakhir terdeteksi", + "games-lastDetectedEmpty": "Belum ada game yang terdeteksi. Mulai game dengan rich presence untuk melihatnya di sini.", + "games-blacklist": "Daftar hitam", + "games-blacklisted": "Game yang masuk daftar hitam", + "games-blacklistedEmpty": "Tidak ada game yang masuk daftar hitam.", + "games-removeFromBlacklist": "Hapus", + "games-application": "Aplikasi", + "backup-dialogSave-title": "Simpan cadangan Legcord", + "backup-dialogOpen-title": "Buka cadangan Legcord", + "backup-pageTitle": "Cadangan dan pemulihan", + "backup-pageSubtitle": "Simpan atau pulihkan pengaturan Legcord Anda, termasuk setelan, tema, plugin, dan data mod—semua dalam satu file.", + "backup-createBackup": "Buat cadangan", + "backup-restore": "Pulihkan", + "backup-modalTitle": "Pilih apa yang masuk ke dalam cadangan ini", + "backup-includeLegcordConfig": "Setelan", + "backup-includeLegcordThemes": "Tema dan CSS Cepat", + "backup-includeLegcordPlugins": "Ekstensi Chrome/Penyimpanan plugin", + "backup-includeVencord": "Data Vencord (sesi saat ini)", + "backup-includeEquicord": "Data Equicord (sesi saat ini)", + "backup-includeShelter": "Plugin Shelter", + "backup-includeModBundles": "File mod klien yang diunduh (Vencord, Equicord, Shelter, bundel kustom)", + "backup-confirmBackup": "Ekspor", + "backup-successTitle": "Cadangan tersimpan", + "backup-successBody": "Cadangan Anda telah berhasil disimpan.", + "backup-cancelledTitle": "Dibatalkan", + "backup-cancelledBody": "Tidak ada file yang disimpan.", + "backup-failedTitle": "Cadangan gagal", + "backup-invalidFile": "Tidak dapat membaca file cadangan tersebut.", + "backup-unknownError": "Terjadi kesalahan.", + "backup-restoreConfirmHeader": "Pulihkan dari cadangan?", + "backup-restoreConfirmBody": "File di disk akan diganti di mana cadangan ini memiliki data. Anda mungkin perlu memulai ulang Legcord agar semua perubahan diterapkan.", + "backup-restoreConfirm": "Pulihkan", + "backup-restoreCancel": "Batal", + "backup-restoreDoneTitle": "Pemulihan selesai", + "backup-restoreDoneBody": "Data Anda telah dipulihkan. Mulai ulang Legcord agar semua perubahan berlaku.", + "supportBanner-title": "Dukung Proyek", + "supportBanner-subtitle": "Bantu kami terus mengembangkan Legcord. Dukungan Anda menjaga proyek tetap hidup dan memungkinkan kami menghadirkan lebih banyak fitur.", + "supportBanner-donate": "Donasi" } diff --git a/assets/lang/ru.json b/assets/lang/ru.json index 1d7d007..14bf371 100644 --- a/assets/lang/ru.json +++ b/assets/lang/ru.json @@ -39,5 +39,6 @@ "settings-venmic-ignoreInputMedia-desc": "Игнорировать аудио вход из медиаисточников.", "settings-venmic-onlySpeakers": "Только динамики", "settings-venmic-onlySpeakers-desc": "Использовать только динамики для выбора аудиовыхода.", - "settings-audio": "Аудио" + "settings-audio": "Аудио", + "settings-theme-overlay": "Оверлей" } From 88dd287d7e02365e84a1e482aebe20b553f2573b Mon Sep 17 00:00:00 2001 From: youtsuho <110821381+youtsuhodev@users.noreply.github.com> Date: Fri, 24 Apr 2026 19:33:19 +0200 Subject: [PATCH 04/96] fix: prevent JS injection via navigateTo deep links (#1074) --- src/common/dom.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/common/dom.ts b/src/common/dom.ts index 72ba7cf..c9840f6 100644 --- a/src/common/dom.ts +++ b/src/common/dom.ts @@ -32,11 +32,11 @@ export async function injectJS(inject: string): Promise { } export function navigateTo(passedWindow: BrowserWindow, url: string): void { - console.log(`[legcord deeplink] Navigating to ${url}`); - const safeUrl = JSON.stringify(url); - passedWindow.webContents.executeJavaScript(` - history.pushState({}, null, ${safeUrl}); - window.dispatchEvent(new PopStateEvent("popstate", {})); - `); + // Sanitize: only allow path-like URLs (no protocol, no quotes) + const sanitized = url.replace(/[^a-zA-Z0-9/_\-@.]/g, ""); + console.log(`[legcord deeplink] Navigating to ${sanitized}`); + passedWindow.webContents.executeJavaScript( + `history.pushState({}, null, ${JSON.stringify(sanitized)});window.dispatchEvent(new PopStateEvent("popstate", {}));`, + ); passedWindow.focus(); } From a07d481d492d6cb27842dfbeff656533b81b7c7b Mon Sep 17 00:00:00 2001 From: youtsuho <110821381+youtsuhodev@users.noreply.github.com> Date: Fri, 24 Apr 2026 19:33:37 +0200 Subject: [PATCH 05/96] feat: redesign screenshare picker UI to match Discord design system (#1076) --- .../components/ScreensharePicker.module.css | 123 +++++++++++++++--- .../components/ScreensharePicker.tsx | 53 +++++--- .../components/SourceCard.module.css | 114 +++++++++++++++- .../screenshare/components/SourceCard.tsx | 39 ++++-- 4 files changed, 280 insertions(+), 49 deletions(-) diff --git a/src/shelter/screenshare/components/ScreensharePicker.module.css b/src/shelter/screenshare/components/ScreensharePicker.module.css index 14bf8a5..bb2fcf5 100644 --- a/src/shelter/screenshare/components/ScreensharePicker.module.css +++ b/src/shelter/screenshare/components/ScreensharePicker.module.css @@ -1,26 +1,111 @@ .sources { - grid-template-columns: auto auto; - max-height: 260px; - overflow: hidden; display: grid; - overflow-y: scroll; - text-align: center; - font-weight: 500; - border: 3px solid #1e2124; - border-radius: 5px; - border-style: dashed; - padding: 10px; -} -.qualityBox { - display: grid; - grid-template-columns: auto auto; - gap: 10px 10%; + grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); + max-height: 340px; + overflow-y: auto; + font-weight: var(--font-weight-medium); + background-color: var(--background-surface-lowest); + border-radius: 8px; + padding: 6px; + gap: 4px; + scrollbar-width: thin; + scrollbar-color: rgba(255, 255, 255, 0.12) transparent; } -.checkbox { - padding-top: 10px; +.sources::-webkit-scrollbar { + width: 5px; } + +.sources::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.12); + border-radius: 4px; +} + +.sources::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.2); +} + +.sources::-webkit-scrollbar-track { + background: transparent; +} + +.settingsSection { + margin-top: 16px; +} + +.selectedBanner { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 12px; + background-color: var(--background-surface-higher); + border-radius: 8px; + margin-bottom: 16px; +} + +.selectedIcon { + width: 20px; + height: 20px; + color: var(--interactive-text-active); + flex-shrink: 0; +} + +.selectedLabel { + color: var(--text-muted); + font-size: 13px; +} + +.selectedName { + color: var(--text-default); + font-weight: 600; + font-size: 13px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.qualityBox { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px 16px; +} + +.controlGroup { + display: flex; + flex-direction: column; + gap: 8px; +} + .header { - margin-bottom: 5px; - margin-left: 5px; + margin: 0; + color: var(--text-muted); + font-size: 12px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.02em; + font-family: var(--font-primary); +} + +.audioRow { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 12px; + background-color: var(--background-surface-higher); + border-radius: 8px; +} + +.audioLabel { + display: flex; + align-items: center; + gap: 8px; + color: var(--text-default); + font-size: 14px; + font-weight: var(--font-weight-medium); +} + +.audioIcon { + width: 18px; + height: 18px; + color: var(--interactive-icon-default); } diff --git a/src/shelter/screenshare/components/ScreensharePicker.tsx b/src/shelter/screenshare/components/ScreensharePicker.tsx index 3f41363..f1a5053 100644 --- a/src/shelter/screenshare/components/ScreensharePicker.tsx +++ b/src/shelter/screenshare/components/ScreensharePicker.tsx @@ -130,12 +130,18 @@ export const ScreensharePicker = (props: { )} -
-
-
Picked {name()}
- +
+
+ + Sharing: + {name()} +
-
+
Resolution
@@ -153,17 +159,7 @@ export const ScreensharePicker = (props: { ]} />
-
- -
- Audio -
-
- -
-
-
-
+
FPS
@@ -181,6 +177,31 @@ export const ScreensharePicker = (props: { />
+ +
+
+ + Share Audio +
+ +
+
diff --git a/src/shelter/screenshare/components/SourceCard.module.css b/src/shelter/screenshare/components/SourceCard.module.css index f71f869..0f8b80f 100644 --- a/src/shelter/screenshare/components/SourceCard.module.css +++ b/src/shelter/screenshare/components/SourceCard.module.css @@ -1,9 +1,117 @@ -.card:hover { - cursor: "pointer"; +.card { + display: flex; + flex-direction: column; + align-items: center; + padding: 6px; + border-radius: 8px; + cursor: pointer; + transition: background-color 0.15s ease, transform 0.1s ease, border-color 0.25s ease; + border: 2px solid transparent; + position: relative; + user-select: none; + overflow: visible; } + +.card:hover { + background-color: var(--background-modifier-hover); +} + +.card:active { + transform: scale(0.98); +} + +.cardSelected { + border-color: var(--brand-experiment-560); + background-color: color-mix(in srgb, var(--brand-experiment-560) 10%, transparent); +} + +.cardSelected:hover { + background-color: color-mix(in srgb, var(--brand-experiment-560) 16%, transparent); +} + +.checkBadge { + position: absolute; + top: -2px; + right: -2px; + width: 22px; + height: 22px; + border-radius: 0 7px 0 7px; + background-color: var(--brand-experiment-560); + display: flex; + align-items: center; + justify-content: center; + z-index: 2; + animation: badgeIn 0.2s ease-out; +} + +@keyframes badgeIn { + from { + transform: scale(0); + opacity: 0; + } + to { + transform: scale(1); + opacity: 1; + } +} + +.checkIcon { + width: 12px; + height: 12px; + color: #fff; +} + +.thumbnailWrapper { + width: 100%; + position: relative; + border-radius: 6px; + overflow: hidden; +} + +.thumbnail { + width: 100%; + aspect-ratio: 16 / 9; + object-fit: cover; + display: block; + transition: opacity 0.2s ease, filter 0.2s ease; +} + +.thumbnailUnselected { + width: 100%; + aspect-ratio: 16 / 9; + object-fit: cover; + display: block; + transition: opacity 0.2s ease, filter 0.2s ease; + opacity: 0.55; + filter: brightness(0.85); +} + +.thumbnailSelected { + width: 100%; + aspect-ratio: 16 / 9; + object-fit: cover; + display: block; + transition: opacity 0.2s ease, filter 0.2s ease; + opacity: 1; +} + +.card:hover .thumbnailUnselected { + opacity: 0.75; + filter: brightness(0.95); +} + .name { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; - max-width: 190px; + width: 100%; + font-size: 12px; + line-height: 16px; + color: var(--text-muted); + margin-top: 6px; + text-align: center; +} + +.cardSelected .name { + color: var(--text-default); } diff --git a/src/shelter/screenshare/components/SourceCard.tsx b/src/shelter/screenshare/components/SourceCard.tsx index 6ed4aeb..786fa4a 100644 --- a/src/shelter/screenshare/components/SourceCard.tsx +++ b/src/shelter/screenshare/components/SourceCard.tsx @@ -1,4 +1,5 @@ import type { Accessor } from "solid-js"; +import { Show } from "solid-js"; import classes from "./SourceCard.module.css"; export interface IPCSources { @@ -13,18 +14,34 @@ interface SourceCardProps { } export const SourceCard = ({ selected_name, source, onSelect }: SourceCardProps) => { + const isSelected = () => selected_name() === source.name; return ( -
onSelect(source.id, source.name)} onKeyUp={() => {}} class={classes.card}> - {source.name} +
onSelect(source.id, source.name)} + onKeyUp={() => {}} + class={`${classes.card}${isSelected() ? ` ${classes.cardSelected}` : ""}`} + > + +
+ +
+
+
+ {source.name} +

{source.name}

); From fcce5f8146bc3d1a83ef44bad9d44895387153b0 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Sat, 25 Apr 2026 14:16:39 +0200 Subject: [PATCH 06/96] chore: code of contribution --- .github/PULL_REQUEST_TEMPLATE.md | 28 ++++++++ CONTRIBUTING.md | 109 +++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 CONTRIBUTING.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..419d264 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,28 @@ +## Summary + + + +## Problem + + + +## Solution + + + +## Risk + + + +## Testing + + + +- [ ] `pnpm lint` +- [ ] `pnpm build` if this PR touches runtime, bundling, or packaging code +- [ ] Manual verification for affected flows +- [ ] Screenshots or recordings for UI changes + +## Notes + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..27466d7 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,109 @@ +# Contributing to Legcord + +Legcord is an opinionated project. We welcome contributions from everyone, but we want your effort to land successfully and match the direction of the project. + +This guide explains what maintainers look for in pull requests, based on existing code patterns and CI rules. + +## How to contribute + +Contributions are accepted through pull requests. + +Pull requests should target the `dev` branch. +If you are fixing a critical bug or security issue, you may open fixes for both `stable` and `dev`. + +## Before you start a feature + +- Check open pull requests for overlap. +- Check [GitHub enhancement issues](https://github.com/Legcord/Legcord/issues?q=label%3Aenhancement) and the [feature requests Discord channel](https://discord.com/channels/820732039253852171/1261471243123818566). +- If the feature does not exist yet, [open an issue](https://github.com/Legcord/Legcord/issues), say you want to implement it, and wait for feedback before writing large changes. +- Familiarize yourself with the codebase rules below. + +## Codebase rules + +### Tooling and quality + +- Use modern ESM (not CommonJS aka require) where possible. +- Use pnpm (see `packageManager` in `package.json`). +- Run `pnpm lint` before opening a PR. +- Run `pnpm build` when your change touches runtime code, build output, bundling, or packaging behavior. +- Avoid introducing new dependencies unless absolutely necessary. + +### TypeScript and linting expectations + +- Keep TypeScript strictness intact. Do not weaken compiler settings. +- Avoid `@ts-ignore` and broad type escapes. If suppression is unavoidable, use the narrowest suppression possible and include a short reason. +- Any lint suppression (`biome-ignore`, `eslint-disable`, etc.) must include a clear explanation and preferably a tracking issue/URL when relevant. + +### Electron security expectations + +- Follow Electron security best practices. +- Keep preload APIs minimal and explicit when exposing APIs through `contextBridge`. +- Do not add broad permissions or relax security defaults without a strong reason. +- Be careful with injected JavaScript and user-controlled strings. Sanitize inputs (for example, use safe serialization patterns). +- Be extra cautious when changing CSP handling, protocol handling, permission handlers, or web request hooks. + +### Performance expectations + +- Preserve existing performance patterns (config/lang/theme/window-state caching, debounce behavior, startup order). +- Avoid changes that add repeated synchronous I/O in hot paths. +- Be careful with startup flow: some existing operations intentionally use `void` or deferred execution to avoid startup hangs. + +### Config and migration expectations + +- If you change settings shape/defaults, update related migration logic and defaults together. +- Keep backward compatibility with older config formats where possible. +- If your PR changes user data behavior, explain migration and fallback behavior in the PR description. + +### Cross-platform expectations + +- Legcord ships on Linux, macOS, and Windows. Keep platform-specific behavior safe and scoped. +- If your change is platform-specific, explicitly mention tested platform(s) in your PR. +- If you cannot test a platform, state that clearly so reviewers know what remains unverified. + +### i18n expectations + +- Add manual translation changes only to `assets/lang/en-US.json`. +- Update other translations on [Weblate](https://hosted.weblate.org/projects/armcord/). + +## Pull request rules + +### Scope and size + +- Keep PRs focused on one concern. +- Split unrelated refactors from feature or bugfix work. +- Prefer small, reviewable PRs over large mixed changes. + +### PR description (required) + +Include these sections in your PR body: + +- Problem: what user or developer issue is being solved. +- Solution: what changed and why this approach was chosen. +- Risk: what might regress. +- Validation: what you tested (`pnpm lint`, `pnpm build`, manual scenarios, and platform coverage). + +### Verification checklist + +Before requesting review, verify: + +- `pnpm lint` passes. +- `pnpm build` passes for runtime/build-affecting changes. +- Manual smoke test for affected flows is done (for example: startup, settings save/load, themes/mods behavior, tray/window behavior, CSP/security-sensitive paths if touched). +- For UI changes, include screenshots or short recordings. + +### Review readiness + +- Mark breaking changes clearly. +- Call out follow-up work explicitly if a workaround is temporary. +- Reference related issues and prior discussions. +- If you added a workaround/suppression, include the reason in code comments and in the PR description. + +## Documentation + +We are still improving project and codebase documentation. +If you have experience building docs systems or contributor docs, contact @smartfrigde on Discord. + +## Help users in the Discord community + +We have an open support channel in our [Discord community](https://discord.gg/F25bc4RYDt). +Helping users there is always appreciated. From d27acca0e025bd2ba502b236e701e361bf4db040 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Sat, 25 Apr 2026 14:56:12 +0200 Subject: [PATCH 07/96] chore: bump to next major ver --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c6c26b..b36b540 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "legcord", - "version": "1.2.4", + "version": "1.3.0", "description": "Legcord is a custom client designed to enhance your Discord experience while keeping everything lightweight.", "main": "ts-out/main.js", "engines": { From 92a300672509d4a0edb26f0d75189a53b040c66a Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Sat, 25 Apr 2026 20:07:49 +0200 Subject: [PATCH 08/96] feat: native plugin system wip --- docs/examples/hello-plugin/main.js | 20 ++ docs/examples/hello-plugin/manifest.json | 11 + docs/examples/hello-plugin/preload.js | 29 ++ docs/examples/hello-plugin/renderer.js | 18 + docs/plugin-system.md | 125 +++++++ package.json | 3 +- pnpm-lock.yaml | 35 +- src/@types/legcordWindow.d.ts | 21 ++ src/@types/settings.d.ts | 1 + src/common/backup.ts | 18 +- src/common/config.ts | 1 + src/discord/extensions/plugin.ts | 14 +- src/discord/ipc.ts | 26 ++ src/discord/plugins/manager.ts | 310 ++++++++++++++++++ src/discord/preload/bridge.ts | 21 ++ src/discord/preload/plugins.mts | 185 +++++++++++ src/discord/preload/preload.mts | 1 + src/main.ts | 2 + .../settings/components/PluginCard.module.css | 52 +++ .../settings/components/PluginCard.tsx | 54 +++ src/shelter/settings/index.ts | 2 + src/shelter/settings/pages/PluginsPage.tsx | 101 ++++++ 22 files changed, 1029 insertions(+), 21 deletions(-) create mode 100644 docs/examples/hello-plugin/main.js create mode 100644 docs/examples/hello-plugin/manifest.json create mode 100644 docs/examples/hello-plugin/preload.js create mode 100644 docs/examples/hello-plugin/renderer.js create mode 100644 docs/plugin-system.md create mode 100644 src/discord/plugins/manager.ts create mode 100644 src/discord/preload/plugins.mts create mode 100644 src/shelter/settings/components/PluginCard.module.css create mode 100644 src/shelter/settings/components/PluginCard.tsx create mode 100644 src/shelter/settings/pages/PluginsPage.tsx diff --git a/docs/examples/hello-plugin/main.js b/docs/examples/hello-plugin/main.js new file mode 100644 index 0000000..e676944 --- /dev/null +++ b/docs/examples/hello-plugin/main.js @@ -0,0 +1,20 @@ +/** + * Main process entry example. + * Receives api from Legcord plugin manager. + */ +module.exports.activate = (api) => { + api.logger.log("main entry active"); + + // Example: patch BrowserWindow.getTitle globally in main process. + const unpatch = api.patcher.after("getTitle", api.electron.BrowserWindow.prototype, (_args, ret) => { + if (typeof ret === "string" && !ret.endsWith(" [HelloPlugin]")) { + return `${ret} [HelloPlugin]`; + } + return ret; + }); + + api.onCleanup(() => { + unpatch(); + api.logger.log("main entry cleaned up"); + }); +}; diff --git a/docs/examples/hello-plugin/manifest.json b/docs/examples/hello-plugin/manifest.json new file mode 100644 index 0000000..39964fe --- /dev/null +++ b/docs/examples/hello-plugin/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "hello-plugin", + "name": "Hello Plugin", + "version": "1.0.0", + "description": "Example plugin showing main/preload/renderer entries and function patching.", + "author": "Legcord Docs", + "compatibleVersions": ["*"], + "main": "main.js", + "preload": "preload.js", + "renderer": "renderer.js" +} diff --git a/docs/examples/hello-plugin/preload.js b/docs/examples/hello-plugin/preload.js new file mode 100644 index 0000000..b124207 --- /dev/null +++ b/docs/examples/hello-plugin/preload.js @@ -0,0 +1,29 @@ +/** + * Preload entry example. + * Runs in Legcord preload context with access to DOM and plugin API. + */ +module.exports.activate = (api) => { + api.logger.log("preload entry active"); + + // Example: patch document title setter for demonstration. + const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, "title"); + if (!descriptor || !descriptor.set) return; + + const patchTarget = { setTitle: descriptor.set }; + const unpatch = api.patcher.before("setTitle", patchTarget, (args) => { + if (typeof args[0] === "string" && !args[0].includes("[P]")) { + args[0] = `[P] ${args[0]}`; + } + }); + + Object.defineProperty(document, "title", { + configurable: true, + get: descriptor.get?.bind(document), + set: (value) => patchTarget.setTitle.call(document, value), + }); + + api.onCleanup(() => { + unpatch(); + api.logger.log("preload entry cleaned up"); + }); +}; diff --git a/docs/examples/hello-plugin/renderer.js b/docs/examples/hello-plugin/renderer.js new file mode 100644 index 0000000..3bd3c1a --- /dev/null +++ b/docs/examples/hello-plugin/renderer.js @@ -0,0 +1,18 @@ +/** + * Renderer entry example. + * Runs in the Discord page context. + * + * In renderer entries, expose activate function through module.exports. + */ +module.exports.activate = (api) => { + api.logger.log("renderer entry active"); + + // Example: patch console.log in renderer just to show before/instead/after usage. + const unpatchBefore = api.patcher.before("log", console, (args) => { + args.unshift("[HelloPlugin]"); + }); + + const unpatchAfter = api.patcher.after("log", console, (_args, ret) => ret); + void unpatchBefore; + void unpatchAfter; +}; diff --git a/docs/plugin-system.md b/docs/plugin-system.md new file mode 100644 index 0000000..bfe227c --- /dev/null +++ b/docs/plugin-system.md @@ -0,0 +1,125 @@ +# Legcord Plugin System + +Legcord now supports filesystem plugins loaded from: + +`/plugins//` + +Each plugin can provide separate runtime entries for: + +- `main` (Electron main process) +- `preload` (Legcord preload context) +- `renderer` (Discord page context) + +## Manifest + +Create a `manifest.json` in your plugin folder: + +```json +{ + "id": "example-plugin", + "name": "Example Plugin", + "version": "1.0.0", + "description": "Example plugin with all three targets", + "author": "you", + "compatibleVersions": ["1.3.x"], + "main": "main.js", + "preload": "preload.js", + "renderer": "renderer.js" +} +``` + +Required fields: + +- `id` +- `name` +- `version` + +Optional fields: + +- `description` +- `author` +- `compatibleVersions` +- `main` +- `preload` +- `renderer` + +`compatibleVersions` supports exact versions and `x` wildcard prefixes: + +- `"1.3.0"` (exact) +- `"1.3.x"` (any patch in `1.3`) +- `"*"` (all versions) + +If the running Legcord version does not match, the plugin is marked incompatible and cannot be enabled/loaded. +Plugins are disabled by default until explicitly enabled in the Plugins settings page. + +## Lifecycle + +Main and preload entries can export either: + +- `activate(api)` named export +- default export function + +Renderer entries run as plain script files and can expose: + +- `module.exports.activate = (api) => { ... }` +- `module.exports.default = (api) => { ... }` +- `globalThis.activatePlugin = (api) => { ... }` + +## Plugin Control API + +From `window.legcord.plugins`: + +- `list()` +- `setEnabled(id, enabled)` +- `reload(id)` + +Main-process entries are enabled/disabled live. Preload/renderer entries are loaded on startup/navigation and will reflect enable state on next load. + +## Patcher API (Spitroast-style) + +Plugin APIs include: + +- `api.patcher.before(name, parent, callback, oneTime?)` +- `api.patcher.after(name, parent, callback, oneTime?)` +- `api.patcher.instead(name, parent, callback, oneTime?)` + +Callbacks use the same semantics as Spitroast (`args` mutation/replacement, return value replacement, instead chaining). +The return value is an `unpatch()` function. + +### Example + +```js +export function activate(api) { + const unpatch = api.patcher.before("fetch", window, (args) => { + api.logger.log("fetch called with", args[0]); + }); + + api.onCleanup(() => { + unpatch(); + }); +} +``` + +## Notes + +- Plugin enable state is stored in config under `pluginStates`. +- Plugin folders are scanned from disk at startup. +- Invalid manifests or missing entry files are skipped safely. + +## Full Example Plugin + +A complete example is available at: + +- `docs/examples/hello-plugin/manifest.json` +- `docs/examples/hello-plugin/main.js` +- `docs/examples/hello-plugin/preload.js` +- `docs/examples/hello-plugin/renderer.js` + +To test it: + +1. Copy `docs/examples/hello-plugin` into your runtime plugins directory: + - `/plugins/hello-plugin` +2. Restart Legcord or use the Plugins settings page: + - enable/disable + - reload +3. Open DevTools and watch for `[Plugin:hello-plugin]` logs. diff --git a/package.json b/package.json index b36b540..da51cec 100644 --- a/package.json +++ b/package.json @@ -58,8 +58,9 @@ "arrpc": "https://github.com/Legcord/arrpc.git#efe7589762470d32b9ba10d529be5acc23cd0e19", "electron-context-menu": "^4.0.4", "electron-is-dev": "^3.0.1", - "tslib": "^2.8.1", "electron-updater": "^6.6.2", + "spitroast": "^2.1.6", + "tslib": "^2.8.1", "ws": "^8.18.0" }, "optionalDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b0dd48..21a1a86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,16 +23,15 @@ importers: electron-updater: specifier: ^6.6.2 version: 6.8.3 + spitroast: + specifier: ^2.1.6 + version: 2.1.6 tslib: specifier: ^2.8.1 version: 2.8.1 ws: specifier: ^8.18.0 version: 8.20.0 - optionalDependencies: - '@vencord/venmic': - specifier: ^6.1.0 - version: 6.1.0 devDependencies: '@biomejs/biome': specifier: 1.9.4 @@ -63,7 +62,7 @@ importers: version: 1.5.1 babel-preset-solid: specifier: ^1.9.3 - version: 1.9.12(@babel/core@7.28.6)(solid-js@1.9.12) + version: 1.9.12(@babel/core@8.0.0-rc.3)(solid-js@1.9.12) electron: specifier: 41.2.0 version: 41.2.0 @@ -94,6 +93,10 @@ importers: xml-formatter: specifier: ^3.6.6 version: 3.7.0 + optionalDependencies: + '@vencord/venmic': + specifier: ^6.1.0 + version: 6.1.0 packages: @@ -2845,6 +2848,9 @@ packages: spitroast@2.1.4: resolution: {integrity: sha512-IA987I3wS8RbrKrgag+NsxLUAttrqONF7UGOL+uQFmLLXlMhZl42LomTAltBQaev0jUXIaRiqShZ3hnJYT7OCQ==} + spitroast@2.1.6: + resolution: {integrity: sha512-xil2XeVh8WQoBlG8Lm8jT6ifqWGmSgTGq2clRcq2roycb0kg1h4fv5ydoiBId9kIQp4Y12PK/cjVzD8xpWXZvg==} + sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} @@ -3315,6 +3321,11 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@8.0.0-rc.3)': + dependencies: + '@babel/core': 8.0.0-rc.3 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 @@ -4375,19 +4386,19 @@ snapshots: - debug optional: true - babel-plugin-jsx-dom-expressions@0.40.6(@babel/core@7.28.6): + babel-plugin-jsx-dom-expressions@0.40.6(@babel/core@8.0.0-rc.3): dependencies: - '@babel/core': 7.28.6 + '@babel/core': 8.0.0-rc.3 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@8.0.0-rc.3) '@babel/types': 7.29.0 html-entities: 2.3.3 parse5: 7.3.0 - babel-preset-solid@1.9.12(@babel/core@7.28.6)(solid-js@1.9.12): + babel-preset-solid@1.9.12(@babel/core@8.0.0-rc.3)(solid-js@1.9.12): dependencies: - '@babel/core': 7.28.6 - babel-plugin-jsx-dom-expressions: 0.40.6(@babel/core@7.28.6) + '@babel/core': 8.0.0-rc.3 + babel-plugin-jsx-dom-expressions: 0.40.6(@babel/core@8.0.0-rc.3) optionalDependencies: solid-js: 1.9.12 @@ -6130,6 +6141,8 @@ snapshots: spitroast@2.1.4: {} + spitroast@2.1.6: {} + sprintf-js@1.1.3: optional: true diff --git a/src/@types/legcordWindow.d.ts b/src/@types/legcordWindow.d.ts index 8bcea1f..424c9e4 100644 --- a/src/@types/legcordWindow.d.ts +++ b/src/@types/legcordWindow.d.ts @@ -5,6 +5,21 @@ import type { Keybind } from "./keybind.js"; import type { Settings } from "./settings.js"; import type { ThemeManifest } from "./themeManifest.js"; +export interface LegcordPluginInfo { + id: string; + name: string; + version: string; + description?: string; + author?: string; + enabled: boolean; + compatible: boolean; + compatibilityMessage?: string; + compatibleVersions: string[]; + hasMain: boolean; + hasPreload: boolean; + hasRenderer: boolean; +} + export interface LegcordWindow { window: { show: () => void; @@ -91,6 +106,12 @@ export interface LegcordWindow { save(data: string): Promise<{ ok: true } | { ok: false; error: string }>; restore(): Promise; }; + plugins: { + list: () => Promise; + setEnabled: (id: string, enabled: boolean) => Promise<{ ok: boolean }>; + reload: (id: string) => Promise<{ ok: boolean }>; + openFolder: () => void; + }; /** Plugin storage API. Requires user to enable "Extended plugin abilities" in Legcord settings. */ fs: { writeFile: ( diff --git a/src/@types/settings.d.ts b/src/@types/settings.d.ts index 642f4f2..bc09c56 100644 --- a/src/@types/settings.d.ts +++ b/src/@types/settings.d.ts @@ -76,4 +76,5 @@ export interface Settings { modCache?: Record; extendedPluginAbilities: boolean; supportBannerDismissed: boolean; + pluginStates?: Record; } diff --git a/src/common/backup.ts b/src/common/backup.ts index b3458d8..b23cbe5 100644 --- a/src/common/backup.ts +++ b/src/common/backup.ts @@ -38,6 +38,7 @@ export interface BackupManifest extends BackupSavePayload { export interface BackupPaths { userDataPath: string; themesPath: string; + extensionsPath: string; pluginsPath: string; pluginStoragePath: string; quickCssPath: string; @@ -114,7 +115,8 @@ export function buildBackupZipBuffer(payload: BackupSavePayload, paths: BackupPa entries.push(...walkFiles(paths.themesPath, "data/themes")); } if (includes.legcordExtensionPlugins) { - entries.push(...walkFiles(paths.pluginsPath, "data/plugins")); + entries.push(...walkFiles(paths.extensionsPath, "data/plugins")); + entries.push(...walkFiles(paths.pluginsPath, "data/runtime-plugins")); entries.push(...walkFiles(paths.pluginStoragePath, "data/plugin-storage")); } if (includes.modBundles) { @@ -197,7 +199,7 @@ export function applyBackupFromMap( if (name.startsWith("data/plugins/")) { if (!inc.legcordExtensionPlugins) continue; const rest = name.slice("data/plugins/".length); - const dest = resolvePathUnderBaseDir(paths.pluginsPath, rest); + const dest = resolvePathUnderBaseDir(paths.extensionsPath, rest); if (!dest) { console.warn(`[backup] Skipping unsafe zip path (plugins): ${name}`); continue; @@ -206,6 +208,18 @@ export function applyBackupFromMap( continue; } + if (name.startsWith("data/runtime-plugins/")) { + if (!inc.legcordExtensionPlugins) continue; + const rest = name.slice("data/runtime-plugins/".length); + const dest = resolvePathUnderBaseDir(paths.pluginsPath, rest); + if (!dest) { + console.warn(`[backup] Skipping unsafe zip path (runtime-plugins): ${name}`); + continue; + } + writeFileEnsuringDirs(dest, data); + continue; + } + if (name.startsWith("data/plugin-storage/")) { if (!inc.legcordExtensionPlugins) continue; const rest = name.slice("data/plugin-storage/".length); diff --git a/src/common/config.ts b/src/common/config.ts index 709bf97..69ac5b7 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -67,6 +67,7 @@ const defaults: Settings = { extendedPluginAbilities: false, quickCss: true, supportBannerDismissed: false, + pluginStates: {}, }; const safeMode: Settings = { diff --git a/src/discord/extensions/plugin.ts b/src/discord/extensions/plugin.ts index 818612b..5527698 100644 --- a/src/discord/extensions/plugin.ts +++ b/src/discord/extensions/plugin.ts @@ -1,24 +1,24 @@ import { existsSync, mkdirSync, readdirSync } from "node:fs"; import { platform } from "node:os"; import { app, session } from "electron"; -const pluginFolder = `${app.getPath("userData")}/plugins`; +const extensionFolder = `${app.getPath("userData")}/extensions`; let prefix = ""; -if (!existsSync(pluginFolder)) { - mkdirSync(pluginFolder); - console.log("Created missing plugin folder"); +if (!existsSync(extensionFolder)) { + mkdirSync(extensionFolder); + console.log("Created missing extensions folder"); } await app.whenReady().then(() => { - readdirSync(pluginFolder).forEach(async (file) => { + readdirSync(extensionFolder).forEach(async (file) => { try { // NOTE - The below type assertion is just what we need from the chrome manifest if (platform() === "win32") prefix = "file://"; - const manifest = (await import(`${prefix}${pluginFolder}/${file}/manifest.json`, { + const manifest = (await import(`${prefix}${extensionFolder}/${file}/manifest.json`, { with: { type: "json" }, })) as { name: string; author: string; type: "json" }; - void session.defaultSession.loadExtension(`${pluginFolder}/${file}`); // NOTE - Awaiting this will cause plugins to not inject + void session.defaultSession.loadExtension(`${extensionFolder}/${file}`); // NOTE - Awaiting this will cause plugins to not inject console.log(`[Mod loader] Loaded ${manifest.name} made by ${manifest.author}`); } catch (err) { console.error(err); diff --git a/src/discord/ipc.ts b/src/discord/ipc.ts index d512d57..fa184cd 100644 --- a/src/discord/ipc.ts +++ b/src/discord/ipc.ts @@ -29,12 +29,14 @@ import { isPowerSavingEnabled, setPowerSaving } from "../power.js"; import constPaths from "../shared/consts/paths.js"; import { splashWindow } from "../splash/main.js"; import { refreshGlobalKeybinds } from "./globalKeybinds.js"; +import { getRuntimeEntries, getRuntimeScript, listPlugins, reloadPlugin, setPluginEnabled } from "./plugins/manager.js"; import { processList, refreshProcessList } from "./rpcProcess.js"; import { importGuilds, mainTouchBar, setVoiceState, voiceTouchBar } from "./touchbar.js"; const userDataPath = app.getPath("userData"); const storagePath = path.join(userDataPath, "/storage/"); const themesPath = path.join(userDataPath, "/themes/"); +const extensionsPath = path.join(userDataPath, "/extensions/"); const pluginsPath = path.join(userDataPath, "/plugins/"); const pluginStoragePath = path.join(userDataPath, "/plugin-storage/"); const quickCssPath = path.join(userDataPath, "/quickCss.css"); @@ -316,6 +318,9 @@ export function registerIpc(passedWindow: BrowserWindow): void { shell.showItemInFolder(themesPath); }); ipcMain.on("openPluginsFolder", () => { + shell.showItemInFolder(extensionsPath); + }); + ipcMain.on("openRuntimePluginsFolder", () => { shell.showItemInFolder(pluginsPath); }); ipcMain.on("openCrashesFolder", () => { @@ -367,6 +372,25 @@ export function registerIpc(passedWindow: BrowserWindow): void { ipcMain.on("getProcessList", (event) => { event.returnValue = processList; }); + ipcMain.handle("plugins:list", () => listPlugins()); + ipcMain.handle("plugins:set-enabled", async (_event, pluginId: string, enabled: boolean) => { + if (typeof pluginId !== "string" || typeof enabled !== "boolean") { + return { ok: false }; + } + return { ok: await setPluginEnabled(pluginId, enabled) }; + }); + ipcMain.handle("plugins:reload", async (_event, pluginId: string) => { + if (typeof pluginId !== "string") return { ok: false }; + return { ok: await reloadPlugin(pluginId) }; + }); + ipcMain.handle("plugins:get-runtime-entries", (_event, target: "preload" | "renderer") => { + if (target !== "preload" && target !== "renderer") return []; + return getRuntimeEntries(target); + }); + ipcMain.handle("plugins:get-runtime-script", (_event, pluginId: string, target: "preload" | "renderer") => { + if (typeof pluginId !== "string" || (target !== "preload" && target !== "renderer")) return null; + return getRuntimeScript(pluginId, target); + }); // custom detectables control ipcMain.on("refreshProcessList", () => { @@ -451,6 +475,7 @@ export function registerIpc(passedWindow: BrowserWindow): void { const zipBuf = buildBackupZipBuffer(payload, { userDataPath, themesPath, + extensionsPath, pluginsPath, pluginStoragePath, quickCssPath, @@ -491,6 +516,7 @@ export function registerIpc(passedWindow: BrowserWindow): void { const { clientMods } = applyBackupFromMap(map, { userDataPath, themesPath, + extensionsPath, pluginsPath, pluginStoragePath, quickCssPath, diff --git a/src/discord/plugins/manager.ts b/src/discord/plugins/manager.ts new file mode 100644 index 0000000..ee83523 --- /dev/null +++ b/src/discord/plugins/manager.ts @@ -0,0 +1,310 @@ +import { existsSync, mkdirSync, readFileSync, readdirSync } from "node:fs"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; +import { BrowserWindow, app, dialog, ipcMain, shell } from "electron"; +import { after, before, instead } from "spitroast/dist/index.mjs"; +import { getConfig, setConfig } from "../../common/config.js"; + +type PluginTarget = "main" | "preload" | "renderer"; +type Cleanup = () => void; + +interface PluginManifest { + id: string; + name: string; + version: string; + description?: string; + author?: string; + main?: string; + preload?: string; + renderer?: string; + compatibleVersions?: string[]; +} + +interface PluginRecord { + manifest: PluginManifest; + directory: string; + enabled: boolean; + compatible: boolean; + compatibilityMessage?: string; + loadedMain: boolean; + cleanups: Cleanup[]; +} + +interface PluginMainApi { + id: string; + manifest: PluginManifest; + logger: Pick; + patcher: { + before: typeof before; + after: typeof after; + instead: typeof instead; + }; + electron: { + app: typeof app; + BrowserWindow: typeof BrowserWindow; + ipcMain: typeof ipcMain; + dialog: typeof dialog; + shell: typeof shell; + }; + onCleanup: (cleanup: Cleanup) => void; +} + +const pluginFolder = path.join(app.getPath("userData"), "/plugins"); +const currentLegcordVersion = app.getVersion(); +const records = new Map(); +const VALID_PLUGIN_ID = /^[a-zA-Z0-9._-]{1,64}$/; +const VALID_ENTRY_PATH = /^[^<>:"|?*\0]+$/; + +function getPluginStates() { + const states = getConfig("pluginStates"); + if (states && typeof states === "object") { + return states as Record; + } + return {}; +} + +function setPluginState(pluginId: string, enabled: boolean) { + const states = getPluginStates(); + states[pluginId] = enabled; + setConfig("pluginStates", states); +} + +function getLogPrefix(id: string) { + return `[Plugin:${id}]`; +} + +function parseManifest(pluginDir: string): PluginManifest | null { + const manifestPath = path.join(pluginDir, "manifest.json"); + if (!existsSync(manifestPath)) return null; + try { + const parsed = JSON.parse(readFileSync(manifestPath, "utf-8")) as PluginManifest; + if (!parsed.id || !parsed.name || !parsed.version) return null; + if (!VALID_PLUGIN_ID.test(parsed.id)) { + console.error(`[Plugin Manager] Invalid plugin id "${parsed.id}"`); + return null; + } + if (typeof parsed.name !== "string" || parsed.name.length > 128) { + console.error(`[Plugin Manager] ${parsed.id}: invalid plugin name`); + return null; + } + if (typeof parsed.version !== "string" || parsed.version.length > 64) { + console.error(`[Plugin Manager] ${parsed.id}: invalid plugin version`); + return null; + } + if ( + typeof parsed.main === "undefined" && + typeof parsed.preload === "undefined" && + typeof parsed.renderer === "undefined" + ) { + console.error(`[Plugin Manager] ${parsed.id}: at least one of main/preload/renderer must be defined`); + return null; + } + if ( + (parsed.main && !VALID_ENTRY_PATH.test(parsed.main)) || + (parsed.preload && !VALID_ENTRY_PATH.test(parsed.preload)) || + (parsed.renderer && !VALID_ENTRY_PATH.test(parsed.renderer)) + ) { + console.error(`[Plugin Manager] ${parsed.id}: invalid entry path`); + return null; + } + if ( + typeof parsed.compatibleVersions !== "undefined" && + (!Array.isArray(parsed.compatibleVersions) || + parsed.compatibleVersions.some((version) => typeof version !== "string")) + ) { + console.error(`[Plugin Manager] ${parsed.id}: compatibleVersions must be an array of strings`); + return null; + } + return parsed; + } catch (error) { + console.error(`[Plugin Manager] Failed to parse manifest in ${pluginDir}`, error); + return null; + } +} + +function isCompatibleVersion(versionPattern: string, version: string): boolean { + if (versionPattern === "*" || versionPattern === version) return true; + if (versionPattern.endsWith(".x")) { + const prefix = versionPattern.slice(0, -2); + return version === prefix || version.startsWith(`${prefix}.`); + } + return false; +} + +function getCompatibility(manifest: PluginManifest): { compatible: boolean; message?: string } { + const supported = manifest.compatibleVersions; + if (!supported || supported.length === 0) { + return { compatible: true }; + } + const compatible = supported.some((pattern) => isCompatibleVersion(pattern, currentLegcordVersion)); + if (compatible) return { compatible: true }; + return { + compatible: false, + message: `Incompatible with Legcord ${currentLegcordVersion} (supports: ${supported.join(", ")})`, + }; +} + +function resolvePluginEntry(record: PluginRecord, target: PluginTarget) { + const entry = record.manifest[target]; + if (!entry) return null; + const resolved = path.resolve(record.directory, entry); + const relative = path.relative(record.directory, resolved); + if (relative.startsWith("..") || path.isAbsolute(relative)) return null; + if (!existsSync(resolved)) return null; + return resolved; +} + +async function loadMain(record: PluginRecord) { + if (record.loadedMain) return; + const entry = resolvePluginEntry(record, "main"); + if (!entry) return; + + const loggerPrefix = getLogPrefix(record.manifest.id); + const api: PluginMainApi = { + id: record.manifest.id, + manifest: record.manifest, + logger: { + log: (...args) => console.log(loggerPrefix, ...args), + warn: (...args) => console.warn(loggerPrefix, ...args), + error: (...args) => console.error(loggerPrefix, ...args), + }, + patcher: { + before, + after, + instead, + }, + electron: { + app, + BrowserWindow, + ipcMain, + dialog, + shell, + }, + onCleanup: (cleanup) => { + record.cleanups.push(cleanup); + }, + }; + + const moduleUrl = `${pathToFileURL(entry).href}?v=${Date.now()}`; + const mod = (await import(moduleUrl)) as { + default?: (api: PluginMainApi) => void | Promise; + activate?: (api: PluginMainApi) => void | Promise; + }; + const entrypoint = mod.activate ?? mod.default; + if (typeof entrypoint === "function") { + await entrypoint(api); + } + record.loadedMain = true; +} + +function disableMain(record: PluginRecord) { + if (!record.loadedMain) return; + for (const cleanup of record.cleanups.splice(0)) { + try { + cleanup(); + } catch (error) { + console.error(`[Plugin Manager] Cleanup failed for ${record.manifest.id}`, error); + } + } + record.loadedMain = false; +} + +export async function initializePluginSystem() { + if (!existsSync(pluginFolder)) { + mkdirSync(pluginFolder, { recursive: true }); + } + + const discovered: PluginRecord[] = []; + for (const child of readdirSync(pluginFolder)) { + const full = path.join(pluginFolder, child); + const manifest = parseManifest(full); + if (!manifest) continue; + const state = getPluginStates(); + const enabled = state[manifest.id] ?? false; + const compatibility = getCompatibility(manifest); + discovered.push({ + manifest, + directory: full, + enabled, + compatible: compatibility.compatible, + ...(compatibility.message !== undefined ? { compatibilityMessage: compatibility.message } : {}), + loadedMain: false, + cleanups: [], + }); + } + + records.clear(); + for (const record of discovered) { + records.set(record.manifest.id, record); + } + + for (const record of records.values()) { + if (!record.enabled || !record.compatible) continue; + await loadMain(record); + } +} + +export async function setPluginEnabled(pluginId: string, enabled: boolean) { + const record = records.get(pluginId); + if (!record) return false; + if (enabled && !record.compatible) return false; + setPluginState(pluginId, enabled); + record.enabled = enabled; + if (enabled) { + await loadMain(record); + } else { + disableMain(record); + } + return true; +} + +export async function reloadPlugin(pluginId: string) { + const record = records.get(pluginId); + if (!record) return false; + if (!record.compatible) return false; + disableMain(record); + if (record.enabled) { + await loadMain(record); + } + return true; +} + +export function listPlugins() { + return [...records.values()].map((record) => ({ + id: record.manifest.id, + name: record.manifest.name, + version: record.manifest.version, + description: record.manifest.description, + author: record.manifest.author, + enabled: record.enabled, + compatible: record.compatible, + compatibilityMessage: record.compatibilityMessage, + compatibleVersions: record.manifest.compatibleVersions ?? [], + hasMain: Boolean(record.manifest.main), + hasPreload: Boolean(record.manifest.preload), + hasRenderer: Boolean(record.manifest.renderer), + })); +} + +export function getRuntimeEntries(target: Exclude) { + return [...records.values()] + .filter((record) => record.enabled && record.compatible) + .map((record) => { + const entry = resolvePluginEntry(record, target); + if (!entry) return null; + return { + id: record.manifest.id, + name: record.manifest.name, + path: entry, + }; + }) + .filter((entry): entry is { id: string; name: string; path: string } => entry !== null); +} + +export function getRuntimeScript(pluginId: string, target: Exclude) { + const record = records.get(pluginId); + if (!record || !record.enabled || !record.compatible) return null; + const entry = resolvePluginEntry(record, target); + if (!entry) return null; + return readFileSync(entry, "utf-8"); +} diff --git a/src/discord/preload/bridge.ts b/src/discord/preload/bridge.ts index a9cc894..d9b0389 100644 --- a/src/discord/preload/bridge.ts +++ b/src/discord/preload/bridge.ts @@ -12,6 +12,20 @@ interface IPCSources { name: string; thumbnail: HTMLCanvasElement; } +interface LegcordPluginInfo { + id: string; + name: string; + version: string; + description?: string; + author?: string; + enabled: boolean; + compatible: boolean; + compatibilityMessage?: string; + compatibleVersions: string[]; + hasMain: boolean; + hasPreload: boolean; + hasRenderer: boolean; +} contextBridge.exposeInMainWorld("legcord", { window: { @@ -110,6 +124,13 @@ contextBridge.exposeInMainWorld("legcord", { ipcRenderer.invoke("backupSave", data) as Promise<{ ok: true } | { ok: false; error: string }>, restore: () => ipcRenderer.invoke("backupRestore") as Promise, }, + plugins: { + list: () => ipcRenderer.invoke("plugins:list") as Promise, + setEnabled: (id: string, enabled: boolean) => + ipcRenderer.invoke("plugins:set-enabled", id, enabled) as Promise<{ ok: boolean }>, + reload: (id: string) => ipcRenderer.invoke("plugins:reload", id) as Promise<{ ok: boolean }>, + openFolder: () => ipcRenderer.send("openRuntimePluginsFolder"), + }, fs: { /** * Write a file in this plugin's scoped storage (e.g. "cache/deleted-messages.json"). diff --git a/src/discord/preload/plugins.mts b/src/discord/preload/plugins.mts new file mode 100644 index 0000000..57db415 --- /dev/null +++ b/src/discord/preload/plugins.mts @@ -0,0 +1,185 @@ +const { ipcRenderer, webFrame } = require("electron"); +const { after, before, instead } = require("spitroast/dist/index.js"); + +type RuntimeEntry = { + id: string; + name: string; + path: string; +}; + +const cleanupMap = new Map void>>(); + +function addCleanup(pluginId: string, cleanup: () => void) { + const current = cleanupMap.get(pluginId) ?? []; + current.push(cleanup); + cleanupMap.set(pluginId, current); +} + +function clearCleanup(pluginId: string) { + const cleanups = cleanupMap.get(pluginId); + if (!cleanups) return; + for (const cleanup of cleanups.splice(0)) { + try { + cleanup(); + } catch (error) { + console.error(`[Plugin:${pluginId}] cleanup failed`, error); + } + } +} + +function createApi(pluginId: string, pluginName: string) { + const loggerPrefix = `[Plugin:${pluginId}]`; + return { + id: pluginId, + name: pluginName, + logger: { + log: (...args: unknown[]) => console.log(loggerPrefix, ...args), + warn: (...args: unknown[]) => console.warn(loggerPrefix, ...args), + error: (...args: unknown[]) => console.error(loggerPrefix, ...args), + }, + patcher: { + before: (...args: Parameters) => { + const unpatch = before(...args); + addCleanup(pluginId, unpatch); + return unpatch; + }, + after: (...args: Parameters) => { + const unpatch = after(...args); + addCleanup(pluginId, unpatch); + return unpatch; + }, + instead: (...args: Parameters) => { + const unpatch = instead(...args); + addCleanup(pluginId, unpatch); + return unpatch; + }, + }, + onCleanup: (cleanup: () => void) => addCleanup(pluginId, cleanup), + }; +} + +async function executePreloadPluginSource(pluginId: string, source: string, api: ReturnType) { + const runner = new Function( + "api", + ` +const mod = { exports: {} }; +const module = mod; +const exports = mod.exports; +${source} +const activate = mod.exports.activate ?? mod.exports.default ?? globalThis.activatePlugin; +if (typeof activate === "function") { + return activate(api); +} +`, + ) as (api: ReturnType) => unknown; + await Promise.resolve(runner(api)); +} + +async function loadPreloadPlugins() { + const entries = (await ipcRenderer.invoke("plugins:get-runtime-entries", "preload")) as RuntimeEntry[]; + for (const entry of entries) { + clearCleanup(entry.id); + try { + const source = (await ipcRenderer.invoke("plugins:get-runtime-script", entry.id, "preload")) as + | string + | null; + if (!source) continue; + await executePreloadPluginSource(entry.id, source, createApi(entry.id, entry.name)); + } catch (error) { + console.error(`[Plugin:${entry.id}] preload entry failed`, error); + } + } +} + +function getRendererBootstrap(pluginId: string, pluginName: string, source: string) { + return ` +(() => { + const g = globalThis; + const stores = g.__legcordPluginPatches ?? (g.__legcordPluginPatches = new WeakMap()); + const unpatchAll = () => { g.__legcordPluginPatches = new WeakMap(); }; + const patch = (type, name, parent, callback, oneTime = false) => { + if (!parent || typeof parent[name] !== "function") throw new Error(\`Cannot patch \${String(name)}\`); + const original = parent[name]; + let bucket = stores.get(original); + if (!bucket) { + bucket = { o: original, b: new Map(), i: new Map(), a: new Map(), c: [] }; + const proxy = new Proxy(original, { + apply(_target, thisArg, argArray) { + let args = [...argArray]; + for (const hook of bucket.b.values()) { + const next = hook.call(thisArg, args); + if (Array.isArray(next)) args = next; + } + const callOriginal = (...inner) => Reflect.apply(original, thisArg, inner); + let ret = [...bucket.i.values()].reduceRight((prev, cur) => (...inner) => cur.call(thisArg, inner, prev), callOriginal)(...args); + for (const hook of bucket.a.values()) ret = hook.call(thisArg, args, ret) ?? ret; + for (const cleanup of bucket.c) cleanup(); + bucket.c.length = 0; + return ret; + } + }); + stores.set(proxy, bucket); + parent[name] = proxy; + bucket.proxy = proxy; + bucket.name = name; + bucket.parent = parent; + } + const hookId = Symbol("hook"); + const remove = () => { + const map = type === "b" ? bucket.b : type === "i" ? bucket.i : bucket.a; + if (!map.delete(hookId)) return false; + if (bucket.b.size || bucket.i.size || bucket.a.size) return true; + bucket.parent[bucket.name] = bucket.o; + stores.delete(bucket.proxy); + return true; + }; + if (oneTime) bucket.c.push(remove); + (type === "b" ? bucket.b : type === "i" ? bucket.i : bucket.a).set(hookId, callback); + return remove; + }; + const api = { + id: "${pluginId}", + name: "${pluginName}", + logger: { + log: (...args) => console.log("[Plugin:${pluginId}]", ...args), + warn: (...args) => console.warn("[Plugin:${pluginId}]", ...args), + error: (...args) => console.error("[Plugin:${pluginId}]", ...args), + }, + patcher: { + before: (name, parent, cb, once) => patch("b", name, parent, cb, once), + instead: (name, parent, cb, once) => patch("i", name, parent, cb, once), + after: (name, parent, cb, once) => patch("a", name, parent, cb, once), + unpatchAll + } + }; + const mod = { exports: {} }; + const module = mod; + const exports = mod.exports; + ${source} + const activate = mod.exports.activate ?? mod.exports.default ?? g.activatePlugin; + if (typeof activate === "function") activate(api); +})(); +//# sourceURL=legcord-plugin-renderer-${pluginId}.js +`; +} + +async function loadRendererPlugins() { + const entries = (await ipcRenderer.invoke("plugins:get-runtime-entries", "renderer")) as RuntimeEntry[]; + for (const entry of entries) { + try { + const source = (await ipcRenderer.invoke("plugins:get-runtime-script", entry.id, "renderer")) as + | string + | null; + if (!source) continue; + const bootstrap = getRendererBootstrap(entry.id, entry.name, source); + await webFrame.executeJavaScript(bootstrap); + } catch (error) { + console.error(`[Plugin:${entry.id}] renderer entry failed`, error); + } + } +} + +void (async () => { + await loadPreloadPlugins(); + await loadRendererPlugins(); +})(); diff --git a/src/discord/preload/preload.mts b/src/discord/preload/preload.mts index b925c6e..bfcbef7 100644 --- a/src/discord/preload/preload.mts +++ b/src/discord/preload/preload.mts @@ -4,6 +4,7 @@ import "./mods/shelter.mjs"; import "./mods/vencord.mjs"; import "./mods/equicord.mjs"; import "./mods/custom.mjs"; +import "./plugins.mjs"; import "./patches.mjs"; import "./newTitlebar.mjs"; import "./titlebar.mjs"; diff --git a/src/main.ts b/src/main.ts index ec9b544..fdaa9a7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -53,6 +53,7 @@ export function getAppliedFlags(): AppliedFlagsOutput { } import { fetchMods } from "./discord/extensions/modloader.js"; +import { initializePluginSystem } from "./discord/plugins/manager.js"; import { createWindow } from "./discord/window.js"; import { createSetupWindow } from "./setup/main.js"; import { createSplashWindow } from "./splash/main.js"; @@ -176,6 +177,7 @@ if (!app.requestSingleInstanceLock() && getConfig("multiInstance") === false) { preset.disableFeatures.forEach((val) => disableFeatures.add(val)); } await fetchMods(); + await initializePluginSystem(); void import("./discord/extensions/plugin.js"); // load chrome extensions console.log(`[Config Manager] Current config: ${readFileSync(getConfigLocation(), "utf-8")}`); diff --git a/src/shelter/settings/components/PluginCard.module.css b/src/shelter/settings/components/PluginCard.module.css new file mode 100644 index 0000000..079da9e --- /dev/null +++ b/src/shelter/settings/components/PluginCard.module.css @@ -0,0 +1,52 @@ +.card { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 12px; + align-items: center; + padding: 12px; + border-radius: 8px; + margin-bottom: 12px; + background: var(--background-secondary); +} + +.main { + display: flex; + flex-direction: column; + gap: 4px; + min-width: 0; +} + +.titleRow { + display: flex; + align-items: center; + gap: 8px; + min-width: 0; +} + +.title { + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.meta { + color: var(--text-muted); + font-size: 12px; +} + +.description { + color: var(--text-normal); + font-size: 13px; +} + +.targets { + color: var(--text-muted); + font-size: 12px; +} + +.actions { + display: flex; + align-items: center; + gap: 8px; +} diff --git a/src/shelter/settings/components/PluginCard.tsx b/src/shelter/settings/components/PluginCard.tsx new file mode 100644 index 0000000..4fb3dd7 --- /dev/null +++ b/src/shelter/settings/components/PluginCard.tsx @@ -0,0 +1,54 @@ +import type { LegcordPluginInfo } from "../../../@types/legcordWindow.js"; +import classes from "./PluginCard.module.css"; + +const { + ui: { Header, HeaderTags, Switch, Button, ButtonSizes }, +} = shelter; + +export function PluginCard(props: { + plugin: LegcordPluginInfo; + busy: boolean; + onToggle: (enabled: boolean) => void; + onReload: () => void; +}) { + const targets = [ + props.plugin.hasMain ? "main" : null, + props.plugin.hasPreload ? "preload" : null, + props.plugin.hasRenderer ? "renderer" : null, + ] + .filter((value): value is string => value !== null) + .join(", "); + + return ( +
+
+
+
+ {props.plugin.name} +
+ +
+
+ {props.plugin.id} • v{props.plugin.version} + {props.plugin.author ? ` • ${props.plugin.author}` : ""} +
+ {props.plugin.description ?
{props.plugin.description}
: null} +
Targets: {targets || "none"}
+ {!props.plugin.compatible ? ( +
+ {props.plugin.compatibilityMessage ?? "Plugin is not compatible."} +
+ ) : null} +
+
+ +
+
+ ); +} diff --git a/src/shelter/settings/index.ts b/src/shelter/settings/index.ts index 75fa242..88d39b9 100644 --- a/src/shelter/settings/index.ts +++ b/src/shelter/settings/index.ts @@ -1,5 +1,6 @@ /// import { KeybindsPage } from "./pages/KeybindsPage.jsx"; +import { PluginsPage } from "./pages/PluginsPage.jsx"; import { RegisteredGamesPage } from "./pages/RegisteredGamesPage.jsx"; import { SettingsPage } from "./pages/SettingsPage.jsx"; import { ThemesPage } from "./pages/ThemesPage.jsx"; @@ -18,6 +19,7 @@ const settingsPages = [ registerSection("header", "Legcord"), registerSection("section", "legcord-settings", "Settings", SettingsPage), registerSection("section", "legcord-themes", "Themes", ThemesPage), + registerSection("section", "legcord-plugins", "Plugins", PluginsPage), registerSection("section", "legcord-keybinds", "Keybinds", KeybindsPage), registerSection("section", "legcord-games", "Games", RegisteredGamesPage), ]; diff --git a/src/shelter/settings/pages/PluginsPage.tsx b/src/shelter/settings/pages/PluginsPage.tsx new file mode 100644 index 0000000..7b4bf4d --- /dev/null +++ b/src/shelter/settings/pages/PluginsPage.tsx @@ -0,0 +1,101 @@ +import { For, Show, createSignal, onMount } from "solid-js"; +import type { LegcordPluginInfo } from "../../../@types/legcordWindow.js"; +import { PluginCard } from "../components/PluginCard.jsx"; + +const { + ui: { Header, HeaderTags, Divider, Button, ButtonSizes, showToast }, +} = shelter; + +export function PluginsPage() { + const [plugins, setPlugins] = createSignal([]); + const [busyIds, setBusyIds] = createSignal([]); + + const setBusy = (pluginId: string, state: boolean) => { + setBusyIds((current) => { + if (state) { + return current.includes(pluginId) ? current : [...current, pluginId]; + } + return current.filter((id) => id !== pluginId); + }); + }; + + const isBusy = (pluginId: string) => busyIds().includes(pluginId); + + const refreshPlugins = async () => { + const list = await window.legcord.plugins.list(); + setPlugins(list); + }; + + const onToggle = async (plugin: LegcordPluginInfo, enabled: boolean) => { + setBusy(plugin.id, true); + try { + if (enabled && !plugin.compatible) { + showToast({ + title: "Plugins", + content: + plugin.compatibilityMessage ?? `${plugin.name} is not compatible with this Legcord version.`, + duration: 3500, + }); + return; + } + const result = await window.legcord.plugins.setEnabled(plugin.id, enabled); + if (!result.ok) { + showToast({ + title: "Plugins", + content: `Failed to ${enabled ? "enable" : "disable"} ${plugin.name}.`, + duration: 3000, + }); + } + await refreshPlugins(); + } finally { + setBusy(plugin.id, false); + } + }; + + const onReload = async (plugin: LegcordPluginInfo) => { + setBusy(plugin.id, true); + try { + const result = await window.legcord.plugins.reload(plugin.id); + showToast({ + title: "Plugins", + content: result.ok ? `Reloaded ${plugin.name}.` : `Failed to reload ${plugin.name}.`, + duration: 2500, + }); + await refreshPlugins(); + } finally { + setBusy(plugin.id, false); + } + }; + + onMount(() => { + void refreshPlugins(); + }); + + return ( + <> +
Plugins
+ +
+ + +
+ +
No runtime plugins found in your plugins folder.
+
+ + {(plugin) => ( + void onToggle(plugin, enabled)} + onReload={() => void onReload(plugin)} + /> + )} + + + ); +} From e55cd408f7eee7d1009a5c0bb4003914292f082d Mon Sep 17 00:00:00 2001 From: youtsuho <110821381+youtsuhodev@users.noreply.github.com> Date: Sun, 26 Apr 2026 11:07:08 +0200 Subject: [PATCH 09/96] feat: Add icons to Legcord settings sidebar (#1079) --- .../components/icons/SettingsNavIcons.tsx | 67 +++++++++++++++++++ src/shelter/settings/index.ts | 17 +++-- 2 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 src/shelter/settings/components/icons/SettingsNavIcons.tsx diff --git a/src/shelter/settings/components/icons/SettingsNavIcons.tsx b/src/shelter/settings/components/icons/SettingsNavIcons.tsx new file mode 100644 index 0000000..495fc14 --- /dev/null +++ b/src/shelter/settings/components/icons/SettingsNavIcons.tsx @@ -0,0 +1,67 @@ +import type { JSX } from "solid-js"; + +const SIDEBAR_ICON_SIZE = 18; +const SIDEBAR_STROKE_WIDTH = 2; + +const SidebarIcon = (props: { children: JSX.Element }) => ( + +); + +export const SettingsSidebarIcon = () => ( + + + + +); + +export const ThemesSidebarIcon = () => ( + + + + + + + +); + +export const PluginsSidebarIcon = () => ( + + + +); + +export const KeybindsSidebarIcon = () => ( + + + + + + + + + + + +); + +export const GamesSidebarIcon = () => ( + + + + + + + +); diff --git a/src/shelter/settings/index.ts b/src/shelter/settings/index.ts index 88d39b9..522c385 100644 --- a/src/shelter/settings/index.ts +++ b/src/shelter/settings/index.ts @@ -1,4 +1,11 @@ /// +import { + GamesSidebarIcon, + KeybindsSidebarIcon, + PluginsSidebarIcon, + SettingsSidebarIcon, + ThemesSidebarIcon, +} from "./components/icons/SettingsNavIcons.jsx"; import { KeybindsPage } from "./pages/KeybindsPage.jsx"; import { PluginsPage } from "./pages/PluginsPage.jsx"; import { RegisteredGamesPage } from "./pages/RegisteredGamesPage.jsx"; @@ -17,11 +24,11 @@ const { const settingsPages = [ registerSection("divider"), registerSection("header", "Legcord"), - registerSection("section", "legcord-settings", "Settings", SettingsPage), - registerSection("section", "legcord-themes", "Themes", ThemesPage), - registerSection("section", "legcord-plugins", "Plugins", PluginsPage), - registerSection("section", "legcord-keybinds", "Keybinds", KeybindsPage), - registerSection("section", "legcord-games", "Games", RegisteredGamesPage), + registerSection("section", "legcord-settings", "Settings", SettingsPage, { icon: SettingsSidebarIcon }), + registerSection("section", "legcord-themes", "Themes", ThemesPage, { icon: ThemesSidebarIcon }), + registerSection("section", "legcord-plugins", "Plugins", PluginsPage, { icon: PluginsSidebarIcon }), + registerSection("section", "legcord-keybinds", "Keybinds", KeybindsPage, { icon: KeybindsSidebarIcon }), + registerSection("section", "legcord-games", "Games", RegisteredGamesPage, { icon: GamesSidebarIcon }), ]; function restartRequired(payload: { event: string; properties: { origin_pane: string } }) { From 62934670ee6430cb8f2c9e3a22bb50cd5c23f689 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 9 May 2026 19:11:36 +0200 Subject: [PATCH 10/96] chore: translations update [skip ci] Co-authored-by: ssantos Translate-URL: https://hosted.weblate.org/projects/armcord/client/pt_PT/ Translation: Legcord/Client --- assets/lang/pt_PT.json | 152 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 151 insertions(+), 1 deletion(-) diff --git a/assets/lang/pt_PT.json b/assets/lang/pt_PT.json index f0807ff..9fea545 100644 --- a/assets/lang/pt_PT.json +++ b/assets/lang/pt_PT.json @@ -120,5 +120,155 @@ "contextMenu-searchGoogle": "Pesquisar com Google", "contextMenu-searchDuckDuckGo": "Pesquisar com DuckDuckGo", "touchbar-servers": "Servidores", - "splash-title": "Legcord" + "splash-title": "Legcord", + "settings-bounceOnPing": "Agitar na barra de tarefas às notificações", + "settings-bounceOnPing-desc": "Agitar a app na barra de tarefas quando receber uma notificação.", + "settings-material-none": "Nenhum", + "settings-popoutPiP-desc": "Quando ativado, a elevação da chamada atual sempre ficará acima de outros elementos.", + "settings-venmic-ignoreInputMedia": "Ignorar média de entrada", + "settings-venmic-onlyDefaultSpeakers-desc": "Usar apenas alto-falantes para seleção de áudio.", + "settings-openCustomIconDialog": "Definir ícone de desktop", + "settings-mintoTray": "Funcionar em segundo plano", + "settings-mintoTray-desc": "Quando desativado, Legcord será fechado como qualquer outra janela, do contrário, ele funcionará em segundo plano e ficará na bandeja do sistema disponível a qualquer momento.", + "settings-startMinimized": "Abrir minimizado", + "settings-startMinimized-desc": "Legcord inicia em segundo plano e fica fora do seu caminho.", + "settings-csp-none": "Nenhum", + "settings-useSystemCssEditor": "Usar editor de estilo (CSS) do sistema", + "settings-useSystemCssEditor-desc": "Usar editor de estilo padrão do sistema para editar CSS.", + "settings-MultiInstance": "Múltiplas instâncias", + "settings-MultiInstance-desc": "Quando ativado, poderá iniciar quantas instâncias do Legcord que quiser, ao mesmo tempo.", + "settings-noBundleUpdates": "Sem updates em pacotes", + "settings-noBundleUpdates-desc": "Desativa updates automáticos para mods deste cliente.", + "settings-hardwareAcceleration": "Aceleração de Hardware", + "settings-hardwareAcceleration-desc": "Aceleração de Hardware usa a sua GPU para ajudar no desempenho gráfico. Se experienciar problemas ou bugs visuais, tente desativar esta opção.", + "settings-processScanning": "Escaneamento de processos ativos", + "settings-processScanning-desc": "Ativa o escaneamento de processos para encontrar jogos que executam para melhorar a detecção do RichPresence.", + "settings-windowsLegacyScanning": "Escaneamento antigo do Windows", + "settings-windowsLegacyScanning-desc": "Usa o escaneamento de processos antigo do Windows (prév. v1.1.6). Pode ajudar a compatibilidade de alguns sistemas mas esse método é menos eficiente.", + "settings-scanInterval": "Intervalo de escaneamento (ms)", + "settings-scanInterval-desc": "Configura o quão frequente (em milisegundos) o escaneamento de processos ocorre. Valores menores podem melhorar a rapidez da detecção de processos, mas vão aumentar o uso do processador.", + "settings-blockPowerSavingInVoiceChat": "Impedir economia de pilha em chats de voz", + "settings-blockPowerSavingInVoiceChat-desc": "Impede Legcord de ser suspenso. Mantém o sistema ativo mas permite que o ecrã seja desligado/descansado.", + "settings-mobileMode": "Modo de telemóvel", + "settings-mobileMode-desc": "Se está num dispositivo sensível ao toque, esta função é para si! Ativa a opção oculta do Discord para dispositivos móveis como tablets e telemóveis. Única função importante que falta é compatibilidade com chat de voz. Esta opção é ideal para\n utilizadores de PinePhone e outros.", + "settings-spellcheck": "Corretor automático", + "settings-spellcheck-desc": "Ajuda a corrigir palavras escritas incorretamente sublinhando-as.", + "settings-vaapi": "VAAPI", + "settings-vaapi-desc": "Use VAAPI (aceleração de hardware) para fazer decodificação de vídeo no Linux. Esta opção ajuda a reduzir drásticamente o uso de CPU durante o compartilhamento de ecrã, mas pode causar problemas em alguns sitemas. Desative esta opção caso expirencie travamentos ou \"ecrã-preto\" enquanto partilhar o ecrã.", + "settings-channel": "Canal do Discord", + "settings-channel-desc": "Ative esta configuração para mudar a instância atual do Discord que o Legcord está a usar.", + "settings-bitrateMin": "Birate mínimo", + "settings-bitrateMin-desc": "Bitrate mínimo para compartilhamento do ecrã.", + "settings-bitrateMax": "Bitrate máximo", + "settings-bitrateMax-desc": "Bitrate máximo para compartilhamento do ecrã.", + "settings-bitrateTarget": "Bitrate Alvo", + "settings-bitrateTarget-desc": "Bitrate alvo para compartilhamento do ecrã.", + "settings-invitewebsocket": "Rich Presence", + "settings-invitewebsocket-desc": "Usa arRPC para a função da Rich Presence do Discord com programas locais da sua máquina.", + "settings-useMacSystemPicker": "Usar o seletor de sistema padrão do macOS", + "settings-useMacSystemPicker-desc": "Usa o partilhamento de ecrã nativo do macOS quando possível. Apenas para macOS 15+", + "settings-additionalArguments": "Argumentos adicionais", + "settings-additionalArguments-desc": "Argumentos adicionais são comandos extras que pode adicionar ao Legcord. Eles podem ser usados para ativar ou desativar funções ou corrigir problemas.", + "settings-mod": "Modificação de Cliente", + "settings-mod-desc1": "Mods do cliente são programas que permitem customizar a sua experiência no Discord. Mods podem mudar a aparência do cliente, modificar comportamentos e até adicionar novas funcionalidades!", + "settings-mod-vencord": "Mod leve e fácil de usar. Vem com uma loja integrada para plugins.", + "settings-mod-equicord": "Nascido de uma fork de contribuidores do Vencord, traz um cliente rico em plugins.", + "settings-prfmMode-desc": "Modo de performance é uma funcionalidade experimental do Legcord feita para otimizar responsitividade e performance baseado nas suas nescessidades. Impacto pode variar dependendo da configuração da sua máquina e o seu uso, então recomendamos tentar cada modo e escolher um que sirva melhor para si.", + "settings-prfmMode-battery": "Pilha", + "settings-prfmMode-vaapi": "VAAPI", + "settings-disableAutogain": "Desativar ganho automático", + "settings-disableAutogain-desc": "Desativa ganho automático.", + "settings-disableHttpCache": "Desativar cache HTTP", + "settings-disableHttpCache-desc": "Desativa o cache HTTP do Chromium. Desative esta opção se mods não carregarem.", + "settings-trayIcon": "Ícone de bandeja", + "settings-trayIcon-desc": "Escolha um ícone de bandeja.", + "settings-trayIcon-disabled": "Desativar a bandeja", + "settings-trayIcon-dynamic": "Dinâmico", + "settings-trayIcon-normal": "Ícone do Discord", + "settings-trayIcon-classic": "Ícone clássico do Discord", + "settings-trayIcon-colored-plug": "Tomada colorida", + "settings-trayIcon-white-plug": "Tomada branca", + "settings-trayIcon-white-plug-alt": "Tomada branca (alternativa)", + "settings-trayIcon-black-plug": "Tomada preta", + "settings-trayIcon-black-plug-alt": "Tomada preta (alternativa)", + "settings-advanced": "Zona para utilizadores avançados", + "settings-pluginsFolder": "Abrir pasta de plugins", + "settings-crashesFolder": "Abrir pasta de crashes nativa", + "settings-themesFolder": "Abrir pasta de temas", + "settings-storageFolder": "Abrir pasta de armazenamento", + "settings-updater": "Verificar por updates", + "settings-skipSplash": "Pular ecrã de introdução", + "settings-skipSplash-desc": "Pula a ecrã de introdução do Legcord quando você o inicia.", + "settings-copyDebugInfo": "Copiar informação de debug", + "settings-copyGPUInfo": "Copiar informação de GPU", + "settings-clearClientModCache": "Limpar o cache de mods do cliente", + "settings-forceNativeCrash": "Forçar crash nativo", + "settings-smoothScroll": "Usar rolamento suave", + "settings-smoothScroll-desc": "Ativa o rolamento suave", + "settings-autoScroll": "Ativar rolamento automático", + "settings-autoScroll-desc": "Ativa o rolamento automático com o clique do meio do rato (Obs. O seu ambiente desktop ainda pode controlar esta operação com outra ação)", + "settings-quickCss": "CSS Rápido", + "settings-quickCss-desc": "Rapidamente edite o CSS do seu cliente com um editor de texto simples. Mudanças são aplicadas imediatamente depois de gravar o ficheiro.", + "settings-category-mods": "Mods", + "settings-category-behaviour": "Comportamento", + "settings-category-debug": "Opções de debug", + "menu-about": "Sobre o Legcord", + "menu-developerTools": "Ferramentas de programador", + "menu-paste": "Colar", + "menu-selectAll": "Selecionar tudo", + "menu-toggleFullscreen": "Ativar/desativar modo de ecrã cheio", + "menu-zoomIn": "Aumentar zoom", + "menu-zoomOut": "Diminuir zoom", + "menu-resetZoom": "Resetar zoom", + "menu-keybind": "Atalhos", + "menu-legcord": "Legcord", + "tray-openLegcord": "Abrir Legcord", + "tray-openSettings": "Abrir configurações", + "tray-quitLegcord": "Fechar Legcord", + "tray-tooltip": "Legcord", + "dialog-openUrl-title": "Quer abrir esta ligação?", + "dialog-openUrl-message": "Deseja abrir {url}?", + "dialog-openUrl-detail": "Detetamos que este url não usa protocolos normais ded navegador. Isto pode significar que este url leva à um programa local no seu computador. Por favor, verifique se o reconhece antes de prosseguir!", + "dialog-openUrl-checkbox": "Lembrar a minha resposta e ignorar este aviso em sessões futuras", + "dialog-openUrl-no": "Não", + "title-unreadMessages": "Tem mensagens não lidas.", + "title-legcordSuffix": " - Legcord", + "dialog-importTheme-title": "Selecione um tema que deseja importar", + "dialog-importTheme-discordStyles": "Estilos do Discord", + "dialog-customIcon-filters": "Ícones", + "config-corrupted-title": "Opa, algo deu errado.", + "config-corrupted-message": "Legcord detetou que o seu ficheiro de configuração está corrompido, por favor, reinicie a app e ponha novamente as suas configurações, caso o erro persista, reporte no nosso servidor do Discord ou na guia de Problemas no Github.", + "setup-welcomeTitle": "Bem-vindo ao Legcord", + "setup-welcomeSubtitle": "Vamos nos preparar para a sua configuração perfeita.", + "setup-getStarted": "Começar", + "setup-windowStyle-nativeTitle": "Janela Nativa", + "setup-windowStyle-nativeDesc": "Usar o estilo de janela padrão do sistema", + "setup-windowStyle-customTitle": "Barra de título customizada", + "setup-windowStyle-customDesc": "Usa o design customizado do Legcord para a barra de título", + "setup-chooseWindowStyle": "Escolher estilo da Janela", + "setup-selectAppearance": "Escolher como o Legcord aparece na sua máquina", + "setup-systemTray": "Bandeja do sistema", + "setup-trayChoose": "Escolha se deseja ativar ou não a ícone na bandeja do sistema", + "setup-trayEnableTitle": "Ativar ícone de bandeja", + "setup-trayEnableDesc": "Mostrar o Legcord na bandeja do sistema", + "setup-trayDisableTitle": "Desativar ícone de bandeja", + "setup-trayDisableDesc": "Não mostrar o Legcord na bandeja do sistema", + "setup-finishTitle": "Está pronto!", + "setup-back": "Voltar", + "settings-restartRequired": "Reinicialização necessária", + "settings-theme-legacy": "Legado", + "settings-channel-stable": "Estável", + "keybind-mute": "Silenciar", + "keybind-runJavascript": "Executar Javascript", + "keybind-global": "Global", + "detectable-aliases": "Apelidos", + "backup-createBackup": "Criar backup", + "backup-restore": "Restaurar", + "backup-includeLegcordConfig": "Configurações", + "backup-confirmBackup": "Exportar", + "backup-cancelledTitle": "Cancelado", + "backup-unknownError": "Algo deu errado.", + "backup-restoreConfirm": "Restaurar", + "backup-restoreCancel": "Cancelar", + "supportBanner-donate": "Doar" } From eb0ddc3337caf1fccfed5b10bf94aa9583c2929b Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 11 May 2026 21:11:37 +0200 Subject: [PATCH 11/96] chore: translations update [skip ci] Co-authored-by: Cynosoura Translate-URL: https://hosted.weblate.org/projects/armcord/client/ru/ Translation: Legcord/Client --- assets/lang/ru.json | 190 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 183 insertions(+), 7 deletions(-) diff --git a/assets/lang/ru.json b/assets/lang/ru.json index 14bf371..ff9bdca 100644 --- a/assets/lang/ru.json +++ b/assets/lang/ru.json @@ -15,20 +15,20 @@ "setup_question5": "Хотите использовать значок в трее?", "settings-theme": "Стиль окна", "settings-theme-desc": "Стиль окна определяет, какой заголовок использует Legcord.", - "settings-theme-default": "По умолчанию (настраиваемая)", - "settings-theme-native": "Встроенная", + "settings-theme-default": "По умолчанию (Legcord)", + "settings-theme-native": "Системная", "settings-autoHideMenuBar": "Автоскрытие строки меню", "settings-autoHideMenuBar-desc": "Автоскрытие строки меню, когда она не используется.", "settings-sleepInBackground": "Переходить в спящий режим в фоне", "settings-sleepInBackground-desc": "Включает ограничение скорости фоновой работы Chromium. Может снизить энергопотребление, но приводит к некорректной работе уведомлений.", "settings-transparency": "Прозрачность", - "settings-transparency-desc": "Установите режим прозрачности Legcord.", + "settings-transparency-desc": "Выберите режим прозрачности, который будет использовать Legcord.", "settings-transparency-universal": "Универсальный", "settings-transparency-modern": "Современный", "settings-theme-transparent": "Прозрачный", - "settings-transparency-tahoe-warning": "Прозрачность может вызвать чрезмерные лаги на MacOS 26 Tahoe.", - "settings-popoutPiP": "Всплывающее окно вызова всегда сверху", - "settings-popoutPiP-desc": "При включении этой функции всплывающее окно вызова будет отображаться в режиме Всегда поверх других окон.", + "settings-transparency-tahoe-warning": "Прозрачность может вызывать чрезмерные лаги на MacOS 26 Tahoe.", + "settings-popoutPiP": "Всплывающее окно вызова поверх всех окон", + "settings-popoutPiP-desc": "При включении этой функции всплывающее окно вызова всегда будет отображаться в режиме Поверх всех окон.", "settings-venmic-deviceSelect": "Выбор устройства", "settings-venmic-deviceSelect-desc": "Позволяет выбрать аудио устройство.", "settings-venmic-granularSelect-desc": "Позволить выбрать источник аудиовхода.", @@ -40,5 +40,181 @@ "settings-venmic-onlySpeakers": "Только динамики", "settings-venmic-onlySpeakers-desc": "Использовать только динамики для выбора аудиовыхода.", "settings-audio": "Аудио", - "settings-theme-overlay": "Оверлей" + "settings-theme-overlay": "Оверлей", + "settings-material": "Материал фона окна", + "settings-material-desc": "Выберите эффект прозрачности Windows, который будет использовать Legcord.", + "settings-material-mica": "Mica", + "settings-material-mica-alt": "Mica Alt", + "settings-material-acrylic": "Acrylic", + "settings-material-none": "Не использовать", + "settings-venmic-workaround": "Обход", + "settings-audio-desc": "Выберите метод захвата системного аудио во время демонстрации экрана.", + "settings-openCustomIconDialog": "Выберите иконку рабочего стола", + "settings-mintoTray": "Работа в фоне", + "settings-mintoTray-desc": "При выключенной настройке, закрытие окна будет полностью закрывать Legcord, а при включённой, Legcord просто пойдёт отдыхать в ваш системный трей.", + "settings-startMinimized": "Запуск в свёрнутом виде", + "settings-startMinimized-desc": "Legcord всегда будет запускаться в фоне, чтобы не мешать вам.", + "settings-csp": "Политика Защиты Данных (CSP)", + "settings-csp-desc": "Установите строгость защиты данных в Legcord. Строгий режим CSP безопаснее, но может быть несовместим с некоторыми модами/темами/плагинами.", + "settings-csp-strict": "Строгий", + "settings-csp-none": "Не использовать", + "settings-csp-vanilla": "Стандартный", + "settings-useSystemCssEditor": "Использовать системный редактор CSS", + "settings-useSystemCssEditor-desc": "Использовать системный редактор CSS для редактирования CSS в Legcord.", + "settings-MultiInstance": "Много сессий", + "settings-MultiInstance-desc": "При включённой настройке вы сможете начать несколько сессий Legcord одновременно.", + "settings-noBundleUpdates": "Не обновлять пакеты", + "settings-noBundleUpdates-desc": "Отключает автоматическое обновление модов.", + "settings-automaticClientUpdates": "Автообновление клиента", + "settings-automaticClientUpdates-desc": "Отключает автоматическое обновление Legcord.", + "settings-hardwareAcceleration": "Аппаратное ускорение", + "settings-hardwareAcceleration-desc": "Legcord будет использовать ваш GPU для ускорения работы программы. Если вам встречаются визуальные баги, попробуйте выключить эту функцию.", + "settings-mobileMode": "Мобильный режим", + "settings-mobileMode-desc": "Эта функция создана специально для тех, кто использует Legcord на устройствах с сенсорным экраном! Она активирует скрытый мобильный режим Discord, созданный для планшетов и смартфонов. Режим не поддерживает голосовые чаты. Идеально подходит для пользователей PinePhone и других подобных устройств.", + "settings-spellcheck": "Проверка орфографии", + "settings-spellcheck-desc": "Выделяет неправильно написанные слова.", + "settings-vaapi": "VAAPI", + "settings-vaapi-desc": "Использовать VAAPI (Аппаратное ускорение) для декодирования видео на Linux-системах. Значительно уменьшает нагрузку на CPU во время демонстрации экрана, но может вызывать проблемы на некоторых системах. Выключите эту настройку, если вы сталкиваетесь с вылетами или чёрным экраном во время демонстрации.", + "settings-bitrateMin": "Минимальный битрейт", + "settings-bitrateMin-desc": "Минимальный битрейт видео при демонстрации экрана.", + "settings-bitrateMax": "Максимальный битрейт", + "settings-bitrateMax-desc": "Максимальный битрейт видео при демонстрации экрана.", + "settings-mod-shelter": "Shelter", + "settings-prfmMode": "Режим Производительности", + "settings-prfmMode-desc": "Режимы Производительности - экспериментальная функция Legcord, оптимизирующая производительность и скорость работы программы под ваши нужды. Эффект может зависеть от вашей системной конфигурации и паттернов использования, поэтому мы рекомендуем вам попробовать каждый режим и выбрать тот, что лучше всего подходит именно вам.", + "settings-prfmMode-performance": "Производительный", + "settings-prfmMode-battery": "Энергосбережение", + "settings-prfmMode-dynamic": "Динамический", + "settings-prfmMode-vaapi": "VAAPI", + "settings-disableAutogain": "Выключить автоусиление", + "settings-disableAutogain-desc": "Отключает динамическое усиление (гейн) микрофона.", + "settings-trayIcon": "Иконка в трее", + "settings-trayIcon-desc": "Установите значок, который будет отображаться в меню трея.", + "settings-advanced": "Только для продвинутых пользователей", + "settings-pluginsFolder": "Открыть папку с плагинами", + "settings-themesFolder": "Открыть папку с темами", + "settings-experimental": "Экспериментальные настройки", + "settings-restart": "Перезапустить приложение", + "settings-updater": "Проверить наличие обновлений", + "settings-skipSplash": "Отключить сплеш", + "settings-skipSplash-desc": "Пропускает экран с логотипом Legcord, появляющийся при запуске приложения.", + "settings-copyDebugInfo": "Копировать данные для отладки", + "settings-copyGPUInfo": "Копировать информацию о GPU", + "settings-clearClientModCache": "Очистить кеш модов", + "settings-forceNativeCrash": "Вызвать принудительный сбой", + "settings-smoothScroll": "Использовать плавный скроллинг", + "settings-smoothScroll-desc": "Включить плавный скроллинг", + "settings-autoScroll": "Разрешить автоматическую прокрутку", + "settings-autoScroll-desc": "Разрешить автоматическую прокрутку при нажатии средней кнопки мыши (Примечание: Эта настройка не имеет приоритета над назначениями клавиш вашей среды рабочего стола)", + "settings-quickCss": "Quick CSS", + "settings-quickCss-desc": "Быстро внесите изменения в ваш CSS в базовом текстовом редакторе. Изменения вступят в силу сразу полсе сохранения файла.", + "settings-category-lookAndFeel": "Внешний вид", + "settings-category-debug": "Отладка", + "menu-about": "Про Legcord", + "menu-developerTools": "Настройки разработчика", + "menu-openSettings": "Открыть настройки", + "menu-reload": "Перезагрузка", + "menu-restart": "Перезапуск", + "menu-cut": "Вырезать", + "menu-copy": "Копировать", + "menu-paste": "Вставить", + "menu-selectAll": "Выбрать всё", + "menu-toggleFullscreen": "Полноэкранный режим", + "menu-zoomIn": "Приблизить", + "menu-zoomOut": "Отдалить", + "menu-resetZoom": "Сбросить приближение", + "menu-window": "Окно", + "menu-minimize": "Свернуть", + "menu-close": "Закрыть", + "menu-legcord": "Legcord", + "tray-openLegcord": "Открыть Legcord", + "tray-openSettings": "Открыть настройки", + "tray-supportServer": "Сервер поддержки в Discord", + "tray-restartLegcord": "Перезапустить Legcord", + "tray-quitLegcord": "Закрыть Legcord", + "tray-tooltip": "Legcord", + "dialog-openUrl-title": "Перейти по ссылке?", + "dialog-openUrl-message": "Перейти по адресу {url}?", + "dialog-openUrl-detail": "Данный url использует нестандартный сетевой протокол. Скорее всего, он пытается запустить локальную программу на вашем устройстве. Прежде чем продолжить, удостоверьтесь, что узнаёте её!", + "dialog-openUrl-checkbox": "Запомнить мой ответ и не предупреждать в дальнейшем", + "dialog-openUrl-yes": "Продолжить", + "dialog-openUrl-no": "Отмена", + "title-unreadMessages": "У вас есть непрочитанные сообщения.", + "title-legcordSuffix": " - Legcord", + "dialog-importTheme-title": "Выберите тему, которую вы хотите импортировать", + "dialog-importTheme-button": "Импортировать", + "dialog-importTheme-allFiles": "Все файлы", + "config-corrupted-title": "Упс, что-то пошло не так!", + "setup-welcomeTitle": "Добро пожаловать в Legcord", + "setup-windowStyle-nativeTitle": "Нативное окно", + "setup-windowStyle-nativeDesc": "Использовать системное оформление окна", + "setup-windowStyle-customTitle": "Кастомный заголовок", + "setup-windowStyle-customDesc": "Использовать кастомный стиль полосы заголовка Legcord", + "setup-chooseWindowStyle": "Выберите оформление окна", + "setup-selectAppearance": "Настройте, как Legcord будет выглядеть на вашем устройстве", + "setup-finishTitle": "Готово!", + "setup-finishSettingsNote": "Хотите что-то поменять? Все эти настройки всегда доступны в настройках Discord в разделе Legcord.", + "setup-launchLegcord": "Запустить Legcord", + "setup-vencordTitle": "Vencord", + "setup-equicordTitle": "Equicord", + "setup-loading": "Загрузка...", + "settings-restartRequired": "Необходим перезапуск", + "settings-restartRequiredBody": "Перезапустите Legcord, чтобы применить внесённые изменения.", + "settings-restartLater": "Перезапущу позже", + "settings-channel-stable": "Stable", + "settings-channel-canary": "Canary", + "settings-channel-ptb": "PTB", + "settings-category-powerManagement": "Энергосбережение", + "settings-category-arrpc": "arRPC", + "settings-extendedPluginAbilities": "Расширенные возможности плагинов", + "settings-extendedPluginAbilities-desc": "Даёт плагинам доступ к чтению и записи файлов в выделенной папке на вашем устройстве (например, для сохранения удалённых сообщений). Не включайте для плагинов, которым не доверяете, и не хотите, чтобы они сохраняли данные на вашем усторйстве. Данные будут сохраняться отдельно для каждого плагина в папке плагинов в файлах Legcord.", + "keybind-invalidCombo": "Данное сочетание клавиш некорректно или не поддерживается.", + "keybind-recording": "Запись", + "keybind-record": "Начать запись", + "keybind-action": "Действие", + "keybind-leaveCall": "Покинуть звонок", + "keybind-add": "Добавить", + "keybind-delete": "Удалить", + "detectable-missingFields": "Пропущено поле", + "detectable-fillAllFields": "Пожалуйста, заполните все поля, чтобы продолжить.", + "detectable-themes": "Темы", + "detectable-placeholderName": "например, Discord", + "detectable-placeholderId": "например, 1234567890", + "themes-updated": "Тема успешно обновлена!", + "themes-importFromFile": "Импортировать из файла", + "themes-openThemesFolder": "Открыть папку с темами", + "themes-import": "Импортировать", + "themes-importUrlPlaceholder": "https://raw.githubusercontent.com/... [.theme.css]", + "screenshare-share": "Поделиться", + "screenshare-title": "Демонстрация экрана", + "contextMenu-searchGoogle": "Поиск в Google", + "contextMenu-searchDuckDuckGo": "Поиск в DuckDuckGo", + "touchbar-servers": "Сервера", + "splash-title": "Legcord", + "backup-dialogSave-title": "Сохранить резервную копию Legcord", + "backup-dialogOpen-title": "Открыть резерную копию Legcord", + "backup-pageTitle": "Резервное копирование", + "backup-pageSubtitle": "Сохранение и восстановление ваших настроек Legcord, включая плагины и настройки модов — всё одним файлом.", + "backup-createBackup": "Создать резервную копию", + "backup-restore": "Восстановить", + "backup-modalTitle": "Выберите, что хотите сохранить", + "backup-includeLegcordConfig": "Настройки", + "backup-includeLegcordThemes": "Темы и Quick CSS", + "backup-includeVencord": "Данные Vencord (текущая сессия)", + "backup-includeEquicord": "Данные Equicord (текущая сессия)", + "backup-includeShelter": "Плагины Shelter", + "backup-unknownError": "Что-то пошло не так.", + "backup-restoreCancel": "Отмена", + "supportBanner-title": "Поддержать Проект", + "supportBanner-subtitle": "Ваша поддержка позволяет нам продолжать разработку Legcord и вводить всё больше и больше новых функций!", + "supportBanner-donate": "Задонатить", + "settings-trayIcon-normal": "Лого Discord", + "settings-trayIcon-classic": "Классическое лого Discord", + "settings-trayIcon-colored-plug": "Цветной Штекер", + "settings-trayIcon-white-plug": "Белый Штекер", + "settings-trayIcon-white-plug-alt": "Белый Штекер (Альт.)", + "settings-trayIcon-black-plug": "Чёрный Штекер", + "settings-trayIcon-black-plug-alt": "Чёрный Штекер (Альт.)", + "settings-category-behaviour": "Поведение", + "menu-quit": "Выход" } From 12843004f410b243474836fcd831d2d3f72f6dd2 Mon Sep 17 00:00:00 2001 From: youtsuho <110821381+youtsuhodev@users.noreply.github.com> Date: Wed, 13 May 2026 16:18:48 +0200 Subject: [PATCH 12/96] fix: injection-typeerror (#1085) Problem A TypeError: Cannot read properties of undefined (reading 'enabled') was occurring during the mod injection process. This was primarily caused by the getCustomBundle IPC handler returning undefined when the "custom" mod was disabled in the settings. Consequently, the preload script's promise resolution attempted to access the .enabled property on a nullish value, crashing the injection pipeline. Solution - IPC Handler Fix: Updated src/discord/ipc.ts to ensure that getCustomBundle always returns a ModBundle object (including the enabled boolean), even if the mod is disabled. This brings it into alignment with the behavior of other mod handlers like Vencord and Equicord. - Defensive Hardening: Updated all mod injection scripts (src/discord/preload/mods/ for custom, equicord, shelter, and vencord) to use optional chaining (bundle?.enabled). This provides a secondary layer of defense to prevent crashes if IPC responses are ever malformed or missing. Risk Very low. The changes are focused on improving the robustness of the injection pipeline and ensuring type consistency in IPC communication. No configuration schemas or public APIs were changed. Validation - Linting: pnpm lint was run. While the project has pre-existing lint issues in unrelated files, the modified files are correct and follow the project's formatting. - Build: Verified that the project compiles and that the ModBundle type interface is strictly respected. - Manual Verification: Confirmed that disabling the custom mod no longer triggers a TypeError in the injection script. - Platform Coverage: Verified on Windows. Since these changes affect shared Electron IPC and preload logic, they are cross-platform by nature. --- src/discord/ipc.ts | 12 +++++------- src/discord/preload/mods/custom.mts | 2 +- src/discord/preload/mods/equicord.mts | 2 +- src/discord/preload/mods/shelter.mts | 2 +- src/discord/preload/mods/vencord.mts | 2 +- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/discord/ipc.ts b/src/discord/ipc.ts index fa184cd..3c066b9 100644 --- a/src/discord/ipc.ts +++ b/src/discord/ipc.ts @@ -83,13 +83,11 @@ export function registerIpc(passedWindow: BrowserWindow): void { }); ipcMain.handle("getCustomBundle", () => { const enabled = getConfig("mods").includes("custom"); - if (enabled) { - return { - js: ifExistsRead(path.join(app.getPath("userData"), "custom.js")), - css: ifExistsRead(path.join(app.getPath("userData"), "custom.css")), - enabled, - }; - } + return { + js: enabled ? ifExistsRead(path.join(app.getPath("userData"), "custom.js")) : undefined, + css: enabled ? ifExistsRead(path.join(app.getPath("userData"), "custom.css")) : undefined, + enabled, + }; }); // theming diff --git a/src/discord/preload/mods/custom.mts b/src/discord/preload/mods/custom.mts index 97eef7c..b96c124 100644 --- a/src/discord/preload/mods/custom.mts +++ b/src/discord/preload/mods/custom.mts @@ -3,7 +3,7 @@ import type { ModBundle } from "../../../@types/ModBundle.js"; async function inject() { try { await ipcRenderer.invoke("getCustomBundle").then(async (bundle: ModBundle) => { - if (bundle.enabled) { + if (bundle?.enabled) { await webFrame.executeJavaScript(bundle.js); if (bundle.css) { webFrame.insertCSS(bundle.css); //NOTE - Custom mods might require CSS. diff --git a/src/discord/preload/mods/equicord.mts b/src/discord/preload/mods/equicord.mts index 0bbecbf..bdd46c6 100644 --- a/src/discord/preload/mods/equicord.mts +++ b/src/discord/preload/mods/equicord.mts @@ -3,7 +3,7 @@ import type { ModBundle } from "../../../@types/ModBundle.js"; async function inject() { try { await ipcRenderer.invoke("getEquicordBundle").then(async (bundle: ModBundle) => { - if (bundle.enabled) { + if (bundle?.enabled) { await webFrame.executeJavaScript(bundle.js); webFrame.insertCSS(bundle.css!); //NOTE - Equicord requires CSS. } diff --git a/src/discord/preload/mods/shelter.mts b/src/discord/preload/mods/shelter.mts index 6b00dc1..2125357 100644 --- a/src/discord/preload/mods/shelter.mts +++ b/src/discord/preload/mods/shelter.mts @@ -17,7 +17,7 @@ if (process.platform === "darwin") { async function inject() { try { await ipcRenderer.invoke("getShelterBundle").then(async (bundle: ModBundle) => { - if (bundle.enabled) { + if (bundle?.enabled) { await webFrame.executeJavaScript(`(()=>{ const SHELTER_INJECTOR_PLUGINS = ${JSON.stringify(requiredPlugins)}; ${bundle.js} diff --git a/src/discord/preload/mods/vencord.mts b/src/discord/preload/mods/vencord.mts index 60704f6..f33c7f9 100644 --- a/src/discord/preload/mods/vencord.mts +++ b/src/discord/preload/mods/vencord.mts @@ -3,7 +3,7 @@ import type { ModBundle } from "../../../@types/ModBundle.js"; async function inject() { try { await ipcRenderer.invoke("getVencordBundle").then(async (bundle: ModBundle) => { - if (bundle.enabled) { + if (bundle?.enabled) { await webFrame.executeJavaScript(bundle.js); webFrame.insertCSS(bundle.css!); //NOTE - Vencord requires CSS. } From 24e800a41a9188a90c237cb88820a785cf751383 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 13 May 2026 16:23:27 +0200 Subject: [PATCH 13/96] chore: bump electron --- package.json | 2 +- pnpm-lock.yaml | 207 +++++++++---------------------------------------- 2 files changed, 36 insertions(+), 173 deletions(-) diff --git a/package.json b/package.json index da51cec..c9d2f19 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@uwu/lune": "^1.6.2", "@uwu/shelter-defs": "^1.5.1", "babel-preset-solid": "^1.9.3", - "electron": "41.2.0", + "electron": "42.0.1", "electron-builder": "26.0.20", "lucide-solid": "^0.475.0", "rolldown": "1.0.0-rc.15", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21a1a86..8b44d3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,10 +62,10 @@ importers: version: 1.5.1 babel-preset-solid: specifier: ^1.9.3 - version: 1.9.12(@babel/core@8.0.0-rc.3)(solid-js@1.9.12) + version: 1.9.12(@babel/core@7.28.6)(solid-js@1.9.12) electron: - specifier: 41.2.0 - version: 41.2.0 + specifier: 42.0.1 + version: 42.0.1 electron-builder: specifier: 26.0.20 version: 26.0.20(electron-builder-squirrel-windows@26.4.0) @@ -378,9 +378,9 @@ packages: resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} hasBin: true - '@electron/get@2.0.3': - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} + '@electron/get@5.0.0': + resolution: {integrity: sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==} + engines: {node: '>=22.12.0'} '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': resolution: {tarball: https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2} @@ -1347,10 +1347,6 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -1568,14 +1564,6 @@ packages: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1587,9 +1575,6 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} @@ -1662,9 +1647,9 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@41.2.0: - resolution: {integrity: sha512-0OKLiymqfV0WK68RBXqAm3Myad2TpI5wwxLCBEUcH5Nugo3YfSk7p1Js/AL9266qTz5xZioUnxt9hG8FFwax0g==} - engines: {node: '>= 12.20.55'} + electron@42.0.1: + resolution: {integrity: sha512-d8HnycE970DGESe91Nj30eonFBUcAI9EZ1TwUGJVzSAnJZdh0BkFEinAXjdklvDYst+bVDc8HsksCuqVLrnqdg==} + engines: {node: '>= 22.12.0'} hasBin: true emoji-regex@10.6.0: @@ -1690,6 +1675,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -1709,9 +1698,6 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} @@ -1730,10 +1716,6 @@ packages: resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} engines: {node: '>=12'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1896,14 +1878,6 @@ packages: engines: {node: '>=12'} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - globby@10.0.1: resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==} engines: {node: '>=8'} @@ -1928,9 +1902,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -2130,9 +2101,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -2271,10 +2239,6 @@ packages: resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} engines: {node: ^18.17.0 || >=20.5.0} - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -2470,10 +2434,6 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} @@ -2687,10 +2647,6 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - rolldown@1.0.0-beta.1: resolution: {integrity: sha512-19B2HoY3zcR7Um+zVDOvV1gQ1d6acUIouCUMGxvlZ/0kTjcMSFr8tuLWmRRYIV7y1mrgPbJRd1cPFVd4p1l8nQ==} hasBin: true @@ -2730,9 +2686,6 @@ packages: resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} engines: {node: '>=11.0.0'} - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -2751,10 +2704,6 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - seroval-plugins@1.5.0: resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==} engines: {node: '>=10'} @@ -2851,9 +2800,6 @@ packages: spitroast@2.1.6: resolution: {integrity: sha512-xil2XeVh8WQoBlG8Lm8jT6ifqWGmSgTGq2clRcq2roycb0kg1h4fv5ydoiBId9kIQp4Y12PK/cjVzD8xpWXZvg==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - ssri@12.0.0: resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -2957,10 +2903,6 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -2980,6 +2922,10 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@7.25.0: + resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==} + engines: {node: '>=20.18.1'} + unique-filename@2.0.1: resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -3321,11 +3267,6 @@ snapshots: '@babel/core': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@8.0.0-rc.3)': - dependencies: - '@babel/core': 8.0.0-rc.3 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 @@ -3462,17 +3403,16 @@ snapshots: fs-extra: 9.1.0 minimist: 1.2.8 - '@electron/get@2.0.3': + '@electron/get@5.0.0': dependencies: debug: 4.4.3 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 + env-paths: 3.0.0 + graceful-fs: 4.2.11 progress: 2.0.3 - semver: 6.3.1 + semver: 7.7.4 sumchecker: 3.0.1 optionalDependencies: - global-agent: 3.0.0 + undici: 7.25.0 transitivePeerDependencies: - supports-color @@ -4386,19 +4326,19 @@ snapshots: - debug optional: true - babel-plugin-jsx-dom-expressions@0.40.6(@babel/core@8.0.0-rc.3): + babel-plugin-jsx-dom-expressions@0.40.6(@babel/core@7.28.6): dependencies: - '@babel/core': 8.0.0-rc.3 + '@babel/core': 7.28.6 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@8.0.0-rc.3) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) '@babel/types': 7.29.0 html-entities: 2.3.3 parse5: 7.3.0 - babel-preset-solid@1.9.12(@babel/core@8.0.0-rc.3)(solid-js@1.9.12): + babel-preset-solid@1.9.12(@babel/core@7.28.6)(solid-js@1.9.12): dependencies: - '@babel/core': 8.0.0-rc.3 - babel-plugin-jsx-dom-expressions: 0.40.6(@babel/core@8.0.0-rc.3) + '@babel/core': 7.28.6 + babel-plugin-jsx-dom-expressions: 0.40.6(@babel/core@7.28.6) optionalDependencies: solid-js: 1.9.12 @@ -4418,9 +4358,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - boolean@3.2.0: - optional: true - brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -4718,20 +4655,6 @@ snapshots: defer-to-connect@2.0.1: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - optional: true - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - optional: true - delayed-stream@1.0.0: {} delegates@1.0.0: @@ -4739,9 +4662,6 @@ snapshots: detect-libc@2.1.2: {} - detect-node@2.1.0: - optional: true - dir-compare@4.2.0: dependencies: minimatch: 3.1.2 @@ -4888,9 +4808,9 @@ snapshots: transitivePeerDependencies: - supports-color - electron@41.2.0: + electron@42.0.1: dependencies: - '@electron/get': 2.0.3 + '@electron/get': 5.0.0 '@types/node': 24.12.0 extract-zip: 2.0.1 transitivePeerDependencies: @@ -4915,6 +4835,8 @@ snapshots: env-paths@2.2.1: {} + env-paths@3.0.0: {} + err-code@2.0.3: {} es-define-property@1.0.1: {} @@ -4932,9 +4854,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es6-error@4.1.1: - optional: true - esbuild@0.17.19: optionalDependencies: '@esbuild/android-arm': 0.17.19 @@ -4993,9 +4912,6 @@ snapshots: escape-goat@4.0.0: {} - escape-string-regexp@4.0.0: - optional: true - escape-string-regexp@5.0.0: {} exponential-backoff@3.1.3: {} @@ -5192,22 +5108,6 @@ snapshots: minimatch: 5.1.9 once: 1.4.0 - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.4 - serialize-error: 7.0.1 - optional: true - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - optional: true - globby@10.0.1: dependencies: '@types/glob': 7.2.0 @@ -5248,11 +5148,6 @@ snapshots: has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - optional: true - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -5420,9 +5315,6 @@ snapshots: json-schema-traverse@0.4.1: {} - json-stringify-safe@5.0.1: - optional: true - json5@2.2.3: {} jsonfile@4.0.0: @@ -5563,11 +5455,6 @@ snapshots: transitivePeerDependencies: - supports-color - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - math-intrinsics@1.1.0: {} memory-stream@1.0.0: @@ -5755,9 +5642,6 @@ snapshots: set-blocking: 2.0.0 optional: true - object-keys@1.1.1: - optional: true - obug@2.1.1: {} once@1.4.0: @@ -5948,16 +5832,6 @@ snapshots: dependencies: glob: 7.2.3 - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - optional: true - rolldown@1.0.0-beta.1: dependencies: zod: 3.25.76 @@ -6026,9 +5900,6 @@ snapshots: sax@1.4.4: {} - semver-compare@1.0.0: - optional: true - semver@5.7.2: {} semver@6.3.1: {} @@ -6037,11 +5908,6 @@ snapshots: semver@7.7.4: {} - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - optional: true - seroval-plugins@1.5.0(seroval@1.5.0): dependencies: seroval: 1.5.0 @@ -6143,9 +6009,6 @@ snapshots: spitroast@2.1.6: {} - sprintf-js@1.1.3: - optional: true - ssri@12.0.0: dependencies: minipass: 7.1.3 @@ -6266,9 +6129,6 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - type-fest@0.13.1: - optional: true - typescript@5.9.3: {} ufo@1.6.3: {} @@ -6280,6 +6140,9 @@ snapshots: undici-types@7.16.0: {} + undici@7.25.0: + optional: true + unique-filename@2.0.1: dependencies: unique-slug: 3.0.0 From dcfc37c97afc32c36ad3059be0c1a9b09a0014a6 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 13 May 2026 16:49:22 +0200 Subject: [PATCH 14/96] fix: enable cors for legcord protocol fixes recent crashes --- src/protocol.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/protocol.ts b/src/protocol.ts index 9c721c9..8233569 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -8,7 +8,7 @@ protocol.registerSchemesAsPrivileged([ standard: true, secure: true, supportFetchAPI: true, - corsEnabled: false, + corsEnabled: true, bypassCSP: true, stream: true, }, From 09432f60bc8e7b1230374a3513c37476162384ec Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Wed, 13 May 2026 19:26:46 +0200 Subject: [PATCH 15/96] fix: first-time launch blank settings --- assets/lang/en-US.json | 2 ++ src/shelter/settings/pages/SettingsPage.tsx | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/assets/lang/en-US.json b/assets/lang/en-US.json index e930c47..99cd613 100644 --- a/assets/lang/en-US.json +++ b/assets/lang/en-US.json @@ -64,6 +64,8 @@ "settings-csp-strict": "Strict", "settings-csp-none": "None", "settings-csp-vanilla": "Vanilla", + "settings-firstTimeCrash": "We're setting things up for you!", + "settings-firstTimeCrash-desc": "Settings are not available on a first-time launch. Please use a button below to restart and settings should be ready after the restart.", "settings-useSystemCssEditor": "Use system CSS editor", "settings-useSystemCssEditor-desc": "Use system CSS editor to edit CSS.", "settings-MultiInstance": "Multi Instance", diff --git a/src/shelter/settings/pages/SettingsPage.tsx b/src/shelter/settings/pages/SettingsPage.tsx index 49608af..4552d08 100644 --- a/src/shelter/settings/pages/SettingsPage.tsx +++ b/src/shelter/settings/pages/SettingsPage.tsx @@ -20,6 +20,20 @@ const noBundleUpdates = () => { }; export function SettingsPage() { + if (!settings) { + return ( + <> +
+ {store.i18n["settings-firstTimeCrash"]} +
+

{store.i18n["settings-firstTimeCrash-desc"]}

+
+ + + ); + } return ( <> From 527e0b429818f6aa471dbddda2ff7be7e7c553bc Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Thu, 14 May 2026 18:47:15 +0200 Subject: [PATCH 16/96] fix: opening settings menu/tray action --- assets/lang/en-US.json | 1 + src/@types/keybind.d.ts | 1 + src/common/keybindActions.ts | 11 +++++++++++ src/discord/menu.ts | 14 +++----------- src/discord/tray.ts | 10 ---------- src/shelter/settings/components/KeybindMaker.tsx | 1 + 6 files changed, 17 insertions(+), 21 deletions(-) diff --git a/assets/lang/en-US.json b/assets/lang/en-US.json index 99cd613..6948db9 100644 --- a/assets/lang/en-US.json +++ b/assets/lang/en-US.json @@ -261,6 +261,7 @@ "keybind-navigateBack": "Navigate back", "keybind-runJavascript": "Run Javascript", "keybind-openQuickCss": "Open Quick CSS", + "keybind-openSettings": "Open Settings", "keybind-globalNote": "Allows you to assign a specific keyboard shortcut that can be used across different applications and programs.", "keybind-global": "Global", "keybind-enabled": "Enabled", diff --git a/src/@types/keybind.d.ts b/src/@types/keybind.d.ts index 2cd9f60..368035a 100644 --- a/src/@types/keybind.d.ts +++ b/src/@types/keybind.d.ts @@ -6,6 +6,7 @@ export type KeybindActions = | "navigateForward" | "openQuickCss" | "pushToTalk" + | "openSettings" | "runJavascript"; export interface Keybind { accelerator: Electron.Accelerator; diff --git a/src/common/keybindActions.ts b/src/common/keybindActions.ts index 563451f..5ff06a4 100644 --- a/src/common/keybindActions.ts +++ b/src/common/keybindActions.ts @@ -2,6 +2,7 @@ import path from "node:path"; import { app, shell } from "electron"; import type { Keybind } from "../@types/keybind.js"; import { mainWindows } from "../discord/window.js"; +import { navigateTo } from "./dom.js"; let isAudioEngineEnabled = false; export function runAction(keybind: Keybind) { @@ -27,6 +28,9 @@ export function runAction(keybind: Keybind) { case "openQuickCss": openQuickCss(); break; + case "openSettings": + openSettings(); + break; case "runJavascript": if (!keybind.js) break; runJavascript(keybind.js); @@ -122,3 +126,10 @@ function runJavascript(js: string) { window.webContents.executeJavaScript(js); }); } + +export function openSettings() { + // won't load the correct page anyway (will just do /account) cause shelter doesn't hijack discord's routing + mainWindows.forEach((window) => { + navigateTo(window, "/settings/legcord-settings"); + }); +} diff --git a/src/discord/menu.ts b/src/discord/menu.ts index bee18d1..34ed529 100644 --- a/src/discord/menu.ts +++ b/src/discord/menu.ts @@ -2,7 +2,7 @@ import { BrowserWindow, Menu, type MenuItemConstructorOptions, app } from "elect import type { Keybind, KeybindActions } from "../@types/keybind.js"; import { getConfig } from "../common/config.js"; import { setForceQuit } from "../common/forceQuit.js"; -import { runAction } from "../common/keybindActions.js"; +import { openSettings, runAction } from "../common/keybindActions.js"; import { getLang } from "../common/lang.js"; import { mainWindows } from "./window.js"; @@ -15,6 +15,7 @@ const keybindActionLabels: Record = { navigateBack: "keybind-navigateBack", runJavascript: "keybind-runJavascript", openQuickCss: "keybind-openQuickCss", + openSettings: "keybind-openSettings", }; export function setMenu(): void { @@ -53,16 +54,7 @@ export function setMenu(): void { click() { mainWindows.forEach((mainWindow) => { mainWindow.show(); - void mainWindow.webContents.executeJavaScript(`window.shelter.flux.dispatcher.dispatch({ - "type": "USER_SETTINGS_MODAL_OPEN", - "section": "legcord-settings", - "subsection": null, - "openWithoutBackstack": false - })`); - void mainWindow.webContents.executeJavaScript( - `window.shelter.flux.dispatcher.dispatch({type: "LAYER_PUSH", component: "USER_SETTINGS"})`, - ); - // this opens the legcord tab directly in the settings modal + openSettings(); }); }, }, diff --git a/src/discord/tray.ts b/src/discord/tray.ts index 0d7fd82..4117fef 100644 --- a/src/discord/tray.ts +++ b/src/discord/tray.ts @@ -53,16 +53,6 @@ export function createTray() { click() { mainWindows.forEach((mainWindow) => { mainWindow.show(); - - void mainWindow.webContents.executeJavaScript(`window.shelter.flux.dispatcher.dispatch({ - "type": "USER_SETTINGS_MODAL_OPEN", - "section": "My Account", - "subsection": null, - "openWithoutBackstack": false - })`); - void mainWindow.webContents.executeJavaScript( - `window.shelter.flux.dispatcher.dispatch({type: "LAYER_PUSH", component: "USER_SETTINGS"})`, - ); }); }, }, diff --git a/src/shelter/settings/components/KeybindMaker.tsx b/src/shelter/settings/components/KeybindMaker.tsx index 9e66752..c4e6229 100644 --- a/src/shelter/settings/components/KeybindMaker.tsx +++ b/src/shelter/settings/components/KeybindMaker.tsx @@ -136,6 +136,7 @@ export const KeybindMaker = (props: { close: () => void }) => { { label: t["keybind-leaveCall"], value: "leaveCall" }, { label: t["keybind-navigateForward"], value: "navigateForward" }, { label: t["keybind-navigateBack"], value: "navigateBack" }, + { label: t["keybind-openSettings"], value: "openSettings" }, { label: t["keybind-runJavascript"], value: "runJavascript" }, { label: t["keybind-openQuickCss"], value: "openQuickCss" }, ]} From d68a322cc4fea78bdba96c924810f55fba6a936c Mon Sep 17 00:00:00 2001 From: Dmitry Maryasov <36815965+Kolhun@users.noreply.github.com> Date: Sat, 16 May 2026 16:02:35 +0300 Subject: [PATCH 17/96] fix: Windows mic drop in getUserMedia patch (#1088) --- src/discord/preload/patches.mts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/discord/preload/patches.mts b/src/discord/preload/patches.mts index ac75c65..8e71796 100644 --- a/src/discord/preload/patches.mts +++ b/src/discord/preload/patches.mts @@ -35,9 +35,13 @@ const version = ipcRenderer.sendSync("displayVersion") as string; // releases the hardware, and falls back to the original behavior if "exact" fails. // Injected into the page context because contextIsolation is enabled. // See: https://github.com/electron/electron/issues/44502 +// Stopping prior audio streams on every new getUserMedia breaks Discord on Windows/Linux +// (multiple object-shaped audio requests); keep that behavior only on darwin. { + const stopPrevAudioStreams = process.platform === "darwin"; const cameraFixScript = document.createElement("script"); cameraFixScript.textContent = `(function() { + var legcordStopPrevAudioStreams = ${stopPrevAudioStreams}; var _origGUM = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices); var _activeVideoStreams = []; var _activeAudioStreams = []; @@ -58,16 +62,16 @@ const version = ipcRenderer.sendSync("displayVersion") as string; function trackStream(stream) { var ref = new WeakRef(stream); if (stream.getVideoTracks().length > 0) _activeVideoStreams.push(ref); - if (stream.getAudioTracks().length > 0) _activeAudioStreams.push(ref); + if (legcordStopPrevAudioStreams && stream.getAudioTracks().length > 0) _activeAudioStreams.push(ref); } navigator.mediaDevices.getUserMedia = async function(constraints) { var hasVideo = constraints && constraints.video && typeof constraints.video !== "boolean"; var hasAudio = constraints && constraints.audio && typeof constraints.audio !== "boolean"; - // Release previous hardware when new request comes in for the same kind + // Release previous hardware when new request comes in for the same kind (audio: darwin only) if (hasVideo && _activeVideoStreams.length > 0) stopTrackedStreams(_activeVideoStreams, "video"); - if (hasAudio && _activeAudioStreams.length > 0) stopTrackedStreams(_activeAudioStreams, "audio"); + if (legcordStopPrevAudioStreams && hasAudio && _activeAudioStreams.length > 0) stopTrackedStreams(_activeAudioStreams, "audio"); var hasStringVideoDeviceId = hasVideo && typeof constraints.video.deviceId === "string"; if (!hasStringVideoDeviceId) { From 5c4e9d0707dca9cfde324b83a6423497a251e6c4 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 14 May 2026 18:47:27 +0200 Subject: [PATCH 18/96] chore: translations update [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bingus Co-authored-by: Hosted Weblate Co-authored-by: Melih Akköse Translate-URL: https://hosted.weblate.org/projects/armcord/client/de/ Translate-URL: https://hosted.weblate.org/projects/armcord/client/tr/ Translation: Legcord/Client --- assets/lang/de.json | 13 +++++++++++-- assets/lang/tr.json | 9 ++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/assets/lang/de.json b/assets/lang/de.json index 0d2f27e..8b8206a 100644 --- a/assets/lang/de.json +++ b/assets/lang/de.json @@ -28,7 +28,7 @@ "settings-transparency-modern": "Modern", "settings-theme-transparent": "Transparent", "settings-transparency-tahoe-warning": "Transparenz kann zu großem Lags auf MacOS 26 Tahoe führen.", - "settings-popoutPiP": "Popup-Fenster immer im Vordergrund anzeigen", + "settings-popoutPiP": "Anruf Popup-Fenster immer im Vordergrund anzeigen", "settings-popoutPiP-desc": "Wenn diese Option aktiviert ist, wird das Anruf-Popup im Modus „Immer im Vordergrund“ angezeigt.", "settings-venmic-workaround": "Umgehungslösung", "settings-venmic-workaround-desc": "Aktivieren oder deaktivieren Sie die Problemumgehung für ein Problem, das dazu führt, dass das Mikrofon anstelle des korrekten Audiosignals geteilt wird.", @@ -229,5 +229,14 @@ "games-removeConfirmHeader": "Spiel entfernen?", "games-noExecutables": "Keine ausführbaren Dateien", "games-lastDetected": "Zuletzt erkannte Spiele", - "games-removeFromBlacklist": "Entfernen" + "games-removeFromBlacklist": "Entfernen", + "settings-material": "Fenster Material", + "settings-material-acrylic": "Acryl", + "settings-material-none": "Keine", + "settings-csp-strict": "Strikt", + "settings-csp-none": "Keine", + "settings-csp-vanilla": "Vanilla", + "settings-firstTimeCrash": "Wir richten Dinge für sie ein!", + "settings-automaticClientUpdates": "Automatische client updates", + "settings-automaticClientUpdates-desc": "Deaktiviert automatische Legcord Updates" } diff --git a/assets/lang/tr.json b/assets/lang/tr.json index 0967ef4..38db125 100644 --- a/assets/lang/tr.json +++ b/assets/lang/tr.json @@ -1 +1,8 @@ -{} +{ + "loading_screen_start": "Legcord başlatılıyor…", + "loading_screen_update": "Legcord’un yeni bir versiyonu var. Lütfen son versiyona güncelleyin.", + "setup_question1": "Legcord kurulumuna hoş geldiniz", + "yes": "Evet", + "no": "Hayır", + "next": "Sonraki" +} From 089cff6792d604faba5127bc8f03d87959e5e062 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 21 May 2026 23:11:36 +0200 Subject: [PATCH 19/96] chore: translations update [skip ci] Co-authored-by: Forsan Translate-URL: https://hosted.weblate.org/projects/armcord/client/hu/ Translation: Legcord/Client --- assets/lang/hu.json | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/assets/lang/hu.json b/assets/lang/hu.json index f0b222c..0a81c97 100644 --- a/assets/lang/hu.json +++ b/assets/lang/hu.json @@ -48,7 +48,7 @@ "settings-audio": "Hang", "settings-audio-desc": "Válassza ki, hogy a Legcord melyik módszert használja a hang rögzítéséhez a képernyőmegosztás közben.", "settings-openCustomIconDialog": "Asztali ikon beállítása", - "settings-csp-desc": "A Legcord CSP kezeli az egyéni tartalmak Discord alkalmazásba való betöltését. Olyan dolgok, mint a kliens bővítmények és témák, ettől függenek. Kapcsold ki, ha meg szeretnél szabadulni a bővítményektől és az egyéni stílusoktól.", + "settings-csp-desc": "Állítsd be a Legcord tartalombiztonsági szabályzatának szigorúságát. A szigorú CSP jobb biztonságot nyújt, de kompatibilitási problémákat okozhat egyes kliens modokkal/témákkal/bővítményekkel.", "settings-mintoTray": "Futás a háttérben", "settings-mintoTray-desc": "Ha le van tiltva, a Legcord a többi ablakhoz hasonlóan bezáródik, különben csak a tálcára csukódik le.", "settings-startMinimized": "Kisablakos indítás", @@ -290,9 +290,9 @@ "touchbar-servers": "Szerverek", "splash-title": "Legcord", "settings-venmic-granularSelect": "Részletes kiválasztás", - "settings-trayIcon-white-plug-alt": "Fehér Plug alternatíva", - "settings-trayIcon-black-plug": "Fekete Plug", - "settings-trayIcon-black-plug-alt": "Fekete Plug alternatíva", + "settings-trayIcon-white-plug-alt": "Fehér csatlakozó alternatíva", + "settings-trayIcon-black-plug": "Fekete csatlakozó", + "settings-trayIcon-black-plug-alt": "Fekete csatlakozó alternatíva", "menu-redo": "Újra", "setup-stepOf": "{current} / {total} lépés", "keybind-deafen": "Süketítés", @@ -339,9 +339,12 @@ "settings-material-mica": "Mica", "settings-material-mica-alt": "Mica Alt", "settings-material-acrylic": "Akril", - "settings-material-none": "None", + "settings-material-none": "Egyik sem", "settings-csp-vanilla": "Vanilla", "settings-csp": "Tartalombiztonsági irányelv", "settings-csp-strict": "Szigorú", - "settings-csp-none": "Nincs" + "settings-csp-none": "Egyik sem", + "keybind-openSettings": "Beállítások megnyitása", + "settings-firstTimeCrash": "Mindent előkészítünk számodra!", + "settings-firstTimeCrash-desc": "Az első indításkor a beállítások még nem érhetők el. Kérjük, használd az alábbi gombot az újraindításhoz, és a beállítások az újraindítás után már elérhetőek lesznek." } From ef0007f0c915eecd9e9881df12050bb2cd375179 Mon Sep 17 00:00:00 2001 From: Aiden Date: Wed, 27 May 2026 21:47:45 -0400 Subject: [PATCH 20/96] @types/minimatch@6.0.0: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. --- package.json | 1 - pnpm-lock.yaml | 3 --- 2 files changed, 4 deletions(-) diff --git a/package.json b/package.json index c9d2f19..4d6871a 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "@rolldown-plugin/solid": "^0.0.4", "@rollup/plugin-esm-shim": "^0.1.7", "@types/adm-zip": "^0.5.8", - "@types/minimatch": "^6.0.0", "@types/node": "^22.10.1", "@types/ws": "^8.5.13", "@uwu/lune": "^1.6.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b44d3b..75bc06c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,9 +45,6 @@ importers: '@types/adm-zip': specifier: ^0.5.8 version: 0.5.8 - '@types/minimatch': - specifier: ^6.0.0 - version: 6.0.0 '@types/node': specifier: ^22.10.1 version: 22.19.15 From b886ef051e3708e89c69eeaf243015af9332915a Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 28 May 2026 18:49:55 -0400 Subject: [PATCH 21/96] bump packages --- .gitignore | 3 +- package.json | 42 +- pnpm-lock.yaml | 3139 +++++++++++++++++-------------------------- pnpm-workspace.yaml | 9 + 4 files changed, 1275 insertions(+), 1918 deletions(-) create mode 100644 pnpm-workspace.yaml diff --git a/.gitignore b/.gitignore index 6114dc2..938d34c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,4 @@ ts-out/ package-lock.json .pnpm-store .cache -.DS_Store -pnpm-workspace.yaml \ No newline at end of file +.DS_Store \ No newline at end of file diff --git a/package.json b/package.json index 4d6871a..87eaca8 100644 --- a/package.json +++ b/package.json @@ -32,39 +32,39 @@ }, "homepage": "https://github.com/Legcord/Legcord#readme", "devDependencies": { - "@biomejs/biome": "1.9.4", + "@biomejs/biome": "2.4.16", "@rolldown-plugin/solid": "^0.0.4", - "@rollup/plugin-esm-shim": "^0.1.7", + "@rollup/plugin-esm-shim": "^0.1.8", "@types/adm-zip": "^0.5.8", - "@types/node": "^22.10.1", - "@types/ws": "^8.5.13", + "@types/node": "^25.9.1", + "@types/ws": "^8.18.1", "@uwu/lune": "^1.6.2", "@uwu/shelter-defs": "^1.5.1", - "babel-preset-solid": "^1.9.3", - "electron": "42.0.1", - "electron-builder": "26.0.20", - "lucide-solid": "^0.475.0", - "rolldown": "1.0.0-rc.15", + "babel-preset-solid": "^1.9.12", + "electron": "42.3.0", + "electron-builder": "26.8.1", + "lucide-solid": "^1.16.0", + "rolldown": "1.0.3", "rollup-plugin-copy": "^3.5.0", - "solid-js": "^1.9.3", - "solid-motionone": "^1.0.3", - "tsx": "^4.19.2", - "typescript": "^5.7.2", - "xml-formatter": "^3.6.6" + "solid-js": "^1.9.13", + "solid-motionone": "^1.0.4", + "tsx": "^4.22.3", + "typescript": "^6.0.3", + "xml-formatter": "^3.7.0" }, "dependencies": { - "adm-zip": "^0.5.16", - "arrpc": "https://github.com/Legcord/arrpc.git#efe7589762470d32b9ba10d529be5acc23cd0e19", - "electron-context-menu": "^4.0.4", + "adm-zip": "^0.5.17", + "arrpc": "github:Legcord/arrpc#efe7589762470d32b9ba10d529be5acc23cd0e19", + "electron-context-menu": "^4.1.2", "electron-is-dev": "^3.0.1", - "electron-updater": "^6.6.2", + "electron-updater": "^6.8.3", "spitroast": "^2.1.6", "tslib": "^2.8.1", - "ws": "^8.18.0" + "ws": "^8.21.0" }, "optionalDependencies": { "@vencord/venmic": "^6.1.0" }, - "packageManager": "pnpm@10.11.0", + "packageManager": "pnpm@11.4.0+sha512.f0febc7e37552ab485494a914241b338e0b3580b93d54ce31f00933015880863129038a1b4ae4e414a0ee63ac35bf21197e990172c4a68256450b5636310968f", "package-manager-strict": false -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75bc06c..94ebe7d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,24 +4,27 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + yauzl: ^3.3.1 + importers: .: dependencies: adm-zip: - specifier: ^0.5.16 - version: 0.5.16 + specifier: ^0.5.17 + version: 0.5.17 arrpc: - specifier: https://github.com/Legcord/arrpc.git#efe7589762470d32b9ba10d529be5acc23cd0e19 + specifier: github:Legcord/arrpc#efe7589762470d32b9ba10d529be5acc23cd0e19 version: https://codeload.github.com/Legcord/arrpc/tar.gz/efe7589762470d32b9ba10d529be5acc23cd0e19 electron-context-menu: - specifier: ^4.0.4 + specifier: ^4.1.2 version: 4.1.2 electron-is-dev: specifier: ^3.0.1 version: 3.0.1 electron-updater: - specifier: ^6.6.2 + specifier: ^6.8.3 version: 6.8.3 spitroast: specifier: ^2.1.6 @@ -30,26 +33,26 @@ importers: specifier: ^2.8.1 version: 2.8.1 ws: - specifier: ^8.18.0 - version: 8.20.0 + specifier: ^8.21.0 + version: 8.21.0 devDependencies: '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 + specifier: 2.4.16 + version: 2.4.16 '@rolldown-plugin/solid': specifier: ^0.0.4 - version: 0.0.4(csstype@3.2.3)(rolldown@1.0.0-rc.15)(seroval@1.5.0)(solid-js@1.9.12) + version: 0.0.4(csstype@3.2.3)(rolldown@1.0.3)(seroval@1.5.4)(solid-js@1.9.13) '@rollup/plugin-esm-shim': - specifier: ^0.1.7 + specifier: ^0.1.8 version: 0.1.8 '@types/adm-zip': specifier: ^0.5.8 version: 0.5.8 '@types/node': - specifier: ^22.10.1 - version: 22.19.15 + specifier: ^25.9.1 + version: 25.9.1 '@types/ws': - specifier: ^8.5.13 + specifier: ^8.18.1 version: 8.18.1 '@uwu/lune': specifier: ^1.6.2 @@ -58,37 +61,37 @@ importers: specifier: ^1.5.1 version: 1.5.1 babel-preset-solid: - specifier: ^1.9.3 - version: 1.9.12(@babel/core@7.28.6)(solid-js@1.9.12) + specifier: ^1.9.12 + version: 1.9.12(@babel/core@8.0.0-rc.6)(solid-js@1.9.13) electron: - specifier: 42.0.1 - version: 42.0.1 + specifier: 42.3.0 + version: 42.3.0 electron-builder: - specifier: 26.0.20 - version: 26.0.20(electron-builder-squirrel-windows@26.4.0) + specifier: 26.8.1 + version: 26.8.1(electron-builder-squirrel-windows@26.8.1) lucide-solid: - specifier: ^0.475.0 - version: 0.475.0(solid-js@1.9.12) + specifier: ^1.16.0 + version: 1.16.0(solid-js@1.9.13) rolldown: - specifier: 1.0.0-rc.15 - version: 1.0.0-rc.15 + specifier: 1.0.3 + version: 1.0.3 rollup-plugin-copy: specifier: ^3.5.0 version: 3.5.0 solid-js: - specifier: ^1.9.3 - version: 1.9.12 + specifier: ^1.9.13 + version: 1.9.13 solid-motionone: - specifier: ^1.0.3 - version: 1.0.4(solid-js@1.9.12) + specifier: ^1.0.4 + version: 1.0.4(solid-js@1.9.13) tsx: - specifier: ^4.19.2 - version: 4.21.0 + specifier: ^4.22.3 + version: 4.22.3 typescript: - specifier: ^5.7.2 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 xml-formatter: - specifier: ^3.6.6 + specifier: ^3.7.0 version: 3.7.0 optionalDependencies: '@vencord/venmic': @@ -100,264 +103,259 @@ packages: 7zip-bin@5.2.0: resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} - '@babel/code-frame@7.28.6': - resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/code-frame@8.0.0-rc.3': - resolution: {integrity: sha512-585nwYQGQKKc+jMIAPeZJ+aGMn4FHmIUUjLZa9zI7mslvYmShnx0u7rFA4gliRip6S2vkwTYrMxPeXadkKW93Q==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/code-frame@8.0.0-rc.6': + resolution: {integrity: sha512-Ru0EdYEptXbJGAGDMsenx+RcelHazuj8spqi7l0geXEPXv0X7qVisqWX+2pMaEZsWhS3Q6Um7oITwhnLe0cHJQ==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/compat-data@7.28.6': - resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@8.0.0-rc.3': - resolution: {integrity: sha512-TlS7d9xYz/93xC8ovkRBwTKPodbwPfzTn7TxUgZo4c3LwpPINnScqIlN0QRDE/x1S4C1bmyqxGmAZUIC0buW0A==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/compat-data@8.0.0-rc.6': + resolution: {integrity: sha512-9ikfbIp7PCtV/mo8NYrzag1TYInVJAKLwpSoA28+3Bl5z1KVYt5ZGvBZD57yJlf/0HsCntlTlHHodu+eMpUffQ==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/core@7.28.6': - resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} engines: {node: '>=6.9.0'} - '@babel/core@8.0.0-rc.3': - resolution: {integrity: sha512-ov5mBbHiosqX1eqt8nN0JM7VuhirO6V8lln5rUXNZpNB+a9NnPTVYeDqSTBkf9C6GmFq3fnFlGT8eg3QBI7jJQ==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - '@babel/preset-typescript': ^8.0.0-0 - peerDependenciesMeta: - '@babel/preset-typescript': - optional: true + '@babel/core@8.0.0-rc.6': + resolution: {integrity: sha512-89SVbTu7p+M/W052SFC7R5QuQYgypfuO6HmBBbhA/Kzl6gME8Ly2QrVpIegvTxmcQKOzAPIxiEIfNk+Jxd26mw==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/generator@7.28.6': - resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} engines: {node: '>=6.9.0'} - '@babel/generator@8.0.0-rc.3': - resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/generator@8.0.0-rc.6': + resolution: {integrity: sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + '@babel/helper-annotate-as-pure@7.29.7': + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@8.0.0-rc.3': - resolution: {integrity: sha512-UXlT7t103KBJjiphN7Ij9DtELX2Q5uk1xMle7oN/eckxR8dmJyvbFsIm5u+cY0KZyF7qNkAiLsJljEPix1yfKg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-compilation-targets@8.0.0-rc.6': + resolution: {integrity: sha512-jqQD45/yUSy63U8zs9hE5FMXS8J1TLAI/NTMx76C6xWO021e13gJACQvuGmEF7syloC39LkkKwhqtAbMku1rwg==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-create-class-features-plugin@7.28.6': - resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + '@babel/helper-create-class-features-plugin@7.29.7': + resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@8.0.0-rc.3': - resolution: {integrity: sha512-rwtdZPunoa/IAlcZhgDoLxROXPW5evSN7SXMdObS8vNt7Wu6fCf8nLPFcuuhLCzeRoIrGNKx08v/XEQ4riQDGg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-globals@8.0.0-rc.6': + resolution: {integrity: sha512-ZF5FsxE4y7Eb6DiEbsLW3Gz3e73U/Uq3/ZotWf/moxv0DnZziXSMnW/tcXJF8b1mQE8XJnwPNSQOksKcKTz8kQ==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + '@babel/helper-member-expression-to-functions@7.29.7': + resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.18.6': resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@8.0.0-rc.3': - resolution: {integrity: sha512-D0kMl961jaPXb1Cb9ZehcoY4OOgPo1klsrry8BDuJWF6xO6a+72ZF6EH4Z5i94jcLYwJvApsKLytQvS4LtPAyg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-module-imports@8.0.0-rc.6': + resolution: {integrity: sha512-nG5VnyhH3SkrXVMTEIs6DsD6VKLGyiQlJwWki6T1sJRhkA1eX4tkuHUUqpASgDABSf57wGDZGZjGw5SPryVi+Q==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + '@babel/helper-optimise-call-expression@7.29.7': + resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@8.0.0-rc.3': - resolution: {integrity: sha512-1+lvhojDf75++IwFRWrch4BBaznB2Z99GCfggHFWEKJ8B40iovZ8KqP0kDeb60ThuAa7WxCbtuYHfP5BtJL1kA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-plugin-utils@8.0.0-rc.6': + resolution: {integrity: sha512-sLAjvuIcjzUQJR+CoHwU0JA4i706o71bCJtF+W9sc4KuHK3LCIJCjbKRuzbVn1eubUc66uAEZdBNWSqhLpwp2g==} + engines: {node: ^22.18.0 || >=24.11.0} peerDependencies: - '@babel/core': ^8.0.0-rc.3 + '@babel/core': ^8.0.0-rc.6 - '@babel/helper-replace-supers@7.28.6': - resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + '@babel/helper-replace-supers@7.29.7': + resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@8.0.0-rc.3': - resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-string-parser@8.0.0-rc.6': + resolution: {integrity: sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@8.0.0-rc.3': - resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-validator-identifier@8.0.0-rc.6': + resolution: {integrity: sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@8.0.0-rc.3': - resolution: {integrity: sha512-wpzZ9KycQDqmJct4ee/ihua2KKdW/MXTDidD4Ya7HdUHL+Jp5zBZTj8oNrxc8wp5Qr4sofKgZF1GIyymfdq7+g==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-validator-option@8.0.0-rc.6': + resolution: {integrity: sha512-uonhzCIL2Vf0xA10g5C0zD5thR7a6XxOSwZAzYfyl8n2zEev5bAB9J4b2oZ7u5YkyqdONfkptl2DesvW2P56Kg==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/helpers@8.0.0-rc.3': - resolution: {integrity: sha512-dbPuulmsPOwIAXP4pGsKiAv1E50pKYmAJfWXYytCwLpgj6IDNUFAzGuVVemaphYP/WniKsCf42+Cfo4xpc4jjQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helpers@8.0.0-rc.6': + resolution: {integrity: sha512-kTTqnw+Ubp1/WGXiIpDcl+WYVGTUVGjrQKswGI9VOamk7eWVf5ZYOcCB+o1UxaaHjs/L+QK7IRPlyP7vg579OQ==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/parser@7.28.6': - resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==} + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@8.0.0-rc.3': - resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/parser@8.0.0-rc.6': + resolution: {integrity: sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog==} + engines: {node: ^22.18.0 || >=24.11.0} hasBin: true - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + '@babel/plugin-syntax-typescript@7.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.28.6': - resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + '@babel/plugin-transform-modules-commonjs@7.29.7': + resolution: {integrity: sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.28.6': - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + '@babel/plugin-transform-typescript@7.29.7': + resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.28.5': - resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + '@babel/preset-typescript@7.29.7': + resolution: {integrity: sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/template@8.0.0-rc.3': - resolution: {integrity: sha512-9iet2svxZhCGgmt/b6M3Fbmy2i+OgjhXMDWNqDTBrNvb9Cc60NgETNIaJq6b0wICiCqpsFdIt8NYXMXyCQU6jA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/template@8.0.0-rc.6': + resolution: {integrity: sha512-CZFjZblLiIUEFghbB3sKs3rpYrwo65rLIklw/gNpwBm326cU6TH/xzvJZlZ+H9HpDi00eDXqNJR8CtEKW3oc/A==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/traverse@7.28.6': - resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} - '@babel/traverse@8.0.0-rc.3': - resolution: {integrity: sha512-3gvZCynaX+zxYZ2v5odaBBcc9eT4Yr7Gf16l3QSEvvBPVyMSZbYhsGAZfO79kjOCNJY2j6rWvNkWl1ZwYa64lQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/traverse@8.0.0-rc.6': + resolution: {integrity: sha512-/txuBViGaE9gpM8MSGShru1O2Bzp3zb3m/XKZNUsNv2SyNn++lKDDIWkiIQ/345j2FBy7CHiYTZuKhewHWyefw==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/types@7.28.6': - resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} - engines: {node: '>=6.9.0'} + '@babel/types@8.0.0-rc.6': + resolution: {integrity: sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw==} + engines: {node: ^22.18.0 || >=24.11.0} - '@babel/types@8.0.0-rc.3': - resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==} - engines: {node: ^20.19.0 || >=22.12.0} - - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + '@biomejs/biome@2.4.16': + resolution: {integrity: sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + '@biomejs/cli-darwin-arm64@2.4.16': + resolution: {integrity: sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + '@biomejs/cli-darwin-x64@2.4.16': + resolution: {integrity: sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + '@biomejs/cli-linux-arm64-musl@2.4.16': + resolution: {integrity: sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [musl] - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + '@biomejs/cli-linux-arm64@2.4.16': + resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] + libc: [glibc] - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + '@biomejs/cli-linux-x64-musl@2.4.16': + resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [musl] - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + '@biomejs/cli-linux-x64@2.4.16': + resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] + libc: [glibc] - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + '@biomejs/cli-win32-arm64@2.4.16': + resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + '@biomejs/cli-win32-x64@2.4.16': + resolution: {integrity: sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -375,16 +373,14 @@ packages: resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} hasBin: true + '@electron/get@3.1.0': + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} + engines: {node: '>=14'} + '@electron/get@5.0.0': resolution: {integrity: sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==} engines: {node: '>=22.12.0'} - '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': - resolution: {tarball: https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2} - version: 10.2.0-electron.1 - engines: {node: '>=12.13.0'} - hasBin: true - '@electron/notarize@2.5.0': resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} engines: {node: '>= 10.0.0'} @@ -394,13 +390,8 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - '@electron/rebuild@3.7.2': - resolution: {integrity: sha512-19/KbIR/DAxbsCkiaGMXIdPnMCJLkcf8AvGnduJtWBs/CBwiAjY1apCqOLVxrXg+rtXFCngbXhBanWjxLUt1Mg==} - engines: {node: '>=12.13.0'} - hasBin: true - - '@electron/rebuild@4.0.1': - resolution: {integrity: sha512-iMGXb6Ib7H/Q3v+BKZJoETgF9g6KMNZVbsO4b7Dmpgb5qTFqyFTzqW9F3TOSHdybv2vKYKzSS9OiZL+dcJb+1Q==} + '@electron/rebuild@4.0.4': + resolution: {integrity: sha512-Rzc39XPdk/+/wBG8MfwAHohXflep0ITUfulb6Rgz3R0NeSB1noE+E9/M/cb8ftCAiyDD9PPhLuuWgE1GaInbKg==} engines: {node: '>=22.12.0'} hasBin: true @@ -413,26 +404,17 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@emnapi/core@1.9.2': - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} - - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} - - '@emnapi/runtime@1.9.2': - resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + '@esbuild/aix-ppc64@0.28.0': + resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -443,8 +425,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + '@esbuild/android-arm64@0.28.0': + resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -455,8 +437,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + '@esbuild/android-arm@0.28.0': + resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -467,8 +449,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + '@esbuild/android-x64@0.28.0': + resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -479,8 +461,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + '@esbuild/darwin-arm64@0.28.0': + resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -491,8 +473,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + '@esbuild/darwin-x64@0.28.0': + resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -503,8 +485,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + '@esbuild/freebsd-arm64@0.28.0': + resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -515,8 +497,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + '@esbuild/freebsd-x64@0.28.0': + resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -527,8 +509,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + '@esbuild/linux-arm64@0.28.0': + resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -539,8 +521,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + '@esbuild/linux-arm@0.28.0': + resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -551,8 +533,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + '@esbuild/linux-ia32@0.28.0': + resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -563,8 +545,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + '@esbuild/linux-loong64@0.28.0': + resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -575,8 +557,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + '@esbuild/linux-mips64el@0.28.0': + resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -587,8 +569,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + '@esbuild/linux-ppc64@0.28.0': + resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -599,8 +581,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + '@esbuild/linux-riscv64@0.28.0': + resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -611,8 +593,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + '@esbuild/linux-s390x@0.28.0': + resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -623,14 +605,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + '@esbuild/linux-x64@0.28.0': + resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + '@esbuild/netbsd-arm64@0.28.0': + resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -641,14 +623,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + '@esbuild/netbsd-x64@0.28.0': + resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + '@esbuild/openbsd-arm64@0.28.0': + resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -659,14 +641,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + '@esbuild/openbsd-x64@0.28.0': + resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + '@esbuild/openharmony-arm64@0.28.0': + resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -677,8 +659,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + '@esbuild/sunos-x64@0.28.0': + resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -689,8 +671,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + '@esbuild/win32-arm64@0.28.0': + resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -701,8 +683,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + '@esbuild/win32-ia32@0.28.0': + resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -713,27 +695,12 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + '@esbuild/win32-x64@0.28.0': + resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@gar/promisify@1.1.3': - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -783,8 +750,8 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@napi-rs/wasm-runtime@1.1.3': - resolution: {integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==} + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 @@ -801,25 +768,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/agent@3.0.0': - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@npmcli/fs@2.1.2': - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@npmcli/move-file@2.0.1': - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs - - '@oxc-project/types@0.124.0': - resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -850,36 +800,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.6': resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} @@ -903,10 +859,6 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@rolldown-plugin/solid@0.0.4': resolution: {integrity: sha512-1SfABNnkkVYu+0sSuraZDjaonmylalAvopLN2o2vNTSaJh2q1KioCN+1BCzNgrDgiCa36dbzRz0IOoplyKa9uw==} engines: {node: '>=22.12.0'} @@ -916,8 +868,8 @@ packages: seroval: ~1.5.0 solid-js: '>=1.9.12' - '@rolldown/binding-android-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -927,8 +879,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -938,8 +890,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.15': - resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -949,8 +901,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': - resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -960,8 +912,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': - resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -970,60 +922,70 @@ packages: resolution: {integrity: sha512-xkGD+YLH+vQZiqxKEsXe8xS/owQXkyARaNB9NfFrAacLoNIRZM5UEZGNKxXyRWd1kSEkYkJ3/WiqvGGCcqUg1A==} cpu: [arm64] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-beta.1': resolution: {integrity: sha512-Ey2UxKFL74JuWpdNl9stpV0kxHZIgCWCEUnDnpQ1hcBwO9KwDM5qicLtXfsjozD6vt+xzbrL2D/uTrziYZ7IDQ==} cpu: [arm64] os: [linux] + libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-beta.1': resolution: {integrity: sha512-a8QP35x/3mggWqCpFtaF3/PbWl5P9QKpP/muk3iMPgzrXto8zPsEl3imsP3EBh4KwanBVHIf8pEkBQ+/7iMTgQ==} cpu: [x64] os: [linux] + libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-beta.1': resolution: {integrity: sha512-uIqKwnkZjTY8FmqGMaSjwtWlCdV88LV9bjdkv+mb7I+BBw+9cJlIQy0P8YnGEOEcnDPis/SiraCpkJ/eHYaSZw==} cpu: [x64] os: [linux] + libc: [musl] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -1033,9 +995,9 @@ packages: engines: {node: '>=14.21.3'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': - resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} - engines: {node: '>=14.0.0'} + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.1': @@ -1043,8 +1005,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -1059,14 +1021,14 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.15': - resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@rollup/plugin-esm-shim@0.1.8': resolution: {integrity: sha512-xEU0b/BShgDDSPjidhJd4R74J9xZ9jLVtFWNGtsUXyEsdwwwB1a3XOAwwGaNIyUHD6EhxPO21JMfUmJWoMn7SA==} @@ -1081,13 +1043,13 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@solid-primitives/props@3.2.2': - resolution: {integrity: sha512-lZOTwFJajBrshSyg14nBMEP0h8MXzPowGO0s3OeiR3z6nXHTfj0FhzDtJMv+VYoRJKQHG2QRnJTgCzK6erARAw==} + '@solid-primitives/props@3.2.3': + resolution: {integrity: sha512-XzG6en9gSFwmvbKcATm2BxL63HegZ+BAG5fmHi8jyBppQHcaths7ffz+6vYvwYy3nlgLa20ufJLj7tst+PcHFA==} peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/refs@1.1.2': - resolution: {integrity: sha512-K7tf2thy7L+YJjdqXspXOg5xvNEOH8tgEWsp0+1mQk3obHBRD6hEjYZk7p7FlJphSZImS35je3UfmWuD7MhDfg==} + '@solid-primitives/refs@1.1.3': + resolution: {integrity: sha512-aam02fjNKpBteewF/UliPSQCVJsIIGOLEWQOh+ll6R/QePzBOOBMcC4G+5jTaO75JuUS1d/14Q1YXT3X0Ow6iA==} peerDependencies: solid-js: ^1.6.12 @@ -1096,8 +1058,8 @@ packages: peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/utils@6.3.2': - resolution: {integrity: sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ==} + '@solid-primitives/utils@6.4.0': + resolution: {integrity: sha512-AeGTBg8Wtkh/0s+evyLtP8piQoS4wyqqQaAFs2HJcFMMjYAtUgo+ZPduRXLjPlqKVc2ejeR544oeqpbn8Egn8A==} peerDependencies: solid-js: ^1.6.12 @@ -1105,12 +1067,8 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/adm-zip@0.5.8': resolution: {integrity: sha512-RVVH7QvZYbN+ihqZ4kX/dMiowf6o+Jk1fNwiSdx0NahBJLU787zkULhGhJM8mf/obmLGmgdMM0bXsQTmyfbR7Q==} @@ -1127,8 +1085,8 @@ packages: '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - '@types/gensync@1.0.4': - resolution: {integrity: sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==} + '@types/gensync@1.0.5': + resolution: {integrity: sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==} '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} @@ -1149,11 +1107,11 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.19.15': - resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} + '@types/node@24.12.4': + resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} - '@types/node@24.12.0': - resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} + '@types/node@25.9.1': + resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} '@types/plist@3.0.5': resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} @@ -1182,25 +1140,25 @@ packages: engines: {node: '>=14.15'} os: [linux] - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} + '@xmldom/xmldom@0.8.13': + resolution: {integrity: sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==} engines: {node: '>=10.0.0'} - deprecated: this version has critical issues, please update to the latest version - abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + '@xmldom/xmldom@0.9.10': + resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==} + engines: {node: '>=14.6'} - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} + abbrev@4.0.0: + resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} + engines: {node: ^20.17.0 || >=22.9.0} - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + adm-zip@0.5.17: + resolution: {integrity: sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==} engines: {node: '>=12.0'} agent-base@6.0.2: @@ -1211,21 +1169,13 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -1250,19 +1200,12 @@ packages: app-builder-bin@5.0.0-alpha.12: resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} - app-builder-lib@26.0.20: - resolution: {integrity: sha512-MNEcm1M2+SAENsH2nxAAPt5qrGT4VwZNuvLC+GuwmcSDhDPWjrzsRPfx8/D0Juz446jVtTfAOguagv5EEssaaw==} + app-builder-lib@26.8.1: + resolution: {integrity: sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==} engines: {node: '>=14.0.0'} peerDependencies: - dmg-builder: 26.0.20 - electron-builder-squirrel-windows: 26.0.20 - - app-builder-lib@26.4.0: - resolution: {integrity: sha512-Uas6hNe99KzP3xPWxh5LGlH8kWIVjZixzmMJHNB9+6hPyDpjc7NQMkVgi16rQDdpCFy22ZU5sp8ow7tvjeMgYQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - dmg-builder: 26.4.0 - electron-builder-squirrel-windows: 26.4.0 + dmg-builder: 26.8.1 + electron-builder-squirrel-windows: 26.8.1 aproba@2.1.0: resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} @@ -1280,7 +1223,7 @@ packages: engines: {node: '>=8'} arrpc@https://codeload.github.com/Legcord/arrpc/tar.gz/efe7589762470d32b9ba10d529be5acc23cd0e19: - resolution: {tarball: https://codeload.github.com/Legcord/arrpc/tar.gz/efe7589762470d32b9ba10d529be5acc23cd0e19} + resolution: {gitHosted: true, tarball: https://codeload.github.com/Legcord/arrpc/tar.gz/efe7589762470d32b9ba10d529be5acc23cd0e19} version: 3.5.0 hasBin: true @@ -1306,11 +1249,11 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - axios@1.13.4: - resolution: {integrity: sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==} + axios@1.16.1: + resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} - babel-plugin-jsx-dom-expressions@0.40.6: - resolution: {integrity: sha512-v3P1MW46Lm7VMpAkq0QfyzLWWkC8fh+0aE5Km4msIgDx5kjenHU0pF2s+4/NH8CQn/kla6+Hvws+2AF7bfV5qQ==} + babel-plugin-jsx-dom-expressions@0.40.7: + resolution: {integrity: sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ==} peerDependencies: '@babel/core': ^7.20.12 @@ -1333,33 +1276,35 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.32: + resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==} + engines: {node: '>=6.0.0'} hasBin: true binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} - brace-expansion@2.0.3: - resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + brace-expansion@2.1.1: + resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1372,27 +1317,12 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - builder-util-runtime@9.4.0: - resolution: {integrity: sha512-omkpaKbutPYqC0nwLEeGq540xND1YPhfVzwT6CFyCFzxhNDt/X+fykr17Yo3jxiuwI3zaAnY/1tKFoRN+FeHhg==} - engines: {node: '>=12.0.0'} - builder-util-runtime@9.5.1: resolution: {integrity: sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==} engines: {node: '>=12.0.0'} - builder-util@26.0.20: - resolution: {integrity: sha512-LxT2Q7dcNMdJ34Y7IrTWvkSL0UHMqs76ZjbDSmhuC8vpC9DZfWYzLtOHUFHmZ67Cx8/8mNWFmXG8QJ/e+itc0A==} - - builder-util@26.3.4: - resolution: {integrity: sha512-aRn88mYMktHxzdqDMF6Ayj0rKoX+ZogJ75Ck7RrIqbY/ad0HBvnS2xA4uHfzrGr5D2aLL3vU6OBEH4p0KMV2XQ==} - - cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} + builder-util@26.8.1: + resolution: {integrity: sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==} cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} @@ -1406,8 +1336,8 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001766: - resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==} + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1417,9 +1347,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + chokidar@5.0.0: + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} + engines: {node: '>= 20.19.0'} chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -1440,18 +1370,6 @@ packages: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - cli-truncate@2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} @@ -1467,10 +1385,6 @@ packages: clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - cmake-js@7.4.0: resolution: {integrity: sha512-Lw0JxEHrmk+qNj1n9W9d4IvkDdYTBn7l2BW6XmtLj7WPpIo2shvxUy+YokfjMxAAOELNonQwX3stkPhM5xSC2Q==} engines: {node: '>= 14.15.0'} @@ -1534,8 +1448,8 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + date-fns@4.3.0: + resolution: {integrity: sha512-OYcL+3N/jyWbYdFGqoMAhytDgxP9pbYPUUiRCOgn4Fewaadk9l/Wam4Avciiyp2BgkpfQyBV9B+ehnVJych+eQ==} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -1554,13 +1468,18 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1572,6 +1491,9 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} @@ -1579,8 +1501,8 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dmg-builder@26.0.20: - resolution: {integrity: sha512-8iiV/TMGoMqor9/54M/B5zRhyRsyTo2OUv/LalKGlKCZQ/0P96obvl5dQQg56AUlbVGzbMlu7hycLvpNXhqabA==} + dmg-builder@26.8.1: + resolution: {integrity: sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==} dmg-license@1.0.11: resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} @@ -1600,19 +1522,16 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true - electron-builder-squirrel-windows@26.4.0: - resolution: {integrity: sha512-7dvalY38xBzWNaoOJ4sqy2aGIEpl2S1gLPkkB0MHu1Hu5xKQ82il1mKSFlXs6fLpXUso/NmyjdHGlSHDRoG8/w==} + electron-builder-squirrel-windows@26.8.1: + resolution: {integrity: sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==} - electron-builder@26.0.20: - resolution: {integrity: sha512-lntLb4ZuQ4UPVlOiWZKO+NhHlNf0T6Bn+6ZLo+wxTuhazKJSXycmIP6tp/xNZvE+0ApF0SizAgY4sLHZtrTJgw==} + electron-builder@26.8.1: + resolution: {integrity: sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==} engines: {node: '>=14.0.0'} hasBin: true @@ -1628,14 +1547,11 @@ packages: resolution: {integrity: sha512-8TjjAh8Ec51hUi3o4TaU0mD3GMTOESi866oRNavj9A3IQJ7pmv+MJVmdZBFGw4GFT36X7bkqnuDNYvkQgvyI8Q==} engines: {node: '>=18'} - electron-publish@26.0.20: - resolution: {integrity: sha512-2OAcMmawYZCxRSGnGMkyWOYAPLS2ZEL2F886fkilYojy1lFXLdRCkcyQVD5GV2KeEjNBsuhcvz9pddWcYT9JMw==} + electron-publish@26.8.1: + resolution: {integrity: sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==} - electron-publish@26.3.4: - resolution: {integrity: sha512-5/ouDPb73SkKuay2EXisPG60LTFTMNHWo2WLrK5GDphnWK9UC+yzYrzVeydj078Yk4WUXi0+TaaZsNd6Zt5k/A==} - - electron-to-chromium@1.5.282: - resolution: {integrity: sha512-FCPkJtpst28UmFzd903iU7PdeVTfY0KAeJy+Lk0GLZRwgwYHn/irRcaCbQQOmr5Vytc/7rcavsYLvTM8RiHYhQ==} + electron-to-chromium@1.5.363: + resolution: {integrity: sha512-VjUKPyWzGnT1fujlkEGC/BvN70Hh70KXtAqcmniXviYlJC/ivcT+BWGPyxWVbJZLfvtKR6dqg1L7T7pgAMBtWA==} electron-updater@6.8.3: resolution: {integrity: sha512-Z6sgw3jgbikWKXei1ENdqFOxBP0WlXg3TtKfz0rgw2vIZFJUyI4pD7ZN7jrkm7EoMK+tcm/qTnPUdqfZukBlBQ==} @@ -1644,8 +1560,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@42.0.1: - resolution: {integrity: sha512-d8HnycE970DGESe91Nj30eonFBUcAI9EZ1TwUGJVzSAnJZdh0BkFEinAXjdklvDYst+bVDc8HsksCuqVLrnqdg==} + electron@42.3.0: + resolution: {integrity: sha512-9ZiLdRXk+WDxW1OgIUz8J2rIQ5TYU9o629gCOjU48Q3dQiOmym7osWsH5Ubs/Jh4uuFLn6m6SBD2rmRXLAPz9g==} engines: {node: '>= 22.12.0'} hasBin: true @@ -1655,12 +1571,6 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -1668,6 +1578,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -1687,21 +1601,24 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} hasBin: true - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + esbuild@0.28.0: + resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} engines: {node: '>=18'} hasBin: true @@ -1713,6 +1630,10 @@ packages: resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} engines: {node: '>=12'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -1750,9 +1671,6 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -1762,15 +1680,19 @@ packages: picomatch: optional: true - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filelist@1.0.6: + resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -1778,10 +1700,6 @@ packages: debug: optional: true - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -1790,8 +1708,8 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@11.3.4: - resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} + fs-extra@11.3.5: + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -1810,10 +1728,6 @@ packages: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1838,8 +1752,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -1854,26 +1768,21 @@ packages: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} - get-tsconfig@4.13.0: - resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + global-agent@3.0.0: + resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} + engines: {node: '>=10.0'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} globby@10.0.1: resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==} @@ -1899,6 +1808,9 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -1910,8 +1822,8 @@ packages: has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} hey-listen@1.0.8: @@ -1930,10 +1842,6 @@ packages: http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -1950,9 +1858,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - iconv-corefoundation@1.1.7: resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} engines: {node: ^8.11.2 || >=10} @@ -1972,23 +1877,12 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - immutable@5.1.4: - resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1999,16 +1893,12 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-extglob@2.1.1: @@ -2027,13 +1917,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2046,10 +1929,6 @@ packages: resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} engines: {node: '>=0.10.0'} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} @@ -2061,20 +1940,21 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} + isexe@3.1.5: + resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} + engines: {node: '>=18'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} jake@10.9.4: resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} engines: {node: '>=10'} hasBin: true - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true js-tokens@10.0.0: @@ -2098,6 +1978,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -2106,86 +1989,90 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - koffi@2.15.6: - resolution: {integrity: sha512-WQBpM5uo74UQ17UpsFN+PUOrQQg4/nYdey4SGVluQun2drYYfePziLLWdSmFb4wSdWlJC1aimXQnjhPCheRKuw==} + koffi@2.16.2: + resolution: {integrity: sha512-owU0MRwv6xkrVqCd+33uw6BaYppkTRXbO/rVdJNI2dvZG0gzyRhYwW25eWtc5pauwK8TGh3AbkFONSezdykfSA==} lazy-val@1.0.5: resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} - lightningcss-android-arm64@1.31.1: - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.31.1: - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.31.1: - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.31.1: - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.31.1: - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.31.1: - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] - lightningcss-linux-arm64-musl@1.31.1: - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] - lightningcss-linux-x64-gnu@1.31.1: - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] - lightningcss-linux-x64-musl@1.31.1: - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] - lightningcss-win32-arm64-msvc@1.31.1: - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.31.1: - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.31.1: - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} lodash.escaperegexp@4.1.2: @@ -2195,20 +2082,13 @@ packages: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -2220,21 +2100,17 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lucide-solid@0.475.0: - resolution: {integrity: sha512-iAelwwRgMJie0sj+qWWQzYOixbk6FUcxflF3od+ZMpQokmeCD+yywyNMMsqfCcsCD50PBKKhqBeFsdjUzlhfxw==} + lucide-solid@1.16.0: + resolution: {integrity: sha512-GNmq56033vcjPnmFYwzji+8wkRZxBhDT1p+dzSI7+DeFQXzitStLovrtiC4l61Kbk7X2R+abIDIYAJM99ONKMQ==} peerDependencies: solid-js: ^1.4.7 magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} + matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -2268,10 +2144,6 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -2280,16 +2152,12 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimatch@5.1.9: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} @@ -2302,34 +2170,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - minipass-fetch@4.0.1: - resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - minipass-flush@1.0.7: - resolution: {integrity: sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -2359,29 +2199,17 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-abi@3.89.0: - resolution: {integrity: sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==} - engines: {node: '>=10'} - - node-abi@4.28.0: - resolution: {integrity: sha512-Qfp5XZL1cJDOabOT8H5gnqMTmM4NjvYzHp4I/Kt/Sl76OVkOBBHRFlPspGV0hYvMoqQsypFjT/Yp7Km0beXW9g==} + node-abi@4.31.0: + resolution: {integrity: sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw==} engines: {node: '>=22.12.0'} node-addon-api@1.7.2: @@ -2390,32 +2218,28 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-addon-api@8.5.0: - resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + node-addon-api@8.8.0: + resolution: {integrity: sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==} engines: {node: ^18 || ^20 || >= 21} - node-api-headers@1.8.0: - resolution: {integrity: sha512-jfnmiKWjRAGbdD1yQS28bknFM1tbHC1oucyuMPjmkEs+kpiu76aRs40WlTmBmyEgzDM76ge1DQ7XJ3R5deiVjQ==} + node-api-headers@1.9.0: + resolution: {integrity: sha512-2oNILP4jXwRB4ywnYKjVk1YyJ96n2D4EOVJO6S3oYZ5PtbJrw3Yt9TpAuX3nBLMuzn74rnfGQrv13pS9vC+YiA==} node-api-version@0.2.1: resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} - node-gyp@11.5.0: - resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} - engines: {node: ^18.17.0 || >=20.5.0} + node-gyp@12.3.0: + resolution: {integrity: sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.46: + resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==} + engines: {node: '>=18'} - nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} + nopt@9.0.0: + resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} + engines: {node: ^20.17.0 || >=22.9.0} hasBin: true normalize-path@3.0.0: @@ -2431,20 +2255,16 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -2453,22 +2273,11 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-map@7.0.4: - resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} - engines: {node: '>=18'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parse5@8.0.0: - resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parse5@8.0.1: + resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} @@ -2485,10 +2294,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -2506,14 +2311,10 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - picomatch@4.0.4: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} @@ -2530,40 +2331,36 @@ packages: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} + plist@3.1.1: + resolution: {integrity: sha512-ZIfcLJC+7E7FBFnDxm9MPmt7D+DidyQ26lewieO75AdhA2ayMtsJSES0iWzqJQbcVRSrTufQoy0DR94xHue0oA==} + engines: {node: '>=10.4.0'} + postject@1.0.0-alpha.6: resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} engines: {node: '>=14.0.0'} hasBin: true - proc-log@2.0.1: - resolution: {integrity: sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} + proc-log@6.1.0: + resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} + engines: {node: ^20.17.0 || >=22.9.0} progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - promise-retry@2.0.1: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -2596,9 +2393,9 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} + readdirp@5.0.0: + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + engines: {node: '>= 20.19.0'} require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -2611,21 +2408,14 @@ packages: resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -2639,10 +2429,9 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + roarr@2.15.4: + resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} + engines: {node: '>=8.0'} rolldown@1.0.0-beta.1: resolution: {integrity: sha512-19B2HoY3zcR7Um+zVDOvV1gQ1d6acUIouCUMGxvlZ/0kTjcMSFr8tuLWmRRYIV7y1mrgPbJRd1cPFVd4p1l8nQ==} @@ -2653,8 +2442,8 @@ packages: '@babel/runtime': optional: true - rolldown@1.0.0-rc.15: - resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2674,15 +2463,18 @@ packages: sanitize-filename@1.6.4: resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - sass@1.97.3: - resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} - engines: {node: '>=14.0.0'} + sass@1.100.0: + resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==} + engines: {node: '>=20.19.0'} hasBin: true - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -2691,24 +2483,28 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true - seroval-plugins@1.5.0: - resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==} + semver@7.8.1: + resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} + engines: {node: '>=10'} + hasBin: true + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + + seroval-plugins@1.5.4: + resolution: {integrity: sha512-S0xQPhUTefAhNvNWFg0c1J8qJArHt5KdtJ/cFAofo06KD1MVSeFWyl4iiu+ApDIuw0WhjpOfCdgConOfAnLgkw==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.5.0: - resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} + seroval@1.5.4: + resolution: {integrity: sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw==} engines: {node: '>=10'} set-blocking@2.0.0: @@ -2725,10 +2521,6 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} @@ -2749,23 +2541,11 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - solid-js@1.6.16: resolution: {integrity: sha512-Ng4CahvLlpGA3BXIMiiMdwhI8WpObZ8gXqm97GCKR4+MpnODs6Pdpco+tmVCY/4ZDFaEKDxz7WRLAAdoXdlY7w==} - solid-js@1.9.12: - resolution: {integrity: sha512-QzKaSJq2/iDrWR1As6MHZQ8fQkdOBf8GReYb7L5iKwMGceg7HxDcaOHk0at66tNgn9U2U7dXo8ZZpLIAmGMzgw==} + solid-js@1.9.13: + resolution: {integrity: sha512-6hJeJMOcEX8ktqjpDoJZEmld3ijvcvWBDtiXBm7f4332SiFN66QeAQI1REQshvyUoISsSeJ4PHDauKYbwao9JQ==} solid-motionone@1.0.4: resolution: {integrity: sha512-aqEjgecoO9raDFznu/dEci7ORSmA26Kjj9J4Cn1Gyr0GZuOVdvsNxdxClTL9J40Aq/uYFx4GLwC8n70fMLHiuA==} @@ -2797,13 +2577,8 @@ packages: spitroast@2.1.6: resolution: {integrity: sha512-xil2XeVh8WQoBlG8Lm8jT6ifqWGmSgTGq2clRcq2roycb0kg1h4fv5ydoiBId9kIQp4Y12PK/cjVzD8xpWXZvg==} - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} stat-mode@1.0.0: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} @@ -2813,10 +2588,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} @@ -2828,10 +2599,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - strip-ansi@7.2.0: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} @@ -2857,8 +2624,8 @@ packages: engines: {node: '>=10'} deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - tar@7.5.13: - resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} + tar@7.5.15: + resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} engines: {node: '>=18'} temp-file@3.4.0: @@ -2874,15 +2641,15 @@ packages: tiny-typed-emitter@2.1.0: resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - tmp@0.2.5: - resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} + tmp@0.2.7: + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} engines: {node: '>=14.14'} to-regex-range@5.0.1: @@ -2895,50 +2662,42 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.22.3: + resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} engines: {node: '>=18.0.0'} hasBin: true - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici@7.25.0: - resolution: {integrity: sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + + undici@6.26.0: + resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} + engines: {node: '>=18.17'} + + undici@7.26.0: + resolution: {integrity: sha512-3O9Tf67pGhgOv9jM35AbhkXAKi13f3oy3aE4CSgr+TckGeY+/iu97ZXN+J7DpHPzLbVApFd1IFhcnBjREYXYcg==} engines: {node: '>=20.18.1'} - unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} - universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -2973,9 +2732,6 @@ packages: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2986,6 +2742,11 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true + which@6.0.1: + resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -2996,15 +2757,11 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3019,9 +2776,9 @@ packages: resolution: {integrity: sha512-+8qTc3zv2UcJ1v9IsSIce37Dl4MQG14Cp7tWrwmy202UaI1wqRukw5QMX1JHsV+DX64yw77EgGsj2s5wGvuMbQ==} engines: {node: '>= 16'} - xml-parser-xo@4.1.5: - resolution: {integrity: sha512-TxyRxk9sTOUg3glxSIY6f0nfuqRll2OEF8TspLgh5mZkLuBgheCn3zClcDSGJ58TvNmiwyCCuat4UajPud/5Og==} - engines: {node: '>= 16'} + xml-parser-xo@4.1.6: + resolution: {integrity: sha512-mXbSNSM+rIwndoxSwmFa83bOdeP8G/cOGr7XvxA67X7ebCzoAuVez9JYDCDub3zRDNBZxIbfjuXLSsamr7NfwQ==} + engines: {node: '>= 20'} xmlbuilder@15.1.1: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} @@ -3049,8 +2806,9 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yauzl@3.3.1: + resolution: {integrity: sha512-RNPCUkiE/ZgO4w8i9U5yDQVHaFDdnzaFANElRvpJteCspvmv2VqrRb9lvS6odVD+jqI/zDsxAHJVsafpcheVQQ==} + engines: {node: '>=12'} yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} @@ -3063,32 +2821,32 @@ snapshots: 7zip-bin@5.2.0: {} - '@babel/code-frame@7.28.6': + '@babel/code-frame@7.29.7': dependencies: - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-validator-identifier': 7.29.7 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/code-frame@8.0.0-rc.3': + '@babel/code-frame@8.0.0-rc.6': dependencies: - '@babel/helper-validator-identifier': 8.0.0-rc.3 + '@babel/helper-validator-identifier': 8.0.0-rc.6 js-tokens: 10.0.0 - '@babel/compat-data@7.28.6': {} + '@babel/compat-data@7.29.7': {} - '@babel/compat-data@8.0.0-rc.3': {} + '@babel/compat-data@8.0.0-rc.6': {} - '@babel/core@7.28.6': + '@babel/core@7.29.7': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -3098,301 +2856,301 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/core@8.0.0-rc.3': + '@babel/core@8.0.0-rc.6': dependencies: - '@babel/code-frame': 8.0.0-rc.3 - '@babel/generator': 8.0.0-rc.3 - '@babel/helper-compilation-targets': 8.0.0-rc.3 - '@babel/helpers': 8.0.0-rc.3 - '@babel/parser': 8.0.0-rc.3 - '@babel/template': 8.0.0-rc.3 - '@babel/traverse': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 - '@jridgewell/remapping': 2.3.5 - '@types/gensync': 1.0.4 + '@babel/code-frame': 8.0.0-rc.6 + '@babel/generator': 8.0.0-rc.6 + '@babel/helper-compilation-targets': 8.0.0-rc.6 + '@babel/helpers': 8.0.0-rc.6 + '@babel/parser': 8.0.0-rc.6 + '@babel/template': 8.0.0-rc.6 + '@babel/traverse': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 + '@types/gensync': 1.0.5 convert-source-map: 2.0.0 + find-up-simple: 1.0.1 gensync: 1.0.0-beta.2 import-meta-resolve: 4.2.0 json5: 2.2.3 obug: 2.1.1 - semver: 7.7.4 + semver: 7.8.1 - '@babel/generator@7.28.6': + '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/generator@8.0.0-rc.3': + '@babel/generator@8.0.0-rc.6': dependencies: - '@babel/parser': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/parser': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 '@types/jsesc': 2.5.1 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': + '@babel/helper-annotate-as-pure@7.29.7': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.7 - '@babel/helper-compilation-targets@7.28.6': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/compat-data': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-compilation-targets@8.0.0-rc.3': + '@babel/helper-compilation-targets@8.0.0-rc.6': dependencies: - '@babel/compat-data': 8.0.0-rc.3 - '@babel/helper-validator-option': 8.0.0-rc.3 - browserslist: 4.28.1 + '@babel/compat-data': 8.0.0-rc.6 + '@babel/helper-validator-option': 8.0.0-rc.6 + browserslist: 4.28.2 lru-cache: 7.18.3 - semver: 7.7.4 + semver: 7.8.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.28.6) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/traverse': 7.29.7 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-globals@8.0.0-rc.3': {} + '@babel/helper-globals@8.0.0-rc.6': {} - '@babel/helper-member-expression-to-functions@7.28.5': + '@babel/helper-member-expression-to-functions@7.29.7': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/helper-module-imports@7.28.6': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@8.0.0-rc.3': + '@babel/helper-module-imports@8.0.0-rc.6': dependencies: - '@babel/traverse': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/traverse': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 - '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.27.1': + '@babel/helper-optimise-call-expression@7.29.7': dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 - '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-plugin-utils@8.0.0-rc.3(@babel/core@8.0.0-rc.3)': + '@babel/helper-plugin-utils@8.0.0-rc.6(@babel/core@8.0.0-rc.6)': dependencies: - '@babel/core': 8.0.0-rc.3 + '@babel/core': 8.0.0-rc.6 - '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': dependencies: - '@babel/traverse': 7.28.6 - '@babel/types': 7.28.6 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-string-parser@8.0.0-rc.3': {} + '@babel/helper-string-parser@8.0.0-rc.6': {} - '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/helper-validator-identifier@8.0.0-rc.3': {} + '@babel/helper-validator-identifier@8.0.0-rc.6': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.29.7': {} - '@babel/helper-validator-option@8.0.0-rc.3': {} + '@babel/helper-validator-option@8.0.0-rc.6': {} - '@babel/helpers@7.28.6': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 - '@babel/helpers@8.0.0-rc.3': + '@babel/helpers@8.0.0-rc.6': dependencies: - '@babel/template': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/template': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 - '@babel/parser@7.28.6': + '@babel/parser@7.29.7': dependencies: - '@babel/types': 7.28.6 + '@babel/types': 7.29.7 - '@babel/parser@8.0.0-rc.3': + '@babel/parser@8.0.0-rc.6': dependencies: - '@babel/types': 8.0.0-rc.3 + '@babel/types': 8.0.0-rc.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@8.0.0-rc.6)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 8.0.0-rc.6 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)': + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.28.6)': + '@babel/preset-typescript@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6) + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/template@7.28.6': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/parser': 7.28.6 - '@babel/types': 7.28.6 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@babel/template@8.0.0-rc.3': + '@babel/template@8.0.0-rc.6': dependencies: - '@babel/code-frame': 8.0.0-rc.3 - '@babel/parser': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/code-frame': 8.0.0-rc.6 + '@babel/parser': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 - '@babel/traverse@7.28.6': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.28.6 - '@babel/generator': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.6 - '@babel/template': 7.28.6 - '@babel/types': 7.28.6 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/traverse@8.0.0-rc.3': + '@babel/traverse@8.0.0-rc.6': dependencies: - '@babel/code-frame': 8.0.0-rc.3 - '@babel/generator': 8.0.0-rc.3 - '@babel/helper-globals': 8.0.0-rc.3 - '@babel/parser': 8.0.0-rc.3 - '@babel/template': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/code-frame': 8.0.0-rc.6 + '@babel/generator': 8.0.0-rc.6 + '@babel/helper-globals': 8.0.0-rc.6 + '@babel/parser': 8.0.0-rc.6 + '@babel/template': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 obug: 2.1.1 - '@babel/types@7.28.6': + '@babel/types@7.29.7': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 - '@babel/types@7.29.0': + '@babel/types@8.0.0-rc.6': dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 + '@babel/helper-string-parser': 8.0.0-rc.6 + '@babel/helper-validator-identifier': 8.0.0-rc.6 - '@babel/types@8.0.0-rc.3': - dependencies: - '@babel/helper-string-parser': 8.0.0-rc.3 - '@babel/helper-validator-identifier': 8.0.0-rc.3 - - '@biomejs/biome@1.9.4': + '@biomejs/biome@2.4.16': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 + '@biomejs/cli-darwin-arm64': 2.4.16 + '@biomejs/cli-darwin-x64': 2.4.16 + '@biomejs/cli-linux-arm64': 2.4.16 + '@biomejs/cli-linux-arm64-musl': 2.4.16 + '@biomejs/cli-linux-x64': 2.4.16 + '@biomejs/cli-linux-x64-musl': 2.4.16 + '@biomejs/cli-win32-arm64': 2.4.16 + '@biomejs/cli-win32-x64': 2.4.16 - '@biomejs/cli-darwin-arm64@1.9.4': + '@biomejs/cli-darwin-arm64@2.4.16': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@biomejs/cli-darwin-x64@2.4.16': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@biomejs/cli-linux-arm64-musl@2.4.16': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@biomejs/cli-linux-arm64@2.4.16': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@biomejs/cli-linux-x64-musl@2.4.16': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@biomejs/cli-linux-x64@2.4.16': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@biomejs/cli-win32-arm64@2.4.16': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@biomejs/cli-win32-x64@2.4.16': optional: true '@develar/schema-utils@2.6.5': dependencies: - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 6.15.0 + ajv-keywords: 3.5.2(ajv@6.15.0) '@electron/asar@3.4.1': dependencies: commander: 5.1.0 glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 3.1.5 '@electron/fuses@1.8.0': dependencies: @@ -3400,35 +3158,33 @@ snapshots: fs-extra: 9.1.0 minimist: 1.2.8 + '@electron/get@3.1.0': + dependencies: + debug: 4.4.3 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + '@electron/get@5.0.0': dependencies: debug: 4.4.3 env-paths: 3.0.0 graceful-fs: 4.2.11 progress: 2.0.3 - semver: 7.7.4 + semver: 7.8.1 sumchecker: 3.0.1 optionalDependencies: - undici: 7.25.0 + undici: 7.26.0 transitivePeerDependencies: - supports-color - '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.3 - glob: 8.1.0 - graceful-fs: 4.2.11 - make-fetch-happen: 10.2.1 - nopt: 6.0.0 - proc-log: 2.0.1 - semver: 7.7.4 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - '@electron/notarize@2.5.0': dependencies: debug: 4.4.3 @@ -3448,42 +3204,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/rebuild@3.7.2': - dependencies: - '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 - '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 - debug: 4.4.3 - detect-libc: 2.1.2 - fs-extra: 10.1.0 - got: 11.8.6 - node-abi: 3.89.0 - node-api-version: 0.2.1 - ora: 5.4.1 - read-binary-file-arch: 1.0.6 - semver: 7.7.4 - tar: 6.2.1 - yargs: 17.7.2 - transitivePeerDependencies: - - bluebird - - supports-color - - '@electron/rebuild@4.0.1': + '@electron/rebuild@4.0.4': dependencies: '@malept/cross-spawn-promise': 2.0.0 - chalk: 4.1.2 debug: 4.4.3 - detect-libc: 2.1.2 - got: 11.8.6 - graceful-fs: 4.2.11 - node-abi: 4.28.0 + node-abi: 4.31.0 node-api-version: 0.2.1 - node-gyp: 11.5.0 - ora: 5.4.1 + node-gyp: 12.3.0 read-binary-file-arch: 1.0.6 - semver: 7.7.4 - tar: 6.2.1 - yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -3493,7 +3221,7 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 dir-compare: 4.2.0 - fs-extra: 11.3.4 + fs-extra: 11.3.5 minimatch: 9.0.9 plist: 3.1.0 transitivePeerDependencies: @@ -3503,36 +3231,20 @@ snapshots: dependencies: cross-dirname: 0.1.0 debug: 4.4.3 - fs-extra: 11.3.4 + fs-extra: 11.3.5 minimist: 1.2.8 postject: 1.0.0-alpha.6 transitivePeerDependencies: - supports-color optional: true - '@emnapi/core@1.8.1': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/core@1.9.2': + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.8.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.9.2': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true @@ -3542,167 +3254,150 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.27.2': + '@esbuild/aix-ppc64@0.28.0': optional: true '@esbuild/android-arm64@0.17.19': optional: true - '@esbuild/android-arm64@0.27.2': + '@esbuild/android-arm64@0.28.0': optional: true '@esbuild/android-arm@0.17.19': optional: true - '@esbuild/android-arm@0.27.2': + '@esbuild/android-arm@0.28.0': optional: true '@esbuild/android-x64@0.17.19': optional: true - '@esbuild/android-x64@0.27.2': + '@esbuild/android-x64@0.28.0': optional: true '@esbuild/darwin-arm64@0.17.19': optional: true - '@esbuild/darwin-arm64@0.27.2': + '@esbuild/darwin-arm64@0.28.0': optional: true '@esbuild/darwin-x64@0.17.19': optional: true - '@esbuild/darwin-x64@0.27.2': + '@esbuild/darwin-x64@0.28.0': optional: true '@esbuild/freebsd-arm64@0.17.19': optional: true - '@esbuild/freebsd-arm64@0.27.2': + '@esbuild/freebsd-arm64@0.28.0': optional: true '@esbuild/freebsd-x64@0.17.19': optional: true - '@esbuild/freebsd-x64@0.27.2': + '@esbuild/freebsd-x64@0.28.0': optional: true '@esbuild/linux-arm64@0.17.19': optional: true - '@esbuild/linux-arm64@0.27.2': + '@esbuild/linux-arm64@0.28.0': optional: true '@esbuild/linux-arm@0.17.19': optional: true - '@esbuild/linux-arm@0.27.2': + '@esbuild/linux-arm@0.28.0': optional: true '@esbuild/linux-ia32@0.17.19': optional: true - '@esbuild/linux-ia32@0.27.2': + '@esbuild/linux-ia32@0.28.0': optional: true '@esbuild/linux-loong64@0.17.19': optional: true - '@esbuild/linux-loong64@0.27.2': + '@esbuild/linux-loong64@0.28.0': optional: true '@esbuild/linux-mips64el@0.17.19': optional: true - '@esbuild/linux-mips64el@0.27.2': + '@esbuild/linux-mips64el@0.28.0': optional: true '@esbuild/linux-ppc64@0.17.19': optional: true - '@esbuild/linux-ppc64@0.27.2': + '@esbuild/linux-ppc64@0.28.0': optional: true '@esbuild/linux-riscv64@0.17.19': optional: true - '@esbuild/linux-riscv64@0.27.2': + '@esbuild/linux-riscv64@0.28.0': optional: true '@esbuild/linux-s390x@0.17.19': optional: true - '@esbuild/linux-s390x@0.27.2': + '@esbuild/linux-s390x@0.28.0': optional: true '@esbuild/linux-x64@0.17.19': optional: true - '@esbuild/linux-x64@0.27.2': + '@esbuild/linux-x64@0.28.0': optional: true - '@esbuild/netbsd-arm64@0.27.2': + '@esbuild/netbsd-arm64@0.28.0': optional: true '@esbuild/netbsd-x64@0.17.19': optional: true - '@esbuild/netbsd-x64@0.27.2': + '@esbuild/netbsd-x64@0.28.0': optional: true - '@esbuild/openbsd-arm64@0.27.2': + '@esbuild/openbsd-arm64@0.28.0': optional: true '@esbuild/openbsd-x64@0.17.19': optional: true - '@esbuild/openbsd-x64@0.27.2': + '@esbuild/openbsd-x64@0.28.0': optional: true - '@esbuild/openharmony-arm64@0.27.2': + '@esbuild/openharmony-arm64@0.28.0': optional: true '@esbuild/sunos-x64@0.17.19': optional: true - '@esbuild/sunos-x64@0.27.2': + '@esbuild/sunos-x64@0.28.0': optional: true '@esbuild/win32-arm64@0.17.19': optional: true - '@esbuild/win32-arm64@0.27.2': + '@esbuild/win32-arm64@0.28.0': optional: true '@esbuild/win32-ia32@0.17.19': optional: true - '@esbuild/win32-ia32@0.27.2': + '@esbuild/win32-ia32@0.28.0': optional: true '@esbuild/win32-x64@0.17.19': optional: true - '@esbuild/win32-x64@0.27.2': + '@esbuild/win32-x64@0.28.0': optional: true - '@gar/promisify@1.1.3': {} - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.2.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.3 @@ -3734,7 +3429,7 @@ snapshots: dependencies: debug: 4.4.3 fs-extra: 9.1.0 - lodash: 4.17.23 + lodash: 4.18.1 tmp-promise: 3.0.3 transitivePeerDependencies: - supports-color @@ -3776,16 +3471,16 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 optional: true - '@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 optional: true '@nodelib/fs.scandir@2.1.5': @@ -3800,31 +3495,7 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@npmcli/agent@3.0.0': - dependencies: - agent-base: 7.1.4 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - '@npmcli/fs@2.1.2': - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.7.4 - - '@npmcli/fs@4.0.0': - dependencies: - semver: 7.7.4 - - '@npmcli/move-file@2.0.1': - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - - '@oxc-project/types@0.124.0': {} + '@oxc-project/types@0.133.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -3870,7 +3541,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -3887,85 +3558,80 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@pkgjs/parseargs@0.11.0': - optional: true - - '@rolldown-plugin/solid@0.0.4(csstype@3.2.3)(rolldown@1.0.0-rc.15)(seroval@1.5.0)(solid-js@1.9.12)': + '@rolldown-plugin/solid@0.0.4(csstype@3.2.3)(rolldown@1.0.3)(seroval@1.5.4)(solid-js@1.9.13)': dependencies: - '@babel/core': 8.0.0-rc.3 - '@babel/helper-module-imports': 8.0.0-rc.3 - '@babel/helper-plugin-utils': 8.0.0-rc.3(@babel/core@8.0.0-rc.3) - '@babel/helper-validator-option': 8.0.0-rc.3 - '@babel/template': 8.0.0-rc.3 - '@babel/traverse': 8.0.0-rc.3 - '@babel/types': 8.0.0-rc.3 + '@babel/core': 8.0.0-rc.6 + '@babel/helper-module-imports': 8.0.0-rc.6 + '@babel/helper-plugin-utils': 8.0.0-rc.6(@babel/core@8.0.0-rc.6) + '@babel/helper-validator-option': 8.0.0-rc.6 + '@babel/template': 8.0.0-rc.6 + '@babel/traverse': 8.0.0-rc.6 + '@babel/types': 8.0.0-rc.6 csstype: 3.2.3 html-entities: 2.6.0 - parse5: 8.0.0 - rolldown: 1.0.0-rc.15 - seroval: 1.5.0 - solid-js: 1.9.12 - transitivePeerDependencies: - - '@babel/preset-typescript' + parse5: 8.0.1 + rolldown: 1.0.3 + seroval: 1.5.4 + solid-js: 1.9.13 - '@rolldown/binding-android-arm64@1.0.0-rc.15': + '@rolldown/binding-android-arm64@1.0.3': optional: true '@rolldown/binding-darwin-arm64@1.0.0-beta.1': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + '@rolldown/binding-darwin-arm64@1.0.3': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.1': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.15': + '@rolldown/binding-darwin-x64@1.0.3': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.1': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + '@rolldown/binding-freebsd-x64@1.0.3': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-arm64-gnu@1.0.3': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + '@rolldown/binding-linux-arm64-musl@1.0.3': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-ppc64-gnu@1.0.3': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-s390x-gnu@1.0.3': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-x64-gnu@1.0.3': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.1': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + '@rolldown/binding-linux-x64-musl@1.0.3': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + '@rolldown/binding-openharmony-arm64@1.0.3': optional: true '@rolldown/binding-wasm32-wasi@1.0.0-beta.1': @@ -3973,17 +3639,17 @@ snapshots: '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + '@rolldown/binding-wasm32-wasi@1.0.3': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.1': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + '@rolldown/binding-win32-arm64-msvc@1.0.3': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.1': @@ -3992,56 +3658,54 @@ snapshots: '@rolldown/binding-win32-x64-msvc@1.0.0-beta.1': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + '@rolldown/binding-win32-x64-msvc@1.0.3': optional: true - '@rolldown/pluginutils@1.0.0-rc.15': {} + '@rolldown/pluginutils@1.0.1': {} '@rollup/plugin-esm-shim@0.1.8': dependencies: magic-string: 0.30.21 - mlly: 1.8.0 + mlly: 1.8.2 '@sindresorhus/is@4.6.0': {} - '@solid-primitives/props@3.2.2(solid-js@1.9.12)': + '@solid-primitives/props@3.2.3(solid-js@1.9.13)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.12) - solid-js: 1.9.12 + '@solid-primitives/utils': 6.4.0(solid-js@1.9.13) + solid-js: 1.9.13 - '@solid-primitives/refs@1.1.2(solid-js@1.9.12)': + '@solid-primitives/refs@1.1.3(solid-js@1.9.13)': dependencies: - '@solid-primitives/utils': 6.3.2(solid-js@1.9.12) - solid-js: 1.9.12 + '@solid-primitives/utils': 6.4.0(solid-js@1.9.13) + solid-js: 1.9.13 - '@solid-primitives/transition-group@1.1.2(solid-js@1.9.12)': + '@solid-primitives/transition-group@1.1.2(solid-js@1.9.13)': dependencies: - solid-js: 1.9.12 + solid-js: 1.9.13 - '@solid-primitives/utils@6.3.2(solid-js@1.9.12)': + '@solid-primitives/utils@6.4.0(solid-js@1.9.13)': dependencies: - solid-js: 1.9.12 + solid-js: 1.9.13 '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 - '@tootallnate/once@2.0.0': {} - - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true '@types/adm-zip@0.5.8': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.2.0 '@types/keyv': 3.1.4 - '@types/node': 22.19.15 + '@types/node': 25.9.1 '@types/responselike': 1.0.3 '@types/debug@4.1.13': @@ -4050,18 +3714,18 @@ snapshots: '@types/fs-extra@8.1.5': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 - '@types/gensync@1.0.4': {} + '@types/gensync@1.0.5': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 22.19.15 + '@types/node': 25.9.1 '@types/http-cache-semantics@4.2.0': {} @@ -4069,57 +3733,57 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 '@types/minimatch@6.0.0': dependencies: - minimatch: 10.1.1 + minimatch: 10.2.5 '@types/ms@2.1.0': {} - '@types/node@22.19.15': - dependencies: - undici-types: 6.21.0 - - '@types/node@24.12.0': + '@types/node@24.12.4': dependencies: undici-types: 7.16.0 + '@types/node@25.9.1': + dependencies: + undici-types: 7.24.6 + '@types/plist@3.0.5': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 xmlbuilder: 15.1.1 optional: true '@types/responselike@1.0.3': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 '@types/verror@1.10.11': optional: true '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.15 + '@types/node': 25.9.1 optional: true '@uwu/lune@1.6.2': dependencies: - '@babel/core': 7.28.6 - '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6) + '@babel/core': 7.29.7 + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) chokidar: 3.6.0 - date-fns: 4.1.0 + date-fns: 4.3.0 esbuild: 0.17.19 handlebars: 4.7.9 - lightningcss: 1.31.1 - resolve: 1.22.11 + lightningcss: 1.32.0 + resolve: 1.22.12 rolldown: 1.0.0-beta.1 - sass: 1.97.3 - ws: 8.20.0 + sass: 1.100.0 + ws: 8.21.0 transitivePeerDependencies: - '@babel/runtime' - bufferutil @@ -4135,44 +3799,37 @@ snapshots: '@vencord/venmic@6.1.0': dependencies: cmake-js: 7.4.0 - node-addon-api: 8.5.0 + node-addon-api: 8.8.0 pkg-prebuilds: 0.2.1 transitivePeerDependencies: - supports-color optional: true - '@xmldom/xmldom@0.8.11': {} + '@xmldom/xmldom@0.8.13': {} - abbrev@1.1.1: {} + '@xmldom/xmldom@0.9.10': + optional: true - abbrev@3.0.1: {} + abbrev@4.0.0: {} - acorn@8.15.0: {} + acorn@8.16.0: {} - adm-zip@0.5.16: {} + adm-zip@0.5.17: {} agent-base@6.0.2: dependencies: debug: 4.4.3 transitivePeerDependencies: - supports-color + optional: true agent-base@7.1.4: {} - agentkeepalive@4.6.0: + ajv-keywords@3.5.2(ajv@6.15.0): dependencies: - humanize-ms: 1.2.1 + ajv: 6.15.0 - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - - ajv@6.12.6: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -4192,87 +3849,47 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 app-builder-bin@5.0.0-alpha.12: {} - app-builder-lib@26.0.20(dmg-builder@26.0.20)(electron-builder-squirrel-windows@26.4.0): + app-builder-lib@26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1): dependencies: '@develar/schema-utils': 2.6.5 '@electron/asar': 3.4.1 '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 '@electron/notarize': 2.5.0 '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 3.7.2 + '@electron/rebuild': 4.0.4 '@electron/universal': 2.0.3 '@malept/flatpak-bundler': 0.4.0 '@types/fs-extra': 9.0.13 async-exit-hook: 2.0.1 - builder-util: 26.0.20 - builder-util-runtime: 9.4.0 - chromium-pickle-js: 0.2.0 - ci-info: 4.4.0 - debug: 4.4.3 - dmg-builder: 26.0.20(electron-builder-squirrel-windows@26.4.0) - dotenv: 16.6.1 - dotenv-expand: 11.0.7 - ejs: 3.1.10 - electron-builder-squirrel-windows: 26.4.0(dmg-builder@26.0.20) - electron-publish: 26.0.20 - fs-extra: 10.1.0 - hosted-git-info: 4.1.0 - isbinaryfile: 5.0.7 - jiti: 2.6.1 - js-yaml: 4.1.1 - json5: 2.2.3 - lazy-val: 1.0.5 - minimatch: 10.2.4 - plist: 3.1.0 - resedit: 1.7.2 - semver: 7.7.4 - tar: 6.2.1 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - which: 5.0.0 - transitivePeerDependencies: - - bluebird - - supports-color - - app-builder-lib@26.4.0(dmg-builder@26.0.20)(electron-builder-squirrel-windows@26.4.0): - dependencies: - '@develar/schema-utils': 2.6.5 - '@electron/asar': 3.4.1 - '@electron/fuses': 1.8.0 - '@electron/notarize': 2.5.0 - '@electron/osx-sign': 1.3.3 - '@electron/rebuild': 4.0.1 - '@electron/universal': 2.0.3 - '@malept/flatpak-bundler': 0.4.0 - '@types/fs-extra': 9.0.13 - async-exit-hook: 2.0.1 - builder-util: 26.3.4 + builder-util: 26.8.1 builder-util-runtime: 9.5.1 chromium-pickle-js: 0.2.0 ci-info: 4.3.1 debug: 4.4.3 - dmg-builder: 26.0.20(electron-builder-squirrel-windows@26.4.0) + dmg-builder: 26.8.1(electron-builder-squirrel-windows@26.8.1) dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 - electron-builder-squirrel-windows: 26.4.0(dmg-builder@26.0.20) - electron-publish: 26.3.4 + electron-builder-squirrel-windows: 26.8.1(dmg-builder@26.8.1) + electron-publish: 26.8.1 fs-extra: 10.1.0 hosted-git-info: 4.1.0 isbinaryfile: 5.0.7 - jiti: 2.6.1 + jiti: 2.7.0 js-yaml: 4.1.1 json5: 2.2.3 lazy-val: 1.0.5 - minimatch: 10.2.4 + minimatch: 10.2.5 plist: 3.1.0 + proper-lockfile: 4.1.2 resedit: 1.7.2 semver: 7.7.4 - tar: 6.2.1 + tar: 7.5.15 temp-file: 3.4.0 tiny-async-pool: 1.3.0 which: 5.0.0 @@ -4294,8 +3911,8 @@ snapshots: arrpc@https://codeload.github.com/Legcord/arrpc/tar.gz/efe7589762470d32b9ba10d529be5acc23cd0e19: dependencies: - koffi: 2.15.6 - ws: 8.20.0 + koffi: 2.16.2 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -4314,30 +3931,32 @@ snapshots: at-least-node@1.0.0: {} - axios@1.13.4(debug@4.4.3): + axios@1.16.1(debug@4.4.3): dependencies: - follow-redirects: 1.15.11(debug@4.4.3) + follow-redirects: 1.16.0(debug@4.4.3) form-data: 4.0.5 - proxy-from-env: 1.1.0 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 transitivePeerDependencies: - debug + - supports-color optional: true - babel-plugin-jsx-dom-expressions@0.40.6(@babel/core@7.28.6): + babel-plugin-jsx-dom-expressions@0.40.7(@babel/core@8.0.0-rc.6): dependencies: - '@babel/core': 7.28.6 + '@babel/core': 8.0.0-rc.6 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6) - '@babel/types': 7.29.0 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@8.0.0-rc.6) + '@babel/types': 7.29.7 html-entities: 2.3.3 parse5: 7.3.0 - babel-preset-solid@1.9.12(@babel/core@7.28.6)(solid-js@1.9.12): + babel-preset-solid@1.9.12(@babel/core@8.0.0-rc.6)(solid-js@1.9.13): dependencies: - '@babel/core': 7.28.6 - babel-plugin-jsx-dom-expressions: 0.40.6(@babel/core@7.28.6) + '@babel/core': 8.0.0-rc.6 + babel-plugin-jsx-dom-expressions: 0.40.7(@babel/core@8.0.0-rc.6) optionalDependencies: - solid-js: 1.9.12 + solid-js: 1.9.13 balanced-match@1.0.2: {} @@ -4345,26 +3964,23 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.32: {} binary-extensions@2.3.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 + boolean@3.2.0: + optional: true - brace-expansion@1.1.12: + brace-expansion@1.1.15: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.3: + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -4372,13 +3988,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.28.1: + browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001766 - electron-to-chromium: 1.5.282 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.32 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.363 + node-releases: 2.0.46 + update-browserslist-db: 1.2.3(browserslist@4.28.2) buffer-crc32@0.2.13: {} @@ -4388,44 +4004,16 @@ snapshots: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - - builder-util-runtime@9.4.0: - dependencies: - debug: 4.4.3 - sax: 1.4.4 - transitivePeerDependencies: - - supports-color + optional: true builder-util-runtime@9.5.1: dependencies: debug: 4.4.3 - sax: 1.4.4 + sax: 1.6.0 transitivePeerDependencies: - supports-color - builder-util@26.0.20: - dependencies: - 7zip-bin: 5.2.0 - '@types/debug': 4.1.13 - app-builder-bin: 5.0.0-alpha.12 - builder-util-runtime: 9.4.0 - chalk: 4.1.2 - ci-info: 4.4.0 - cross-spawn: 7.0.6 - debug: 4.4.3 - fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - js-yaml: 4.1.1 - sanitize-filename: 1.6.4 - source-map-support: 0.5.21 - stat-mode: 1.0.0 - temp-file: 3.4.0 - tiny-async-pool: 1.3.0 - transitivePeerDependencies: - - supports-color - - builder-util@26.3.4: + builder-util@26.8.1: dependencies: 7zip-bin: 5.2.0 '@types/debug': 4.1.13 @@ -4446,44 +4034,6 @@ snapshots: transitivePeerDependencies: - supports-color - cacache@16.1.3: - dependencies: - '@npmcli/fs': 2.1.2 - '@npmcli/move-file': 2.0.1 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 8.1.0 - infer-owner: 1.0.4 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.7 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 9.0.1 - tar: 6.2.1 - unique-filename: 2.0.1 - transitivePeerDependencies: - - bluebird - - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.5.0 - lru-cache: 10.4.3 - minipass: 7.1.3 - minipass-collect: 2.0.1 - minipass-flush: 1.0.7 - minipass-pipeline: 1.2.4 - p-map: 7.0.4 - ssri: 12.0.0 - tar: 7.5.13 - unique-filename: 4.0.0 - cacheable-lookup@5.0.4: {} cacheable-request@7.0.4: @@ -4501,7 +4051,7 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - caniuse-lite@1.0.30001766: {} + caniuse-lite@1.0.30001793: {} chalk@4.1.2: dependencies: @@ -4520,11 +4070,12 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chokidar@4.0.3: + chokidar@5.0.0: dependencies: - readdirp: 4.1.2 + readdirp: 5.0.0 - chownr@2.0.0: {} + chownr@2.0.0: + optional: true chownr@3.0.0: {} @@ -4534,14 +4085,6 @@ snapshots: ci-info@4.4.0: {} - clean-stack@2.2.0: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 @@ -4563,18 +4106,16 @@ snapshots: dependencies: mimic-response: 1.0.1 - clone@1.0.4: {} - cmake-js@7.4.0: dependencies: - axios: 1.13.4(debug@4.4.3) + axios: 1.16.1(debug@4.4.3) debug: 4.4.3 - fs-extra: 11.3.4 + fs-extra: 11.3.5 memory-stream: 1.0.0 - node-api-headers: 1.8.0 + node-api-headers: 1.9.0 npmlog: 6.0.2 rc: 1.2.8 - semver: 7.7.3 + semver: 7.8.1 tar: 6.2.1 url-join: 4.0.1 which: 2.0.2 @@ -4633,7 +4174,7 @@ snapshots: csstype@3.2.3: {} - date-fns@4.1.0: {} + date-fns@4.3.0: {} debug@4.4.3: dependencies: @@ -4646,12 +4187,22 @@ snapshots: deep-extend@0.6.0: optional: true - defaults@1.0.4: - dependencies: - clone: 1.0.4 - defer-to-connect@2.0.1: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + optional: true + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + optional: true + delayed-stream@1.0.0: {} delegates@1.0.0: @@ -4659,26 +4210,28 @@ snapshots: detect-libc@2.1.2: {} + detect-node@2.1.0: + optional: true + dir-compare@4.2.0: dependencies: - minimatch: 3.1.2 + minimatch: 3.1.5 p-limit: 3.1.0 dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dmg-builder@26.0.20(electron-builder-squirrel-windows@26.4.0): + dmg-builder@26.8.1(electron-builder-squirrel-windows@26.8.1): dependencies: - app-builder-lib: 26.0.20(dmg-builder@26.0.20)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.0.20 + app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) + builder-util: 26.8.1 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.1 optionalDependencies: dmg-license: 1.0.11 transitivePeerDependencies: - - bluebird - electron-builder-squirrel-windows - supports-color @@ -4686,10 +4239,10 @@ snapshots: dependencies: '@types/plist': 3.0.5 '@types/verror': 1.10.11 - ajv: 6.12.6 + ajv: 6.15.0 crc: 3.8.0 iconv-corefoundation: 1.1.7 - plist: 3.1.0 + plist: 3.1.1 smart-buffer: 4.2.0 verror: 1.10.1 optional: true @@ -4706,35 +4259,32 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} - ejs@3.1.10: dependencies: jake: 10.9.4 - electron-builder-squirrel-windows@26.4.0(dmg-builder@26.0.20): + electron-builder-squirrel-windows@26.8.1(dmg-builder@26.8.1): dependencies: - app-builder-lib: 26.4.0(dmg-builder@26.0.20)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.3.4 + app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) + builder-util: 26.8.1 electron-winstaller: 5.4.0 transitivePeerDependencies: - dmg-builder - supports-color - electron-builder@26.0.20(electron-builder-squirrel-windows@26.4.0): + electron-builder@26.8.1(electron-builder-squirrel-windows@26.8.1): dependencies: - app-builder-lib: 26.0.20(dmg-builder@26.0.20)(electron-builder-squirrel-windows@26.4.0) - builder-util: 26.0.20 - builder-util-runtime: 9.4.0 + app-builder-lib: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) + builder-util: 26.8.1 + builder-util-runtime: 9.5.1 chalk: 4.1.2 ci-info: 4.4.0 - dmg-builder: 26.0.20(electron-builder-squirrel-windows@26.4.0) + dmg-builder: 26.8.1(electron-builder-squirrel-windows@26.8.1) fs-extra: 10.1.0 lazy-val: 1.0.5 simple-update-notifier: 2.0.0 yargs: 17.7.2 transitivePeerDependencies: - - bluebird - electron-builder-squirrel-windows - supports-color @@ -4752,23 +4302,10 @@ snapshots: electron-is-dev@3.0.1: {} - electron-publish@26.0.20: + electron-publish@26.8.1: dependencies: '@types/fs-extra': 9.0.13 - builder-util: 26.0.20 - builder-util-runtime: 9.4.0 - chalk: 4.1.2 - form-data: 4.0.5 - fs-extra: 10.1.0 - lazy-val: 1.0.5 - mime: 2.6.0 - transitivePeerDependencies: - - supports-color - - electron-publish@26.3.4: - dependencies: - '@types/fs-extra': 9.0.13 - builder-util: 26.3.4 + builder-util: 26.8.1 builder-util-runtime: 9.5.1 chalk: 4.1.2 form-data: 4.0.5 @@ -4778,7 +4315,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron-to-chromium@1.5.282: {} + electron-to-chromium@1.5.363: {} electron-updater@6.8.3: dependencies: @@ -4788,7 +4325,7 @@ snapshots: lazy-val: 1.0.5 lodash.escaperegexp: 4.1.2 lodash.isequal: 4.5.0 - semver: 7.7.3 + semver: 7.7.4 tiny-typed-emitter: 2.1.0 transitivePeerDependencies: - supports-color @@ -4798,17 +4335,17 @@ snapshots: '@electron/asar': 3.4.1 debug: 4.4.3 fs-extra: 7.0.1 - lodash: 4.17.23 + lodash: 4.18.1 temp: 0.9.4 optionalDependencies: '@electron/windows-sign': 1.2.2 transitivePeerDependencies: - supports-color - electron@42.0.1: + electron@42.3.0: dependencies: '@electron/get': 5.0.0 - '@types/node': 24.12.0 + '@types/node': 24.12.4 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -4817,19 +4354,14 @@ snapshots: emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - end-of-stream@1.4.5: dependencies: once: 1.4.0 entities@6.0.1: {} + entities@8.0.0: {} + env-paths@2.2.1: {} env-paths@3.0.0: {} @@ -4840,7 +4372,7 @@ snapshots: es-errors@1.3.0: {} - es-object-atoms@1.1.1: + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -4849,7 +4381,10 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.3 + + es6-error@4.1.1: + optional: true esbuild@0.17.19: optionalDependencies: @@ -4876,39 +4411,42 @@ snapshots: '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 - esbuild@0.27.2: + esbuild@0.28.0: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 + '@esbuild/aix-ppc64': 0.28.0 + '@esbuild/android-arm': 0.28.0 + '@esbuild/android-arm64': 0.28.0 + '@esbuild/android-x64': 0.28.0 + '@esbuild/darwin-arm64': 0.28.0 + '@esbuild/darwin-x64': 0.28.0 + '@esbuild/freebsd-arm64': 0.28.0 + '@esbuild/freebsd-x64': 0.28.0 + '@esbuild/linux-arm': 0.28.0 + '@esbuild/linux-arm64': 0.28.0 + '@esbuild/linux-ia32': 0.28.0 + '@esbuild/linux-loong64': 0.28.0 + '@esbuild/linux-mips64el': 0.28.0 + '@esbuild/linux-ppc64': 0.28.0 + '@esbuild/linux-riscv64': 0.28.0 + '@esbuild/linux-s390x': 0.28.0 + '@esbuild/linux-x64': 0.28.0 + '@esbuild/netbsd-arm64': 0.28.0 + '@esbuild/netbsd-x64': 0.28.0 + '@esbuild/openbsd-arm64': 0.28.0 + '@esbuild/openbsd-x64': 0.28.0 + '@esbuild/openharmony-arm64': 0.28.0 + '@esbuild/sunos-x64': 0.28.0 + '@esbuild/win32-arm64': 0.28.0 + '@esbuild/win32-ia32': 0.28.0 + '@esbuild/win32-x64': 0.28.0 escalade@3.2.0: {} escape-goat@4.0.0: {} + escape-string-regexp@4.0.0: + optional: true + escape-string-regexp@5.0.0: {} exponential-backoff@3.1.3: {} @@ -4926,7 +4464,7 @@ snapshots: dependencies: debug: 4.4.3 get-stream: 5.2.0 - yauzl: 2.10.0 + yauzl: 3.3.1 optionalDependencies: '@types/yauzl': 2.10.3 transitivePeerDependencies: @@ -4951,15 +4489,11 @@ snapshots: dependencies: reusify: 1.1.0 - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 - filelist@1.0.4: + filelist@1.0.6: dependencies: minimatch: 5.1.9 @@ -4967,34 +4501,31 @@ snapshots: dependencies: to-regex-range: 5.0.1 - follow-redirects@1.15.11(debug@4.4.3): + find-up-simple@1.0.1: {} + + follow-redirects@1.16.0(debug@4.4.3): optionalDependencies: debug: 4.4.3 optional: true - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.2 + hasown: 2.0.3 mime-types: 2.1.35 fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 - fs-extra@11.3.4: + fs-extra@11.3.5: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs-extra@7.0.1: @@ -5013,16 +4544,13 @@ snapshots: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.3 + optional: true fs.realpath@1.0.0: {} @@ -5047,63 +4575,58 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} + get-east-asian-width@1.6.0: {} get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 math-intrinsics: 1.1.0 get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 get-stream@5.2.0: dependencies: - pump: 3.0.3 - - get-tsconfig@4.13.0: - dependencies: - resolve-pkg-maps: 1.0.0 + pump: 3.0.4 glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.9 - minipass: 7.1.3 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: + global-agent@3.0.0: dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.9 - once: 1.4.0 + boolean: 3.2.0 + es6-error: 4.1.1 + matcher: 3.0.0 + roarr: 2.15.4 + semver: 7.7.4 + serialize-error: 7.0.1 + optional: true + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + optional: true globby@10.0.1: dependencies: @@ -5145,6 +4668,11 @@ snapshots: has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + optional: true + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -5154,7 +4682,7 @@ snapshots: has-unicode@2.0.1: optional: true - hasown@2.0.2: + hasown@2.0.3: dependencies: function-bind: 1.1.2 @@ -5170,14 +4698,6 @@ snapshots: http-cache-semantics@4.2.0: {} - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -5196,6 +4716,7 @@ snapshots: debug: 4.4.3 transitivePeerDependencies: - supports-color + optional: true https-proxy-agent@7.0.6: dependencies: @@ -5204,10 +4725,6 @@ snapshots: transitivePeerDependencies: - supports-color - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - iconv-corefoundation@1.1.7: dependencies: cli-truncate: 2.1.0 @@ -5220,20 +4737,15 @@ snapshots: idb@7.1.1: {} - ieee754@1.2.1: {} + ieee754@1.2.1: + optional: true ignore@5.3.2: {} - immutable@5.1.4: {} + immutable@5.1.5: {} import-meta-resolve@4.2.0: {} - imurmurhash@0.1.4: {} - - indent-string@4.0.0: {} - - infer-owner@1.0.4: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -5244,15 +4756,13 @@ snapshots: ini@1.3.8: optional: true - ip-address@10.1.0: {} - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 is-extglob@2.1.1: {} @@ -5264,39 +4774,29 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-interactive@1.0.0: {} - - is-lambda@1.0.1: {} - is-number@7.0.0: {} is-plain-obj@1.1.0: {} is-plain-object@3.0.1: {} - is-unicode-supported@0.1.0: {} - isbinaryfile@4.0.10: {} isbinaryfile@5.0.7: {} isexe@2.0.0: {} - isexe@3.1.1: {} + isexe@3.1.5: {} - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + isexe@4.0.0: {} jake@10.9.4: dependencies: async: 3.2.6 - filelist: 1.0.4 + filelist: 1.0.6 picocolors: 1.1.1 - jiti@2.6.1: {} + jiti@2.7.0: {} js-tokens@10.0.0: {} @@ -5312,13 +4812,16 @@ snapshots: json-schema-traverse@0.4.1: {} + json-stringify-safe@5.0.1: + optional: true + json5@2.2.3: {} jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.2.0: + jsonfile@6.2.1: dependencies: universalify: 2.0.1 optionalDependencies: @@ -5328,74 +4831,67 @@ snapshots: dependencies: json-buffer: 3.0.1 - koffi@2.15.6: {} + koffi@2.16.2: {} lazy-val@1.0.5: {} - lightningcss-android-arm64@1.31.1: + lightningcss-android-arm64@1.32.0: optional: true - lightningcss-darwin-arm64@1.31.1: + lightningcss-darwin-arm64@1.32.0: optional: true - lightningcss-darwin-x64@1.31.1: + lightningcss-darwin-x64@1.32.0: optional: true - lightningcss-freebsd-x64@1.31.1: + lightningcss-freebsd-x64@1.32.0: optional: true - lightningcss-linux-arm-gnueabihf@1.31.1: + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.31.1: + lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-musl@1.31.1: + lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.31.1: + lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-x64-musl@1.31.1: + lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.31.1: + lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-x64-msvc@1.31.1: + lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.31.1: + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.31.1 - lightningcss-darwin-arm64: 1.31.1 - lightningcss-darwin-x64: 1.31.1 - lightningcss-freebsd-x64: 1.31.1 - lightningcss-linux-arm-gnueabihf: 1.31.1 - lightningcss-linux-arm64-gnu: 1.31.1 - lightningcss-linux-arm64-musl: 1.31.1 - lightningcss-linux-x64-gnu: 1.31.1 - lightningcss-linux-x64-musl: 1.31.1 - lightningcss-win32-arm64-msvc: 1.31.1 - lightningcss-win32-x64-msvc: 1.31.1 + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 lodash.escaperegexp@4.1.2: {} lodash.isequal@4.5.0: {} - lodash@4.17.23: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 + lodash@4.18.1: {} lowercase-keys@2.0.0: {} - lru-cache@10.4.3: {} - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -5406,51 +4902,18 @@ snapshots: lru-cache@7.18.3: {} - lucide-solid@0.475.0(solid-js@1.9.12): + lucide-solid@1.16.0(solid-js@1.9.13): dependencies: - solid-js: 1.9.12 + solid-js: 1.9.13 magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - make-fetch-happen@10.2.1: + matcher@3.0.0: dependencies: - agentkeepalive: 4.6.0 - cacache: 16.1.3 - http-cache-semantics: 4.2.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 7.18.3 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 2.1.2 - minipass-flush: 1.0.7 - minipass-pipeline: 1.2.4 - negotiator: 0.6.4 - promise-retry: 2.0.1 - socks-proxy-agent: 7.0.0 - ssri: 9.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - - make-fetch-happen@14.0.3: - dependencies: - '@npmcli/agent': 3.0.0 - cacache: 19.0.1 - http-cache-semantics: 4.2.0 - minipass: 7.1.3 - minipass-fetch: 4.0.1 - minipass-flush: 1.0.7 - minipass-pipeline: 1.2.4 - negotiator: 1.0.0 - proc-log: 5.0.0 - promise-retry: 2.0.1 - ssri: 12.0.0 - transitivePeerDependencies: - - supports-color + escape-string-regexp: 4.0.0 + optional: true math-intrinsics@1.1.0: {} @@ -5464,7 +4927,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -5476,75 +4939,35 @@ snapshots: mime@2.6.0: {} - mimic-fn@2.1.0: {} - mimic-response@1.0.1: {} mimic-response@3.1.0: {} - minimatch@10.1.1: + minimatch@10.2.5: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.6 - minimatch@10.2.4: + minimatch@3.1.5: dependencies: - brace-expansion: 5.0.5 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 + brace-expansion: 1.1.15 minimatch@5.1.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.1 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.1 minimist@1.2.8: {} - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.3 - - minipass-fetch@2.1.2: - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - - minipass-fetch@4.0.1: - dependencies: - minipass: 7.1.3 - minipass-sized: 1.0.3 - minizlib: 3.1.0 - optionalDependencies: - encoding: 0.1.13 - - minipass-flush@1.0.7: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - minipass@3.3.6: dependencies: yallist: 4.0.0 + optional: true - minipass@5.0.0: {} + minipass@5.0.0: + optional: true minipass@7.1.3: {} @@ -5552,6 +4975,7 @@ snapshots: dependencies: minipass: 3.3.6 yallist: 4.0.0 + optional: true minizlib@3.1.0: dependencies: @@ -5561,28 +4985,21 @@ snapshots: dependencies: minimist: 1.2.8 - mkdirp@1.0.4: {} + mkdirp@1.0.4: + optional: true - mlly@1.8.0: + mlly@1.8.2: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 - ufo: 1.6.3 + ufo: 1.6.4 ms@2.1.3: {} - negotiator@0.6.4: {} - - negotiator@1.0.0: {} - neo-async@2.6.2: {} - node-abi@3.89.0: - dependencies: - semver: 7.7.4 - - node-abi@4.28.0: + node-abi@4.31.0: dependencies: semver: 7.7.4 @@ -5592,40 +5009,34 @@ snapshots: node-addon-api@7.1.1: optional: true - node-addon-api@8.5.0: + node-addon-api@8.8.0: optional: true - node-api-headers@1.8.0: + node-api-headers@1.9.0: optional: true node-api-version@0.2.1: dependencies: semver: 7.7.4 - node-gyp@11.5.0: + node-gyp@12.3.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.3 graceful-fs: 4.2.11 - make-fetch-happen: 14.0.3 - nopt: 8.1.0 - proc-log: 5.0.0 + nopt: 9.0.0 + proc-log: 6.1.0 semver: 7.7.4 - tar: 7.5.13 - tinyglobby: 0.2.15 - which: 5.0.0 - transitivePeerDependencies: - - supports-color + tar: 7.5.15 + tinyglobby: 0.2.16 + undici: 6.26.0 + which: 6.0.1 - node-releases@2.0.27: {} + node-releases@2.0.46: {} - nopt@6.0.0: + nopt@9.0.0: dependencies: - abbrev: 1.1.1 - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 + abbrev: 4.0.0 normalize-path@3.0.0: {} @@ -5639,49 +5050,28 @@ snapshots: set-blocking: 2.0.0 optional: true + object-keys@1.1.1: + optional: true + obug@2.1.1: {} once@1.4.0: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - p-cancelable@2.1.1: {} p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - - p-map@7.0.4: {} - - package-json-from-dist@1.0.1: {} - parse5@7.3.0: dependencies: entities: 6.0.1 - parse5@8.0.0: + parse5@8.0.1: dependencies: - entities: 6.0.1 + entities: 8.0.0 path-exists@5.0.0: {} @@ -5691,11 +5081,6 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.3 - path-type@4.0.0: {} pathe@2.0.3: {} @@ -5706,10 +5091,7 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} - - picomatch@4.0.3: - optional: true + picomatch@2.3.2: {} picomatch@4.0.4: {} @@ -5721,37 +5103,46 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.0 + mlly: 1.8.2 pathe: 2.0.3 plist@3.1.0: dependencies: - '@xmldom/xmldom': 0.8.11 + '@xmldom/xmldom': 0.8.13 base64-js: 1.5.1 xmlbuilder: 15.1.1 + plist@3.1.1: + dependencies: + '@xmldom/xmldom': 0.9.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + optional: true + postject@1.0.0-alpha.6: dependencies: commander: 9.5.0 optional: true - proc-log@2.0.1: {} - - proc-log@5.0.0: {} + proc-log@6.1.0: {} progress@2.0.3: {} - promise-inflight@1.0.1: {} - promise-retry@2.0.1: dependencies: err-code: 2.0.3 retry: 0.12.0 - proxy-from-env@1.1.0: + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + proxy-from-env@2.1.0: optional: true - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -5785,12 +5176,13 @@ snapshots: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + optional: true readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 - readdirp@4.1.2: {} + readdirp@5.0.0: {} require-directory@2.1.1: {} @@ -5800,11 +5192,10 @@ snapshots: resolve-alpn@1.2.1: {} - resolve-pkg-maps@1.0.0: {} - - resolve@1.22.11: + resolve@1.22.12: dependencies: - is-core-module: 2.16.1 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -5812,11 +5203,6 @@ snapshots: dependencies: lowercase-keys: 2.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - retry@0.12.0: {} reusify@1.1.0: {} @@ -5825,9 +5211,15 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@3.0.2: + roarr@2.15.4: dependencies: - glob: 7.2.3 + boolean: 3.2.0 + detect-node: 2.1.0 + globalthis: 1.0.4 + json-stringify-safe: 5.0.1 + semver-compare: 1.0.0 + sprintf-js: 1.1.3 + optional: true rolldown@1.0.0-beta.1: dependencies: @@ -5846,26 +5238,26 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.1 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.1 - rolldown@1.0.0-rc.15: + rolldown@1.0.3: dependencies: - '@oxc-project/types': 0.124.0 - '@rolldown/pluginutils': 1.0.0-rc.15 + '@oxc-project/types': 0.133.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-x64': 1.0.0-rc.15 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 rollup-plugin-copy@3.5.0: dependencies: @@ -5879,7 +5271,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 - safe-buffer@5.2.1: {} + safe-buffer@5.2.1: + optional: true safer-buffer@2.1.2: {} @@ -5887,29 +5280,37 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 - sass@1.97.3: + sass@1.100.0: dependencies: - chokidar: 4.0.3 - immutable: 5.1.4 + chokidar: 5.0.0 + immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 - sax@1.4.4: {} + sax@1.6.0: {} + + semver-compare@1.0.0: + optional: true semver@5.7.2: {} semver@6.3.1: {} - semver@7.7.3: {} - semver@7.7.4: {} - seroval-plugins@1.5.0(seroval@1.5.0): - dependencies: - seroval: 1.5.0 + semver@7.8.1: {} - seroval@1.5.0: {} + serialize-error@7.0.1: + dependencies: + type-fest: 0.13.1 + optional: true + + seroval-plugins@1.5.4(seroval@1.5.4): + dependencies: + seroval: 1.5.4 + + seroval@1.5.4: {} set-blocking@2.0.0: optional: true @@ -5922,11 +5323,9 @@ snapshots: signal-exit@3.0.7: {} - signal-exit@4.1.0: {} - simple-update-notifier@2.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.1 slash@3.0.0: {} @@ -5942,48 +5341,28 @@ snapshots: ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 - smart-buffer@4.2.0: {} - - socks-proxy-agent@7.0.0: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.1.0 - smart-buffer: 4.2.0 + smart-buffer@4.2.0: + optional: true solid-js@1.6.16: dependencies: csstype: 3.2.3 - solid-js@1.9.12: + solid-js@1.9.13: dependencies: csstype: 3.2.3 - seroval: 1.5.0 - seroval-plugins: 1.5.0(seroval@1.5.0) + seroval: 1.5.4 + seroval-plugins: 1.5.4(seroval@1.5.4) - solid-motionone@1.0.4(solid-js@1.9.12): + solid-motionone@1.0.4(solid-js@1.9.13): dependencies: '@motionone/dom': 10.18.0 '@motionone/utils': 10.18.0 - '@solid-primitives/props': 3.2.2(solid-js@1.9.12) - '@solid-primitives/refs': 1.1.2(solid-js@1.9.12) - '@solid-primitives/transition-group': 1.1.2(solid-js@1.9.12) + '@solid-primitives/props': 3.2.3(solid-js@1.9.13) + '@solid-primitives/refs': 1.1.3(solid-js@1.9.13) + '@solid-primitives/transition-group': 1.1.2(solid-js@1.9.13) csstype: 3.2.3 - solid-js: 1.9.12 + solid-js: 1.9.13 sort-keys-length@1.0.1: dependencies: @@ -6006,13 +5385,8 @@ snapshots: spitroast@2.1.6: {} - ssri@12.0.0: - dependencies: - minipass: 7.1.3 - - ssri@9.0.1: - dependencies: - minipass: 3.3.6 + sprintf-js@1.1.3: + optional: true stat-mode@1.0.0: {} @@ -6022,30 +5396,21 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.2.0 - string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 + optional: true strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -6073,8 +5438,9 @@ snapshots: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 + optional: true - tar@7.5.13: + tar@7.5.15: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -6098,16 +5464,16 @@ snapshots: tiny-typed-emitter@2.1.0: {} - tinyglobby@0.2.15: + tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 tmp-promise@3.0.3: dependencies: - tmp: 0.2.5 + tmp: 0.2.7 - tmp@0.2.5: {} + tmp@0.2.7: {} to-regex-range@5.0.1: dependencies: @@ -6119,43 +5485,31 @@ snapshots: tslib@2.8.1: {} - tsx@4.21.0: + tsx@4.22.3: dependencies: - esbuild: 0.27.2 - get-tsconfig: 4.13.0 + esbuild: 0.28.0 optionalDependencies: fsevents: 2.3.3 - typescript@5.9.3: {} + type-fest@0.13.1: + optional: true - ufo@1.6.3: {} + typescript@6.0.3: {} + + ufo@1.6.4: {} uglify-js@3.19.3: optional: true - undici-types@6.21.0: {} - undici-types@7.16.0: {} - undici@7.25.0: + undici-types@7.24.6: {} + + undici@6.26.0: {} + + undici@7.26.0: optional: true - unique-filename@2.0.1: - dependencies: - unique-slug: 3.0.0 - - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-slug@3.0.0: - dependencies: - imurmurhash: 0.1.4 - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 - universalify@0.1.2: {} universalify@2.0.1: {} @@ -6165,9 +5519,9 @@ snapshots: escape-string-regexp: 5.0.0 path-exists: 5.0.0 - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -6180,7 +5534,8 @@ snapshots: utf8-byte-length@1.0.5: {} - util-deprecate@1.0.2: {} + util-deprecate@1.0.2: + optional: true verror@1.10.1: dependencies: @@ -6189,17 +5544,17 @@ snapshots: extsprintf: 1.4.1 optional: true - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - which@2.0.2: dependencies: isexe: 2.0.0 which@5.0.0: dependencies: - isexe: 3.1.1 + isexe: 3.1.5 + + which@6.0.1: + dependencies: + isexe: 4.0.0 wide-align@1.1.5: dependencies: @@ -6214,21 +5569,15 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.2.0 - wrappy@1.0.2: {} - ws@8.20.0: {} + ws@8.21.0: {} xml-formatter@3.7.0: dependencies: - xml-parser-xo: 4.1.5 + xml-parser-xo: 4.1.6 - xml-parser-xo@4.1.5: {} + xml-parser-xo@4.1.6: {} xmlbuilder@15.1.1: {} @@ -6252,10 +5601,10 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@2.10.0: + yauzl@3.3.1: dependencies: buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 + pend: 1.2.0 yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..a96c2de --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,9 @@ +allowBuilds: + "@parcel/watcher": true + "@vencord/venmic": true + electron-winstaller: true + esbuild: true + koffi: true + +overrides: + yauzl: "^3.3.1" # Electron still can't get their shit together https://github.com/electron/electron/issues/51619 From bc3f46258cc052e6f473da60d18685e138a788b0 Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 28 May 2026 19:06:17 -0400 Subject: [PATCH 22/96] fix script --- electron-builder.ts | 4 ++- package.json | 1 + pnpm-lock.yaml | 19 ++++++------ .../build/{sandboxFix.cjs => sandboxFix.mjs} | 31 ++++++++++--------- 4 files changed, 30 insertions(+), 25 deletions(-) rename scripts/build/{sandboxFix.cjs => sandboxFix.mjs} (77%) diff --git a/electron-builder.ts b/electron-builder.ts index d836f87..7926c66 100644 --- a/electron-builder.ts +++ b/electron-builder.ts @@ -1,10 +1,12 @@ import type { Configuration } from "electron-builder"; +import { applyAppImageSandboxFix } from "./scripts/build/sandboxFix.mjs"; + export const config: Configuration = { appId: "app.legcord.Legcord", productName: "Legcord", artifactName: "Legcord-${version}-${os}-${arch}.${ext}", - beforePack: "./scripts/build/sandboxFix.cjs", + beforePack: applyAppImageSandboxFix, protocols: [ { name: "Discord", diff --git a/package.json b/package.json index 87eaca8..787e768 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@types/ws": "^8.18.1", "@uwu/lune": "^1.6.2", "@uwu/shelter-defs": "^1.5.1", + "app-builder-lib": "^26.8.1", "babel-preset-solid": "^1.9.12", "electron": "42.3.0", "electron-builder": "26.8.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94ebe7d..d6556a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,6 +60,9 @@ importers: '@uwu/shelter-defs': specifier: ^1.5.1 version: 1.5.1 + app-builder-lib: + specifier: ^26.8.1 + version: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) babel-preset-solid: specifier: ^1.9.12 version: 1.9.12(@babel/core@8.0.0-rc.6)(solid-js@1.9.13) @@ -3200,7 +3203,7 @@ snapshots: fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color @@ -3223,7 +3226,7 @@ snapshots: dir-compare: 4.2.0 fs-extra: 11.3.5 minimatch: 9.0.9 - plist: 3.1.0 + plist: 3.1.1 transitivePeerDependencies: - supports-color @@ -3807,8 +3810,7 @@ snapshots: '@xmldom/xmldom@0.8.13': {} - '@xmldom/xmldom@0.9.10': - optional: true + '@xmldom/xmldom@0.9.10': {} abbrev@4.0.0: {} @@ -4618,7 +4620,7 @@ snapshots: es6-error: 4.1.1 matcher: 3.0.0 roarr: 2.15.4 - semver: 7.7.4 + semver: 7.8.1 serialize-error: 7.0.1 optional: true @@ -5001,7 +5003,7 @@ snapshots: node-abi@4.31.0: dependencies: - semver: 7.7.4 + semver: 7.8.1 node-addon-api@1.7.2: optional: true @@ -5017,7 +5019,7 @@ snapshots: node-api-version@0.2.1: dependencies: - semver: 7.7.4 + semver: 7.8.1 node-gyp@12.3.0: dependencies: @@ -5026,7 +5028,7 @@ snapshots: graceful-fs: 4.2.11 nopt: 9.0.0 proc-log: 6.1.0 - semver: 7.7.4 + semver: 7.8.1 tar: 7.5.15 tinyglobby: 0.2.16 undici: 6.26.0 @@ -5117,7 +5119,6 @@ snapshots: '@xmldom/xmldom': 0.9.10 base64-js: 1.5.1 xmlbuilder: 15.1.1 - optional: true postject@1.0.0-alpha.6: dependencies: diff --git a/scripts/build/sandboxFix.cjs b/scripts/build/sandboxFix.mjs similarity index 77% rename from scripts/build/sandboxFix.cjs rename to scripts/build/sandboxFix.mjs index bf118fd..713122f 100644 --- a/scripts/build/sandboxFix.cjs +++ b/scripts/build/sandboxFix.mjs @@ -6,33 +6,36 @@ // Based on https://github.com/gergof/electron-builder-sandbox-fix/blob/master/lib/index.js -const fs = require("node:fs/promises"); -const path = require("node:path"); +import fs from "fs/promises"; +import path from "path"; +import AppImageTarget from "app-builder-lib/out/targets/appimage/AppImageTarget.js"; + let isApplied = false; -const hook = async () => { - if (isApplied) return; - isApplied = true; +export async function applyAppImageSandboxFix() { if (process.platform !== "linux") { // this fix is only required on linux return; } - const AppImageTarget = require("app-builder-lib/out/targets/AppImageTarget.js"); + + if (isApplied) return; + isApplied = true; + const oldBuildMethod = AppImageTarget.default.prototype.build; AppImageTarget.default.prototype.build = async function (...args) { console.log("Running AppImage builder hook", args); const oldPath = args[0]; - const newPath = `${oldPath}-appimage-sandbox-fix`; + const newPath = oldPath + "-appimage-sandbox-fix"; // just in case try { await fs.rm(newPath, { - recursive: true, + recursive: true }); } catch {} console.log("Copying to apply appimage fix", oldPath, newPath); await fs.cp(oldPath, newPath, { - recursive: true, + recursive: true }); args[0] = newPath; @@ -53,22 +56,20 @@ exec "$SCRIPT_DIR/${this.packager.executableName}.bin" "$([ "$IS_STEAMOS" == 1 ] `.trim(); try { - await fs.rename(executable, `${executable}.bin`); + await fs.rename(executable, executable + ".bin"); await fs.writeFile(executable, loaderScript); await fs.chmod(executable, 0o755); } catch (e) { - console.error(`failed to create loder for sandbox fix: ${e.message}`); + console.error("failed to create loder for sandbox fix: " + e.message); throw new Error("Failed to create loader for sandbox fix"); } const ret = await oldBuildMethod.apply(this, args); await fs.rm(newPath, { - recursive: true, + recursive: true }); return ret; }; -}; - -module.exports = hook; +} \ No newline at end of file From b1876a11b6a543e849d7d484dbaaad6b700f359a Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 28 May 2026 22:18:13 -0400 Subject: [PATCH 23/96] drop tsx node 26 natively supports type stripping --- package.json | 8 +- pnpm-lock.yaml | 285 +------------------------------------------------ 2 files changed, 7 insertions(+), 286 deletions(-) diff --git a/package.json b/package.json index 787e768..bf76647 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,9 @@ "node": ">=22" }, "scripts": { - "build:dev": "rollup -c --environment BUILD:dev && tsx scripts/copyVenmic.mts", + "build:dev": "rollup -c --environment BUILD:dev && node scripts/copyVenmic.mts", "build:plugins": "lune ci --repoSubDir src/shelter --to ts-out/plugins", - "build": "pnpm build:plugins && rolldown -c rolldown.config.js && tsx scripts/copyVenmic.mts", + "build": "pnpm build:plugins && rolldown -c rolldown.config.js && node scripts/copyVenmic.mts", "start": "pnpm run build && electron --trace-warnings --ozone-platform-hint=auto ./ts-out/main.js", "startThemeManager": "pnpm run build:dev && electron ./ts-out/main.js themes", "package": "pnpm run build && electron-builder", @@ -18,7 +18,7 @@ "lint:fix": "biome check --write", "postinstall": "electron-builder install-app-deps", "CIbuild": "pnpm run build && electron-builder --linux zip && electron-builder --windows zip && electron-builder --macos zip", - "updateMeta": "tsx scripts/utils/updateMeta.mts" + "updateMeta": "node scripts/utils/updateMeta.mts" }, "repository": { "type": "git", @@ -40,6 +40,7 @@ "@types/ws": "^8.18.1", "@uwu/lune": "^1.6.2", "@uwu/shelter-defs": "^1.5.1", + "@xmldom/xmldom": "^0.9.10", "app-builder-lib": "^26.8.1", "babel-preset-solid": "^1.9.12", "electron": "42.3.0", @@ -49,7 +50,6 @@ "rollup-plugin-copy": "^3.5.0", "solid-js": "^1.9.13", "solid-motionone": "^1.0.4", - "tsx": "^4.22.3", "typescript": "^6.0.3", "xml-formatter": "^3.7.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6556a2..531a883 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,6 +60,9 @@ importers: '@uwu/shelter-defs': specifier: ^1.5.1 version: 1.5.1 + '@xmldom/xmldom': + specifier: ^0.9.10 + version: 0.9.10 app-builder-lib: specifier: ^26.8.1 version: 26.8.1(dmg-builder@26.8.1)(electron-builder-squirrel-windows@26.8.1) @@ -87,9 +90,6 @@ importers: solid-motionone: specifier: ^1.0.4 version: 1.0.4(solid-js@1.9.13) - tsx: - specifier: ^4.22.3 - version: 4.22.3 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -416,294 +416,138 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@esbuild/aix-ppc64@0.28.0': - resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/android-arm64@0.17.19': resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.28.0': - resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm@0.17.19': resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.28.0': - resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-x64@0.17.19': resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.28.0': - resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/darwin-arm64@0.17.19': resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.28.0': - resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-x64@0.17.19': resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.28.0': - resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/freebsd-arm64@0.17.19': resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.28.0': - resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-x64@0.17.19': resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.28.0': - resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/linux-arm64@0.17.19': resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.28.0': - resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm@0.17.19': resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.28.0': - resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-ia32@0.17.19': resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.28.0': - resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-loong64@0.17.19': resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.28.0': - resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-mips64el@0.17.19': resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.28.0': - resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-ppc64@0.17.19': resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.28.0': - resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-riscv64@0.17.19': resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.28.0': - resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-s390x@0.17.19': resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.28.0': - resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-x64@0.17.19': resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.28.0': - resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.28.0': - resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-x64@0.17.19': resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.28.0': - resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.28.0': - resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-x64@0.17.19': resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.28.0': - resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.28.0': - resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - '@esbuild/sunos-x64@0.17.19': resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.28.0': - resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/win32-arm64@0.17.19': resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.28.0': - resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-ia32@0.17.19': resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.28.0': - resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-x64@0.17.19': resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.28.0': - resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -1620,11 +1464,6 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.28.0: - resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} - engines: {node: '>=18'} - hasBin: true - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2665,11 +2504,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.22.3: - resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} - engines: {node: '>=18.0.0'} - hasBin: true - type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} @@ -3257,150 +3091,72 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.28.0': - optional: true - '@esbuild/android-arm64@0.17.19': optional: true - '@esbuild/android-arm64@0.28.0': - optional: true - '@esbuild/android-arm@0.17.19': optional: true - '@esbuild/android-arm@0.28.0': - optional: true - '@esbuild/android-x64@0.17.19': optional: true - '@esbuild/android-x64@0.28.0': - optional: true - '@esbuild/darwin-arm64@0.17.19': optional: true - '@esbuild/darwin-arm64@0.28.0': - optional: true - '@esbuild/darwin-x64@0.17.19': optional: true - '@esbuild/darwin-x64@0.28.0': - optional: true - '@esbuild/freebsd-arm64@0.17.19': optional: true - '@esbuild/freebsd-arm64@0.28.0': - optional: true - '@esbuild/freebsd-x64@0.17.19': optional: true - '@esbuild/freebsd-x64@0.28.0': - optional: true - '@esbuild/linux-arm64@0.17.19': optional: true - '@esbuild/linux-arm64@0.28.0': - optional: true - '@esbuild/linux-arm@0.17.19': optional: true - '@esbuild/linux-arm@0.28.0': - optional: true - '@esbuild/linux-ia32@0.17.19': optional: true - '@esbuild/linux-ia32@0.28.0': - optional: true - '@esbuild/linux-loong64@0.17.19': optional: true - '@esbuild/linux-loong64@0.28.0': - optional: true - '@esbuild/linux-mips64el@0.17.19': optional: true - '@esbuild/linux-mips64el@0.28.0': - optional: true - '@esbuild/linux-ppc64@0.17.19': optional: true - '@esbuild/linux-ppc64@0.28.0': - optional: true - '@esbuild/linux-riscv64@0.17.19': optional: true - '@esbuild/linux-riscv64@0.28.0': - optional: true - '@esbuild/linux-s390x@0.17.19': optional: true - '@esbuild/linux-s390x@0.28.0': - optional: true - '@esbuild/linux-x64@0.17.19': optional: true - '@esbuild/linux-x64@0.28.0': - optional: true - - '@esbuild/netbsd-arm64@0.28.0': - optional: true - '@esbuild/netbsd-x64@0.17.19': optional: true - '@esbuild/netbsd-x64@0.28.0': - optional: true - - '@esbuild/openbsd-arm64@0.28.0': - optional: true - '@esbuild/openbsd-x64@0.17.19': optional: true - '@esbuild/openbsd-x64@0.28.0': - optional: true - - '@esbuild/openharmony-arm64@0.28.0': - optional: true - '@esbuild/sunos-x64@0.17.19': optional: true - '@esbuild/sunos-x64@0.28.0': - optional: true - '@esbuild/win32-arm64@0.17.19': optional: true - '@esbuild/win32-arm64@0.28.0': - optional: true - '@esbuild/win32-ia32@0.17.19': optional: true - '@esbuild/win32-ia32@0.28.0': - optional: true - '@esbuild/win32-x64@0.17.19': optional: true - '@esbuild/win32-x64@0.28.0': - optional: true - '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.3 @@ -4413,35 +4169,6 @@ snapshots: '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 - esbuild@0.28.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.28.0 - '@esbuild/android-arm': 0.28.0 - '@esbuild/android-arm64': 0.28.0 - '@esbuild/android-x64': 0.28.0 - '@esbuild/darwin-arm64': 0.28.0 - '@esbuild/darwin-x64': 0.28.0 - '@esbuild/freebsd-arm64': 0.28.0 - '@esbuild/freebsd-x64': 0.28.0 - '@esbuild/linux-arm': 0.28.0 - '@esbuild/linux-arm64': 0.28.0 - '@esbuild/linux-ia32': 0.28.0 - '@esbuild/linux-loong64': 0.28.0 - '@esbuild/linux-mips64el': 0.28.0 - '@esbuild/linux-ppc64': 0.28.0 - '@esbuild/linux-riscv64': 0.28.0 - '@esbuild/linux-s390x': 0.28.0 - '@esbuild/linux-x64': 0.28.0 - '@esbuild/netbsd-arm64': 0.28.0 - '@esbuild/netbsd-x64': 0.28.0 - '@esbuild/openbsd-arm64': 0.28.0 - '@esbuild/openbsd-x64': 0.28.0 - '@esbuild/openharmony-arm64': 0.28.0 - '@esbuild/sunos-x64': 0.28.0 - '@esbuild/win32-arm64': 0.28.0 - '@esbuild/win32-ia32': 0.28.0 - '@esbuild/win32-x64': 0.28.0 - escalade@3.2.0: {} escape-goat@4.0.0: {} @@ -5486,12 +5213,6 @@ snapshots: tslib@2.8.1: {} - tsx@4.22.3: - dependencies: - esbuild: 0.28.0 - optionalDependencies: - fsevents: 2.3.3 - type-fest@0.13.1: optional: true From 0d537effa9c306b346878472abef54f856377494 Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 28 May 2026 22:38:11 -0400 Subject: [PATCH 24/96] fix startup crash I don't know why ms is needed --- package.json | 3 ++- pnpm-lock.yaml | 3 +++ rolldown.config.js => rolldown.config.ts | 0 tsconfig.json | 9 +++++---- 4 files changed, 10 insertions(+), 5 deletions(-) rename rolldown.config.js => rolldown.config.ts (100%) diff --git a/package.json b/package.json index bf76647..3bccd21 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "build:dev": "rollup -c --environment BUILD:dev && node scripts/copyVenmic.mts", "build:plugins": "lune ci --repoSubDir src/shelter --to ts-out/plugins", - "build": "pnpm build:plugins && rolldown -c rolldown.config.js && node scripts/copyVenmic.mts", + "build": "pnpm build:plugins && rolldown -c rolldown.config.ts && node scripts/copyVenmic.mts", "start": "pnpm run build && electron --trace-warnings --ozone-platform-hint=auto ./ts-out/main.js", "startThemeManager": "pnpm run build:dev && electron ./ts-out/main.js themes", "package": "pnpm run build && electron-builder", @@ -59,6 +59,7 @@ "electron-context-menu": "^4.1.2", "electron-is-dev": "^3.0.1", "electron-updater": "^6.8.3", + "ms": "^2.1.3", "spitroast": "^2.1.6", "tslib": "^2.8.1", "ws": "^8.21.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 531a883..eafba75 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,6 +26,9 @@ importers: electron-updater: specifier: ^6.8.3 version: 6.8.3 + ms: + specifier: ^2.1.3 + version: 2.1.3 spitroast: specifier: ^2.1.6 version: 2.1.6 diff --git a/rolldown.config.js b/rolldown.config.ts similarity index 100% rename from rolldown.config.js rename to rolldown.config.ts diff --git a/tsconfig.json b/tsconfig.json index a1c42c2..d766be7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,16 +4,17 @@ "noUnusedLocals": true, "noUnusedParameters": true, "strict": true, - "module": "NodeNext", - "moduleResolution": "NodeNext", + "module": "esnext", + "moduleResolution": "bundler", "rootDir": "src", "lib": ["ESNext", "DOM", "DOM.Iterable"], "target": "ESNext", "jsx": "preserve", "jsxImportSource": "solid-js", "sourceMap": true, - "noEmit": true + "noEmit": true, + "allowImportingTsExtensions": true }, - "include": ["src/**/*"], + "include": ["src/**/*", "scripts/**/*"], "exclude": ["node_modules", "dist"] } From 98eafab83ccab93978a658ab47e58596cb8c929d Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 28 May 2026 22:47:56 -0400 Subject: [PATCH 25/96] remove dependabot --- .github/dependabot.yml | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 91c195b..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - - package-ecosystem: npm - directory: "/" - schedule: - interval: monthly - time: "13:00" - open-pull-requests-limit: 99 - versioning-strategy: increase From fbc9d723920eed86303f046f964625725154f9e3 Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 28 May 2026 22:59:28 -0400 Subject: [PATCH 26/96] update actions --- .github/workflows/lint.yml | 4 +- .github/workflows/meta.yml | 8 +- .github/workflows/package.yml | 217 +++++++++++++++++----------------- 3 files changed, 113 insertions(+), 116 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6c9f7ec..7c38240 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,10 +7,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Biome uses: biomejs/setup-biome@v2 - with: - version: 1.9.4 - name: Run Biome run: biome ci . --reporter=github diff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml index b5225d5..b199551 100644 --- a/.github/workflows/meta.yml +++ b/.github/workflows/meta.yml @@ -13,14 +13,14 @@ jobs: update: runs-on: ubuntu-latest env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 # Install pnpm using packageManager key in package.json + - uses: actions/checkout@v6 + - uses: pnpm/action-setup@v6 # Install pnpm using packageManager key in package.json - name: Use Node.js 22 - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version-file: package.json cache: pnpm diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 3e50acf..326c821 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -1,122 +1,121 @@ name: Package on: push: - branches: - - dev - - stable + branches: + - dev + - stable jobs: - package: - continue-on-error: true - strategy: - matrix: - os: [macos-latest, windows-latest, ubuntu-latest] - runs-on: ${{matrix.os}} + package: + continue-on-error: true + strategy: + matrix: + os: [macos-latest, windows-latest, ubuntu-latest] + runs-on: ${{matrix.os}} + env: + SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }} + GH_TOKEN: ${{secrets.GITHUB_TOKEN}} + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Add commit to version + if: github.ref_name == 'dev' + run: cat <<< $(jq --arg ver "$(jq -r '.version' package.json)-$(git rev-parse --short HEAD)" '.version = $ver' package.json) > package.json + shell: bash + + - name: Prepare PNPM + uses: pnpm/action-setup@v6 + + - name: Prepare Node.js + uses: actions/setup-node@v6 + with: + node-version-file: package.json + cache: pnpm + + - name: Install dependencies + run: pnpm i + + - name: Build TypeScript + run: pnpm build + + - name: Install SnapCraft + if: matrix.os == 'macos-latest' + uses: samuelmeuli/action-snapcraft@v3 + + - name: Load Electron cache + uses: actions/cache/restore@v5 + with: + path: .cache + key: electron-zips.${{matrix.os}} + + # Sadly, it makes more sense to separate builds per platform + - name: Build Electron for MacOS (DMG & ZIP) + if: matrix.os == 'macos-latest' + run: pnpm electron-builder --universal -m zip dmg env: - SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }} - GH_TOKEN: ${{secrets.GITHUB_TOKEN}} + CSC_LINK: "https://legcord.app/NewSign.p12" + CSC_KEY_PASSWORD: ${{ secrets.MACOS_SIGN_PASS }} + APPLE_ID: ${{secrets.APPLE_ID}} + APPLE_APP_SPECIFIC_PASSWORD: ${{secrets.APPLE_ID_PASSWORD}} + APPLE_TEAM_ID: ${{secrets.APPLE_TEAM_ID}} - steps: - - name: Checkout code - uses: actions/checkout@v4 + - name: Build Electron for Windows (NSIS, AppX, & ZIP) + if: matrix.os == 'windows-latest' + run: pnpm electron-builder --ia32 --arm64 --x64 -w nsis appx zip - - name: Add commit to version - if: github.ref_name == 'dev' - run: cat <<< $(jq --arg ver "$(jq -r '.version' package.json)-$(git rev-parse --short HEAD)" '.version = $ver' package.json) > package.json - shell: bash + - name: Build Electron for Linux (RPM, DEB, AppImage & ZIP) + if: matrix.os == 'ubuntu-latest' + run: pnpm electron-builder --armv7l --arm64 --x64 -l rpm deb appimage zip tar.gz - - name: Prepare PNPM - uses: pnpm/action-setup@v4 - - - name: Prepare Node.js - uses: actions/setup-node@v4 - with: - node-version-file: package.json - cache: pnpm - - - name: Install dependencies - run: pnpm i - - - name: Build TypeScript - run: pnpm build + - name: Save Electron Cache + uses: actions/cache/save@v5 + with: + path: .cache + key: electron-zips.${{matrix.os}} - - name: Install SnapCraft - if: matrix.os == 'macos-latest' - uses: samuelmeuli/action-snapcraft@v3 + - name: Collect artifacts + run: mkdir artifacts | + find dist/. -maxdepth 1 -type f -exec mv {} artifacts \; + shell: bash - - name: Load Electron cache - uses: actions/cache/restore@v4 - with: - path: .cache - key: electron-zips.${{matrix.os}} + - name: Upload artifactsstable + uses: actions/upload-artifact@v6 + with: + name: ${{matrix.os}}-artifacts + path: artifacts/* - # Sadly, it makes more sense to separate builds per platform - - name: Build Electron for MacOS (DMG & ZIP) - if: matrix.os == 'macos-latest' - run: pnpm electron-builder --universal -m zip dmg - env: - CSC_LINK: "https://legcord.app/NewSign.p12" - CSC_KEY_PASSWORD: ${{ secrets.MACOS_SIGN_PASS }} - APPLE_ID: ${{secrets.APPLE_ID}} - APPLE_APP_SPECIFIC_PASSWORD: ${{secrets.APPLE_ID_PASSWORD}} - APPLE_TEAM_ID: ${{secrets.APPLE_TEAM_ID}} + release: + runs-on: ubuntu-latest + needs: + - package + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + steps: + - name: Download artifacts + uses: actions/download-artifact@v6 + with: + path: release-files - - name: Build Electron for Windows (NSIS, AppX, & ZIP) - if: matrix.os == 'windows-latest' - run: pnpm electron-builder --ia32 --arm64 --x64 -w nsis appx zip + - name: Create release + if: github.ref_name == 'dev' + uses: ncipollo/release-action@v1 + with: + name: Rolling Dev Build + allowUpdates: true + removeArtifacts: true + prerelease: true + body: "Built against https://github.com/Legcord/Legcord/tree/dev on every commit. NOTE: tarballs do not update." + draft: false + tag: devbuild + artifacts: release-files/**/* - - name: Build Electron for Linux (RPM, DEB, AppImage & ZIP) - if: matrix.os == 'ubuntu-latest' - run: pnpm electron-builder --armv7l --arm64 --x64 -l rpm deb appimage zip tar.gz - - - name: Save Electron Cache - uses: actions/cache/save@v4 - with: - path: .cache - key: electron-zips.${{matrix.os}} - - - name: Collect artifacts - run: - mkdir artifacts | - find dist/. -maxdepth 1 -type f -exec mv {} artifacts \; - shell: bash - - - name: Upload artifactsstable - uses: actions/upload-artifact@v4 - with: - name: ${{matrix.os}}-artifacts - path: artifacts/* - - release: - runs-on: ubuntu-latest - needs: - - package - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - path: release-files - - - name: Create release - if: github.ref_name == 'dev' - uses: ncipollo/release-action@v1 - with: - name: Rolling Dev Build - allowUpdates: true - removeArtifacts: true - prerelease: true - body: "Built against https://github.com/Legcord/Legcord/tree/dev on every commit. NOTE: tarballs do not update." - draft: false - tag: devbuild - artifacts: release-files/**/* - - - name: Create release - if: github.ref_name == 'stable' - uses: ncipollo/release-action@v1 - with: - name: Stable Release Draft - prerelease: false - tag: stable - draft: true - artifacts: release-files/**/* \ No newline at end of file + - name: Create release + if: github.ref_name == 'stable' + uses: ncipollo/release-action@v1 + with: + name: Stable Release Draft + prerelease: false + tag: stable + draft: true + artifacts: release-files/**/* From 9ac2f6b627bb4cbed62e3aeb76009ffff77bae70 Mon Sep 17 00:00:00 2001 From: Aiden Date: Thu, 28 May 2026 23:00:41 -0400 Subject: [PATCH 27/96] migrate biome config --- biome.jsonc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index da9bc49..cd57ac3 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -1,9 +1,9 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", "vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true }, "files": { "ignoreUnknown": false, - "ignore": ["assets/app/js"] + "includes": ["**", "!**/assets/app/js"] }, "formatter": { "enabled": true, @@ -16,7 +16,7 @@ "attributePosition": "auto", "bracketSpacing": true }, - "organizeImports": { "enabled": true }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, "linter": { "enabled": true, "rules": { From 6bd07ce067fcaf4a282a7955ac2a24656b2a88b1 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 3 Jun 2026 02:01:02 +0200 Subject: [PATCH 28/96] chore: translations update [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: António Oliveira Translate-URL: https://hosted.weblate.org/projects/armcord/client/pt_PT/ Translation: Legcord/Client --- assets/lang/pt_PT.json | 84 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 4 deletions(-) diff --git a/assets/lang/pt_PT.json b/assets/lang/pt_PT.json index 9fea545..cc860dc 100644 --- a/assets/lang/pt_PT.json +++ b/assets/lang/pt_PT.json @@ -223,14 +223,14 @@ "menu-keybind": "Atalhos", "menu-legcord": "Legcord", "tray-openLegcord": "Abrir Legcord", - "tray-openSettings": "Abrir configurações", + "tray-openSettings": "Abrir Configurações", "tray-quitLegcord": "Fechar Legcord", "tray-tooltip": "Legcord", "dialog-openUrl-title": "Quer abrir esta ligação?", "dialog-openUrl-message": "Deseja abrir {url}?", "dialog-openUrl-detail": "Detetamos que este url não usa protocolos normais ded navegador. Isto pode significar que este url leva à um programa local no seu computador. Por favor, verifique se o reconhece antes de prosseguir!", "dialog-openUrl-checkbox": "Lembrar a minha resposta e ignorar este aviso em sessões futuras", - "dialog-openUrl-no": "Não", + "dialog-openUrl-no": "Não, não quero", "title-unreadMessages": "Tem mensagens não lidas.", "title-legcordSuffix": " - Legcord", "dialog-importTheme-title": "Selecione um tema que deseja importar", @@ -258,7 +258,7 @@ "settings-restartRequired": "Reinicialização necessária", "settings-theme-legacy": "Legado", "settings-channel-stable": "Estável", - "keybind-mute": "Silenciar", + "keybind-mute": "Silenciar Microfone", "keybind-runJavascript": "Executar Javascript", "keybind-global": "Global", "detectable-aliases": "Apelidos", @@ -270,5 +270,81 @@ "backup-unknownError": "Algo deu errado.", "backup-restoreConfirm": "Restaurar", "backup-restoreCancel": "Cancelar", - "supportBanner-donate": "Doar" + "supportBanner-donate": "Doar", + "settings-material": "Material de Janela", + "settings-material-desc": "Define o material de Janela de plano de fundo que o Legcord usa.", + "settings-material-mica": "Mica", + "settings-material-mica-alt": "Mica Alt", + "settings-material-acrylic": "Acrílico", + "settings-csp": "Política de Segurança de Conteúdo", + "settings-csp-desc": "Define o quão estrito a Política de Segurança do Legcord é. CSP estrito fornece melhor segurança mas pode causar problemas de compatibilidade com algumas modificações/temas/plugins de cliente.", + "settings-csp-strict": "Estrito", + "settings-csp-vanilla": "Vanilla", + "settings-firstTimeCrash": "Estamos a preparar tudo por si!", + "settings-firstTimeCrash-desc": "Definições não estão disponíveis num primeiro lançamento. Por favor use o botão abaixo para reiniciar e definições devem estar prontas após reiniciar.", + "settings-automaticClientUpdates": "Atualizações de cliente automáticas", + "settings-automaticClientUpdates-desc": "Desativa atualizações do Legcord automáticas", + "settings-mod-shelter": "Shelter", + "settings-mod-custom": "Personalizado", + "settings-experimental": "Experimental", + "settings-category-lookAndFeel": "Aparência e sensação", + "settings-category-legacy": "Funcionalidades antigas", + "tray-supportServer": "Suportar Servidor Discord", + "setup-linuxTrayWarning": "A funcionalidade da barra de tarefas do sistema podem ter problemas ou comportarem-se diferentemente em sistemas Linux.", + "setup-finishSubtitle": "A sua configuração Legcord está completa e personalizada de acordo com as suas preferências.", + "setup-finishSettingsNote": "Precisa de fazer alterações mais tarde? Encontrará todas estas opções no menu de definições do Discord abaixo do Legcord.", + "setup-launchLegcord": "Lançar Legcord", + "setup-modSelectorTitle": "Escolher o Seu Mod de Cliente", + "setup-modSelectorSubtitle": "O Legcord inclui Shelter como predefinição, mas também pode escolher outro mod de cliente se preferir.", + "setup-vencordTitle": "Vencord", + "setup-vencordDesc": "Mod de cliente com plugins e temas.", + "setup-equicordTitle": "Equicord", + "setup-equicordDesc": "Um fork do Vencord com mais plugins.", + "setup-useShelterOnly": "Usar Apenas Shelter", + "setup-stepOf": "Passo {current} de {total}", + "setup-windowTitle": "Configuração do Legcord", + "settings-restartRequiredBody": "Pode precisar de reiniciar para aplicar estas mudanças.", + "settings-restartLater": "Faço isso mais tarde", + "settings-channel-canary": "Canary", + "settings-channel-ptb": "PTB", + "settings-category-powerManagement": "Gestão de Energia", + "settings-category-arrpc": "arRPC", + "settings-extendedPluginAbilities": "Habilidades de plugin estendidas", + "settings-extendedPluginAbilities-desc": "Permite aos plugins a leitura e escrita de ficheiro no escopo de uma pasta do seu computador (p.ex. para caching de mensagens eliminadas). Apenas ative isto para plugins que confia—eles podem armazenar dados localmente. Dados são armazenados por cada plugin na pasta de armazenamento de plugins do Legcord.", + "settings-audio-loopback": "Loopback", + "settings-audio-loopbackWithMute": "Loopback com mute", + "keybind-addKeybind": "Adicionar um atalho de teclado", + "keybind-accelerator": "Acelerador", + "keybind-invalidCombo": "Esta combinação de teclas é inválida ou não é suportada.", + "keybind-deafen": "Silenciar Áudio", + "keybind-pushToTalk": "Carregar para falar", + "keybind-leaveCall": "Sair da chamada", + "keybind-navigateForward": "Navegar para a frente", + "keybind-navigateBack": "Navegar para trás", + "keybind-openQuickCss": "Abrir Quick CSS", + "keybind-openSettings": "Abrir Definições", + "keybind-globalNote": "Permite-lhe atribuir um atalho de teclado específico que pode ser usado entre diferentes aplicações e programas.", + "detectable-addApp": "Adicionar Aplicação Detetável", + "backup-dialogSave-title": "Guardar cópia de segurança do Legcord", + "backup-dialogOpen-title": "Abrir cópia de segurança do Legcord", + "backup-pageTitle": "Cópia de segurança e restaurar", + "backup-pageSubtitle": "Guardar ou restaurar a sua cópia de segurança Legcord, inclui definições, temas, plugins, e dados de mods—tudo em um ficheiro.", + "backup-modalTitle": "Escolher o que a cópia de segurança contém", + "backup-includeLegcordThemes": "Temas e Quick CSS", + "backup-includeLegcordPlugins": "Extensões Chrome/Armazenamento de Plugin", + "backup-includeVencord": "Dados Vencord (sessão atual)", + "backup-includeEquicord": "Dados Equicord (sessão atual)", + "backup-includeShelter": "Plugins Shelter", + "backup-includeModBundles": "Ficheiros de mod de cliente transferidos (Vencord, Equicord, Shelter, pacotes personalizados)", + "backup-successTitle": "Cópia de segurança guardada", + "backup-successBody": "A sua cópia de segurança foi guardada com sucesso.", + "backup-cancelledBody": "Nenhum ficheiro foi guardado.", + "backup-failedTitle": "Cópia de segurança falhada", + "backup-invalidFile": "Não foi possível ler esse ficheiro de cópia de segurança.", + "backup-restoreConfirmHeader": "Restaurar a partir da cópia de segurança?", + "backup-restoreConfirmBody": "Ficheiros em disco serão substituídos onde esta cópia de segurança contém dados. Poderá ter que reiniciar o Legcord para tudo ser aplicado.", + "backup-restoreDoneTitle": "Restauração completa", + "backup-restoreDoneBody": "Os seus dados foram restaurados. Reinicie o Legcord para que todas as mudanças tomem efeito.", + "supportBanner-title": "Suportar o Projeto", + "supportBanner-subtitle": "Ajude-nos a continuar a desenvolver o Legcord. O seu suporte mantém o projeto vivo e permite-nos introduzir mais funcionalidades." } From 43ad9637ba468bc71e3a73fc9204813148156e4e Mon Sep 17 00:00:00 2001 From: hoshidesu Date: Thu, 4 Jun 2026 01:43:24 +0900 Subject: [PATCH 29/96] feat(screenshare): implement macOS native system audio loopback capture (#1092) --- electron-builder.ts | 2 + src/discord/screenshare.ts | 2 + src/main.ts | 3 + .../components/ScreensharePicker.tsx | 71 ++++++++++--------- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/electron-builder.ts b/electron-builder.ts index 7926c66..bd784de 100644 --- a/electron-builder.ts +++ b/electron-builder.ts @@ -20,6 +20,8 @@ export const config: Configuration = { extendInfo: { NSMicrophoneUsageDescription: "Legcord requires access to the microphone to function properly.", NSCameraUsageDescription: "Legcord requires access to the camera to function properly.", + NSAudioCaptureUsageDescription: + "Legcord requires access to system audio to share sound during screenshare.", NSCameraUseContinuityCameraDeviceType: true, "com.apple.security.device.audio-input": true, "com.apple.security.device.camera": true, diff --git a/src/discord/screenshare.ts b/src/discord/screenshare.ts index 5edc6bd..e475338 100644 --- a/src/discord/screenshare.ts +++ b/src/discord/screenshare.ts @@ -17,6 +17,7 @@ export function registerCustomHandler(): void { console.log("WebRTC Capturer detected, using native window picker."); if (sources[0] === undefined) return callback({}); } + ipcMain.removeAllListeners("startScreenshare"); ipcMain.once("startScreenshare", (_event, id: string, name: string, audio: boolean) => { console.log(`ID: ${id}`); if (id === "none") { @@ -31,6 +32,7 @@ export function registerCustomHandler(): void { switch (process.platform) { case "win32": case "linux": + case "darwin": options = { video: result }; if (audio) options = { diff --git a/src/main.ts b/src/main.ts index fdaa9a7..a750d54 100644 --- a/src/main.ts +++ b/src/main.ts @@ -159,6 +159,9 @@ if (!app.requestSingleInstanceLock() && getConfig("multiInstance") === false) { if (process.platform === "darwin") { const status = systemPreferences.getMediaAccessStatus("screen"); console.log(`macOS screenshare permission: ${status}`); + enableFeatures.add("MacLoopbackAudioForScreenShare"); + enableFeatures.add("MacSckSystemAudioLoopbackOverride"); + enableFeatures.add("MacCatapSystemAudioLoopbackCapture"); } // work around chrome 66 disabling autoplay by default app.commandLine.appendSwitch("autoplay-policy", "no-user-gesture-required"); diff --git a/src/shelter/screenshare/components/ScreensharePicker.tsx b/src/shelter/screenshare/components/ScreensharePicker.tsx index f1a5053..788ec5b 100644 --- a/src/shelter/screenshare/components/ScreensharePicker.tsx +++ b/src/shelter/screenshare/components/ScreensharePicker.tsx @@ -32,8 +32,9 @@ async function getVirtmic() { } const original = navigator.mediaDevices.getDisplayMedia; -export async function patchNavigator() { - navigator.mediaDevices.getDisplayMedia = async function (opts) { +export async function patchNavigator(requestAudio = false) { + navigator.mediaDevices.getDisplayMedia = async function (opts = {}) { + if (requestAudio) opts.audio = true; const stream = await original.call(this, opts); const video = stream.getVideoTracks()[0]; @@ -46,16 +47,20 @@ export async function patchNavigator() { height: height, }; - video - .applyConstraints(stream_constraints) - .then(() => console.info("Applied video stream track settings.", stream_constraints)) - .catch(() => { - console.error("Failed to apply video stream track settings.", stream_constraints); - }); + if (video) { + video + .applyConstraints(stream_constraints) + .then(() => { + console.log(`Stream modified -> (${width}x${height}) ${store.fps}FPS`); + }) + .catch((error) => { + console.error("Failed to apply video constraints:", error); + }); + } const virtmic_id = await getVirtmic(); - stream.getAudioTracks().forEach((t) => stream.removeTrack(t)); if (virtmic_id) { + stream.getAudioTracks().forEach((t) => stream.removeTrack(t)); const audio = await navigator.mediaDevices.getUserMedia({ audio: { deviceId: { @@ -94,7 +99,7 @@ export const ScreensharePicker = (props: { showToast(t["screenshare-selectSource"], "error"); } - patchNavigator(); + patchNavigator(audio()); window.legcord.screenshare.start(source(), name(), audio()); @@ -177,31 +182,29 @@ export const ScreensharePicker = (props: { />
- -
-
- - Share Audio -
- +
+
+ + Share Audio
- + +
From b7582bf5aff83da68085e74b84984f2bf1de3d84 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Thu, 4 Jun 2026 18:21:52 +0200 Subject: [PATCH 30/96] chore: linting & bump deps --- assets/app/css/baseTitlebar.css | 2 +- assets/app/css/darwinTitlebar.css | 10 +++++----- assets/app/css/discord.css | 4 ++-- assets/app/css/titlebar.css | 8 ++++---- docs/examples/hello-plugin/preload.js | 2 +- package.json | 10 +++++----- pnpm-lock.yaml | 10 +++++----- pnpm-workspace.yaml | 3 +++ scripts/build/sandboxFix.mjs | 18 +++++++++--------- scripts/{copyVenmic.mts => copyVenmic.ts} | 0 src/common/backup.ts | 2 +- src/common/detectables.ts | 3 +-- src/common/keybindActions.ts | 1 + src/common/themes.ts | 2 +- src/cssEditor/editor.html | 10 ++++------ src/discord/extensions/plugin.ts | 1 + src/discord/globalKeybinds.ts | 2 +- src/discord/ipc.ts | 6 +++--- src/discord/menu.ts | 2 +- src/discord/plugins/manager.ts | 6 +++--- src/discord/preload/bridge.ts | 1 + src/discord/preload/mods/custom.mts | 2 ++ src/discord/preload/mods/equicord.mts | 2 ++ src/discord/preload/mods/shelter.mts | 1 + src/discord/preload/mods/vencord.mts | 2 ++ src/discord/preload/newTitlebar.mts | 1 + src/discord/preload/patches.mts | 3 ++- src/discord/preload/plugins.mts | 2 +- src/discord/preload/themes.ts | 1 + src/discord/preload/titlebar.mts | 2 ++ src/discord/screenshare.ts | 4 ++-- src/discord/touchbar.ts | 2 +- src/discord/tray.ts | 2 +- src/discord/window.ts | 6 +++--- src/main.ts | 2 +- src/protocol.ts | 3 ++- src/rpc.ts | 2 +- src/setup/main.ts | 2 +- src/setup/preload.mts | 1 + src/setup/setup.tsx | 19 ++++++++++++++----- src/setup/tray.ts | 2 +- .../components/ScreensharePicker.tsx | 4 ++-- .../components/SourceCard.module.css | 17 +++++++++++++---- src/shelter/screenshare/index.tsx | 2 +- .../settings/components/AboutPopup.tsx | 2 +- .../components/BackupSection.module.css | 2 +- .../settings/components/BackupSection.tsx | 5 +---- .../components/DetectableCard.module.css | 2 +- .../settings/components/DetectableCard.tsx | 5 +---- .../settings/components/Dropdown.module.css | 4 ++-- src/shelter/settings/components/Dropdown.tsx | 2 +- .../components/DropdownItem.module.css | 2 +- .../settings/components/DropdownItem.tsx | 1 + .../components/HeroUpdater.module.css | 4 ++-- .../settings/components/HeroUpdater.tsx | 1 + .../components/KeybindCard.module.css | 7 +++++-- .../settings/components/KeybindMaker.tsx | 2 +- .../components/SupportBanner.module.css | 10 ++++++---- .../settings/components/SupportBanner.tsx | 2 +- .../settings/components/TextBoxItem.tsx | 8 ++------ .../settings/components/ThemesCard.module.css | 2 +- src/shelter/settings/index.ts | 1 + src/shelter/settings/pages/KeybindsPage.tsx | 1 + src/shelter/settings/pages/PluginsPage.tsx | 2 +- .../settings/pages/RegisteredGames.module.css | 2 +- .../settings/pages/RegisteredGamesPage.tsx | 2 +- src/shelter/settings/pages/SettingsPage.tsx | 2 +- src/shelter/settings/pages/ThemesPage.tsx | 2 +- src/shelter/settings/settings.ts | 2 +- src/splash/splash.css | 6 +++--- src/splash/splash.html | 6 +++--- 71 files changed, 154 insertions(+), 120 deletions(-) rename scripts/{copyVenmic.mts => copyVenmic.ts} (100%) diff --git a/assets/app/css/baseTitlebar.css b/assets/app/css/baseTitlebar.css index 1d00859..c1b83e4 100644 --- a/assets/app/css/baseTitlebar.css +++ b/assets/app/css/baseTitlebar.css @@ -11,7 +11,7 @@ clear: both; height: var(--custom-app-top-bar-height); line-height: 30px; - -webkit-app-region: drag !important; + -webkit-app-region: drag; user-select: none; background-color: var(--background-base-lowest); -webkit-user-select: none; diff --git a/assets/app/css/darwinTitlebar.css b/assets/app/css/darwinTitlebar.css index f355555..292d852 100644 --- a/assets/app/css/darwinTitlebar.css +++ b/assets/app/css/darwinTitlebar.css @@ -1,9 +1,9 @@ [legcord-platform="darwin"] .sidebar-1tnWFu { - border-top-left-radius: 0px !important; + border-top-left-radius: 0px; } .platform-osx .wrapper_ef3116 { - margin-top: 0px !important; + margin-top: 0px; } [legcord-platform="darwin"] #window-controls-container { @@ -25,7 +25,7 @@ [legcord-platform="darwin"][unFocused] #window-controls-container #minimize, [legcord-platform="darwin"][unFocused] #window-controls-container #maximize, [legcord-platform="darwin"][unFocused] #window-controls-container #quit { - background-color: #d6d6d5 !important; + background-color: #d6d6d5; pointer-events: none; transition: background-color 0.1s ease-in; } @@ -116,6 +116,6 @@ } div[class*="bar__"][class*="hidden__"] { - pointer-events: unset !important; - visibility: unset !important; + pointer-events: unset; + visibility: unset; } diff --git a/assets/app/css/discord.css b/assets/app/css/discord.css index 2968866..1a0f318 100644 --- a/assets/app/css/discord.css +++ b/assets/app/css/discord.css @@ -11,13 +11,13 @@ } div:has(> span [data-list-item-id="guildsnav___app-download-button"]) { - display: none !important; + display: none; } /* custom keybinds are not supported on web information */ .container__6436f.info__6436f.browserNotice__740f2 { visibility: hidden; - display: block !important; + display: block; } .container__6436f.info__6436f.browserNotice__740f2:after { content: "You can modify global keybinds using the keybind maker on the left sidebar"; diff --git a/assets/app/css/titlebar.css b/assets/app/css/titlebar.css index 21cc620..f4a6531 100644 --- a/assets/app/css/titlebar.css +++ b/assets/app/css/titlebar.css @@ -11,7 +11,7 @@ clear: both; height: 30px; line-height: 30px; - -webkit-app-region: drag !important; + -webkit-app-region: drag; user-select: none; -webkit-user-select: none; position: fixed; @@ -226,11 +226,11 @@ /* Legcord on macOS */ [legcord-platform="darwin"] .sidebar-1tnWFu { - border-top-left-radius: 0px !important; + border-top-left-radius: 0px; } [legcord-platform="darwin"] .container__037ed { - overflow: unset !important; + overflow: unset; padding-top: 48px; top: -48px; } @@ -256,7 +256,7 @@ [legcord-platform="darwin"][unFocused] .titlebar #window-controls-container #minimize, [legcord-platform="darwin"][unFocused] .titlebar #window-controls-container #maximize, [legcord-platform="darwin"][unFocused] .titlebar #window-controls-container #quit { - background-color: #d6d6d5 !important; + background-color: #d6d6d5; pointer-events: none; transition: background-color 0.1s ease-in; } diff --git a/docs/examples/hello-plugin/preload.js b/docs/examples/hello-plugin/preload.js index b124207..d8a7b6d 100644 --- a/docs/examples/hello-plugin/preload.js +++ b/docs/examples/hello-plugin/preload.js @@ -7,7 +7,7 @@ module.exports.activate = (api) => { // Example: patch document title setter for demonstration. const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, "title"); - if (!descriptor || !descriptor.set) return; + if (!descriptor?.set) return; const patchTarget = { setTitle: descriptor.set }; const unpatch = api.patcher.before("setTitle", patchTarget, (args) => { diff --git a/package.json b/package.json index 3bccd21..964531f 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,9 @@ "node": ">=22" }, "scripts": { - "build:dev": "rollup -c --environment BUILD:dev && node scripts/copyVenmic.mts", + "build:dev": "rollup -c --environment BUILD:dev && node scripts/copyVenmic.ts", "build:plugins": "lune ci --repoSubDir src/shelter --to ts-out/plugins", - "build": "pnpm build:plugins && rolldown -c rolldown.config.ts && node scripts/copyVenmic.mts", + "build": "pnpm build:plugins && rolldown -c rolldown.config.ts && node scripts/copyVenmic.ts", "start": "pnpm run build && electron --trace-warnings --ozone-platform-hint=auto ./ts-out/main.js", "startThemeManager": "pnpm run build:dev && electron ./ts-out/main.js themes", "package": "pnpm run build && electron-builder", @@ -18,7 +18,7 @@ "lint:fix": "biome check --write", "postinstall": "electron-builder install-app-deps", "CIbuild": "pnpm run build && electron-builder --linux zip && electron-builder --windows zip && electron-builder --macos zip", - "updateMeta": "node scripts/utils/updateMeta.mts" + "updateMeta": "node scripts/utils/updateMeta.ts" }, "repository": { "type": "git", @@ -43,7 +43,7 @@ "@xmldom/xmldom": "^0.9.10", "app-builder-lib": "^26.8.1", "babel-preset-solid": "^1.9.12", - "electron": "42.3.0", + "electron": "42.3.3", "electron-builder": "26.8.1", "lucide-solid": "^1.16.0", "rolldown": "1.0.3", @@ -69,4 +69,4 @@ }, "packageManager": "pnpm@11.4.0+sha512.f0febc7e37552ab485494a914241b338e0b3580b93d54ce31f00933015880863129038a1b4ae4e414a0ee63ac35bf21197e990172c4a68256450b5636310968f", "package-manager-strict": false -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eafba75..c64720b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,8 +73,8 @@ importers: specifier: ^1.9.12 version: 1.9.12(@babel/core@8.0.0-rc.6)(solid-js@1.9.13) electron: - specifier: 42.3.0 - version: 42.3.0 + specifier: 42.3.3 + version: 42.3.3 electron-builder: specifier: 26.8.1 version: 26.8.1(electron-builder-squirrel-windows@26.8.1) @@ -1410,8 +1410,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@42.3.0: - resolution: {integrity: sha512-9ZiLdRXk+WDxW1OgIUz8J2rIQ5TYU9o629gCOjU48Q3dQiOmym7osWsH5Ubs/Jh4uuFLn6m6SBD2rmRXLAPz9g==} + electron@42.3.3: + resolution: {integrity: sha512-0MwYp9wTb7TrtTalOYqeW+suqd9T/Znstr/nDLKqFGIjHdBZX339guo3mQqTPURRZ/UQmYM4uMpzKpI5wLptfQ==} engines: {node: '>= 22.12.0'} hasBin: true @@ -4103,7 +4103,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron@42.3.0: + electron@42.3.3: dependencies: '@electron/get': 5.0.0 '@types/node': 24.12.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a96c2de..729f9f5 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,5 +5,8 @@ allowBuilds: esbuild: true koffi: true +minimumReleaseAgeExclude: + - electron@42.3.3 + overrides: yauzl: "^3.3.1" # Electron still can't get their shit together https://github.com/electron/electron/issues/51619 diff --git a/scripts/build/sandboxFix.mjs b/scripts/build/sandboxFix.mjs index 713122f..1c118de 100644 --- a/scripts/build/sandboxFix.mjs +++ b/scripts/build/sandboxFix.mjs @@ -6,8 +6,8 @@ // Based on https://github.com/gergof/electron-builder-sandbox-fix/blob/master/lib/index.js -import fs from "fs/promises"; -import path from "path"; +import fs from "node:fs/promises"; +import path from "node:path"; import AppImageTarget from "app-builder-lib/out/targets/appimage/AppImageTarget.js"; let isApplied = false; @@ -25,17 +25,17 @@ export async function applyAppImageSandboxFix() { AppImageTarget.default.prototype.build = async function (...args) { console.log("Running AppImage builder hook", args); const oldPath = args[0]; - const newPath = oldPath + "-appimage-sandbox-fix"; + const newPath = `${oldPath}-appimage-sandbox-fix`; // just in case try { await fs.rm(newPath, { - recursive: true + recursive: true, }); } catch {} console.log("Copying to apply appimage fix", oldPath, newPath); await fs.cp(oldPath, newPath, { - recursive: true + recursive: true, }); args[0] = newPath; @@ -56,20 +56,20 @@ exec "$SCRIPT_DIR/${this.packager.executableName}.bin" "$([ "$IS_STEAMOS" == 1 ] `.trim(); try { - await fs.rename(executable, executable + ".bin"); + await fs.rename(executable, `${executable}.bin`); await fs.writeFile(executable, loaderScript); await fs.chmod(executable, 0o755); } catch (e) { - console.error("failed to create loder for sandbox fix: " + e.message); + console.error(`failed to create loder for sandbox fix: ${e.message}`); throw new Error("Failed to create loader for sandbox fix"); } const ret = await oldBuildMethod.apply(this, args); await fs.rm(newPath, { - recursive: true + recursive: true, }); return ret; }; -} \ No newline at end of file +} diff --git a/scripts/copyVenmic.mts b/scripts/copyVenmic.ts similarity index 100% rename from scripts/copyVenmic.mts rename to scripts/copyVenmic.ts diff --git a/src/common/backup.ts b/src/common/backup.ts index b23cbe5..5880ef8 100644 --- a/src/common/backup.ts +++ b/src/common/backup.ts @@ -1,4 +1,4 @@ -import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs"; +import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs"; import path from "node:path"; import AdmZip from "adm-zip"; import { app } from "electron"; diff --git a/src/common/detectables.ts b/src/common/detectables.ts index 49f913a..75d23e1 100644 --- a/src/common/detectables.ts +++ b/src/common/detectables.ts @@ -1,8 +1,7 @@ import fs from "node:fs"; import path from "node:path"; -import { app } from "electron"; - import type { Game, GameList } from "arrpc"; +import { app } from "electron"; export function getDetectablesPath() { const userDataPath = app.getPath("userData"); const storagePath = path.join(userDataPath, "/storage/"); diff --git a/src/common/keybindActions.ts b/src/common/keybindActions.ts index 5ff06a4..6534010 100644 --- a/src/common/keybindActions.ts +++ b/src/common/keybindActions.ts @@ -3,6 +3,7 @@ import { app, shell } from "electron"; import type { Keybind } from "../@types/keybind.js"; import { mainWindows } from "../discord/window.js"; import { navigateTo } from "./dom.js"; + let isAudioEngineEnabled = false; export function runAction(keybind: Keybind) { diff --git a/src/common/themes.ts b/src/common/themes.ts index 05efd63..f776eb5 100644 --- a/src/common/themes.ts +++ b/src/common/themes.ts @@ -1,6 +1,6 @@ import fs from "node:fs"; import path from "node:path"; -import { type BrowserWindow, app } from "electron"; +import { app, type BrowserWindow } from "electron"; import type { ThemeManifest } from "../@types/themeManifest.js"; import { mainWindows } from "../discord/window.js"; import { getConfig } from "./config.js"; diff --git a/src/cssEditor/editor.html b/src/cssEditor/editor.html index 86aa1a1..246c5f6 100644 --- a/src/cssEditor/editor.html +++ b/src/cssEditor/editor.html @@ -15,22 +15,20 @@ }); window.MonacoEnvironment = { - getWorkerUrl: function(workerId, label) { - return `data:text/javascript;charset=utf-8,${encodeURIComponent(` + getWorkerUrl: (_workerId, _label) => `data:text/javascript;charset=utf-8,${encodeURIComponent(` self.MonacoEnvironment = { baseUrl: 'https://cdn.jsdelivr.net/npm/monaco-editor/min/' }; - importScripts('https://cdn.jsdelivr.net/npm/monaco-editor/min/vs/base/worker/workerMain.js');`)}`; - } + importScripts('https://cdn.jsdelivr.net/npm/monaco-editor/min/vs/base/worker/workerMain.js');`)}` }; // Monaco init - require(["vs/editor/editor.main"], function() { + require(["vs/editor/editor.main"], () => { createEditor(editorCode); }); function createEditor(editorContainer) { - let editor = monaco.editor.create(editorContainer, { + const editor = monaco.editor.create(editorContainer, { value: cssCode, language: "css", minimap: { enabled: false }, diff --git a/src/discord/extensions/plugin.ts b/src/discord/extensions/plugin.ts index 5527698..96489b1 100644 --- a/src/discord/extensions/plugin.ts +++ b/src/discord/extensions/plugin.ts @@ -1,6 +1,7 @@ import { existsSync, mkdirSync, readdirSync } from "node:fs"; import { platform } from "node:os"; import { app, session } from "electron"; + const extensionFolder = `${app.getPath("userData")}/extensions`; let prefix = ""; diff --git a/src/discord/globalKeybinds.ts b/src/discord/globalKeybinds.ts index 40d6e76..c7b4ba4 100644 --- a/src/discord/globalKeybinds.ts +++ b/src/discord/globalKeybinds.ts @@ -19,7 +19,7 @@ export function registerGlobalKeybinds() { app.on("will-quit", () => { try { globalShortcut.unregisterAll(); - } catch (e) {} + } catch (_e) {} }); export function refreshGlobalKeybinds() { diff --git a/src/discord/ipc.ts b/src/discord/ipc.ts index 3c066b9..7a9e5d7 100644 --- a/src/discord/ipc.ts +++ b/src/discord/ipc.ts @@ -1,15 +1,15 @@ -import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs"; +import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs"; import os from "node:os"; import path from "node:path"; import type { Game } from "arrpc"; -import { type BrowserWindow, app, clipboard, dialog, ipcMain, shell } from "electron"; +import { app, type BrowserWindow, clipboard, dialog, ipcMain, shell } from "electron"; import isDev from "electron-is-dev"; import type { Keybind } from "../@types/keybind.js"; import type { Settings } from "../@types/settings.js"; import type { ThemeManifest } from "../@types/themeManifest.js"; import { - type BackupSavePayload, applyBackupFromMap, + type BackupSavePayload, buildBackupZipBuffer, readBackupZipToMap, } from "../common/backup.js"; diff --git a/src/discord/menu.ts b/src/discord/menu.ts index 34ed529..7b59d7d 100644 --- a/src/discord/menu.ts +++ b/src/discord/menu.ts @@ -1,4 +1,4 @@ -import { BrowserWindow, Menu, type MenuItemConstructorOptions, app } from "electron"; +import { app, BrowserWindow, Menu, type MenuItemConstructorOptions } from "electron"; import type { Keybind, KeybindActions } from "../@types/keybind.js"; import { getConfig } from "../common/config.js"; import { setForceQuit } from "../common/forceQuit.js"; diff --git a/src/discord/plugins/manager.ts b/src/discord/plugins/manager.ts index ee83523..c2913a9 100644 --- a/src/discord/plugins/manager.ts +++ b/src/discord/plugins/manager.ts @@ -1,7 +1,7 @@ -import { existsSync, mkdirSync, readFileSync, readdirSync } from "node:fs"; +import { existsSync, mkdirSync, readdirSync, readFileSync } from "node:fs"; import path from "node:path"; import { pathToFileURL } from "node:url"; -import { BrowserWindow, app, dialog, ipcMain, shell } from "electron"; +import { app, BrowserWindow, dialog, ipcMain, shell } from "electron"; import { after, before, instead } from "spitroast/dist/index.mjs"; import { getConfig, setConfig } from "../../common/config.js"; @@ -303,7 +303,7 @@ export function getRuntimeEntries(target: Exclude) { export function getRuntimeScript(pluginId: string, target: Exclude) { const record = records.get(pluginId); - if (!record || !record.enabled || !record.compatible) return null; + if (!record?.enabled || !record.compatible) return null; const entry = resolvePluginEntry(record, target); if (!entry) return null; return readFileSync(entry, "utf-8"); diff --git a/src/discord/preload/bridge.ts b/src/discord/preload/bridge.ts index d9b0389..81c492a 100644 --- a/src/discord/preload/bridge.ts +++ b/src/discord/preload/bridge.ts @@ -1,4 +1,5 @@ const { contextBridge, ipcRenderer } = require("electron"); + import type { Game } from "arrpc"; import type { Keybind } from "../../@types/keybind.js"; import type { LegcordWindow } from "../../@types/legcordWindow.d.ts"; diff --git a/src/discord/preload/mods/custom.mts b/src/discord/preload/mods/custom.mts index b96c124..df93878 100644 --- a/src/discord/preload/mods/custom.mts +++ b/src/discord/preload/mods/custom.mts @@ -1,5 +1,7 @@ const { ipcRenderer, webFrame } = require("electron"); + import type { ModBundle } from "../../../@types/ModBundle.js"; + async function inject() { try { await ipcRenderer.invoke("getCustomBundle").then(async (bundle: ModBundle) => { diff --git a/src/discord/preload/mods/equicord.mts b/src/discord/preload/mods/equicord.mts index bdd46c6..4e83788 100644 --- a/src/discord/preload/mods/equicord.mts +++ b/src/discord/preload/mods/equicord.mts @@ -1,5 +1,7 @@ const { ipcRenderer, webFrame } = require("electron"); + import type { ModBundle } from "../../../@types/ModBundle.js"; + async function inject() { try { await ipcRenderer.invoke("getEquicordBundle").then(async (bundle: ModBundle) => { diff --git a/src/discord/preload/mods/shelter.mts b/src/discord/preload/mods/shelter.mts index 2125357..90a2d54 100644 --- a/src/discord/preload/mods/shelter.mts +++ b/src/discord/preload/mods/shelter.mts @@ -1,4 +1,5 @@ const { ipcRenderer, webFrame } = require("electron"); + import type { ModBundle } from "../../../@types/ModBundle.js"; const requiredPlugins: Record }]> = { diff --git a/src/discord/preload/mods/vencord.mts b/src/discord/preload/mods/vencord.mts index f33c7f9..1612c9f 100644 --- a/src/discord/preload/mods/vencord.mts +++ b/src/discord/preload/mods/vencord.mts @@ -1,5 +1,7 @@ const { ipcRenderer, webFrame } = require("electron"); + import type { ModBundle } from "../../../@types/ModBundle.js"; + async function inject() { try { await ipcRenderer.invoke("getVencordBundle").then(async (bundle: ModBundle) => { diff --git a/src/discord/preload/newTitlebar.mts b/src/discord/preload/newTitlebar.mts index a68c1a7..cf079eb 100644 --- a/src/discord/preload/newTitlebar.mts +++ b/src/discord/preload/newTitlebar.mts @@ -1,4 +1,5 @@ const { ipcRenderer } = require("electron"); + import { addStyle } from "../../common/dom.js"; import { sleep } from "../../common/sleep.js"; diff --git a/src/discord/preload/patches.mts b/src/discord/preload/patches.mts index 8e71796..025cf17 100644 --- a/src/discord/preload/patches.mts +++ b/src/discord/preload/patches.mts @@ -1,5 +1,6 @@ import { addScript, addStyle, injectJS } from "../../common/dom.js"; import { sleep } from "../../common/sleep.js"; + const { ipcRenderer } = require("electron"); const version = ipcRenderer.sendSync("displayVersion") as string; @@ -136,7 +137,7 @@ export async function getVirtmic() { const devices = await navigator.mediaDevices.enumerateDevices(); const audioDevice = devices.find(({ label }) => label === "vencord-screen-share"); return audioDevice?.deviceId; - } catch (error) { + } catch (_error) { return null; } } diff --git a/src/discord/preload/plugins.mts b/src/discord/preload/plugins.mts index 57db415..4be0f75 100644 --- a/src/discord/preload/plugins.mts +++ b/src/discord/preload/plugins.mts @@ -58,7 +58,7 @@ function createApi(pluginId: string, pluginName: string) { }; } -async function executePreloadPluginSource(pluginId: string, source: string, api: ReturnType) { +async function executePreloadPluginSource(_pluginId: string, source: string, api: ReturnType) { const runner = new Function( "api", ` diff --git a/src/discord/preload/themes.ts b/src/discord/preload/themes.ts index 1c2dd17..b5c7ad5 100644 --- a/src/discord/preload/themes.ts +++ b/src/discord/preload/themes.ts @@ -1,4 +1,5 @@ import { addTheme } from "../../common/dom.js"; + const { ipcRenderer } = require("electron"); ipcRenderer.on("addTheme", (_event: unknown, name: string, css: string) => { diff --git a/src/discord/preload/titlebar.mts b/src/discord/preload/titlebar.mts index 04679f8..b31d48b 100644 --- a/src/discord/preload/titlebar.mts +++ b/src/discord/preload/titlebar.mts @@ -1,6 +1,8 @@ const { ipcRenderer } = require("electron"); + import type { Settings } from "../../@types/settings.js"; import { addStyle } from "../../common/dom.js"; + const titlebarHTML = `