diff --git a/.eslintrc.yml b/.eslintrc.yml index 5f736afd5..1d9d7452b 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -75,3 +75,9 @@ overrides: - files: "src/renderer/**/*.{ts,tsx,mts,cts}" rules: no-console: error + - files: "src/renderer/modules/{common,components}/*.{ts,tsx,mts,cts}" + rules: + # These files sometimes have checks that are technically unnecessary according to the typedefs, + # but should help prevent a crash in the case of an unexpected Discord change + # So we will allow them + "@typescript-eslint/no-unnecessary-condition": off diff --git a/.gitignore b/.gitignore index 792c93ddd..d05b1773c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ node_modules result dist/ +dist-bundle/ .parcel-cache yarn.lock package-lock.json diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..37e93a57e --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +## Reporting a Vulnerability + +Please create a private [security advisory](https://github.com/replugged-org/replugged/security/advisories/new). This will only be visible to us until we release a fix. + +If you have issues with the form above, you can also DM a staff member of our [Discord server](https://discord.gg/replugged) with the details of your issue. diff --git a/bin/index.mts b/bin/index.mts index 553c5fc6a..2581ef27d 100755 --- a/bin/index.mts +++ b/bin/index.mts @@ -1,4 +1,7 @@ #!/usr/bin/env node + +// WARNING: any imported files need to be added to files in package.json + import asar from "@electron/asar"; import { copyFileSync, @@ -566,13 +569,13 @@ const { argv } = yargs(hideBin(process.argv)) if (argv.all && isMonoRepo) return bundleAddons(buildPlugin, "plugins"); else { const addon = isMonoRepo ? await selectAddon("plugins") : undefined; - bundleAddon(buildPlugin, addon?.name); + bundleAddon(buildPlugin, addon?.name, "plugins"); } } else if (argv.addon === "theme") { if (argv.all && isMonoRepo) return bundleAddons(buildTheme, "themes"); else { const addon = isMonoRepo ? await selectAddon("themes") : undefined; - bundleAddon(buildTheme, addon?.name); + bundleAddon(buildTheme, addon?.name, "themes"); } } else { console.log("Invalid addon type."); diff --git a/bin/mono.mts b/bin/mono.mts index 693107b4a..1164d5f3e 100644 --- a/bin/mono.mts +++ b/bin/mono.mts @@ -1,4 +1,4 @@ -#!/usr/bin/env node +// WARNING: any imported files need to be added to files in package.json import { existsSync, readdirSync } from "fs"; import path from "path"; diff --git a/bin/release.mts b/bin/release.mts index 9343e6ee0..d7bd17ec4 100644 --- a/bin/release.mts +++ b/bin/release.mts @@ -1,3 +1,5 @@ +// WARNING: any imported files need to be added to files in package.json + import { existsSync, readFileSync, writeFileSync } from "fs"; import path from "path"; import prompts from "prompts"; diff --git a/i18n/cs.json b/i18n/cs.json index 993f88a99..d4cdc828c 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -9,7 +9,7 @@ "REPLUGGED_BADGES_BOOSTER": "Booster serveru Replugged", "REPLUGGED_GENERAL_SETTINGS": "Obecná nastavení", "REPLUGGED_I18N_CONTRIBUTE": "Chceš pomoct s překladem Replugged? Jdi na náš [Weblate]({weblateUrl})!", - "REPLUGGED_I18N_TRANSLATED_PERCENTAGE": "Replugged: {translated,number}% přeloženo", + "REPLUGGED_I18N_TRANSLATED_PERCENTAGE": "Replugged: {translated,number} % přeloženo", "REPLUGGED_LINK_NOW": "Propojit účet", "REPLUGGED_PLUGINS": "Pluginy", "REPLUGGED_QUICKCSS": "Rychlé nastavení CSS", @@ -23,7 +23,7 @@ "REPLUGGED_SETTINGS_NO_CLYDE": "Vyměnit Clyde", "REPLUGGED_SETTINGS_NO_CLYDE_DESC": "Zamění [Clyde]({clydeUrl}) v příkazech Repluggedu za bohatou nabídku avatarů a uživatelských jmen vybranou vývojáři plug-inů - ve výchozím nastavení \"Replugged\".", "REPLUGGED_SETTINGS_OVERLAY": "Nástroje pro vývojáře v překrytí", - "REPLUGGED_SETTINGS_OVERLAY_DESC": "Otevře okno s vývjoářskými nástroji, které ti umožní zjistit, co se děje v herním překrytí Discordu.", + "REPLUGGED_SETTINGS_OVERLAY_DESC": "Otevře okno s vývojářskými nástroji, které ti umožní zjistit, co se děje v herním překrytí Discordu.", "REPLUGGED_SETTINGS_RESTART": "Toto nastavení vyžaduje restart Discordu, aby se projevilo. Chceš restartovat Discord nyní?", "REPLUGGED_SNIPPET_APPLIED": "Snippet použit", "REPLUGGED_SNIPPET_APPLY": "Použít snippet", @@ -67,7 +67,7 @@ "REPLUGGED_PLUGIN_EMBED_COPIED": "Zkopírováno!", "REPLUGGED_PLUGIN_EMBED_WHATISTHIS": "Co to je?", "REPLUGGED_PLUGIN_EMBED_WHATISTHIS_CONTENT": "Toto je funkce Repluggedu. Umožňuje ti instalovat pluginy a motivy přímo z chatu.\nJednoduše zmáčkni instalační tlačítko v embedu.", - "REPLUGGED_COMMAND_ENABLE_DESC": "Povolí plugin/motiv", + "REPLUGGED_COMMAND_ENABLE_DESC": "Povolí plugin nebo motiv", "REPLUGGED_ERROR_ALREADY_INSTALLED": "{name} je již nainstalován.", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "Nastala chyba při spouštění příkazu:", "REPLUGGED_ERROR_CHECK_CONSOLE": "Zkontroluj konzoli pro více informací.", @@ -119,8 +119,8 @@ "REPLUGGED_CANCEL": "Zrušit", "REPLUGGED_CONFIRM": "Potvrdit", "REPLUGGED_OK": "OK", - "REPLUGGED_COMMAND_DISABLE_DESC": "Zakáže plugin/motiv", - "REPLUGGED_COMMAND_RELOAD_DESC": "Znovu načte plugin/motiv", + "REPLUGGED_COMMAND_DISABLE_DESC": "Zakáže plugin nebo motiv", + "REPLUGGED_COMMAND_RELOAD_DESC": "Znovu načte plugin nebo motiv", "REPLUGGED_SETTINGS_ERROR_COMPONENT_STACK": "Component stack:", "REPLUGGED_ADDON_DELETE": "Odstranit {type}", "REPLUGGED_ADDON_PAGE_OPEN": "Otevřít {type} stránku", @@ -174,12 +174,12 @@ "REPLUGGED_UPDATES_TOAST_FAILED_ONE": "Aktualizace selhala!", "REPLUGGED_UPDATES_TOAST_FAILED_ALL": "Některé aktualizace selhaly!", "REPLUGGED_UPDATES_TOAST_SUCCESS_ONE": "Aktualizace proběhla úspěšně.", - "REPLUGGED_UPDATES_TOAST_NEW": "{count, plural, one {Nalezena # aktualizace!} few {Nalezeno # aktualizací} other {Nalezeno # aktualizací}}!", + "REPLUGGED_UPDATES_TOAST_NEW": "{count, plural, one {Nalezena # aktualizace} few {Nalezeno # aktualizací} other {Nalezeno # aktualizací}}!", "REPLUGGED_PLUGIN_INSTALL_RELOAD_PROMPT_BODY": "{name} potřebuje přenačtení pro jeho správné fungování. Přenačíst nyní?", "REPLUGGED_RELOAD": "Přenačíst", "REPLUGGED_I18N": "Překlady Replugged", "REPLUGGED_DEVELOPER_MODE_WARNING": "Momentálně máš Replugged spuštěný ve vývojářském režimu, ve kterém se není schopný sám aktualizovat. [Přepnutí do běžného režimu]({url}).", - "REPLUGGED_VIEW_UPDATES": "Zobrazuji {count, plural, =1 {# aktualizaci} =2 {# aktualizace} =3 {# aktualizace} =4 {# aktualizace} other {# aktualizací}}", + "REPLUGGED_VIEW_UPDATES": "Zobrazuji {count, plural, one {# aktualizaci} few {# aktualizace} other {# aktualizací}}", "REPLUGGED_ADDON_BROWSE": "Procházet {type}", "REPLUGGED_ADDON_NOT_REVIEWED": "Nerecenzovaný {type}", "REPLUGGED_ADDON_NOT_REVIEWED_DESC": "Tento {type} nebyl zkontrolován týmem Replugged a mohl by poškodit váš počítač. Používáte jej na vlastní nebezpečí.", @@ -188,11 +188,59 @@ "REPLUGGED_SETTINGS_DEV_COMPANION": "Znovu připojit Vývojářského Pomocníka", "REPLUGGED_SETTINGS_DEV_COMPANION_DESC": "Znovu připojí coremod Vývojářský Pomocník k rozšíření pro VSCode.", "REPLUGGED_SETTINGS_DEV_COMPANION_RECONNECT": "Znovu Připojit", - "REPLUGGED_SETTINGS_ADVANCED": "Pokročilé Nastavení", + "REPLUGGED_SETTINGS_ADVANCED": "Pokročilá nastavení", "REPLUGGED_SETTINGS_REACT_DEVTOOLS_DESC": "Načte rozšíření React DevTools, které vám dovolí prohlédnout strom React a jednoduššeji debugovat. **Vyžaduje restart**.", "REPLUGGED_SETTINGS_REACT_DEVTOOLS_FAILED": "Nepodařilo se stáhnout React DevTools.", "REPLUGGED_INSTALLER_OPEN_STORE": "Zobrazit v Obchodě", "REPLUGGED_SETTINGS_ADDON_EMBEDS": "Zobrazit vložený obsash přídavných modulů", "REPLUGGED_SETTINGS_ADDON_EMBEDS_DESC": "Zobrazit kartu s informacemi pro přídavný modul když je v chatu sdílen instalační odkaz.", - "REPLUGGED_SETTINGS_REACT_DEVTOOLS": "Povolit React DevTools" + "REPLUGGED_SETTINGS_REACT_DEVTOOLS": "Povolit React DevTools", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_WINDOWS": "****VAROVÁNÍ:**** Povolení tohoto nastavení znefukční **přichycování oken**. V některých případech uvidíš černé pozadí, například když je část okna odříznuta nahoře nebo dole kvůli rozlišení monitoru nebo když jsou otevřené a ukotvené vývojářské nástroje.", + "REPLUGGED_COMMAND_ERROR_GENERIC": "Nastala chyba, prosím, zkus to znovu později. Pokud tento problém přetrvává, kontaktuj prosím tým Replugged.", + "REPLUGGED_COMMAND_ENABLE_NAME": "povolit", + "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "doplněk", + "REPLUGGED_COMMAND_LIST_NAME": "seznam", + "REPLUGGED_COMMAND_LIST_DESC": "Vypíše všechny pluginy nebo motivy", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "odeslat", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "typ", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Ukáže doplňky, které jsou povolené, zakázané, nebo obojí", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "Povolené", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_BOTH": "Všechny", + "REPLUGGED_COMMAND_LIST_HEADER_ENABLED": "Povolené {type}", + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}", + "REPLUGGED_SETTINGS_TRANSPARENT": "Průhledné okno", + "REPLUGGED_COMMAND_INSTALL_NAME": "instalovat", + "REPLUGGED_COMMAND_INSTALL_DESC": "Nainstaluje plugin nebo motiv", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "doplněk", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Identifikátor doplňku k instalaci ze zdroje", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "zdroj", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Zdroj, ze kterého bude doplněk nainstalován", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "id", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "Pokud má zdroj vícero doplňků, určuje, který nainstalovat", + "REPLUGGED_STORE": "Obchod", + "REPLUGGED_SETTINGS_RESTART_TITLE": "Vyžadován restart", + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Úspěch", + "REPLUGGED_COMMAND_ADDONS_OPTION_ADDON_DESC": "Vyber, který doplněk povolit", + "REPLUGGED_COMMAND_ENABLE_MESSAGE_ENABLED": "{type} {name} byl povolen!", + "REPLUGGED_COMMAND_DISABLE_NAME": "zakázat", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "doplněk", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Vyber, který doplněk zakázat", + "REPLUGGED_COMMAND_DISABLE_MESSAGE_ENABLED": "{type} {name} byl zakázán!", + "REPLUGGED_COMMAND_RELOAD_NAME": "přenačíst", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_NAME": "doplněk", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_DESC": "Vyber, který doplněk znovu načíst", + "REPLUGGED_COMMAND_RELOAD_MESSAGE_ENABLED": "{type} {name} byl znovu načten!", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Odešle seznam veřejně do chatu", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_DESC": "Jaký typ doplňku vypsat", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "Vypsat pluginy", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Vypsat motivy", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "verze", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Zahrne do seznamu čísla verzí", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "stav", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "Zakázané", + "REPLUGGED_COMMAND_LIST_HEADER_DISABLED": "Zakázané {type}", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_LINUX": "****VAROVÁNÍ:**** Je možné, že bude nutné **vypnout hardwarovou akceleraci**. V některých případech uvidíš černé pozadí, například když je část okna odříznuta nahoře nebo dole kvůli rozlišení monitoru nebo když jsou otevřené a ukotvené vývojářské nástroje.", + "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Musíš specifikovat, jestli mám poslat seznam pluginů, nebo motivů", + "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Zprůhlední okno Discordu, užitečné zejména pro tvorbu motivů. **Vyžaduje restart**.", + "REPLUGGED_RESTART": "Restartovat" } diff --git a/i18n/de.json b/i18n/de.json index 3abacecd0..b66794a86 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -12,7 +12,7 @@ "REPLUGGED_I18N_TRANSLATED_PERCENTAGE": "Replugged: {translated,number}% übersetzt", "REPLUGGED_LINK_NOW": "Jetzt verbinden", "REPLUGGED_PLUGINS": "Plugins", - "REPLUGGED_QUICKCSS": "Quick CSS", + "REPLUGGED_QUICKCSS": "Schnell CSS", "REPLUGGED_SETTINGS_ADVANCED_DESC": "Fass hier lieber nichts an, außer du weißt was du tust. Unerwartete Dinge könnten deiner Katze widerfahren.", "REPLUGGED_SETTINGS_BACKEND": "Backend URL", "REPLUGGED_SETTINGS_BACKEND_DESC": "URL, welche verwendet wird um Daten für Replugged zu laden und die Replugged REST API abzufragen.", @@ -103,14 +103,14 @@ "REPLUGGED_UPDATES_OPTS_DEBUG_ACCOUNT": "Account:", "REPLUGGED_UPDATES_OPTS_DEBUG_APIS": "APIs:", "REPLUGGED_UPDATES_OPTS_DEBUG_CONNECTIONS": "Verbindungen:", - "REPLUGGED_UPDATES_OPTS_DEBUG_UPSTREAM": "Upstream:", - "REPLUGGED_UPDATES_OPTS_DEBUG_REVISION": "Revision:", + "REPLUGGED_UPDATES_OPTS_DEBUG_UPSTREAM": "Stromaufwärts:", + "REPLUGGED_UPDATES_OPTS_DEBUG_REVISION": "Überarbeitung", "REPLUGGED_UPDATES_OPTS_DEBUG_BRANCH": "Branch:", "REPLUGGED_UPDATES_OPTS_DEBUG_REPLUGGED_PATH": "Replugged Pfad", "REPLUGGED_UPDATES_OPTS_DEBUG_DISCORD_PATH": "Discord Pfad", - "REPLUGGED_UPDATES_UPDATER": "Updater", + "REPLUGGED_UPDATES_UPDATER": "Aktualisierer", "REPLUGGED_NOTICES_WELCOME_NEW_USER": "Willkommen! Replugged wurde erfolgreich in deinen Discord-Client integriert. Fühlen dich frei, unserem Discord-Server für Ankündigungen, Support und mehr beizutreten!", - "REPLUGGED_UPDATES_OPTS_DEBUG_CATEGORY_SYSTEM_DISCORD": "System / Discord", + "REPLUGGED_UPDATES_OPTS_DEBUG_CATEGORY_SYSTEM_DISCORD": "System/Diskord", "REPLUGGED_UPDATES_OPTS_DEBUG_COPIED": "Kopiert!", "REPLUGGED_UPDATES_OPTS_DEBUG_PLUGINS_SHOW_MORE": "Mehr Anzeigen", "REPLUGGED_UPDATES_OPTS_DEBUG_LATEST": "Aktuell:", @@ -123,7 +123,7 @@ "REPLUGGED_COMMAND_DISABLE_DESC": "Deaktiviere ein Plugin oder Theme", "REPLUGGED_COMMAND_RELOAD_DESC": "Ein Plugin oder Theme neu laden", "REPLUGGED_ADDON_DELETE": "Lösche {type}", - "REPLUGGED_ADDON_PAGE_OPEN": "Öffne {type} Seite", + "REPLUGGED_ADDON_PAGE_OPEN": "Öffne {type}-Seite", "REPLUGGED_ADDON_PROFILE_OPEN": "Öffne {type} Profil", "REPLUGGED_ADDON_RELOAD": "Lade {type} neu", "REPLUGGED_ADDON_SETTINGS": "Öffne {type} Einstellungen", @@ -161,7 +161,7 @@ "REPLUGGED_ADDONS_FOLDER_OPEN": "Öffne {type} Ordner", "REPLUGGED_UPDATES_UPDATE_NOUN": "Update", "REPLUGGED_TOAST_ADDONS_LOAD_MISSING_FAILED": "Fehler beim Laden von {type}", - "REPLUGGED_VERSION": "Replugged {version, select, dev {[DEV MODE]} other {v{version}}}", + "REPLUGGED_VERSION": "Neu angeschlossen {version , wählen, dev {[DEV-MODUS]} andere {v{{version}}}}", "REPLUGGED_SETTINGS_BADGES": "Aktivere Replugged Abzeichen", "REPLUGGED_SETTINGS_BADGES_DESC": "Zeige custom Replugged Abzeichen bei Nutzerprofilen.", "REPLUGGED_ADDONS_TITLE_COUNT": "{type} ({count, number})", @@ -209,7 +209,7 @@ "REPLUGGED_COMMAND_RELOAD_MESSAGE_ENABLED": "{type} {name} wurde neu geladen!", "REPLUGGED_COMMAND_LIST_DESC": "Liste alle Plugins und Themes", "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "senden", - "REPLUGGED_SETTINGS_TRANSPARENT": "Durchsichtiges Fenster", + "REPLUGGED_SETTINGS_TRANSPARENT": "Transparentes Fenster", "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_LINUX": "****WARNUNG:**** **Hardware acceleration** muss gegebenenfalls **ausgeschaltet** werden. In manchen Fällen, ist ein schwarzer Hintergrund zu erwarten, wie wenn das Fenster am unteren oder oberen Rand durch die Monitor Auflösung abgeschnitten wird oder wie wenn die Developer Tools offen und angedockt sind.", "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Mache das Discord-Fenster durchsichtig, hauptsächlich zu Nutzen bei Themes. **Benötigt Neustart**.", "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Erfolgreich", @@ -227,5 +227,20 @@ "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_BOTH": "Beides", "REPLUGGED_COMMAND_LIST_HEADER_ENABLED": "{type} aktiviert", "REPLUGGED_COMMAND_LIST_HEADER_DISABLED": "{type} deaktiviert", - "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Du musst angeben ob eine Plugin- oder eine Theme-Liste gesendet werden soll" + "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Du musst angeben ob eine Plugin- oder eine Theme-Liste gesendet werden soll", + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_WINDOWS": "****WARNUNG:**** Dadurch wird **das Einrasten von Fenstern** unterbrochen. In manchen Fällen kann es zu einem schwarzen Hintergrund kommen, etwa wenn das Fenster aufgrund der Monitorauflösung oben oder unten abgeschnitten ist oder wenn die Entwicklungstools geöffnet und angedockt sind.", + "REPLUGGED_COMMAND_DISABLE_NAME": "deaktivieren", + "REPLUGGED_COMMAND_ENABLE_NAME": "aktivieren", + "REPLUGGED_COMMAND_RELOAD_NAME": "nachladen", + "REPLUGGED_COMMAND_LIST_NAME": "Liste", + "REPLUGGED_COMMAND_INSTALL_NAME": "installieren", + "REPLUGGED_COMMAND_INSTALL_DESC": "Installieren Sie ein Plugin oder Theme", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "hinzufügen Auf", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Kennung des zu installierenden Addons aus der Quelle", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "Quelle", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Quelle zur Installation des Addons von", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "Identifikation", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "Wenn die Quelle mehrere Addons enthält, geben Sie an, welches Addon installiert werden soll", + "REPLUGGED_STORE": "speichern" } diff --git a/i18n/el.json b/i18n/el.json index b25a8a56e..a174cbb88 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -66,16 +66,52 @@ "REPLUGGED_PLUGIN_EMBED_WHATISTHIS": "Τι είναι αυτό;", "REPLUGGED_PLUGIN_EMBED_VIEW_REPO": "Προβολή αποθετηρίου", "REPLUGGED_PLUGIN_EMBED_WHATISTHIS_CONTENT": "Αυτή είναι μια λειτουργία του Replugged. Επιτρέπει την εγκατάσταση προσθέτων ή θεμάτων κατευθείαν από την συνομιλία.\nΑπλώς πατήστε το κουμπί εγκατάστασης στο ένθετο.", - "REPLUGGED_COMMAND_ENABLE_DESC": "Ενεργοποίηση ενός πρόσθετου/θέματος", + "REPLUGGED_COMMAND_ENABLE_DESC": "Ενεργοποίηση ενός προσθετόυ ή θέματος", "REPLUGGED_BUTTON_GOT_IT": "Το κατάλαβα", "REPLUGGED_BUTTON_INSTALLER_INSTALLED": "{type} Εγκατεστημένο", "REPLUGGED_BUTTON_INSTALLER_DOWNLOAD": "Λήψη {type}", "REPLUGGED_CANCEL": "Ματαίωση", "REPLUGGED_CONFIRM": "Επιβεβαίωση", "REPLUGGED_OK": "Εντάξει", - "REPLUGGED_COMMAND_DISABLE_DESC": "Απενεργοποίηση ενός πρόσθετου/θέματος", - "REPLUGGED_COMMAND_RELOAD_DESC": "Επαναφόρτωση ενός πρόσθετου/θέματος", + "REPLUGGED_COMMAND_DISABLE_DESC": "Απενεργοποιήστε ένα πρόσθετο ή θέμα", + "REPLUGGED_COMMAND_RELOAD_DESC": "Επαναφόρτωση ενός προσθετόυ ή θέματος", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "Σφάλμα κατά την εκτέλεση της εντολής:", "REPLUGGED_ERROR_CHECK_CONSOLE": "Ελέγξτε την κονσόλα για περισσότερες λεπτομέρειες.", - "REPLUGGED_INSTALL_MODAL_HEADER": "Εγκατάσταση {type}" + "REPLUGGED_INSTALL_MODAL_HEADER": "Εγκατάσταση {type}", + "REPLUGGED_COMMAND_ERROR_GENERIC": "Κάτι πήγε στραβά, δοκιμάστε ξανά αργότερα. Εάν αυτό το ζήτημα επιμένει, επικοινωνήστε με την ομάδα Replugged.", + "REPLUGGED_COMMAND_ENABLE_NAME": "ενεργοποίηση", + "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "πρόσθετο", + "REPLUGGED_COMMAND_DISABLE_NAME": "απενεργοποίηση", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "πρόσθετο", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Επιλέξτε ποιο πρόσθετο θέλετε να απενεργοποιήσετε", + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Επιτυχία", + "REPLUGGED_COMMAND_ADDONS_OPTION_ADDON_DESC": "Επιλέξτε ποιο πρόσθετο θέλετε να ενεργοποιήσετε", + "REPLUGGED_COMMAND_ENABLE_MESSAGE_ENABLED": "το {type} {name} έχει ενεργοποιηθεί!", + "REPLUGGED_COMMAND_DISABLE_MESSAGE_ENABLED": "το {type} {name} έχει απενεργοποιηθεί!", + "REPLUGGED_COMMAND_RELOAD_NAME": "επαναφόρτωση", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_NAME": "πρόσθετο", + "REPLUGGED_COMMAND_RELOAD_MESSAGE_ENABLED": "το {type} {name} έχει επαναφορτωθεί!", + "REPLUGGED_COMMAND_LIST_NAME": "λίστα", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_DESC": "Επιλέξτε ποιο πρόσθετο θέλετε να επαναφόρτωσετε", + "REPLUGGED_COMMAND_LIST_DESC": "Λίστα όλων των πρόσθετων και θέματων", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "στείλε", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Στείλτε τη λίστα δημόσια στο κανάλι", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "είδος", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_DESC": "Τι είδους πρόσθετα να δειξει", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "λίστα πρόσθετων", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "λίστα θεμάτων", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "έκδοση", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Συμπεριλαμβάνει και τους αριθμούς εκδόσεων στη λίστα", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "κατάσταση", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Να εμφανίζονται τα πρόσθετα που είναι ενεργοποιημένα, απενεργοποιημένα ή και τα δύο", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "ενεργοποιημένα", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "απενεργοποιημένα", + "REPLUGGED_COMMAND_LIST_HEADER_ENABLED": "ενεργοποιήθηκε το {type}", + "REPLUGGED_COMMAND_LIST_HEADER_DISABLED": "απενεργοποιήθηκε το {type}", + "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Πρέπει να καθορίσετε εάν θα στείλετε μια λίστα προσθηκών ή θεμάτων", + "REPLUGGED_COMMAND_INSTALL_NAME": "βάλε", + "REPLUGGED_COMMAND_INSTALL_DESC": "εγκαταστήστε ένα πρόσθετο ή θέμα", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "πρόσθετο", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Αναγνωριστικό του πρόσθετου προς εγκατάσταση από την πηγή", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_BOTH": "Και τα δυο" } diff --git a/i18n/en-GB.json b/i18n/en-GB.json index e10d6af88..5437bdf00 100644 --- a/i18n/en-GB.json +++ b/i18n/en-GB.json @@ -233,5 +233,14 @@ "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Whether to show addons that are enabled, disabled or both", "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "Enabled", "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "Disabled", - "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}" + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}", + "REPLUGGED_COMMAND_INSTALL_NAME": "install", + "REPLUGGED_COMMAND_INSTALL_DESC": "Install a plugin or theme", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "addon", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Identifier of the addon to install from the source", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "source", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Source to install the addon from", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "id", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "If the source has multiple addons, specify which one to install", + "REPLUGGED_STORE": "Store" } diff --git a/i18n/es-ES.json b/i18n/es-ES.json index 4a621062d..a3c2d6a73 100644 --- a/i18n/es-ES.json +++ b/i18n/es-ES.json @@ -216,5 +216,7 @@ "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "estado", "REPLUGGED_COMMAND_ERROR_GENERIC": "Ha ocurrido un error, por favor intente mas tarde. Si el problema persiste, contacte al equipo de Replugged.", "REPLUGGED_COMMAND_RELOAD_NAME": "recargar", - "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Incluir el numero de versión en la lista" + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Incluir el numero de versión en la lista", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Comparte la lista públicamente en el chat", + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Éxito" } diff --git a/i18n/et.json b/i18n/et.json index ce8190909..2564532eb 100644 --- a/i18n/et.json +++ b/i18n/et.json @@ -17,7 +17,7 @@ "REPLUGGED_SETTINGS_OVERLAY_DESC": "Avab DevTools'i akna, mis võimaldab teil kontrollida, mis Discord'i mängusiseses ülekattes toimub.", "REPLUGGED_UPDATES_LAST_CHECKED": "Viimati kontrollitud: {date}", "REPLUGGED_UPDATES_OPEN_UPDATER": "Ava Uuendaja", - "REPLUGGED_UPDATES_OPTS_AUTO_DESC": "Replugged saab uuendusi taustal alla laadida ja installida ilma teid liigselt tüütamata. Pange tähele, et uuendused nõuavad kasutaja tegevust, kui on vaja uuesti laadida või kui esineb konflikt.", + "REPLUGGED_UPDATES_OPTS_AUTO_DESC": "Replugged otsib taustal automaatselt uuendusi ja teatab teile kui üks on saadaval. Uuendusi ei installita kuni te otsustate uuendada. Ainult ametlikke lisandeid kontrollitakse automaatselt.", "REPLUGGED_UPDATES_OPTS_CONCURRENCY_DESC": "Mitu samaaegset protsessi Replugged kasutab taustal uuenduste kontrollimiseks. Miinimum 1. Kui pole kindel, jätke 2.", "REPLUGGED_UPDATES_OPTS_RELEASE_DESC": "Valida saab stabiilse haru või arendusharu vahel. Stabiilne haru saab ainult suuremaid uuendusi, turvalisust ja kriitilisi uuendusi. Kui pole kindel, jääge stabiilseks.", "REPLUGGED_UPDATES_OPTS_TOAST_ENABLED_DESC": "Kuvage kliendi kohal ülekate, mis ütleb, et uuendusi otsitakse, ja kui uuendused leitakse, palub teil uuendada. Kehtib ainult siis, kui taustal uuendamine on keelatud.", @@ -42,14 +42,14 @@ "REPLUGGED_UPDATES_ENABLE": "Lubage Uuendused", "REPLUGGED_UPDATES_FAILED": "Mõned uuendused ebaõnnestusid!", "REPLUGGED_UPDATES_FORCE": "Sunniviisiline Uuendamine", - "REPLUGGED_UPDATES_OPTS_AUTO": "Uuenda automaatselt taustal", + "REPLUGGED_UPDATES_OPTS_AUTO": "Kontrolli saadavaid uuendusi automaatselt", "REPLUGGED_UPDATES_OPTS_CHANGE_LOGS": "Ava Muudatuste Logi", "REPLUGGED_UPDATES_OPTS_CHANGE_LOGS_DESC": "Kas jätsite muudatuste logi vahele või soovite seda uuesti näha?", "REPLUGGED_UPDATES_OPTS_CONCURRENCY": "Uuenda Samaaegsuse Limiiti", "REPLUGGED_UPDATES_OPTS_DEBUG": "Silumisinfo", "REPLUGGED_UPDATES_OPTS_DEBUG_DESC": "Asjad, mis võivad teile kasulikuks osutuda tõrkeotsinguks või mõne statistika näitamiseks.", "REPLUGGED_UPDATES_OPTS_INTERVAL": "Uuenduste Kontrollimise Intervall", - "REPLUGGED_UPDATES_OPTS_INTERVAL_DESC": "Kui sageli Replugged uuendusi otsib (minutites). Minimaalselt 10 minutit.", + "REPLUGGED_UPDATES_OPTS_INTERVAL_DESC": "Kui sageli Replugged uuendusi otsib. Minimaalselt 10 minutit.", "REPLUGGED_UPDATES_OPTS_RELEASE": "Muuda Väljalaskekanalit", "REPLUGGED_UPDATES_OPTS_RELEASE_DEVELOP_BTN": "Lülitu arendusharule", "REPLUGGED_UPDATES_OPTS_RELEASE_MODAL": "Kas soovite kindlasti oma väljalaskekanalit muuta? Replugged laadib teie Discordi kliendi uuesti.", @@ -57,16 +57,16 @@ "REPLUGGED_UPDATES_OPTS_RELEASE_STABLE_BTN": "Lülituge stabiilsele", "REPLUGGED_UPDATES_OPTS_RELEASE_SWITCH": "Lülita", "REPLUGGED_UPDATES_OPTS_TOAST_ENABLED": "Kuva uuenduste otsija toostiteade", - "REPLUGGED_UPDATES_UPDATE": "Uuendage Kohe", + "REPLUGGED_UPDATES_UPDATE": "Uuenda", "REPLUGGED_UPDATES_UPDATING": "Replugged Uuendamine…", "REPLUGGED_UPDATES_UPDATING_ITEM": "Uuendamine…", - "REPLUGGED_UPDATES_UP_TO_DATE": "Replugged on ajakohane.", + "REPLUGGED_UPDATES_UP_TO_DATE": "Replugged on kaasaegne.", "REPLUGGED_PLUGIN_EMBED_COPY": "Kopeeri Link", "REPLUGGED_PLUGIN_EMBED_VIEW_REPO": "Vaata Hoidlat", "REPLUGGED_PLUGIN_EMBED_COPIED": "Kopeeritud!", "REPLUGGED_PLUGIN_EMBED_WHATISTHIS": "Mis see on?", "REPLUGGED_PLUGIN_EMBED_WHATISTHIS_CONTENT": "See on Replugged'i funktsioon. See võimaldab teil installida pistikprogramme või teemasid otse vestlusest.\nKlõpsake lihtsalt manustamisel installinuppu.", - "REPLUGGED_COMMAND_ENABLE_DESC": "Lubage pistikprogramm/teema", + "REPLUGGED_COMMAND_ENABLE_DESC": "Lubage pistikprogramm/kujundus", "REPLUGGED_ERROR_ALREADY_INSTALLED": "{name} on juba installitud.", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "Käsu täitmisel ilmnes viga:", "REPLUGGED_ERROR_CHECK_CONSOLE": "Lisateabe saamiseks vaadake konsooli.", @@ -110,12 +110,12 @@ "REPLUGGED_UPDATES_OPTS_DEBUG_REPLUGGED_PATH": "Replugged'i Tee", "REPLUGGED_BUTTON_GOT_IT": "Sain aru", "REPLUGGED_BUTTON_INSTALLER_INSTALLED": "{type} Installitud", - "REPLUGGED_BUTTON_INSTALLER_DOWNLOAD": "Laadi {type} alla", + "REPLUGGED_BUTTON_INSTALLER_DOWNLOAD": "Lae {type} alla", "REPLUGGED_CANCEL": "Tühista", "REPLUGGED_CONFIRM": "Kinnita", "REPLUGGED_OK": "OK", - "REPLUGGED_COMMAND_DISABLE_DESC": "Lülita pistikprogramm/teema välja", - "REPLUGGED_COMMAND_RELOAD_DESC": "Laadige pistikprogramm/teema uuesti", + "REPLUGGED_COMMAND_DISABLE_DESC": "Deaktiveeri pistikprogramm või kujundus", + "REPLUGGED_COMMAND_RELOAD_DESC": "Taaskäivita pistikprogramm või kujundus", "REPLUGGED_SETTINGS_ERROR_HEADER": "Selle elemendi renderdamisel läks midagi valesti!", "REPLUGGED_SETTINGS_ERROR_RENDER_PANEL": "Seadete paneeli renderdamisel ilmnes viga.", "REPLUGGED_SETTINGS_ERROR_COMPONENT_STACK": "Komponentide virn:", @@ -160,5 +160,87 @@ "REPLUGGED_TOAST_INSTALLER_ADDON_LOAD_FAILED": "{name} installiti, kuid seda ei saanud laadida.", "REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_SUCCESS": "{name} installiti edukalt.", "REPLUGGED_TOAST_INSTALLER_ADDON_FETCH_INFO_FAILED": "Lisandmooduli kohta teabe hankimine ebaõnnestus.", - "REPLUGGED_TOAST_INSTALLER_ADDON_CANCELED_INSTALL": "Install tühistati." + "REPLUGGED_TOAST_INSTALLER_ADDON_CANCELED_INSTALL": "Install tühistati.", + "REPLUGGED_COMMAND_ADDONS_OPTION_ADDON_DESC": "Valige milline lisand aktiveerida", + "REPLUGGED_COMMAND_ERROR_GENERIC": "Midagi läks valesti, palun proovige hiljem uuesti. Kui probleem jätkub, palun võtke Replugged-i meeskonnaga ühendust.", + "REPLUGGED_COMMAND_ENABLE_NAME": "aktiveeri", + "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "lisand", + "REPLUGGED_COMMAND_ENABLE_MESSAGE_ENABLED": "{type} {name} on aktiveeritud!", + "REPLUGGED_COMMAND_DISABLE_NAME": "deaktiveeri", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "lisand", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Valige milline lisand deaktiveerida", + "REPLUGGED_COMMAND_DISABLE_MESSAGE_ENABLED": "{type} {name} on deaktiveeritud!", + "REPLUGGED_COMMAND_RELOAD_NAME": "taaskäivita", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_NAME": "lisand", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_DESC": "Valige milline lisand taaskäivitada", + "REPLUGGED_COMMAND_RELOAD_MESSAGE_ENABLED": "{type} {name} on taaskäivitatud!", + "REPLUGGED_COMMAND_LIST_NAME": "nimekiri", + "REPLUGGED_COMMAND_LIST_DESC": "Loetle kõik pistikprogrammid või kujundused", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "saada", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Jaga nimekiri avalikult vestluses", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "tüüp", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_DESC": "Millist tüüpi lisandeid näidata", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "versioon", + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Õnnestus", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "Loetle Pistikprogramme", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Loetle Kujundusi", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Sisalda versiooni numbred nimekirjas", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "staatus", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Kas näidata lisanded mis on aktiveeritud, deaktiveeritud, või mõlemaid", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "Aktiveeritud", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "Deaktiveeritud", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_BOTH": "Mõlemad", + "REPLUGGED_ADDON_BROWSE": "Sirvi {type}", + "REPLUGGED_ADDON_NOT_REVIEWED": "Ülevaatamata {type}", + "REPLUGGED_ADDON_NOT_REVIEWED_DESC": "See {type} ei ole Repluggedi meeskonna poolt üle kontrollitud ja võib teie arvutile halba teha. Kasutage omal vastutusel.", + "REPLUGGED_SETTINGS_QUICKCSS_AUTO_APPLY": "Automaatselt Rakenda Kiire CSS", + "REPLUGGED_SETTINGS_QUICKCSS_AUTO_APPLY_DESC": "Automaatselt rakendab muutused Kiires CSS-is kui te kirjutate.", + "REPLUGGED_I18N": "Replugged Tõlked", + "REPLUGGED_SETTINGS_DEV_COMPANION": "Taasühenda Arenduskaaslane (Dev Companion)", + "REPLUGGED_SETTINGS_ADDON_EMBEDS_DESC": "Näitab lisandi informatsiooniga manust siis, kui poe/installimise link on vestluses jagatud.", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_LINUX": "****HOIATUS:**** **Riistvara kiirendus** on võib-olla vaja **välja lülitada**. Mõnel juhul võite te kogeda musta tausta, nagu kui aken on ülevalt või alt maha lõigatud ekraani resolutsiooni pärast, või kui arenadaja tööriistad on lahti ja dokitud.", + "REPLUGGED_SETTINGS_DEV_COMPANION_DESC": "Taasühendab Arenduskaaslase põhilisandi VSCode lisandiga.", + "REPLUGGED_SETTINGS_DEV_COMPANION_RECONNECT": "Taasühenda", + "REPLUGGED_SETTINGS_ADVANCED": "Muud Seadistused", + "REPLUGGED_SETTINGS_REACT_DEVTOOLS": "Aktiveeri React DevTools-id", + "REPLUGGED_SETTINGS_REACT_DEVTOOLS_DESC": "Aktiveerib React DevTools lisandi, mis lubab teil inspekteerida Reacti puud ja lihtsamini probleeme siluda. **Vajab uuesti avamist**.", + "REPLUGGED_VIEW_UPDATES": "Vaata {count, plural, =1 {# Uuendust} other {# Uuendust}}", + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Pistikprogramm: {name}", + "REPLUGGED_DEVELOPER_MODE_WARNING": "Praegu jookseb teie Replugged arendaja režiimis ja Replugged ei saa ennast uuendada. [Vaheta tootmisrežiimi]({url}).", + "REPLUGGED_SETTINGS_REACT_DEVTOOLS_FAILED": "React DevTools-ide allalaadimine ebaõnnestus.", + "REPLUGGED_COMMAND_INSTALL_NAME": "installi", + "REPLUGGED_COMMAND_INSTALL_DESC": "Installi pistikprogramm või kujundus", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "lisand", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Lisandi identifikaator, et see lähtekoodist installida", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "lähtekood", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Lähtekood millest tulenev lisand installida", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "id", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "Kui lähtekoodis on mitu lisandit, täpsusta milline neist installida", + "REPLUGGED_SETTINGS_BADGES": "Aktiveeri Repluggedi Märgid", + "REPLUGGED_SETTINGS_BADGES_DESC": "Näita isikupäraseid Repluggedi märke kasutajate profiilidel.", + "REPLUGGED_UPDATES_AVAILABLE": "{count, plural, =1 {# uuendus on} other {# uuendused on}} saadaval.", + "REPLUGGED_STORE": "Pood", + "REPLUGGED_INSTALLER_OPEN_STORE": "Vaata Poes", + "REPLUGGED_SETTINGS_ADDON_EMBEDS": "Näita Lisandite Manuseid", + "REPLUGGED_RESTART": "Taaskäivita", + "REPLUGGED_SETTINGS_RESTART_TITLE": "Taaskäivitamine Vajalik", + "REPLUGGED_SETTINGS_TRANSPARENT": "Läbipaistev Aken", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_WINDOWS": "****HOIATUS:**** See teeb katki **akna kuvaletõmbamise (window snapping)**. Mõnel juhul võite te kogeda musta tausta, nagu kui aken on ülevalt või alt maha lõigatud ekraani resolutsiooni pärast, või kui arenadaja tööriistad on lahti ja dokitud.", + "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Teeb Discord-i akna läbipaistvaks, mis on peamiselt kasulik kujunduseks. **Vajab Taaskäivitamist**.", + "REPLUGGED_COMMAND_LIST_HEADER_ENABLED": "Aktiveeritud {type}", + "REPLUGGED_COMMAND_LIST_HEADER_DISABLED": "Deaktiveeritud {type}", + "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Sa pead valima kas saata pistikprogrammide või kujunduste nimekiri", + "REPLUGGED_UPDATES_UPDATE_NOUN": "Uuendus", + "REPLUGGED_VERSION": "Replugged {version, select, dev {[DEV MODE]} other {v{version}}}", + "REPLUGGED_UPDATES_TOAST_SUCCESS_ALL": "Kõik uuendused edukalt installitud.", + "REPLUGGED_PLUGIN_INSTALL_RELOAD_PROMPT_BODY": "{name} vajab taaslaadimist, et korralikult töödata. Taaslaadi kohe?", + "REPLUGGED_ADDON_AUTHORS_MANY": "{author1}, {author2}, {author3} ja {count, plural, =1 {# teine} other {# teist}}", + "REPLUGGED_UPDATES_UPDATE_ALL": "Uuenda Kõik", + "REPLUGGED_UPDATES_UPDATE_TO": "Uuenda versioonile {version}", + "REPLUGGED_UPDATES_TOAST_NO_NEW": "Ühtegi uuendust pole saadaval.", + "REPLUGGED_UPDATES_TOAST_FAILED_ONE": "Uuendus ebaõnnestus!", + "REPLUGGED_UPDATES_TOAST_FAILED_ALL": "Mõned uuendused ebaõnnestusid!", + "REPLUGGED_UPDATES_TOAST_SUCCESS_ONE": "Uuendus lõpetatud edukalt.", + "REPLUGGED_UPDATES_TOAST_NEW": "{count, plural, =1 {# uus uuendus} other {# uut uuendust}} on saadaval!", + "REPLUGGED_RELOAD": "Taaslaadi" } diff --git a/i18n/fi.json b/i18n/fi.json index 6fc032514..4a1068a95 100644 --- a/i18n/fi.json +++ b/i18n/fi.json @@ -12,7 +12,7 @@ "REPLUGGED_I18N_TRANSLATED_PERCENTAGE": "Replugged: {translated,number}% käännetty", "REPLUGGED_LINK_NOW": "Linkitä se nyt", "REPLUGGED_PLUGINS": "Pluginit", - "REPLUGGED_QUICKCSS": "Pika-CSS", + "REPLUGGED_QUICKCSS": "Quick CSS", "REPLUGGED_SETTINGS_BACKEND": "Backend URL", "REPLUGGED_SETTINGS_BACKEND_DESC": "URL, jota käytetään muutaman tavaran hakuun ja Repluggedin REST-ohjelmointirajapinnan pyyntöihin.", "REPLUGGED_BADGES_STAFF": "Repluggedin henkilökunta", @@ -198,23 +198,49 @@ "REPLUGGED_RESTART": "Uudelleenkäynnistä", "REPLUGGED_SETTINGS_RESTART_TITLE": "Uudelleenkäynnistys vaaditaan", "REPLUGGED_COMMAND_ERROR_GENERIC": "Jokin meni pieleen, yritä uudelleen myöhemmin. Jos vika jatkuu, ota yhteyttä Replugged teamiin.", - "REPLUGGED_COMMAND_ENABLE_NAME": "ota käyttöön", + "REPLUGGED_COMMAND_ENABLE_NAME": "aktivoi", "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "lisäosa", "REPLUGGED_COMMAND_ADDONS_OPTION_ADDON_DESC": "Valitse mikä lisäosa otetaan käyttöön", "REPLUGGED_COMMAND_ENABLE_MESSAGE_ENABLED": "{type} {name} otettiin käyttöön!", - "REPLUGGED_COMMAND_DISABLE_NAME": "poista käytöstä", + "REPLUGGED_COMMAND_DISABLE_NAME": "epäaktivoi", "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "lisäosa", "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Valitse mikä lisäosa poistetaan käytöstä", "REPLUGGED_COMMAND_DISABLE_MESSAGE_ENABLED": "{type} {name} poistettiin käytöstä!", - "REPLUGGED_COMMAND_RELOAD_NAME": "lataa uudelleen", + "REPLUGGED_COMMAND_RELOAD_NAME": "lataa-uudelleen", "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_NAME": "lisäosa", "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_DESC": "Valitse mikä lisäosa ladataan uudelleen", "REPLUGGED_COMMAND_RELOAD_MESSAGE_ENABLED": "{type} {name} ladattiin uudelleen!", - "REPLUGGED_COMMAND_LIST_NAME": "lista", + "REPLUGGED_COMMAND_LIST_NAME": "listaa", "REPLUGGED_COMMAND_LIST_DESC": "Listaa kaikki pluginit ja teemat", "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "lähetä", "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "Jos lähteessä on useita lisäosia, valitse mikä asennetaan", "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "id", "REPLUGGED_STORE": "Kauppa", - "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Onnistui" + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Onnistui", + "REPLUGGED_COMMAND_LIST_HEADER_DISABLED": "Otettiin {type} pois käytöstä", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Jaa lista julkisesti chatissa", + "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Sinun on määritettävä, lähetetäänkö plugin- vai teemalista", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "tyyppi", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_DESC": "Minkä tyyppiset lisäosat näytetään", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "versio", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Sisällytä versionumerot listaan", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "tila", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Näytetäänkö lisäosat, jotka ovat käytössä, pois käytöstä vai molemmat", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "Käytössä", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "Ei Käytössä", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_BOTH": "Molemmat", + "REPLUGGED_COMMAND_LIST_HEADER_ENABLED": "Otettiin {type} käyttöön", + "REPLUGGED_COMMAND_INSTALL_NAME": "asenna", + "REPLUGGED_COMMAND_INSTALL_DESC": "Asenna plugin tai teema", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "Listaa Pluginit", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Listaa Teemat", + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "lisäosa", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "lähde", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Lähde josta lisäosa asennetaan", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Lähteestä asennettavan lisäosan tunniste", + "REPLUGGED_SETTINGS_TRANSPARENT": "Läpinäkyvä Ikkuna", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_LINUX": "****VAROITUS:**** **Laitteistokiihdytys** on ehkä **poistettava käytöstä**. Joissain tapauksissa saatat kokea mustan taustan, kuten jos ikkuna on leikattu ylä- tai alaosasta monitorin resoluution takia, tai kun kehitystyökalut on auki ja telakoituna.", + "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Tekee Discordin ikkunasta läpinäkyvän, käytetään ensisijaisesti teemaamiseen. **Vaatii uudelleenkäynnistyksen**.", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_WINDOWS": "****VAROITUS:**** Tämä rikkoo **ikkunan napsahtamisen**. Joissain tapauksissa saatat kokea mustan taustan, kuten jos ikkuna on leikattu ylä- tai alaosasta monitorin resoluution takia, tai kun kehitystyökalut on auki ja telakoituna." } diff --git a/i18n/it.json b/i18n/it.json index a5b2d991d..a41dcc968 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -233,5 +233,14 @@ "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Completato", "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "Elenca plugin", "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Elenca temi", - "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}" + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}", + "REPLUGGED_COMMAND_INSTALL_NAME": "installa", + "REPLUGGED_COMMAND_INSTALL_DESC": "Installa un plugin o un tema", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "addon", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "sorgente", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Identificatore dell'addon da installare dalla sorgente", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Sorgente da cui installare l'addon", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "id", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "Se la sorgente ha più addon, specifica quale installare", + "REPLUGGED_STORE": "Store" } diff --git a/i18n/ja.json b/i18n/ja.json index a6f31c370..de014e2e8 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -70,7 +70,7 @@ "REPLUGGED_CONFIRM": "確認", "REPLUGGED_OK": "OK", "REPLUGGED_COMMAND_DISABLE_DESC": "プラグイン/テーマを無効にする", - "REPLUGGED_ERROR_ALREADY_INSTALLED": "{name}は既にインストールされています。", + "REPLUGGED_ERROR_ALREADY_INSTALLED": "{name} は既にインストールされています。", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "正しくコマンドを実行できませんでした:", "REPLUGGED_ERROR_CHECK_CONSOLE": "詳細はコンソールを確認してください。", "REPLUGGED_NOTICES_WELCOME_NEW_USER": "ようこそ!Replugged はあなたのDiscordクライアントに正常に導入されました。気軽に私たちのDiscord サーバーに参加すると、アナウンスやサポートなどを得る事が出来ます!", @@ -127,7 +127,7 @@ "REPLUGGED_ADDON_RELOAD": "{type} を再読み込み", "REPLUGGED_ADDON_SETTINGS": "{type} の設定を開く", "REPLUGGED_ADDON_UNINSTALL_PROMPT_BODY": "本当にこの{type}をアンインストールしますか?これは元に戻せません。", - "REPLUGGED_ADDON_UNINSTALL": "{name}をアンインストール", + "REPLUGGED_ADDON_UNINSTALL": "{name} をアンインストール", "REPLUGGED_ADDONS_FOLDER_OPEN": "{type}フォルダーを開く", "REPLUGGED_ADDONS_LOAD_MISSING": "不足している{type}を読み込む", "REPLUGGED_ADDONS_TITLE_COUNT": "{type} ({count, number})", @@ -135,13 +135,13 @@ "REPLUGGED_NO_ADDONS_INSTALLED": "{type}はインストールされていません。", "REPLUGGED_QUICKCSS_CHANGES_APPLY": "変更を適用", "REPLUGGED_SEARCH_FOR_ADDON": "{type}を検索", - "REPLUGGED_TOAST_ADDON_DISABLE_SUCCESS": "無効な{name}", - "REPLUGGED_TOAST_ADDON_ENABLE_SUCCESS": "有効な{name}", - "REPLUGGED_TOAST_ADDON_RELOAD_FAILED": "{name}の再読み込みに失敗しました", - "REPLUGGED_TOAST_ADDON_RELOAD_SUCCESS": "{name}を再読み込みしました", - "REPLUGGED_TOAST_ADDON_TOGGLE_FAILED": "{name}の切り替えに失敗しました", - "REPLUGGED_TOAST_ADDON_UNINSTALL_FAILED": "{name}のアンインストールに失敗しました", - "REPLUGGED_TOAST_ADDON_UNINSTALL_SUCCESS": "{name}をアンインストールしました", + "REPLUGGED_TOAST_ADDON_DISABLE_SUCCESS": "{name} を無効化しました", + "REPLUGGED_TOAST_ADDON_ENABLE_SUCCESS": "{name} を無効化しました", + "REPLUGGED_TOAST_ADDON_RELOAD_FAILED": "{name} の再読み込みに失敗しました", + "REPLUGGED_TOAST_ADDON_RELOAD_SUCCESS": "{name} を再読み込みしました", + "REPLUGGED_TOAST_ADDON_TOGGLE_FAILED": "{name} の切り替えに失敗しました", + "REPLUGGED_TOAST_ADDON_UNINSTALL_FAILED": "{name} のアンインストールに失敗しました", + "REPLUGGED_TOAST_ADDON_UNINSTALL_SUCCESS": "{name} をアンインストールしました", "REPLUGGED_TOAST_ADDONS_LOAD_MISSING_FAILED": "不足している{type}の読み込みに失敗しました", "REPLUGGED_TOAST_ADDONS_LOAD_MISSING_SUCCESS": "不足している{type}を読み込みました", "REPLUGGED_TOAST_PROFILE_FETCH_FAILED": "ユーザープロフィールの取得に失敗しました", @@ -152,8 +152,8 @@ "REPLUGGED_LIST_RESULTS": "{count, number}個一致しました", "REPLUGGED_PLUGIN_INSTALL_RELOAD_PROMPT_BODY": "{name} を正しく動作させるには再読み込みが必要です。今すぐ再読み込みしますか?", "REPLUGGED_RELOAD": "再読み込み", - "REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_FAILED": "{name}のインストールに失敗しました。", - "REPLUGGED_INSTALLER_INSTALL_PROMPT_BODY": "{name} {authors}をインストールしますか?", + "REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_FAILED": "{name} のインストールに失敗しました。", + "REPLUGGED_INSTALLER_INSTALL_PROMPT_BODY": "{name} {authors} をインストールしますか?", "REPLUGGED_COMMAND_DISABLE_MESSAGE_ENABLED": "{type} {name} は無効化されました!", "REPLUGGED_COMMAND_RELOAD_MESSAGE_ENABLED": "{type} {name} はリロードされました!", "REPLUGGED_DEVELOPER_MODE_WARNING": "現在、開発者モードで Replugged を実行しているため、Replugged 自体のアップデートができません。[本番モードに切り替えてください。]({url})", @@ -236,8 +236,8 @@ "REPLUGGED_ADDON_AUTHORS_TWO": "作者: {author1}, {author2}", "REPLUGGED_ADDON_AUTHORS_THREE": "作者: {author1}, {author2}, {author3}", "REPLUGGED_CONFIRM_INSTALL": "インストール", - "REPLUGGED_TOAST_INSTALLER_ADDON_LOAD_FAILED": "{name}はインストールされましたが、ロードできませんでした。", - "REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_SUCCESS": "{name}が正常にインストールされました。", + "REPLUGGED_TOAST_INSTALLER_ADDON_LOAD_FAILED": "{name} はインストールされましたが、ロードできませんでした。", + "REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_SUCCESS": "{name} が正常にインストールされました。", "REPLUGGED_UPDATES_UPDATE_ALL": "すべてアップデート", "REPLUGGED_UPDATES_TOAST_NO_NEW": "新しいアップデートはありません。", "REPLUGGED_UPDATES_TOAST_FAILED_ALL": "アップデート失敗!", diff --git a/i18n/pl.json b/i18n/pl.json index 2b8a788c1..73336affe 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -211,8 +211,8 @@ "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Musisz określić, czy chcesz wysłać listę wtyczek czy motywów", "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "Włączone", "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "Wyłączone", - "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Udostępnij listę publicznie na czacie", - "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Uwzględnij numery wersji w liście", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Czy udostępnić listę publicznie na czacie", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Czy uwzględnić numery wersji w liście", "REPLUGGED_COMMAND_LIST_DESC": "Wyświetl listę wszystkich wtyczek lub motywów", "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_BOTH": "Wszystkie", "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Wybierz, który z dodatków chcesz wyłączyć", diff --git a/i18n/ru.json b/i18n/ru.json index d104eb3d0..b92e22d0d 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -67,8 +67,8 @@ "REPLUGGED_PLUGIN_EMBED_WHATISTHIS": "Что это?", "REPLUGGED_PLUGIN_EMBED_WHATISTHIS_CONTENT": "Это функция Replugged. Она позволяет тебе устанавливать плагины или темы прямо из чата.\nПросто нажми на кнопку установки в сообщении.", "REPLUGGED_PLUGIN_EMBED_COPY": "Копировать Ссылку", - "REPLUGGED_COMMAND_ENABLE_DESC": "Включить плагин/тему", - "REPLUGGED_COMMAND_RELOAD_DESC": "Перезагрузить плагин/тему", + "REPLUGGED_COMMAND_ENABLE_DESC": "Включить плагин или тему", + "REPLUGGED_COMMAND_RELOAD_DESC": "Перезагрузить плагин или тему", "REPLUGGED_NOTICES_WELCOME_NEW_USER": "Добро пожаловать! Replugged был успешно внедрен в ваш клиент Discord. Не стесняйтесь присоединяться к нашему серверу Discord для объявлений, поддержки и многого другого!", "REPLUGGED_UPDATES_OPTS_DEBUG_CATEGORY_SYSTEM_DISCORD": "Система / Discord", "REPLUGGED_UPDATES_OPTS_DEBUG_ARCH": "Архитектура:", @@ -82,7 +82,7 @@ "REPLUGGED_CANCEL": "Отмена", "REPLUGGED_CONFIRM": "Подтвердить", "REPLUGGED_OK": "ОК", - "REPLUGGED_COMMAND_DISABLE_DESC": "Отключить плагин/тему", + "REPLUGGED_COMMAND_DISABLE_DESC": "Отключить плагин или тему", "REPLUGGED_BUTTON_INSTALLER_DOWNLOAD": "Скачать {type}", "REPLUGGED_ERROR_ALREADY_INSTALLED": "{name} уже установлен.", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "Произошла ошибка во время исполнения команнды:", @@ -196,5 +196,39 @@ "REPLUGGED_SETTINGS_ADDON_EMBEDS_DESC": "Посмотреть в хранилище.", "REPLUGGED_SETTINGS_ADDON_EMBEDS": "Показывать карточку с информацией об аддоне, при отправке ссылки на хранилище/установку в чате", "REPLUGGED_RESTART": "Перезагрузить", - "REPLUGGED_SETTINGS_RESTART_TITLE": "Требуется перезагрузка" + "REPLUGGED_SETTINGS_RESTART_TITLE": "Требуется перезагрузка", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_WINDOWS": "****ПРЕДУПРЕЖДЕНИЕ:**** Это приведет к нарушению **привязки окна**. В некоторых случаях может появиться черный фон, например, когда окно обрезается сверху или снизу из-за разрешения монитора, или когда инструменты разработки открыты и пристыкованы.", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_LINUX": "****ПРЕДУПРЕЖДЕНИЕ:**** **Аппаратное ускорение** может потребоваться **отключить**. В некоторых случаях может появиться черный фон, например, когда окно обрезается сверху или снизу из-за разрешения монитора, или когда инструменты разработки открыты и пристыкованы.", + "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Делает окно Discord прозрачным, полезно в создании тем. **Требуется перезапуск**.", + "REPLUGGED_COMMAND_ERROR_GENERIC": "Что-то пошло не так, повторите попытку позже. Если проблема остается, обратитесь к команде Replugged.", + "REPLUGGED_COMMAND_ENABLE_NAME": "включить", + "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "дополнение", + "REPLUGGED_COMMAND_ADDONS_OPTION_ADDON_DESC": "Выберите, какое дополнение включить", + "REPLUGGED_COMMAND_ENABLE_MESSAGE_ENABLED": "{type} {name} был включен!", + "REPLUGGED_COMMAND_DISABLE_NAME": "отключить", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "дополнение", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Выберите, какое дополнение отключить", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_NAME": "дополнение", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_DESC": "Выберите, какое дополнение перезагрузить", + "REPLUGGED_COMMAND_DISABLE_MESSAGE_ENABLED": "{type} {name} было отключено!", + "REPLUGGED_COMMAND_RELOAD_NAME": "перезагрузить", + "REPLUGGED_COMMAND_RELOAD_MESSAGE_ENABLED": "{type} {name} перезагружен!", + "REPLUGGED_COMMAND_LIST_NAME": "список", + "REPLUGGED_COMMAND_LIST_DESC": "Список всех плагинов и тем", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "отправить", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "тип", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "Включенные", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "Отключенные", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_BOTH": "Все", + "REPLUGGED_COMMAND_LIST_HEADER_ENABLED": "Включено {type}", + "REPLUGGED_COMMAND_LIST_HEADER_DISABLED": "Отключено {type}", + "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Необходимо указать, отправлять список плагинов или тем", + "REPLUGGED_SETTINGS_TRANSPARENT": "Прозрачное окно", + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Успех", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Поделиться списком в чате", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_DESC": "Какой тип дополнений показать", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "версия", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Включить номер версий в список", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "статус", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Показывать ли включенные, отключенные или все дополнения" } diff --git a/i18n/tr.json b/i18n/tr.json index f6147fac0..fe166e04d 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -232,5 +232,15 @@ "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Discord penceresini geçirgen yapar, daha çok temalar içindir. **Yeniden başlatma gerektirir**.", "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Başarılı", "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "Eklentileri Listele", - "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Temaları Listele" + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Temaları Listele", + "REPLUGGED_COMMAND_INSTALL_NAME": "kur", + "REPLUGGED_COMMAND_INSTALL_DESC": "Bir plugin veya tema kur", + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Eklenti: {name}", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "eklenti", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Kaynağından indirmek için eklentinin tanımlayıcısı", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "kaynak", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Eklentiyi indirmek için kaynak", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "id", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "Kaynakta birden fazla eklenti varsa hangisinin kurulacağını belirt", + "REPLUGGED_STORE": "Mağaza" } diff --git a/i18n/uk.json b/i18n/uk.json index c2ca9133f..140b4f1c9 100644 --- a/i18n/uk.json +++ b/i18n/uk.json @@ -197,7 +197,7 @@ "REPLUGGED_SETTINGS_ADDON_EMBEDS_DESC": "Показувати картку з інформацією про аддон коли посилання в магазин чи встановлення поширено в чаті.", "REPLUGGED_RESTART": "Перезавантажити", "REPLUGGED_SETTINGS_RESTART_TITLE": "Потрібне перезавантаження", - "REPLUGGED_COMMAND_ERROR_GENERIC": "Щось пішло не так, спробуйте пізніше. Якщо проблема не зникне, зверніться до команли Replugged.", + "REPLUGGED_COMMAND_ERROR_GENERIC": "Щось пішло не так, спробуйте пізніше. Якщо проблема не зникне, зверніться до команди Replugged.", "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "аддон", "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "аддон", "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Виберіть, який аддон вимкнути", @@ -227,5 +227,11 @@ "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Чи показувати ввімкнуті, вимкнені або всі аддони", "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "Вам потрібно вказати, чи відправити список плагінінів або список тем", "REPLUGGED_SETTINGS_TRANSPARENT": "Прозоре вікно", - "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Робить вікно Discord прозорим, що є доволі корисним для створення тем. **Потрібне перезавантаження**." + "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Робить вікно Discord прозорим, що є доволі корисним для створення тем. **Потрібне перезавантаження**.", + "REPLUGGED_COMMAND_INSTALL_NAME": "встановити", + "REPLUGGED_COMMAND_INSTALL_DESC": "Встановити плагін чи тему", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "аддон", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Ідентифікатор доповнення для встановлення з джерела", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "джерело", + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Успіх" } diff --git a/package.json b/package.json index 71656f048..3568361c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "replugged", - "version": "4.6.3", + "version": "4.7.4", "description": "A lightweight @discord client mod focused on simplicity and performance", "license": "MIT", "main": "dist/main.mjs", @@ -37,65 +37,66 @@ "url": "https://github.com/replugged-org/replugged/issues" }, "devDependencies": { - "@types/adm-zip": "^0.5.0", - "@types/highlightjs": "^9.12.2", - "@types/lodash": "^4.14.197", - "@types/node": "^18.17.11", - "@types/prompts": "^2.4.4", - "@types/react": "^18.2.21", - "@types/react-dom": "^18.2.7", - "@types/react-reconciler": "^0.28.3", - "@types/semver": "^7.5.0", - "@types/superagent": "^4.1.18", - "@types/update-notifier": "^6.0.4", - "@types/ws": "^8.5.5", - "@types/yargs": "^17.0.24", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", - "cspell": "^6.31.3", - "discord-types": "^1.3.26", - "eslint": "^8.48.0", - "eslint-config-dmitmel": "github:dmitmel/eslint-config-dmitmel#690f1b1121d342fcc8ee511ca9f2af7502f53db6", + "@types/adm-zip": "^0.5.3", + "@types/highlightjs": "^9.12.4", + "@types/lodash": "^4.14.200", + "@types/node": "^18.18.6", + "@types/prompts": "^2.4.7", + "@types/react": "^18.2.29", + "@types/react-dom": "^18.2.14", + "@types/react-reconciler": "^0.28.6", + "@types/semver": "^7.5.4", + "@types/superagent": "^4.1.20", + "@types/update-notifier": "^6.0.6", + "@types/ws": "^8.5.8", + "@types/yargs": "^17.0.29", + "@typescript-eslint/eslint-plugin": "^6.8.0", + "@typescript-eslint/parser": "^6.8.0", + "cspell": "^7.3.8", + "discord-types": "^1.3.3", + "eslint": "^8.51.0", + "eslint-config-dmitmel": "github:dmitmel/eslint-config-dmitmel", "eslint-plugin-node": "^11.1.0", "eslint-plugin-react": "^7.33.2", "moment": "^2.29.4", "np": "^8.0.4", - "prettier": "^2.8.8", + "prettier": "^3.0.3", "simple-markdown": "^0.7.3", "style-mod": "^4.1.0", - "tsx": "^3.12.7", - "type-fest": "^3.13.1", - "typedoc": "^0.23.28", - "typescript": "~5.0.4" + "type-fest": "^4.5.0", + "typedoc": "^0.25.2", + "typescript": "^5.2.2" }, "files": [ "dist", "bin", - "*.d.ts" + "scripts", + "*.d.ts", + "src/util.mts" ], "dependencies": { "@codemirror/lang-css": "^6.2.1", - "@codemirror/language": "^6.9.0", - "@codemirror/state": "^6.2.1", + "@codemirror/language": "^6.9.1", + "@codemirror/state": "^6.3.1", "@ddietr/codemirror-themes": "^1.4.2", - "@electron/asar": "^3.2.4", + "@electron/asar": "^3.2.7", "@lezer/highlight": "^1.1.6", - "@octokit/rest": "^19.0.13", - "@types/esm": "^3.2.0", + "@octokit/rest": "^20.0.2", "adm-zip": "^0.5.10", "chalk": "^5.3.0", "codemirror": "^6.0.1", - "esbuild": "^0.19.2", - "esbuild-sass-plugin": "^2.13.0", + "esbuild": "^0.19.5", + "esbuild-sass-plugin": "^2.16.0", "esm": "^3.2.25", "node-fetch": "^3.3.2", "prompts": "^2.4.2", "semver": "^7.5.4", "standalone-electron-types": "^1.0.0", + "tsx": "^3.14.0", "update-notifier": "^6.0.2", - "ws": "^8.13.0", + "ws": "^8.14.2", "yargs": "^17.7.2", - "zod": "^3.22.2" + "zod": "^3.22.4" }, "bin": { "replugged": "bin.mjs" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f94fe71e7..0d4ad3d15 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,28 +10,25 @@ overrides: dependencies: '@codemirror/lang-css': specifier: ^6.2.1 - version: 6.2.1(@codemirror/view@6.16.0) + version: 6.2.1(@codemirror/view@6.21.3) '@codemirror/language': - specifier: ^6.9.0 - version: 6.9.0 + specifier: ^6.9.1 + version: 6.9.1 '@codemirror/state': - specifier: ^6.2.1 - version: 6.2.1 + specifier: ^6.3.1 + version: 6.3.1 '@ddietr/codemirror-themes': specifier: ^1.4.2 version: 1.4.2 '@electron/asar': - specifier: ^3.2.4 - version: 3.2.4 + specifier: ^3.2.7 + version: 3.2.7 '@lezer/highlight': specifier: ^1.1.6 version: 1.1.6 '@octokit/rest': - specifier: ^19.0.13 - version: 19.0.13 - '@types/esm': - specifier: ^3.2.0 - version: 3.2.0 + specifier: ^20.0.2 + version: 20.0.2 adm-zip: specifier: ^0.5.10 version: 0.5.10 @@ -40,13 +37,13 @@ dependencies: version: 5.3.0 codemirror: specifier: ^6.0.1 - version: 6.0.1(@lezer/common@1.0.4) + version: 6.0.1(@lezer/common@1.1.0) esbuild: - specifier: ^0.19.2 - version: 0.19.3 + specifier: ^0.19.5 + version: 0.19.5 esbuild-sass-plugin: - specifier: ^2.13.0 - version: 2.15.0(esbuild@0.19.3) + specifier: ^2.16.0 + version: 2.16.0(esbuild@0.19.5) esm: specifier: ^3.2.25 version: 3.2.25 @@ -62,110 +59,110 @@ dependencies: standalone-electron-types: specifier: ^1.0.0 version: 1.0.0 + tsx: + specifier: ^3.14.0 + version: 3.14.0 update-notifier: specifier: ^6.0.2 version: 6.0.2 ws: - specifier: ^8.13.0 - version: 8.13.0 + specifier: ^8.14.2 + version: 8.14.2 yargs: specifier: ^17.7.2 version: 17.7.2 zod: - specifier: ^3.22.2 - version: 3.22.2 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@types/adm-zip': - specifier: ^0.5.0 - version: 0.5.0 + specifier: ^0.5.3 + version: 0.5.3 '@types/highlightjs': - specifier: ^9.12.2 - version: 9.12.2 + specifier: ^9.12.4 + version: 9.12.4 '@types/lodash': - specifier: ^4.14.197 - version: 4.14.197 + specifier: ^4.14.200 + version: 4.14.200 '@types/node': - specifier: ^18.17.11 - version: 18.17.11 + specifier: ^18.18.6 + version: 18.18.6 '@types/prompts': - specifier: ^2.4.4 - version: 2.4.4 + specifier: ^2.4.7 + version: 2.4.7 '@types/react': - specifier: ^18.2.21 - version: 18.2.21 + specifier: ^18.2.29 + version: 18.2.29 '@types/react-dom': - specifier: ^18.2.7 - version: 18.2.7 + specifier: ^18.2.14 + version: 18.2.14 '@types/react-reconciler': - specifier: ^0.28.3 - version: 0.28.3 + specifier: ^0.28.6 + version: 0.28.6 '@types/semver': - specifier: ^7.5.0 - version: 7.5.0 + specifier: ^7.5.4 + version: 7.5.4 '@types/superagent': - specifier: ^4.1.18 - version: 4.1.18 + specifier: ^4.1.20 + version: 4.1.20 '@types/update-notifier': - specifier: ^6.0.4 - version: 6.0.4 + specifier: ^6.0.6 + version: 6.0.6 '@types/ws': - specifier: ^8.5.5 - version: 8.5.5 + specifier: ^8.5.8 + version: 8.5.8 '@types/yargs': - specifier: ^17.0.24 - version: 17.0.24 + specifier: ^17.0.29 + version: 17.0.29 '@typescript-eslint/eslint-plugin': - specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.0.4) + specifier: ^6.8.0 + version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^5.62.0 - version: 5.62.0(eslint@8.48.0)(typescript@5.0.4) + specifier: ^6.8.0 + version: 6.8.0(eslint@8.51.0)(typescript@5.2.2) cspell: - specifier: ^6.31.3 - version: 6.31.3 + specifier: ^7.3.8 + version: 7.3.8 discord-types: - specifier: ^1.3.26 - version: 1.3.26 + specifier: ^1.3.3 + version: 1.3.3 eslint: - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^8.51.0 + version: 8.51.0 eslint-config-dmitmel: - specifier: github:dmitmel/eslint-config-dmitmel#690f1b1121d342fcc8ee511ca9f2af7502f53db6 - version: github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6(eslint@8.48.0) + specifier: github:dmitmel/eslint-config-dmitmel + version: github.com/dmitmel/eslint-config-dmitmel/d97129ec35235415c6ae6a42299f55cdbb5d75fd(eslint@8.51.0) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@8.48.0) + version: 11.1.0(eslint@8.51.0) eslint-plugin-react: specifier: ^7.33.2 - version: 7.33.2(eslint@8.48.0) + version: 7.33.2(eslint@8.51.0) moment: specifier: ^2.29.4 version: 2.29.4 np: specifier: ^8.0.4 - version: 8.0.4 + version: 8.0.4(typescript@5.2.2) prettier: - specifier: ^2.8.8 - version: 2.8.8 + specifier: ^3.0.3 + version: 3.0.3 simple-markdown: specifier: ^0.7.3 version: 0.7.3 style-mod: specifier: ^4.1.0 version: 4.1.0 - tsx: - specifier: ^3.12.7 - version: 3.12.7 type-fest: - specifier: ^3.13.1 - version: 3.13.1 + specifier: ^4.5.0 + version: 4.5.0 typedoc: - specifier: ^0.23.28 - version: 0.23.28(typescript@5.0.4) + specifier: ^0.25.2 + version: 0.25.2(typescript@5.2.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: ^5.2.2 + version: 5.2.2 packages: @@ -174,24 +171,24 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@babel/code-frame@7.22.10: - resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.10 + '@babel/highlight': 7.22.20 chalk: 2.4.2 dev: true - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} dev: true - /@babel/highlight@7.22.10: - resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: true @@ -204,92 +201,92 @@ packages: types-pkg-json: 1.2.1 dev: true - /@codemirror/autocomplete@6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.16.0)(@lezer/common@1.0.4): - resolution: {integrity: sha512-Fbwm0V/Wn3BkEJZRhr0hi5BhCo5a7eBL6LYaliPjOSwCyfOpnjXY59HruSxOUNV+1OYer0Tgx1zRNQttjXyDog==} + /@codemirror/autocomplete@6.10.2(@codemirror/language@6.9.1)(@codemirror/state@6.3.1)(@codemirror/view@6.21.3)(@lezer/common@1.1.0): + resolution: {integrity: sha512-3dCL7b0j2GdtZzWN5j7HDpRAJ26ip07R4NGYz7QYthIYMiX8I4E4TNrYcdTayPJGeVQtd/xe7lWU4XL7THFb/w==} peerDependencies: '@codemirror/language': ^6.0.0 '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 '@lezer/common': ^1.0.0 dependencies: - '@codemirror/language': 6.9.0 - '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 - '@lezer/common': 1.0.4 + '@codemirror/language': 6.9.1 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.21.3 + '@lezer/common': 1.1.0 dev: false - /@codemirror/commands@6.2.5: - resolution: {integrity: sha512-dSi7ow2P2YgPBZflR9AJoaTHvqmeGIgkhignYMd5zK5y6DANTvxKxp6eMEpIDUJkRAaOY/TFZ4jP1ADIO/GLVA==} + /@codemirror/commands@6.3.0: + resolution: {integrity: sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==} dependencies: - '@codemirror/language': 6.9.0 - '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 - '@lezer/common': 1.0.4 + '@codemirror/language': 6.9.1 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.21.3 + '@lezer/common': 1.1.0 dev: false - /@codemirror/lang-css@6.2.1(@codemirror/view@6.16.0): + /@codemirror/lang-css@6.2.1(@codemirror/view@6.21.3): resolution: {integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==} dependencies: - '@codemirror/autocomplete': 6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.16.0)(@lezer/common@1.0.4) - '@codemirror/language': 6.9.0 - '@codemirror/state': 6.2.1 - '@lezer/common': 1.0.4 + '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.1)(@codemirror/state@6.3.1)(@codemirror/view@6.21.3)(@lezer/common@1.1.0) + '@codemirror/language': 6.9.1 + '@codemirror/state': 6.3.1 + '@lezer/common': 1.1.0 '@lezer/css': 1.1.3 transitivePeerDependencies: - '@codemirror/view' dev: false - /@codemirror/language@6.9.0: - resolution: {integrity: sha512-nFu311/0ne/qGuGCL3oKuktBgzVOaxCHZPZv1tLSZkNjPYxxvkjSbzno3MlErG2tgw1Yw1yF8BxMCegeMXqpiw==} + /@codemirror/language@6.9.1: + resolution: {integrity: sha512-lWRP3Y9IUdOms6DXuBpoWwjkR7yRmnS0hKYCbSfPz9v6Em1A1UCRujAkDiCrdYfs1Z0Eu4dGtwovNPStIfkgNA==} dependencies: - '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 - '@lezer/common': 1.0.4 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.21.3 + '@lezer/common': 1.1.0 '@lezer/highlight': 1.1.6 - '@lezer/lr': 1.3.10 + '@lezer/lr': 1.3.13 style-mod: 4.1.0 dev: false - /@codemirror/lint@6.4.1: - resolution: {integrity: sha512-2Hx945qKX7FBan5/gUdTM8fsMYrNG9clIgEcPXestbLVFAUyQYFAuju/5BMNf/PwgpVaX5pvRm4+ovjbp9D9gQ==} + /@codemirror/lint@6.4.2: + resolution: {integrity: sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==} dependencies: - '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.21.3 crelt: 1.0.6 dev: false - /@codemirror/search@6.5.2: - resolution: {integrity: sha512-WRihpqd0l9cEh9J3IZe45Yi+Z5MfTsEXnyc3V7qXHP4ZYtIYpGOn+EJ7fyLIkyAm/8S6QIr7/mMISfAadf8zCg==} + /@codemirror/search@6.5.4: + resolution: {integrity: sha512-YoTrvjv9e8EbPs58opjZKyJ3ewFrVSUzQ/4WXlULQLSDDr1nGPJ67mMXFNNVYwdFhybzhrzrtqgHmtpJwIF+8g==} dependencies: - '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.21.3 crelt: 1.0.6 dev: false - /@codemirror/state@6.2.1: - resolution: {integrity: sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==} + /@codemirror/state@6.3.1: + resolution: {integrity: sha512-88e4HhMtKJyw6fKprGaN/yZfiaoGYOi2nM45YCUC6R/kex9sxFWBDGatS1vk4lMgnWmdIIB9tk8Gj1LmL8YfvA==} dev: false - /@codemirror/view@6.16.0: - resolution: {integrity: sha512-1Z2HkvkC3KR/oEZVuW9Ivmp8TWLzGEd8T8TA04TTwPvqogfkHBdYSlflytDOqmkUxM2d1ywTg7X2dU5mC+SXvg==} + /@codemirror/view@6.21.3: + resolution: {integrity: sha512-8l1aSQ6MygzL4Nx7GVYhucSXvW4jQd0F6Zm3v9Dg+6nZEfwzJVqi4C2zHfDljID+73gsQrWp9TgHc81xU15O4A==} dependencies: - '@codemirror/state': 6.2.1 + '@codemirror/state': 6.3.1 style-mod: 4.1.0 w3c-keyname: 2.2.8 dev: false - /@cspell/cspell-bundled-dicts@6.31.3: - resolution: {integrity: sha512-KXy3qKWYzXOGYwqOGMCXHem3fV39iEmoKLiNhoWWry/SFdvAafmeY+LIDcQTXAcOQLkMDCwP2/rY/NadcWnrjg==} - engines: {node: '>=14'} + /@cspell/cspell-bundled-dicts@7.3.8: + resolution: {integrity: sha512-Dj8iSGQyfgIsCjmXk9D/SjV7EpbpQSogeaGcBM66H33pd0GyGmLhn3biRN+vqi/vqWmsp75rT3kd5MKa8X5W9Q==} + engines: {node: '>=16'} dependencies: '@cspell/dict-ada': 4.0.2 - '@cspell/dict-aws': 3.0.0 - '@cspell/dict-bash': 4.1.1 - '@cspell/dict-companies': 3.0.20 - '@cspell/dict-cpp': 5.0.4 - '@cspell/dict-cryptocurrencies': 3.0.1 + '@cspell/dict-aws': 4.0.0 + '@cspell/dict-bash': 4.1.2 + '@cspell/dict-companies': 3.0.26 + '@cspell/dict-cpp': 5.0.9 + '@cspell/dict-cryptocurrencies': 4.0.0 '@cspell/dict-csharp': 4.0.2 - '@cspell/dict-css': 4.0.7 + '@cspell/dict-css': 4.0.12 '@cspell/dict-dart': 2.0.3 '@cspell/dict-django': 4.1.0 '@cspell/dict-docker': 1.1.7 @@ -297,91 +294,99 @@ packages: '@cspell/dict-elixir': 4.0.3 '@cspell/dict-en-common-misspellings': 1.0.2 '@cspell/dict-en-gb': 1.1.33 - '@cspell/dict-en_us': 4.3.6 + '@cspell/dict-en_us': 4.3.10 '@cspell/dict-filetypes': 3.0.1 - '@cspell/dict-fonts': 3.0.2 + '@cspell/dict-fonts': 4.0.0 + '@cspell/dict-fsharp': 1.0.0 '@cspell/dict-fullstack': 3.1.5 '@cspell/dict-gaming-terms': 1.0.4 '@cspell/dict-git': 2.0.0 - '@cspell/dict-golang': 6.0.2 + '@cspell/dict-golang': 6.0.4 '@cspell/dict-haskell': 4.0.1 - '@cspell/dict-html': 4.0.3 + '@cspell/dict-html': 4.0.5 '@cspell/dict-html-symbol-entities': 4.0.0 - '@cspell/dict-java': 5.0.5 - '@cspell/dict-k8s': 1.0.1 + '@cspell/dict-java': 5.0.6 + '@cspell/dict-k8s': 1.0.2 '@cspell/dict-latex': 4.0.0 - '@cspell/dict-lorem-ipsum': 3.0.0 - '@cspell/dict-lua': 4.0.1 - '@cspell/dict-node': 4.0.2 - '@cspell/dict-npm': 5.0.8 - '@cspell/dict-php': 4.0.2 + '@cspell/dict-lorem-ipsum': 4.0.0 + '@cspell/dict-lua': 4.0.2 + '@cspell/dict-node': 4.0.3 + '@cspell/dict-npm': 5.0.12 + '@cspell/dict-php': 4.0.4 '@cspell/dict-powershell': 5.0.2 - '@cspell/dict-public-licenses': 2.0.3 - '@cspell/dict-python': 4.1.7 + '@cspell/dict-public-licenses': 2.0.5 + '@cspell/dict-python': 4.1.9 '@cspell/dict-r': 2.0.1 - '@cspell/dict-ruby': 5.0.0 + '@cspell/dict-ruby': 5.0.1 '@cspell/dict-rust': 4.0.1 '@cspell/dict-scala': 5.0.0 - '@cspell/dict-software-terms': 3.2.1 - '@cspell/dict-sql': 2.1.1 + '@cspell/dict-software-terms': 3.3.7 + '@cspell/dict-sql': 2.1.2 '@cspell/dict-svelte': 1.0.2 '@cspell/dict-swift': 2.0.1 - '@cspell/dict-typescript': 3.1.1 + '@cspell/dict-typescript': 3.1.2 '@cspell/dict-vue': 3.0.0 dev: true - /@cspell/cspell-json-reporter@6.31.3: - resolution: {integrity: sha512-ZJwj2vT4lxncYxduXcxy0dCvjjMvXIfphbLSCN5CXvufrtupB4KlcjZUnOofCi4pfpp8qocCSn1lf2DU9xgUXA==} - engines: {node: '>=14'} + /@cspell/cspell-json-reporter@7.3.8: + resolution: {integrity: sha512-FxYJWtDgxIQYxdP0RWwRV8nzLfxVx8D8D5L2sbbP/0NFczDbq/zWYep4nSAHJT10aUJrogsVUYwNwdkr562wKA==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-types': 6.31.3 + '@cspell/cspell-types': 7.3.8 dev: true - /@cspell/cspell-pipe@6.31.3: - resolution: {integrity: sha512-Lv/y4Ya/TJyU1pf66yl1te7LneFZd3lZg1bN5oe1cPrKSmfWdiX48v7plTRecWd/OWyLGd0yN807v79A+/0W7A==} - engines: {node: '>=14'} + /@cspell/cspell-pipe@7.3.8: + resolution: {integrity: sha512-/vKPfiHM5bJUkNX12w9j533Lm2JvvSMKUCChM2AxYjy6vL8prc/7ei++4g2xAWwRxLZPg2OfpDJS5EirZNBJdA==} + engines: {node: '>=16'} dev: true - /@cspell/cspell-service-bus@6.31.3: - resolution: {integrity: sha512-x5j8j3n39KN8EXOAlv75CpircdpF5WEMCC5pcO916o6GBmJBy8SrdzdsBGJhVcYGGilqy6pf8R9RCZ3yAmG8gQ==} - engines: {node: '>=14'} + /@cspell/cspell-resolver@7.3.8: + resolution: {integrity: sha512-CeyQmhqZI5a+T7a6oiVN90TFlzU3qVVYqCaZ9grFrVOsmzY9ipH5gmqfgMavaBOqb0di/+VZS8d02suMOXcKLQ==} + engines: {node: '>=16'} + dependencies: + global-dirs: 3.0.1 dev: true - /@cspell/cspell-types@6.31.3: - resolution: {integrity: sha512-wZ+t+lUsQJB65M31btZM4fH3K1CkRgE8pSeTiCwxYcnCL19pi4TMcEEMKdO8yFZMdocW4B7VRwzxNoQMw2ewBg==} - engines: {node: '>=14'} + /@cspell/cspell-service-bus@7.3.8: + resolution: {integrity: sha512-3E7gwY6QILrZH83p69i9CERbRBEqeBiKCIKnAd7U2PbxfFqG/P47fqpnarzSWFwFpU92oyGsYry+wC8TEGISRQ==} + engines: {node: '>=16'} + dev: true + + /@cspell/cspell-types@7.3.8: + resolution: {integrity: sha512-hsOtaULDnawEL4pU0fga941GhvE8mbTbywrJBx+eGX3fnJsaUr8XQzCtnLsW2ko7WCLWFItNEhSSTPQHBFRLsw==} + engines: {node: '>=16'} dev: true /@cspell/dict-ada@4.0.2: resolution: {integrity: sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==} dev: true - /@cspell/dict-aws@3.0.0: - resolution: {integrity: sha512-O1W6nd5y3Z00AMXQMzfiYrIJ1sTd9fB1oLr+xf/UD7b3xeHeMeYE2OtcWbt9uyeHim4tk+vkSTcmYEBKJgS5bQ==} + /@cspell/dict-aws@4.0.0: + resolution: {integrity: sha512-1YkCMWuna/EGIDN/zKkW+j98/55mxigftrSFgsehXhPld+ZMJM5J9UuBA88YfL7+/ETvBdd7mwW6IwWsC+/ltQ==} dev: true - /@cspell/dict-bash@4.1.1: - resolution: {integrity: sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A==} + /@cspell/dict-bash@4.1.2: + resolution: {integrity: sha512-AEBWjbaMaJEyAjOHW0F15P2izBjli2cNerG3NjuVH7xX/HUUeNoTj8FF1nwpMufKwGQCvuyO2hCmkVxhJ0y55Q==} dev: true - /@cspell/dict-companies@3.0.20: - resolution: {integrity: sha512-o13HaqYxkWo20FC5iU9PHKMFexY9D7/XeSj9tvBzy3sEzW324zw5MWEkeDszwmC/GsLZtot+5vopCv6/evRNlA==} + /@cspell/dict-companies@3.0.26: + resolution: {integrity: sha512-BGRZ/Uykx+IgQoTGqvRqbBMQy7QSuY0pbTHgtmKtc1scgzZMJQKMDwyuE6LJzlhdlrV7TsVY0lyXREybnDpQPQ==} dev: true - /@cspell/dict-cpp@5.0.4: - resolution: {integrity: sha512-Vmz/CCb2d91ES5juaO8+CFWeTa2AFsbpR8bkCPJq+P8cRP16+37tY0zNXEBSK/1ur4MakaRf76jeQBijpZxw0Q==} + /@cspell/dict-cpp@5.0.9: + resolution: {integrity: sha512-ql9WPNp8c+fhdpVpjpZEUWmxBHJXs9CJuiVVfW/iwv5AX7VuMHyEwid+9/6nA8qnCxkUQ5pW83Ums1lLjn8ScA==} dev: true - /@cspell/dict-cryptocurrencies@3.0.1: - resolution: {integrity: sha512-Tdlr0Ahpp5yxtwM0ukC13V6+uYCI0p9fCRGMGZt36rWv8JQZHIuHfehNl7FB/Qc09NCF7p5ep0GXbL+sVTd/+w==} + /@cspell/dict-cryptocurrencies@4.0.0: + resolution: {integrity: sha512-EiZp91ATyRxTmauIQfOX9adLYCunKjHEh092rrM7o2eMXP9n7zpXAL9BK7LviL+LbB8VDOm21q+s83cKrrRrsg==} dev: true /@cspell/dict-csharp@4.0.2: resolution: {integrity: sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==} dev: true - /@cspell/dict-css@4.0.7: - resolution: {integrity: sha512-NNlUTx/sYg+74kC0EtRewb7pjkEtPlIsu9JFNWAXa0JMTqqpQXqM3aEO4QJvUZFZF09bObeCAvzzxemAwxej7Q==} + /@cspell/dict-css@4.0.12: + resolution: {integrity: sha512-vGBgPM92MkHQF5/2jsWcnaahOZ+C6OE/fPvd5ScBP72oFY9tn5GLuomcyO0z8vWCr2e0nUSX1OGimPtcQAlvSw==} dev: true /@cspell/dict-dart@2.0.3: @@ -416,16 +421,20 @@ packages: resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} dev: true - /@cspell/dict-en_us@4.3.6: - resolution: {integrity: sha512-odhgsjNZI9BtEOJdvqfAuv/3yz5aB1ngfBNaph7WSnYVt//9e3fhrElZ6/pIIkoyuGgeQPwz1fXt+tMgcnLSEQ==} + /@cspell/dict-en_us@4.3.10: + resolution: {integrity: sha512-EqmB22dEu6qUkA6f6eNYqXbUnklLgChKDAdRbKWKnyoca7bmxRPcOIUhPzELo+HSzZe8RlSgNG/vaL1fkPB3Yg==} dev: true /@cspell/dict-filetypes@3.0.1: resolution: {integrity: sha512-8z8mY1IbrTyTRumx2vvD9yzRhNMk9SajM/GtI5hdMM2pPpNSp25bnuauzjRf300eqlqPY2MNb5MmhBFO014DJw==} dev: true - /@cspell/dict-fonts@3.0.2: - resolution: {integrity: sha512-Z5QdbgEI7DV+KPXrAeDA6dDm/vTzyaW53SGlKqz6PI5VhkOjgkBXv3YtZjnxMZ4dY2ZIqq+RUK6qa9Pi8rQdGQ==} + /@cspell/dict-fonts@4.0.0: + resolution: {integrity: sha512-t9V4GeN/m517UZn63kZPUYP3OQg5f0OBLSd3Md5CU3eH1IFogSvTzHHnz4Wqqbv8NNRiBZ3HfdY/pqREZ6br3Q==} + dev: true + + /@cspell/dict-fsharp@1.0.0: + resolution: {integrity: sha512-dHPkMHwW4dWv3Lv9VWxHuVm4IylqvcfRBSnZ7usJTRThraetSVrOPIJwr6UJh7F5un/lGJx2lxWVApf2WQaB/A==} dev: true /@cspell/dict-fullstack@3.1.5: @@ -440,8 +449,8 @@ packages: resolution: {integrity: sha512-n1AxyX5Kgxij/sZFkxFJlzn3K9y/sCcgVPg/vz4WNJ4K9YeTsUmyGLA2OQI7d10GJeiuAo2AP1iZf2A8j9aj2w==} dev: true - /@cspell/dict-golang@6.0.2: - resolution: {integrity: sha512-5pyZn4AAiYukAW+gVMIMVmUSkIERFrDX2vtPDjg8PLQUhAHWiVeQSDjuOhq9/C5GCCEZU/zWSONkGiwLBBvV9A==} + /@cspell/dict-golang@6.0.4: + resolution: {integrity: sha512-jOfewPEyN6U9Q80okE3b1PTYBfqZgHh7w4o271GSuAX+VKJ1lUDhdR4bPKRxSDdO5jHArw2u5C8nH2CWGuygbQ==} dev: true /@cspell/dict-haskell@4.0.1: @@ -452,52 +461,52 @@ packages: resolution: {integrity: sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==} dev: true - /@cspell/dict-html@4.0.3: - resolution: {integrity: sha512-Gae8i8rrArT0UyG1I6DHDK62b7Be6QEcBSIeWOm4VIIW1CASkN9B0qFgSVnkmfvnu1Y3H7SSaaEynKjdj3cs8w==} + /@cspell/dict-html@4.0.5: + resolution: {integrity: sha512-p0brEnRybzSSWi8sGbuVEf7jSTDmXPx7XhQUb5bgG6b54uj+Z0Qf0V2n8b/LWwIPJNd1GygaO9l8k3HTCy1h4w==} dev: true - /@cspell/dict-java@5.0.5: - resolution: {integrity: sha512-X19AoJgWIBwJBSWGFqSgHaBR/FEykBHTMjL6EqOnhIGEyE9nvuo32tsSHjXNJ230fQxQptEvRZoaldNLtKxsRg==} + /@cspell/dict-java@5.0.6: + resolution: {integrity: sha512-kdE4AHHHrixyZ5p6zyms1SLoYpaJarPxrz8Tveo6gddszBVVwIUZ+JkQE1bWNLK740GWzIXdkznpUfw1hP9nXw==} dev: true - /@cspell/dict-k8s@1.0.1: - resolution: {integrity: sha512-gc5y4Nm3hVdMZNBZfU2M1AsAmObZsRWjCUk01NFPfGhFBXyVne41T7E62rpnzu5330FV/6b/TnFcPgRmak9lLw==} + /@cspell/dict-k8s@1.0.2: + resolution: {integrity: sha512-tLT7gZpNPnGa+IIFvK9SP1LrSpPpJ94a/DulzAPOb1Q2UBFwdpFd82UWhio0RNShduvKG/WiMZf/wGl98pn+VQ==} dev: true /@cspell/dict-latex@4.0.0: resolution: {integrity: sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==} dev: true - /@cspell/dict-lorem-ipsum@3.0.0: - resolution: {integrity: sha512-msEV24qEpzWZs2kcEicqYlhyBpR0amfDkJOs+iffC07si9ftqtQ+yP3lf1VFLpgqw3SQh1M1vtU7RD4sPrNlcQ==} + /@cspell/dict-lorem-ipsum@4.0.0: + resolution: {integrity: sha512-1l3yjfNvMzZPibW8A7mQU4kTozwVZVw0AvFEdy+NcqtbxH+TvbSkNMqROOFWrkD2PjnKG0+Ea0tHI2Pi6Gchnw==} dev: true - /@cspell/dict-lua@4.0.1: - resolution: {integrity: sha512-j0MFmeCouSoC6EdZTbvGe1sJ9V+ruwKSeF+zRkNNNload7R72Co5kX1haW2xLHGdlq0kqSy1ODRZKdVl0e+7hg==} + /@cspell/dict-lua@4.0.2: + resolution: {integrity: sha512-eeC20Q+UnHcTVBK6pgwhSjGIVugO2XqU7hv4ZfXp2F9DxGx1RME0+1sKX4qAGhdFGwOBsEzb2fwUsAEP6Mibpg==} dev: true - /@cspell/dict-node@4.0.2: - resolution: {integrity: sha512-FEQJ4TnMcXEFslqBQkXa5HposMoCGsiBv2ux4IZuIXgadXeHKHUHk60iarWpjhzNzQLyN2GD7NoRMd12bK3Llw==} + /@cspell/dict-node@4.0.3: + resolution: {integrity: sha512-sFlUNI5kOogy49KtPg8SMQYirDGIAoKBO3+cDLIwD4MLdsWy1q0upc7pzGht3mrjuyMiPRUV14Bb0rkVLrxOhg==} dev: true - /@cspell/dict-npm@5.0.8: - resolution: {integrity: sha512-KuqH8tEsFD6DPKqKwIfWr9E+admE3yghaC0AKXG8jPaf77N0lkctKaS3dm0oxWUXkYKA/eXj6LCtz3VcTyxFPg==} + /@cspell/dict-npm@5.0.12: + resolution: {integrity: sha512-T/+WeQmtbxo7ad6hrdI8URptYstKJP+kXyWJZfuVJJGWJQ7yubxrI5Z5AfM+Dh/ff4xHmdzapxD9adaEQ727uw==} dev: true - /@cspell/dict-php@4.0.2: - resolution: {integrity: sha512-7yglcmMoFHDPQXHW+9QAl8YjAToMm1qOi+4x/yGY1FSIEjZbCpjeDgyKMGg/NgpooQQceEN38AR59Pn23EDriA==} + /@cspell/dict-php@4.0.4: + resolution: {integrity: sha512-fRlLV730fJbulDsLIouZxXoxHt3KIH6hcLFwxaupHL+iTXDg0lo7neRpbqD5MScr/J3idEr7i9G8XWzIikKFug==} dev: true /@cspell/dict-powershell@5.0.2: resolution: {integrity: sha512-IHfWLme3FXE7vnOmMncSBxOsMTdNWd1Vcyhag03WS8oANSgX8IZ+4lMI00mF0ptlgchf16/OU8WsV4pZfikEFw==} dev: true - /@cspell/dict-public-licenses@2.0.3: - resolution: {integrity: sha512-JSLEdpEYufQ1H+93UHi+axlqQm1fhgK6kpdLHp6uPHu//CsvETcqNVawjB+qOdI/g38JTMw5fBqSd0aGNxa6Dw==} + /@cspell/dict-public-licenses@2.0.5: + resolution: {integrity: sha512-91HK4dSRri/HqzAypHgduRMarJAleOX5NugoI8SjDLPzWYkwZ1ftuCXSk+fy8DLc3wK7iOaFcZAvbjmnLhVs4A==} dev: true - /@cspell/dict-python@4.1.7: - resolution: {integrity: sha512-8GkO7/w1QEpu4Y1GTHGYHrwfc/ZdiBRw7D/BGYCIiOoQPLi0YxMke7wzRC3j246yrzLt28ntDBjr4fB3+uFZtQ==} + /@cspell/dict-python@4.1.9: + resolution: {integrity: sha512-JMA4v/ZPJWuDt3PPFz+23VIY3iDIB+xOTQ6nw+WkcJU5yr6FUl5zMU9ModKrgujg3jGRuuJqofErZVPqHNHYAA==} dependencies: '@cspell/dict-data-science': 1.0.11 dev: true @@ -506,8 +515,8 @@ packages: resolution: {integrity: sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==} dev: true - /@cspell/dict-ruby@5.0.0: - resolution: {integrity: sha512-ssb96QxLZ76yPqFrikWxItnCbUKhYXJ2owkoIYzUGNFl2CHSoHCb5a6Zetum9mQ/oUA3gNeUhd28ZUlXs0la2A==} + /@cspell/dict-ruby@5.0.1: + resolution: {integrity: sha512-rruTm7Emhty/BSYavSm8ZxRuVw0OBqzJkwIFXcV0cX7To8D1qbmS9HFHRuRg8IL11+/nJvtdDz+lMFBSmPUagQ==} dev: true /@cspell/dict-rust@4.0.1: @@ -518,12 +527,12 @@ packages: resolution: {integrity: sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==} dev: true - /@cspell/dict-software-terms@3.2.1: - resolution: {integrity: sha512-+QXmyoONVc/3aNgKW+0F0u3XUCRTfNRkWKLZQA78i+9fOfde8ZT4JmROmZgRveH/MxD4n6pNFceIRcYI6C8WuQ==} + /@cspell/dict-software-terms@3.3.7: + resolution: {integrity: sha512-9hkp25tQQYVdan4eYRxhj8HvVyinA5/tFv4+l6CcXO887obTrFuvSCVEGeexFObcDaMDnfE1XD8NuCoGc/KXfw==} dev: true - /@cspell/dict-sql@2.1.1: - resolution: {integrity: sha512-v1mswi9NF40+UDUMuI148YQPEQvWjac72P6ZsjlRdLjEiQEEMEsTQ+zlkIdnzC9QCNyJaqD5Liq9Mn78/8Zxtw==} + /@cspell/dict-sql@2.1.2: + resolution: {integrity: sha512-Pi0hAcvsSGtZZeyyAN1VfGtQJbrXos5x2QjJU0niAQKhmITSOrXU/1II1Gogk+FYDjWyV9wP2De0U2f7EWs6oQ==} dev: true /@cspell/dict-svelte@1.0.2: @@ -534,78 +543,56 @@ packages: resolution: {integrity: sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==} dev: true - /@cspell/dict-typescript@3.1.1: - resolution: {integrity: sha512-N9vNJZoOXmmrFPR4ir3rGvnqqwmQGgOYoL1+y6D4oIhyr7FhaYiyF/d7QT61RmjZQcATMa6PSL+ZisCeRLx9+A==} + /@cspell/dict-typescript@3.1.2: + resolution: {integrity: sha512-lcNOYWjLUvDZdLa0UMNd/LwfVdxhE9rKA+agZBGjL3lTA3uNvH7IUqSJM/IXhJoBpLLMVEOk8v1N9xi+vDuCdA==} dev: true /@cspell/dict-vue@3.0.0: resolution: {integrity: sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==} dev: true - /@cspell/dynamic-import@6.31.3: - resolution: {integrity: sha512-A6sT00+6UNGFksQ5SxW2ohNl6vUutai8F4jwJMHTjZL/9vivQpU7y5V4PpsfoPZtx3WZcbrzuTvJ+tLfdbWc4A==} - engines: {node: '>=14'} + /@cspell/dynamic-import@7.3.8: + resolution: {integrity: sha512-s8x7dH/ScfW0pFEIvNFo4JOR7YmvM2wZSHOykmWTJCQ8k2EQ/+uECPp6ZxkoJoukTz8sj+3KzF0fRl5mKxPd6g==} + engines: {node: '>=16'} dependencies: - import-meta-resolve: 2.2.2 + import-meta-resolve: 3.0.0 dev: true - /@cspell/strong-weak-map@6.31.3: - resolution: {integrity: sha512-znwc9IlgGUPioHGshP/zyM8HsuYg1OY5S7HSiVXARh5H8RqcyBsnyn8abc0PPhqPrfDy9Fh5xHsAEPZ55dl1vQ==} - engines: {node: '>=14.6'} + /@cspell/strong-weak-map@7.3.8: + resolution: {integrity: sha512-qNnt2wG45wb8JP54mENarnQgxfSYKPp3zlYID/2przbMNmVJRqUlcIBOdLI6plCgGeNkzJTl3T9T1ATbnN+LLw==} + engines: {node: '>=16'} dev: true /@ddietr/codemirror-themes@1.4.2: resolution: {integrity: sha512-8U3H3lmtmSWLD5VRlt7jf2HW62URnwgPxjZZDYjBX5EtMpgZ2QnqiIYrNzdQPPjJngT9D43gls3+JlekCBmrfw==} dependencies: - '@codemirror/language': 6.9.0 - '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/language': 6.9.1 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.21.3 '@lezer/highlight': 1.1.6 dev: false - /@electron/asar@3.2.4: - resolution: {integrity: sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g==} + /@electron/asar@3.2.7: + resolution: {integrity: sha512-8FaSCAIiZGYFWyjeevPQt+0e9xCK9YmJ2Rjg5SXgdsXon6cRnU0Yxnbe6CvJbQn26baifur2Y2G5EBayRIsjyg==} engines: {node: '>=10.12.0'} hasBin: true dependencies: - chromium-pickle-js: 0.2.0 commander: 5.1.0 glob: 7.2.3 minimatch: 3.1.2 dev: false - /@esbuild-kit/cjs-loader@2.4.2: - resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} - dependencies: - '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.7.0 - dev: true - - /@esbuild-kit/core-utils@3.1.0: - resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} - dependencies: - esbuild: 0.17.19 - source-map-support: 0.5.21 - dev: true - - /@esbuild-kit/esm-loader@2.5.5: - resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} - dependencies: - '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.7.0 - dev: true - - /@esbuild/android-arm64@0.17.19: - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/android-arm64@0.19.3: - resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==} + /@esbuild/android-arm64@0.19.5: + resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -613,17 +600,17 @@ packages: dev: false optional: true - /@esbuild/android-arm@0.17.19: - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/android-arm@0.19.3: - resolution: {integrity: sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==} + /@esbuild/android-arm@0.19.5: + resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -631,17 +618,17 @@ packages: dev: false optional: true - /@esbuild/android-x64@0.17.19: - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/android-x64@0.19.3: - resolution: {integrity: sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==} + /@esbuild/android-x64@0.19.5: + resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -649,17 +636,17 @@ packages: dev: false optional: true - /@esbuild/darwin-arm64@0.17.19: - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/darwin-arm64@0.19.3: - resolution: {integrity: sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==} + /@esbuild/darwin-arm64@0.19.5: + resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -667,17 +654,17 @@ packages: dev: false optional: true - /@esbuild/darwin-x64@0.17.19: - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/darwin-x64@0.19.3: - resolution: {integrity: sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==} + /@esbuild/darwin-x64@0.19.5: + resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -685,17 +672,17 @@ packages: dev: false optional: true - /@esbuild/freebsd-arm64@0.17.19: - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/freebsd-arm64@0.19.3: - resolution: {integrity: sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==} + /@esbuild/freebsd-arm64@0.19.5: + resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -703,17 +690,17 @@ packages: dev: false optional: true - /@esbuild/freebsd-x64@0.17.19: - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/freebsd-x64@0.19.3: - resolution: {integrity: sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==} + /@esbuild/freebsd-x64@0.19.5: + resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -721,17 +708,17 @@ packages: dev: false optional: true - /@esbuild/linux-arm64@0.17.19: - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-arm64@0.19.3: - resolution: {integrity: sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==} + /@esbuild/linux-arm64@0.19.5: + resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -739,17 +726,17 @@ packages: dev: false optional: true - /@esbuild/linux-arm@0.17.19: - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-arm@0.19.3: - resolution: {integrity: sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==} + /@esbuild/linux-arm@0.19.5: + resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -757,17 +744,17 @@ packages: dev: false optional: true - /@esbuild/linux-ia32@0.17.19: - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-ia32@0.19.3: - resolution: {integrity: sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==} + /@esbuild/linux-ia32@0.19.5: + resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -775,17 +762,17 @@ packages: dev: false optional: true - /@esbuild/linux-loong64@0.17.19: - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-loong64@0.19.3: - resolution: {integrity: sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==} + /@esbuild/linux-loong64@0.19.5: + resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -793,17 +780,17 @@ packages: dev: false optional: true - /@esbuild/linux-mips64el@0.17.19: - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-mips64el@0.19.3: - resolution: {integrity: sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==} + /@esbuild/linux-mips64el@0.19.5: + resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -811,17 +798,17 @@ packages: dev: false optional: true - /@esbuild/linux-ppc64@0.17.19: - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-ppc64@0.19.3: - resolution: {integrity: sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==} + /@esbuild/linux-ppc64@0.19.5: + resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -829,17 +816,17 @@ packages: dev: false optional: true - /@esbuild/linux-riscv64@0.17.19: - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-riscv64@0.19.3: - resolution: {integrity: sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==} + /@esbuild/linux-riscv64@0.19.5: + resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -847,17 +834,17 @@ packages: dev: false optional: true - /@esbuild/linux-s390x@0.17.19: - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-s390x@0.19.3: - resolution: {integrity: sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==} + /@esbuild/linux-s390x@0.19.5: + resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -865,17 +852,17 @@ packages: dev: false optional: true - /@esbuild/linux-x64@0.17.19: - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/linux-x64@0.19.3: - resolution: {integrity: sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==} + /@esbuild/linux-x64@0.19.5: + resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -883,17 +870,17 @@ packages: dev: false optional: true - /@esbuild/netbsd-x64@0.17.19: - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/netbsd-x64@0.19.3: - resolution: {integrity: sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==} + /@esbuild/netbsd-x64@0.19.5: + resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -901,17 +888,17 @@ packages: dev: false optional: true - /@esbuild/openbsd-x64@0.17.19: - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/openbsd-x64@0.19.3: - resolution: {integrity: sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==} + /@esbuild/openbsd-x64@0.19.5: + resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -919,17 +906,17 @@ packages: dev: false optional: true - /@esbuild/sunos-x64@0.17.19: - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/sunos-x64@0.19.3: - resolution: {integrity: sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==} + /@esbuild/sunos-x64@0.19.5: + resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -937,17 +924,17 @@ packages: dev: false optional: true - /@esbuild/win32-arm64@0.17.19: - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/win32-arm64@0.19.3: - resolution: {integrity: sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==} + /@esbuild/win32-arm64@0.19.5: + resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -955,17 +942,17 @@ packages: dev: false optional: true - /@esbuild/win32-ia32@0.17.19: - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/win32-ia32@0.19.3: - resolution: {integrity: sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==} + /@esbuild/win32-ia32@0.19.5: + resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -973,17 +960,17 @@ packages: dev: false optional: true - /@esbuild/win32-x64@0.17.19: - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true - dev: true + dev: false optional: true - /@esbuild/win32-x64@0.19.3: - resolution: {integrity: sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==} + /@esbuild/win32-x64@0.19.5: + resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -991,18 +978,18 @@ packages: dev: false optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.48.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.48.0 + eslint: 8.51.0 eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.8.0: - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} + /@eslint-community/regexpp@4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -1013,7 +1000,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.21.0 + globals: 13.23.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -1023,13 +1010,13 @@ packages: - supports-color dev: true - /@eslint/js@8.48.0: - resolution: {integrity: sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==} + /@eslint/js@8.51.0: + resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.10: - resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + /@humanwhocodes/config-array@0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -1048,32 +1035,34 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@lezer/common@1.0.4: - resolution: {integrity: sha512-lZHlk8p67x4aIDtJl6UQrXSOP6oi7dQR3W/geFVrENdA1JDaAJWldnVqVjPMJupbTKbzDfFcePfKttqVidS/dg==} + /@lezer/common@1.1.0: + resolution: {integrity: sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw==} dev: false /@lezer/css@1.1.3: resolution: {integrity: sha512-SjSM4pkQnQdJDVc80LYzEaMiNy9txsFbI7HsMgeVF28NdLaAdHNtQ+kB/QqDUzRBV/75NTXjJ/R5IdC8QQGxMg==} dependencies: '@lezer/highlight': 1.1.6 - '@lezer/lr': 1.3.10 + '@lezer/lr': 1.3.13 dev: false /@lezer/highlight@1.1.6: resolution: {integrity: sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==} dependencies: - '@lezer/common': 1.0.4 + '@lezer/common': 1.1.0 dev: false - /@lezer/lr@1.3.10: - resolution: {integrity: sha512-BZfVvf7Re5BIwJHlZXbJn9L8lus5EonxQghyn+ih8Wl36XMFBPTXC0KM0IdUtj9w/diPHsKlXVgL+AlX2jYJ0Q==} + /@lezer/lr@1.3.13: + resolution: {integrity: sha512-RLAbau/4uSzKgIKj96mI5WUtG1qtiR0Frn0Ei9zhPj8YOkHM+1Bb8SgdVvmR/aWJCFIzjo2KFnDiRZ75Xf5NdQ==} dependencies: - '@lezer/common': 1.0.4 + '@lezer/common': 1.1.0 dev: false - /@ljharb/through@2.3.9: - resolution: {integrity: sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==} + /@ljharb/through@2.3.11: + resolution: {integrity: sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==} engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 dev: true /@nodelib/fs.scandir@2.1.5: @@ -1097,128 +1086,109 @@ packages: fastq: 1.15.0 dev: true - /@octokit/auth-token@3.0.4: - resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} - engines: {node: '>= 14'} + /@octokit/auth-token@4.0.0: + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} dev: false - /@octokit/core@4.2.4: - resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} - engines: {node: '>= 14'} + /@octokit/core@5.0.1: + resolution: {integrity: sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==} + engines: {node: '>= 18'} dependencies: - '@octokit/auth-token': 3.0.4 - '@octokit/graphql': 5.0.6 - '@octokit/request': 6.2.8 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.0.2 + '@octokit/request': 8.1.4 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.0.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.0 - transitivePeerDependencies: - - encoding dev: false - /@octokit/endpoint@7.0.6: - resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} - engines: {node: '>= 14'} + /@octokit/endpoint@9.0.1: + resolution: {integrity: sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==} + engines: {node: '>= 18'} dependencies: - '@octokit/types': 9.3.2 + '@octokit/types': 12.0.0 is-plain-object: 5.0.0 universal-user-agent: 6.0.0 dev: false - /@octokit/graphql@5.0.6: - resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} - engines: {node: '>= 14'} + /@octokit/graphql@7.0.2: + resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + engines: {node: '>= 18'} dependencies: - '@octokit/request': 6.2.8 - '@octokit/types': 9.3.2 + '@octokit/request': 8.1.4 + '@octokit/types': 12.0.0 universal-user-agent: 6.0.0 - transitivePeerDependencies: - - encoding dev: false - /@octokit/openapi-types@18.0.0: - resolution: {integrity: sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==} + /@octokit/openapi-types@19.0.0: + resolution: {integrity: sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==} dev: false - /@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4): - resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==} - engines: {node: '>= 14'} + /@octokit/plugin-paginate-rest@9.0.0(@octokit/core@5.0.1): + resolution: {integrity: sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==} + engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '>=4' + '@octokit/core': '>=5' dependencies: - '@octokit/core': 4.2.4 - '@octokit/tsconfig': 1.0.2 - '@octokit/types': 9.3.2 + '@octokit/core': 5.0.1 + '@octokit/types': 12.0.0 dev: false - /@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.4): - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + /@octokit/plugin-request-log@4.0.0(@octokit/core@5.0.1): + resolution: {integrity: sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==} + engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '>=3' + '@octokit/core': '>=5' dependencies: - '@octokit/core': 4.2.4 + '@octokit/core': 5.0.1 dev: false - /@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4): - resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==} - engines: {node: '>= 14'} + /@octokit/plugin-rest-endpoint-methods@10.0.1(@octokit/core@5.0.1): + resolution: {integrity: sha512-fgS6HPkPvJiz8CCliewLyym9qAx0RZ/LKh3sATaPfM41y/O2wQ4Z9MrdYeGPVh04wYmHFmWiGlKPC7jWVtZXQA==} + engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '>=3' + '@octokit/core': '>=5' dependencies: - '@octokit/core': 4.2.4 - '@octokit/types': 10.0.0 + '@octokit/core': 5.0.1 + '@octokit/types': 12.0.0 dev: false - /@octokit/request-error@3.0.3: - resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} - engines: {node: '>= 14'} + /@octokit/request-error@5.0.1: + resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + engines: {node: '>= 18'} dependencies: - '@octokit/types': 9.3.2 + '@octokit/types': 12.0.0 deprecation: 2.3.1 once: 1.4.0 dev: false - /@octokit/request@6.2.8: - resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} - engines: {node: '>= 14'} + /@octokit/request@8.1.4: + resolution: {integrity: sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==} + engines: {node: '>= 18'} dependencies: - '@octokit/endpoint': 7.0.6 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 + '@octokit/endpoint': 9.0.1 + '@octokit/request-error': 5.0.1 + '@octokit/types': 12.0.0 is-plain-object: 5.0.0 - node-fetch: 2.7.0 universal-user-agent: 6.0.0 - transitivePeerDependencies: - - encoding dev: false - /@octokit/rest@19.0.13: - resolution: {integrity: sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==} - engines: {node: '>= 14'} + /@octokit/rest@20.0.2: + resolution: {integrity: sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==} + engines: {node: '>= 18'} dependencies: - '@octokit/core': 4.2.4 - '@octokit/plugin-paginate-rest': 6.1.2(@octokit/core@4.2.4) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@4.2.4) - '@octokit/plugin-rest-endpoint-methods': 7.2.3(@octokit/core@4.2.4) - transitivePeerDependencies: - - encoding - dev: false - - /@octokit/tsconfig@1.0.2: - resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==} + '@octokit/core': 5.0.1 + '@octokit/plugin-paginate-rest': 9.0.0(@octokit/core@5.0.1) + '@octokit/plugin-request-log': 4.0.0(@octokit/core@5.0.1) + '@octokit/plugin-rest-endpoint-methods': 10.0.1(@octokit/core@5.0.1) dev: false - /@octokit/types@10.0.0: - resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + /@octokit/types@12.0.0: + resolution: {integrity: sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==} dependencies: - '@octokit/openapi-types': 18.0.0 - dev: false - - /@octokit/types@9.3.2: - resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} - dependencies: - '@octokit/openapi-types': 18.0.0 + '@octokit/openapi-types': 19.0.0 dev: false /@pnpm/config.env-replace@1.1.0: @@ -1279,272 +1249,267 @@ packages: dependencies: defer-to-connect: 2.0.1 - /@types/adm-zip@0.5.0: - resolution: {integrity: sha512-FCJBJq9ODsQZUNURo5ILAQueuA8WJhRvuihS3ke2iI25mJlfV2LK8jG2Qj2z2AWg8U0FtWWqBHVRetceLskSaw==} + /@types/adm-zip@0.5.3: + resolution: {integrity: sha512-LfeDIiFdvphelYY2aMWTyQBr5cTb1EL9Qcu19jFizdt2sL/jL+fy1fE8IgAKBFI5XfbGukaRDDM5PiJTrovAhA==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.18.6 dev: true /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: - '@types/http-cache-semantics': 4.0.1 + '@types/http-cache-semantics': 4.0.3 '@types/keyv': 3.1.4 - '@types/node': 18.17.11 - '@types/responselike': 1.0.0 + '@types/node': 18.18.6 + '@types/responselike': 1.0.2 dev: true - /@types/configstore@6.0.0: - resolution: {integrity: sha512-GUvNiia85zTDDIx0iPrtF3pI8dwrQkfuokEqxqPDE55qxH0U5SZz4awVZjiJLWN2ZZRkXCUqgsMUbygXY+kytA==} + /@types/configstore@6.0.1: + resolution: {integrity: sha512-ML2U2xzN6PwCh1I6QgWI3TdzS7CRLsv5DSCLX4/Wfg+f30JF60WgS9ZbVOOrTk+N67WTCSUKm6Q7k6M/BjbXQw==} dev: true - /@types/cookiejar@2.1.2: - resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} + /@types/cookiejar@2.1.3: + resolution: {integrity: sha512-LZ8SD3LpNmLMDLkG2oCBjZg+ETnx6XdCjydUE0HwojDmnDfDUnhMKKbtth1TZh+hzcqb03azrYWoXLS8sMXdqg==} dev: true - /@types/esm@3.2.0: - resolution: {integrity: sha512-aXemgVPnF1s0PQin04Ei8zTWaNwUdc4pmhZDg8LBW6QEl9kBWVItAUOLGUY5H5xduAmbL1pLGH1X/PN0+4R9tg==} - dependencies: - '@types/node': 18.17.11 - dev: false - - /@types/highlightjs@9.12.2: - resolution: {integrity: sha512-oW2pEKwshxwBW1nVUizWQg/tnhboRtKrUKnF2hd6l4BZ0shr5ZjQ4ra/82+NEH6uWeM8JjrMGCux5enQXOQbTA==} + /@types/highlightjs@9.12.4: + resolution: {integrity: sha512-1ur6XlwXQLcYnOmJgluvwF/S6eAcFnemhzl65MhXqu84OB9IbGMXMq1E9mJFYVaxeV8kCcQUBjG41blBAkGbPQ==} dev: true - /@types/http-cache-semantics@4.0.1: - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} + /@types/http-cache-semantics@4.0.3: + resolution: {integrity: sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==} - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/json-schema@7.0.14: + resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.18.6 dev: true - /@types/lodash@4.14.197: - resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==} + /@types/lodash@4.14.200: + resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} dev: true - /@types/node@18.17.11: - resolution: {integrity: sha512-r3hjHPBu+3LzbGBa8DHnr/KAeTEEOrahkcL+cZc4MaBMTM+mk8LtXR+zw+nqfjuDZZzYTYgTcpHuP+BEQk069g==} + /@types/node@18.18.6: + resolution: {integrity: sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==} - /@types/normalize-package-data@2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + /@types/normalize-package-data@2.4.3: + resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} dev: true - /@types/prompts@2.4.4: - resolution: {integrity: sha512-p5N9uoTH76lLvSAaYSZtBCdEXzpOOufsRjnhjVSrZGXikVGHX9+cc9ERtHRV4hvBKHyZb1bg4K+56Bd2TqUn4A==} + /@types/prompts@2.4.7: + resolution: {integrity: sha512-5zTamE+QQM4nR6Ab3yHK+ovWuhLJXaa2ZLt3mT1en8U3ubWtjVT1vXDaVFC2+cL89uVn7Y+gIq5B3IcVvBl5xQ==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.18.6 kleur: 3.0.3 dev: true - /@types/prop-types@15.7.5: - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + /@types/prop-types@15.7.9: + resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==} dev: true - /@types/react-dom@18.2.7: - resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + /@types/react-dom@18.2.14: + resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} dependencies: - '@types/react': 18.2.21 + '@types/react': 18.2.29 dev: true - /@types/react-reconciler@0.28.3: - resolution: {integrity: sha512-srdTEjQKa0e2mVdjIJkISnFAevdXk3py6J7oKQWjLhy1JNaGq9zEgBh2adejjKi36gHn8NGa/Rr1Uh29rF97dQ==} + /@types/react-reconciler@0.28.6: + resolution: {integrity: sha512-NlilRDg7yjtFX568NA046OiHWbz5EKM1q5FSXi2GP7WKyU+Vem4NJQcG+ZaMiWotyPiYqkIb6NKJkFuplbchAA==} dependencies: - '@types/react': 18.2.21 + '@types/react': 18.2.29 dev: true /@types/react@17.0.2: resolution: {integrity: sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==} dependencies: - '@types/prop-types': 15.7.5 + '@types/prop-types': 15.7.9 csstype: 3.1.2 dev: true - /@types/react@18.2.21: - resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==} + /@types/react@18.2.29: + resolution: {integrity: sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==} dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 + '@types/prop-types': 15.7.9 + '@types/scheduler': 0.16.5 csstype: 3.1.2 dev: true - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + /@types/responselike@1.0.2: + resolution: {integrity: sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.18.6 dev: true - /@types/scheduler@0.16.3: - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + /@types/scheduler@0.16.5: + resolution: {integrity: sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==} dev: true - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.4: + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} dev: true - /@types/superagent@4.1.18: - resolution: {integrity: sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==} + /@types/superagent@4.1.20: + resolution: {integrity: sha512-GfpwJgYSr3yO+nArFkmyqv3i0vZavyEG5xPd/o95RwpKYpsOKJYI5XLdxLpdRbZI3YiGKKdIOFIf/jlP7A0Jxg==} dependencies: - '@types/cookiejar': 2.1.2 - '@types/node': 18.17.11 + '@types/cookiejar': 2.1.3 + '@types/node': 18.18.6 dev: true - /@types/update-notifier@6.0.4: - resolution: {integrity: sha512-CiKJPSmt/3F4sVnkQTjnP/onKtTJxRkib6Gvw4XESM8FNsHlvRnBNqU5qL0IQmqjtKnz5e9E6Y7xChOpvxFzKg==} + /@types/update-notifier@6.0.6: + resolution: {integrity: sha512-kySKKtYW9ExZC0SsflB6dBcZnMMfxit3s+rzmSIo/hFGL0YDm1RVDZA5VRukzwESoyT8gAMHHOaYZpJPsndh0Q==} dependencies: - '@types/configstore': 6.0.0 + '@types/configstore': 6.0.1 boxen: 7.1.1 dev: true - /@types/ws@8.5.5: - resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} + /@types/ws@8.5.8: + resolution: {integrity: sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.18.6 dev: true - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + /@types/yargs-parser@21.0.2: + resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} dev: true - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + /@types/yargs@17.0.29: + resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==} dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser': 21.0.2 dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.48.0)(typescript@5.0.4): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.48.0)(typescript@5.0.4) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.48.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.0.4) + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/type-utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4 - eslint: 8.48.0 + eslint: 8.51.0 graphemer: 1.4.0 ignore: 5.2.4 - natural-compare-lite: 1.4.0 + natural-compare: 1.4.0 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.0.4) - typescript: 5.0.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.48.0)(typescript@5.0.4): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4 - eslint: 8.48.0 - typescript: 5.0.4 + eslint: 8.51.0 + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.8.0: + resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.48.0)(typescript@5.0.4): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils@6.8.0(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.48.0)(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.48.0 - tsutils: 3.21.0(typescript@5.0.4) - typescript: 5.0.4 + eslint: 8.51.0 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@6.8.0: + resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.0.4): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2): + resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.0.4) - typescript: 5.0.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.48.0)(typescript@5.0.4): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@6.8.0(eslint@8.51.0)(typescript@5.2.2): + resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) - eslint: 8.48.0 - eslint-scope: 5.1.1 + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.14 + '@types/semver': 7.5.4 + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) + eslint: 8.51.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/visitor-keys@6.8.0: + resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/types': 6.8.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1584,8 +1549,8 @@ packages: uri-js: 4.4.1 dev: true - /all-package-names@2.0.720: - resolution: {integrity: sha512-+7AsuNLAVbpHsj+qxf/p0kSqj3uW29AOsSLrS8LdikXREkZichjCOiTTr7JQj39KUlVqQsJ6NzxhnizK0N8weA==} + /all-package-names@2.0.765: + resolution: {integrity: sha512-g7Lm/lkMLMhcqemYDPt6tmpNTcx/58QPKWcv+Je1bg6WdXNjV55cE/wkeWz1fnWQIw4Ej2XyGQ7Pxfv2vJP/MA==} hasBin: true dependencies: commander-version: 1.1.0 @@ -1702,13 +1667,13 @@ packages: is-array-buffer: 3.0.2 dev: true - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 get-intrinsic: 1.2.1 is-string: 1.0.7 dev: true @@ -1722,43 +1687,44 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 es-shim-unscopables: 1.0.0 dev: true - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 es-shim-unscopables: 1.0.0 dev: true - /array.prototype.tosorted@1.1.1: - resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.1 dev: true - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 - define-properties: 1.2.0 + define-properties: 1.2.1 + es-abstract: 1.22.2 get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -1844,7 +1810,7 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + dev: false /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -1873,14 +1839,14 @@ packages: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} - /cacheable-request@10.2.13: - resolution: {integrity: sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==} + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} dependencies: - '@types/http-cache-semantics': 4.0.1 + '@types/http-cache-semantics': 4.0.3 get-stream: 6.0.1 http-cache-semantics: 4.1.1 - keyv: 4.5.3 + keyv: 4.5.4 mimic-response: 4.0.0 normalize-url: 8.0.0 responselike: 3.0.0 @@ -1892,7 +1858,7 @@ packages: clone-response: 1.0.3 get-stream: 5.2.0 http-cache-semantics: 4.1.1 - keyv: 4.5.3 + keyv: 4.5.4 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 @@ -1901,7 +1867,7 @@ packages: /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.1 dev: true @@ -1919,6 +1885,13 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} + /chalk-template@1.1.0: + resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==} + engines: {node: '>=14.16'} + dependencies: + chalk: 5.3.0 + dev: true + /chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1970,12 +1943,8 @@ packages: fsevents: 2.3.3 dev: false - /chromium-pickle-js@0.2.0: - resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} - dev: false - - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} /clean-stack@4.2.0: @@ -2011,8 +1980,8 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-spinners@2.9.0: - resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + /cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} engines: {node: '>=6'} dev: true @@ -2063,16 +2032,16 @@ packages: engines: {node: '>=0.10.0'} dev: true - /codemirror@6.0.1(@lezer/common@1.0.4): + /codemirror@6.0.1(@lezer/common@1.1.0): resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} dependencies: - '@codemirror/autocomplete': 6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.16.0)(@lezer/common@1.0.4) - '@codemirror/commands': 6.2.5 - '@codemirror/language': 6.9.0 - '@codemirror/lint': 6.4.1 - '@codemirror/search': 6.5.2 - '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.1)(@codemirror/state@6.3.1)(@codemirror/view@6.21.3)(@lezer/common@1.1.0) + '@codemirror/commands': 6.3.0 + '@codemirror/language': 6.9.1 + '@codemirror/lint': 6.4.2 + '@codemirror/search': 6.5.4 + '@codemirror/state': 6.3.1 + '@codemirror/view': 6.21.3 transitivePeerDependencies: - '@lezer/common' dev: false @@ -2103,9 +2072,9 @@ packages: commander: 6.2.1 dev: true - /commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} dev: true /commander@5.1.0: @@ -2138,18 +2107,6 @@ packages: ini: 1.3.8 proto-list: 1.2.4 - /configstore@5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.11 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - dev: true - /configstore@6.0.0: resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} engines: {node: '>=12'} @@ -2174,14 +2131,20 @@ packages: path-type: 4.0.0 dev: true - /cosmiconfig@8.2.0: - resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + /cosmiconfig@8.3.6(typescript@5.2.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + typescript: 5.2.2 dev: true /crelt@1.0.6: @@ -2197,124 +2160,120 @@ packages: which: 2.0.2 dev: true - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - /crypto-random-string@4.0.0: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} dependencies: type-fest: 1.4.0 - /cspell-dictionary@6.31.3: - resolution: {integrity: sha512-3w5P3Md/tbHLVGPKVL0ePl1ObmNwhdDiEuZ2TXfm2oAIwg4aqeIrw42A2qmhaKLcuAIywpqGZsrGg8TviNNhig==} - engines: {node: '>=14'} + /cspell-dictionary@7.3.8: + resolution: {integrity: sha512-gkq4t78eLR0xC3P0vDDHPeNY4iZRd5YE6Z8uDJ7RM4UaX/TSdVUN9KNFr34RnJ119NYVHujpL9+uW7wPSAe8Eg==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 - cspell-trie-lib: 6.31.3 + '@cspell/cspell-pipe': 7.3.8 + '@cspell/cspell-types': 7.3.8 + cspell-trie-lib: 7.3.8 fast-equals: 4.0.3 - gensequence: 5.0.2 + gensequence: 6.0.0 dev: true - /cspell-gitignore@6.31.3: - resolution: {integrity: sha512-vCfVG4ZrdwJnsZHl/cdp8AY+YNPL3Ga+0KR9XJsaz69EkQpgI6porEqehuwle7hiXw5e3L7xFwNEbpCBlxgLRA==} - engines: {node: '>=14'} + /cspell-gitignore@7.3.8: + resolution: {integrity: sha512-vJzCOUEiw6/MwV/U4Ux3bgSdj9mXB+X5eHL+qzVoyFI7ArlvrkuGTL+iFJThQcS8McM3SGqtvaBNCiKBmAeCkA==} + engines: {node: '>=16'} hasBin: true dependencies: - cspell-glob: 6.31.3 + cspell-glob: 7.3.8 find-up: 5.0.0 dev: true - /cspell-glob@6.31.3: - resolution: {integrity: sha512-+koUJPSCOittQwhR0T1mj4xXT3N+ZnY2qQ53W6Gz9HY3hVfEEy0NpbwE/Uy7sIvFMbc426fK0tGXjXyIj72uhQ==} - engines: {node: '>=14'} + /cspell-glob@7.3.8: + resolution: {integrity: sha512-wUZC6znyxEs0wlhzGfZ4XHkATPJyazJIFi/VvAdj+KHe7U8SoSgitJVDQqdgectI2y3MxR7lQdVLX9dONFh+7A==} + engines: {node: '>=16'} dependencies: micromatch: 4.0.5 dev: true - /cspell-grammar@6.31.3: - resolution: {integrity: sha512-TZYaOLIGAumyHlm4w7HYKKKcR1ZgEMKt7WNjCFqq7yGVW7U+qyjQqR8jqnLiUTZl7c2Tque4mca7n0CFsjVv5A==} - engines: {node: '>=14'} + /cspell-grammar@7.3.8: + resolution: {integrity: sha512-nTjAlMAZAVSFhBd9U3MB9l5FfC5JCCr9DTOA2wWxusVOm+36MbSEH90ucLPkhPa9/+0HtbpDhqVMwXCZllRpsg==} + engines: {node: '>=16'} hasBin: true dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 + '@cspell/cspell-pipe': 7.3.8 + '@cspell/cspell-types': 7.3.8 dev: true - /cspell-io@6.31.3: - resolution: {integrity: sha512-yCnnQ5bTbngUuIAaT5yNSdI1P0Kc38uvC8aynNi7tfrCYOQbDu1F9/DcTpbdhrsCv+xUn2TB1YjuCmm0STfJlA==} - engines: {node: '>=14'} + /cspell-io@7.3.8: + resolution: {integrity: sha512-XrxPbaiek7EZh+26k9RYVz2wKclaMqM6mXBiu/kpFAHRHHfz91ado6xWvyxZ7UAxQ8ixEwZ+oz9TU+k21gHzyw==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-service-bus': 6.31.3 + '@cspell/cspell-service-bus': 7.3.8 node-fetch: 2.7.0 transitivePeerDependencies: - encoding dev: true - /cspell-lib@6.31.3: - resolution: {integrity: sha512-Dv55aecaMvT/5VbNryKo0Zos8dtHon7e1K0z8DR4/kGZdQVT0bOFWeotSLhuaIqoNFdEt8ypfKbrIHIdbgt1Hg==} - engines: {node: '>=14.6'} + /cspell-lib@7.3.8: + resolution: {integrity: sha512-2L770sI5DdsAKVzO3jxmfP2fz4LryW6dzL93BpN7WU+ebFC6rg4ioa5liOJV4WoDo2fNQMSeqfW4Aawu9zWR7A==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-bundled-dicts': 6.31.3 - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 - '@cspell/strong-weak-map': 6.31.3 + '@cspell/cspell-bundled-dicts': 7.3.8 + '@cspell/cspell-pipe': 7.3.8 + '@cspell/cspell-resolver': 7.3.8 + '@cspell/cspell-types': 7.3.8 + '@cspell/dynamic-import': 7.3.8 + '@cspell/strong-weak-map': 7.3.8 clear-module: 4.1.2 comment-json: 4.2.3 - configstore: 5.0.1 + configstore: 6.0.0 cosmiconfig: 8.0.0 - cspell-dictionary: 6.31.3 - cspell-glob: 6.31.3 - cspell-grammar: 6.31.3 - cspell-io: 6.31.3 - cspell-trie-lib: 6.31.3 - fast-equals: 4.0.3 - find-up: 5.0.0 - gensequence: 5.0.2 + cspell-dictionary: 7.3.8 + cspell-glob: 7.3.8 + cspell-grammar: 7.3.8 + cspell-io: 7.3.8 + cspell-trie-lib: 7.3.8 + fast-equals: 5.0.1 + find-up: 6.3.0 + gensequence: 6.0.0 import-fresh: 3.3.0 resolve-from: 5.0.0 - resolve-global: 1.0.0 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 transitivePeerDependencies: - encoding dev: true - /cspell-trie-lib@6.31.3: - resolution: {integrity: sha512-HNUcLWOZAvtM3E34U+7/mSSpO0F6nLd/kFlRIcvSvPb9taqKe8bnSa0Yyb3dsdMq9rMxUmuDQtF+J6arZK343g==} - engines: {node: '>=14'} + /cspell-trie-lib@7.3.8: + resolution: {integrity: sha512-UQx1Bazbyz2eQJ/EnMohINnUdZvAQL+OcQU3EPPbNWM1DWF4bJGgmFXKNCRYfJk6wtOZVXG5g5AZXx9KnHeN9A==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 - gensequence: 5.0.2 + '@cspell/cspell-pipe': 7.3.8 + '@cspell/cspell-types': 7.3.8 + gensequence: 6.0.0 dev: true - /cspell@6.31.3: - resolution: {integrity: sha512-VeeShDLWVM6YPiU/imeGy0lmg6ki63tbLEa6hz20BExhzzpmINOP5nSTYtpY0H9zX9TrF/dLbI38TuuYnyG3Uw==} - engines: {node: '>=14'} + /cspell@7.3.8: + resolution: {integrity: sha512-8AkqsBQAMsKYV5XyJLB6rBs5hgspL4+MPOg6mBKG2j5EvQgRVc6dIfAPWDNLpIeW2a3+7K5BIWqKHapKPeiknQ==} + engines: {node: '>=16'} hasBin: true dependencies: - '@cspell/cspell-json-reporter': 6.31.3 - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 - '@cspell/dynamic-import': 6.31.3 - chalk: 4.1.2 - commander: 10.0.1 - cspell-gitignore: 6.31.3 - cspell-glob: 6.31.3 - cspell-io: 6.31.3 - cspell-lib: 6.31.3 + '@cspell/cspell-json-reporter': 7.3.8 + '@cspell/cspell-pipe': 7.3.8 + '@cspell/cspell-types': 7.3.8 + '@cspell/dynamic-import': 7.3.8 + chalk: 5.3.0 + chalk-template: 1.1.0 + commander: 11.1.0 + cspell-gitignore: 7.3.8 + cspell-glob: 7.3.8 + cspell-io: 7.3.8 + cspell-lib: 7.3.8 fast-glob: 3.3.1 fast-json-stable-stringify: 2.1.0 - file-entry-cache: 6.0.1 - get-stdin: 8.0.0 - imurmurhash: 0.1.4 + file-entry-cache: 7.0.1 + get-stdin: 9.0.0 semver: 7.5.4 - strip-ansi: 6.0.1 - vscode-uri: 3.0.7 + strip-ansi: 7.1.0 + vscode-uri: 3.0.8 transitivePeerDependencies: - encoding dev: true @@ -2386,21 +2345,31 @@ packages: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: true + /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} dev: true - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: + define-data-property: 1.1.1 has-property-descriptors: 1.0.0 object-keys: 1.1.1 dev: true - /del@7.0.0: - resolution: {integrity: sha512-tQbV/4u5WVB8HMJr08pgw0b6nG4RGt/tj+7Numvq+zqcvUFeMaIWWOUFltiU+6go8BSO2/ogsB4EasDaj0y68Q==} + /del@7.1.0: + resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==} engines: {node: '>=14.16'} dependencies: globby: 13.2.2 @@ -2424,8 +2393,8 @@ packages: path-type: 4.0.0 dev: true - /discord-types@1.3.26: - resolution: {integrity: sha512-ToG51AOCH+JTQf7b+8vuYQe5Iqwz7nZ7StpECAZ/VZcI1ZhQk13pvt9KkRTfRv1xNvwJ2qib4e3+RifQlo8VPQ==} + /discord-types@1.3.3: + resolution: {integrity: sha512-6LGLIw8RBWKdio7FoIfwExSZQuej2XXDKgT7mfR3qMOpEspknVDFQJcfhPuiD1iy2NdcAygvvVfJMliYwiUwqw==} dependencies: '@types/react': 17.0.2 moment: 2.29.4 @@ -2445,13 +2414,6 @@ packages: esutils: 2.0.3 dev: true - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: true - /dot-prop@6.0.1: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} @@ -2491,22 +2453,22 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract@1.22.1: - resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + /es-abstract@1.22.2: + resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 + function.prototype.name: 1.1.6 get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.3 + has: 1.0.4 has-property-descriptors: 1.0.0 has-proto: 1.0.1 has-symbols: 1.0.3 @@ -2519,15 +2481,15 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.0 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 @@ -2536,23 +2498,23 @@ packages: which-typed-array: 1.1.11 dev: true - /es-iterator-helpers@1.0.13: - resolution: {integrity: sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==} + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: asynciterator.prototype: 1.0.0 call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 es-set-tostringtag: 2.0.1 - function-bind: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.1 globalthis: 1.0.3 has-property-descriptors: 1.0.0 has-proto: 1.0.1 has-symbols: 1.0.3 internal-slot: 1.0.5 - iterator.prototype: 1.1.0 - safe-array-concat: 1.0.0 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 dev: true /es-set-tostringtag@2.0.1: @@ -2560,14 +2522,14 @@ packages: engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.1 - has: 1.0.3 + has: 1.0.4 has-tostringtag: 1.0.0 dev: true /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: - has: 1.0.3 + has: 1.0.4 dev: true /es-to-primitive@1.2.1: @@ -2579,74 +2541,74 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-sass-plugin@2.15.0(esbuild@0.19.3): - resolution: {integrity: sha512-T0GCHVfeuGBBgY5k19RbExd7vVuC3lzrK8IZbXOqZftw6N9lTBnZuqKhnhdAJBcu6wek7K/fXJ2zzY6KrcNtAg==} + /esbuild-sass-plugin@2.16.0(esbuild@0.19.5): + resolution: {integrity: sha512-mGCe9MxNYvZ+j77Q/QFO+rwUGA36mojDXkOhtVmoyz1zwYbMaNrtVrmXwwYDleS/UMKTNU3kXuiTtPiAD3K+Pw==} peerDependencies: - esbuild: ^0.19.1 + esbuild: ^0.19.4 dependencies: - esbuild: 0.19.3 - resolve: 1.22.4 - sass: 1.66.1 + esbuild: 0.19.5 + resolve: 1.22.8 + sass: 1.69.4 dev: false - /esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.19 - '@esbuild/android-arm64': 0.17.19 - '@esbuild/android-x64': 0.17.19 - '@esbuild/darwin-arm64': 0.17.19 - '@esbuild/darwin-x64': 0.17.19 - '@esbuild/freebsd-arm64': 0.17.19 - '@esbuild/freebsd-x64': 0.17.19 - '@esbuild/linux-arm': 0.17.19 - '@esbuild/linux-arm64': 0.17.19 - '@esbuild/linux-ia32': 0.17.19 - '@esbuild/linux-loong64': 0.17.19 - '@esbuild/linux-mips64el': 0.17.19 - '@esbuild/linux-ppc64': 0.17.19 - '@esbuild/linux-riscv64': 0.17.19 - '@esbuild/linux-s390x': 0.17.19 - '@esbuild/linux-x64': 0.17.19 - '@esbuild/netbsd-x64': 0.17.19 - '@esbuild/openbsd-x64': 0.17.19 - '@esbuild/sunos-x64': 0.17.19 - '@esbuild/win32-arm64': 0.17.19 - '@esbuild/win32-ia32': 0.17.19 - '@esbuild/win32-x64': 0.17.19 - dev: true - - /esbuild@0.19.3: - resolution: {integrity: sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==} + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: false + + /esbuild@0.19.5: + resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.19.3 - '@esbuild/android-arm64': 0.19.3 - '@esbuild/android-x64': 0.19.3 - '@esbuild/darwin-arm64': 0.19.3 - '@esbuild/darwin-x64': 0.19.3 - '@esbuild/freebsd-arm64': 0.19.3 - '@esbuild/freebsd-x64': 0.19.3 - '@esbuild/linux-arm': 0.19.3 - '@esbuild/linux-arm64': 0.19.3 - '@esbuild/linux-ia32': 0.19.3 - '@esbuild/linux-loong64': 0.19.3 - '@esbuild/linux-mips64el': 0.19.3 - '@esbuild/linux-ppc64': 0.19.3 - '@esbuild/linux-riscv64': 0.19.3 - '@esbuild/linux-s390x': 0.19.3 - '@esbuild/linux-x64': 0.19.3 - '@esbuild/netbsd-x64': 0.19.3 - '@esbuild/openbsd-x64': 0.19.3 - '@esbuild/sunos-x64': 0.19.3 - '@esbuild/win32-arm64': 0.19.3 - '@esbuild/win32-ia32': 0.19.3 - '@esbuild/win32-x64': 0.19.3 + '@esbuild/android-arm': 0.19.5 + '@esbuild/android-arm64': 0.19.5 + '@esbuild/android-x64': 0.19.5 + '@esbuild/darwin-arm64': 0.19.5 + '@esbuild/darwin-x64': 0.19.5 + '@esbuild/freebsd-arm64': 0.19.5 + '@esbuild/freebsd-x64': 0.19.5 + '@esbuild/linux-arm': 0.19.5 + '@esbuild/linux-arm64': 0.19.5 + '@esbuild/linux-ia32': 0.19.5 + '@esbuild/linux-loong64': 0.19.5 + '@esbuild/linux-mips64el': 0.19.5 + '@esbuild/linux-ppc64': 0.19.5 + '@esbuild/linux-riscv64': 0.19.5 + '@esbuild/linux-s390x': 0.19.5 + '@esbuild/linux-x64': 0.19.5 + '@esbuild/netbsd-x64': 0.19.5 + '@esbuild/openbsd-x64': 0.19.5 + '@esbuild/sunos-x64': 0.19.5 + '@esbuild/win32-arm64': 0.19.5 + '@esbuild/win32-ia32': 0.19.5 + '@esbuild/win32-x64': 0.19.5 dev: false /escalade@3.1.1: @@ -2673,63 +2635,55 @@ packages: engines: {node: '>=12'} dev: true - /eslint-plugin-es@3.0.1(eslint@8.48.0): + /eslint-plugin-es@3.0.1(eslint@8.51.0): resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.48.0 + eslint: 8.51.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-node@11.1.0(eslint@8.48.0): + /eslint-plugin-node@11.1.0(eslint@8.51.0): resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.48.0 - eslint-plugin-es: 3.0.1(eslint@8.48.0) + eslint: 8.51.0 + eslint-plugin-es: 3.0.1(eslint@8.51.0) eslint-utils: 2.1.0 ignore: 5.2.4 minimatch: 3.1.2 - resolve: 1.22.4 + resolve: 1.22.8 semver: 7.5.4 dev: true - /eslint-plugin-react@7.33.2(eslint@8.48.0): + /eslint-plugin-react@7.33.2(eslint@8.51.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 doctrine: 2.1.0 - es-iterator-helpers: 1.0.13 - eslint: 8.48.0 + es-iterator-helpers: 1.0.15 + eslint: 8.51.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 prop-types: 15.8.1 - resolve: 2.0.0-next.4 + resolve: 2.0.0-next.5 semver: 7.5.4 - string.prototype.matchall: 4.0.8 - dev: true - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + string.prototype.matchall: 4.0.10 dev: true /eslint-scope@7.2.2: @@ -2757,16 +2711,16 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.48.0: - resolution: {integrity: sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==} + /eslint@8.51.0: + resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0) - '@eslint-community/regexpp': 4.8.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.48.0 - '@humanwhocodes/config-array': 0.11.10 + '@eslint/js': 8.51.0 + '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -2784,7 +2738,7 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 + globals: 13.23.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -2837,11 +2791,6 @@ packages: estraverse: 5.3.0 dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2904,6 +2853,11 @@ packages: resolution: {integrity: sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==} dev: true + /fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} + dev: true + /fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -2971,7 +2925,14 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.0 + flat-cache: 3.1.1 + dev: true + + /file-entry-cache@7.0.1: + resolution: {integrity: sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==} + engines: {node: '>=12.0.0'} + dependencies: + flat-cache: 3.1.1 dev: true /fill-range@7.0.1: @@ -3004,17 +2965,17 @@ packages: path-exists: 5.0.0 dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} + /flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} engines: {node: '>=12.0.0'} dependencies: - flatted: 3.2.7 - keyv: 4.5.3 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /for-each@0.3.3: @@ -3042,18 +3003,20 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: false optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 functions-have-names: 1.2.3 dev: true @@ -3061,9 +3024,9 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensequence@5.0.2: - resolution: {integrity: sha512-JlKEZnFc6neaeSVlkzBGGgkIoIaSxMgvdamRoPN8r3ozm2r9dusqxeKqYQ7lhzmj2UhFQP8nkyfCaiLQxiLrDA==} - engines: {node: '>=14'} + /gensequence@6.0.0: + resolution: {integrity: sha512-8WwuywE9pokJRAcg2QFR/plk3cVPebSUqRPzpGQh3WQ0wIiHAw+HyOQj5IuHyUTQBHpBKFoB2JUMu9zT3vJ16Q==} + engines: {node: '>=16'} dev: true /get-caller-file@2.0.5: @@ -3074,15 +3037,15 @@ packages: /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 + has: 1.0.4 has-proto: 1.0.1 has-symbols: 1.0.3 dev: true - /get-stdin@8.0.0: - resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} - engines: {node: '>=10'} + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} dev: true /get-stream@5.2.0: @@ -3104,11 +3067,11 @@ packages: get-intrinsic: 1.2.1 dev: true - /get-tsconfig@4.7.0: - resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==} + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: resolve-pkg-maps: 1.0.0 - dev: true + dev: false /github-url-from-git@1.5.0: resolution: {integrity: sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==} @@ -3137,21 +3100,14 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} - dependencies: - ini: 1.3.8 - dev: true - /global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} dependencies: ini: 2.0.0 - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + /globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -3161,7 +3117,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 dev: true /globby@11.1.0: @@ -3200,7 +3156,7 @@ packages: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.0 + '@types/responselike': 1.0.2 cacheable-lookup: 5.0.4 cacheable-request: 7.0.4 decompress-response: 6.0.0 @@ -3217,7 +3173,7 @@ packages: '@sindresorhus/is': 5.6.0 '@szmarczak/http-timer': 5.0.1 cacheable-lookup: 7.0.0 - cacheable-request: 10.2.13 + cacheable-request: 10.2.14 decompress-response: 6.0.0 form-data-encoder: 2.1.4 get-stream: 6.0.1 @@ -3289,11 +3245,9 @@ packages: resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + /has@1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 /hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} @@ -3385,8 +3339,8 @@ packages: resolve-cwd: 3.0.0 dev: true - /import-meta-resolve@2.2.2: - resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + /import-meta-resolve@3.0.0: + resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} dev: true /imurmurhash@0.1.4: @@ -3465,11 +3419,11 @@ packages: through: 2.3.8 dev: true - /inquirer@9.2.10: - resolution: {integrity: sha512-tVVNFIXU8qNHoULiazz612GFl+yqNfjMTbLuViNJE/d860Qxrd3NMrse8dm40VUQLOQeULvaQF8lpAhvysjeyA==} + /inquirer@9.2.11: + resolution: {integrity: sha512-B2LafrnnhbRzCWfAdOXisUzL89Kg8cVJlYmhqoi3flSiV/TveO+nsXwgKr9h9PIo+J1hz7nBSk6gegRIMBBf7g==} engines: {node: '>=14.18.0'} dependencies: - '@ljharb/through': 2.3.9 + '@ljharb/through': 2.3.11 ansi-escapes: 4.3.2 chalk: 5.3.0 cli-cursor: 3.1.0 @@ -3491,7 +3445,7 @@ packages: engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.1 - has: 1.0.3 + has: 1.0.4 side-channel: 1.0.4 dev: true @@ -3544,12 +3498,12 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: - ci-info: 3.8.0 + ci-info: 3.9.0 /is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: - has: 1.0.3 + has: 1.0.4 /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -3641,7 +3595,7 @@ packages: /is-name-taken@2.0.0: resolution: {integrity: sha512-W+FUWF5g7ONVJTx3rldZeVizmPzrMMUdscpSQ96vyYerx+4b2NcqaujLJJDWruGzE0FjzGZO9RFIipOGxx/WIw==} dependencies: - all-package-names: 2.0.720 + all-package-names: 2.0.765 package-name-conflict: 1.0.3 validate-npm-package-name: 3.0.0 dev: true @@ -3820,14 +3774,14 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /iterator.prototype@1.1.0: - resolution: {integrity: sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==} + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: - define-properties: 1.2.0 + define-properties: 1.2.1 get-intrinsic: 1.2.1 has-symbols: 1.0.3 - has-tostringtag: 1.0.0 - reflect.getprototypeof: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 dev: true /js-tokens@4.0.0: @@ -3864,14 +3818,14 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 object.assign: 4.1.4 - object.values: 1.1.6 + object.values: 1.1.7 dev: true - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 @@ -4057,21 +4011,14 @@ packages: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 7.5.4 - dev: true - /marked@4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} engines: {node: '>= 12'} hasBin: true dev: true - /meow@12.1.0: - resolution: {integrity: sha512-SvSqzS5ktjGoySdCwxQI16iO/ID1LtxM03QvJ4FF2H5cCtXLN7YbfKBCL9btqXSSuJ5TNG4UH6wvWtXZuvgvrw==} + /meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} dev: true @@ -4125,13 +4072,6 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -4163,10 +4103,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -4193,6 +4129,7 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: true /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -4227,14 +4164,14 @@ packages: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} - /np@8.0.4: + /np@8.0.4(typescript@5.2.2): resolution: {integrity: sha512-a4s1yESHcIwsrk/oaTekfbhb1R/2z2yyfVLX6Atl54w/9+QR01qeYyK3vMWgJ0UY+kYsGzQXausgvUX0pkmIMg==} engines: {git: '>=2.11.0', node: '>=16.6.0', npm: '>=7.19.0', yarn: '>=1.7.0'} hasBin: true dependencies: chalk: 5.3.0 - cosmiconfig: 8.2.0 - del: 7.0.0 + cosmiconfig: 8.3.6(typescript@5.2.2) + del: 7.1.0 escape-goat: 4.0.0 escape-string-regexp: 5.0.0 execa: 7.2.0 @@ -4244,7 +4181,7 @@ packages: hosted-git-info: 6.1.1 ignore-walk: 6.0.3 import-local: 3.1.0 - inquirer: 9.2.10 + inquirer: 9.2.11 is-installed-globally: 0.4.0 is-interactive: 2.0.0 is-scoped: 3.0.0 @@ -4252,9 +4189,9 @@ packages: listr: 0.14.3 listr-input: 0.2.1 log-symbols: 5.1.0 - meow: 12.1.0 + meow: 12.1.1 new-github-release-url: 2.0.0 - npm-name: 7.1.0 + npm-name: 7.1.1 onetime: 6.0.0 open: 9.1.0 ow: 1.1.1 @@ -4269,12 +4206,13 @@ packages: terminal-link: 3.0.0 update-notifier: 6.0.2 transitivePeerDependencies: + - typescript - zen-observable - zenObservable dev: true - /npm-name@7.1.0: - resolution: {integrity: sha512-0Sxf+7tQUOkQ9HuYVSdvq7gZNAOPp1ZJjHiKzpJhsQw9m1YjNfARC0SxWuuUWefChsbvu+DWrwWFfGQWLHmLjg==} + /npm-name@7.1.1: + resolution: {integrity: sha512-lyOwsFndLoozriMEsaqJ5lXvhCATYOEhDvxlom8TNvB9a/htDXuLgpVhMUOBd9zCewUXCyBXAPxrGr2TK2adgQ==} engines: {node: '>=12'} dependencies: got: 11.8.6 @@ -4313,8 +4251,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.0: + resolution: {integrity: sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==} dev: true /object-keys@1.1.1: @@ -4327,43 +4265,43 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.entries@1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true - /object.fromentries@2.0.6: - resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true - /object.hasown@1.1.2: - resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true /once@1.4.0: @@ -4421,7 +4359,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.0 + cli-spinners: 2.9.1 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -4578,7 +4516,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.10 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4639,9 +4577,9 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} hasBin: true dev: true @@ -4732,7 +4670,7 @@ packages: resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} engines: {node: '>=12.20'} dependencies: - '@types/normalize-package-data': 2.4.1 + '@types/normalize-package-data': 2.4.3 normalize-package-data: 3.0.3 parse-json: 5.2.0 type-fest: 2.19.0 @@ -4754,25 +4692,25 @@ packages: picomatch: 2.3.1 dev: false - /reflect.getprototypeof@1.0.3: - resolution: {integrity: sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==} + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 get-intrinsic: 1.2.1 globalthis: 1.0.3 which-builtin-type: 1.1.3 dev: true - /regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 + define-properties: 1.2.1 + set-function-name: 2.0.1 dev: true /regexpp@3.2.0: @@ -4829,27 +4767,20 @@ packages: engines: {node: '>=8'} dev: true - /resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} - dependencies: - global-dirs: 0.1.1 - dev: true - /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + dev: false - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve@2.0.0-next.4: - resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: is-core-module: 2.13.0 @@ -4933,8 +4864,8 @@ packages: tslib: 2.6.2 dev: true - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.2 @@ -4959,8 +4890,8 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sass@1.66.1: - resolution: {integrity: sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==} + /sass@1.69.4: + resolution: {integrity: sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -4987,6 +4918,15 @@ packages: dependencies: lru-cache: 6.0.0 + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4999,8 +4939,8 @@ packages: engines: {node: '>=8'} dev: true - /shiki@0.14.3: - resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} + /shiki@0.14.5: + resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==} dependencies: ansi-sequence-parser: 1.1.1 jsonc-parser: 3.2.0 @@ -5013,7 +4953,7 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + object-inspect: 1.13.0 dev: true /signal-exit@3.0.7: @@ -5022,7 +4962,7 @@ packages: /simple-markdown@0.7.3: resolution: {integrity: sha512-uGXIc13NGpqfPeFJIt/7SHHxd6HekEJYtsdoCM06mEBPL9fQH/pSD7LRM6PZ7CKchpSvxKL4tvwMamqAaNDAyg==} dependencies: - '@types/react': 18.2.21 + '@types/react': 18.2.29 dev: true /sisteransi@1.0.5: @@ -5054,18 +4994,18 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true + dev: false /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - dev: true + dev: false /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.13 + spdx-license-ids: 3.0.16 dev: true /spdx-exceptions@2.3.0: @@ -5076,17 +5016,17 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.13 + spdx-license-ids: 3.0.16 dev: true - /spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} dev: true /standalone-electron-types@1.0.0: resolution: {integrity: sha512-0HOi/tlTz3mjWhsAz4uRbpQcHMZ+ifj1JzWW9nugykOHClBBG77ps8QinrzX1eow4Iw2pnC+RFaSYRgufF4BOg==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.18.6 dev: false /string-width@1.0.2: @@ -5122,42 +5062,43 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.matchall@4.0.8: - resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 - regexp.prototype.flags: 1.5.0 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 side-channel: 1.0.4 dev: true - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + define-properties: 1.2.1 + es-abstract: 1.22.2 dev: true /string_decoder@1.3.0: @@ -5298,6 +5239,16 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /ts-api-utils@1.0.3(typescript@5.2.2): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + dev: true /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -5307,26 +5258,16 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsutils@3.21.0(typescript@5.0.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.0.4 - dev: true - - /tsx@3.12.7: - resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==} + /tsx@3.14.0: + resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} hasBin: true dependencies: - '@esbuild-kit/cjs-loader': 2.4.2 - '@esbuild-kit/core-utils': 3.1.0 - '@esbuild-kit/esm-loader': 2.5.5 + esbuild: 0.18.20 + get-tsconfig: 4.7.2 + source-map-support: 0.5.21 optionalDependencies: fsevents: 2.3.3 - dev: true + dev: false /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -5358,6 +5299,11 @@ packages: engines: {node: '>=14.16'} dev: true + /type-fest@4.5.0: + resolution: {integrity: sha512-diLQivFzddJl4ylL3jxSkEc39Tpw7o1QeEHIPxVwryDK2lpB7Nqhzhuo6v5/Ls08Z0yPSAhsyAWlv1/H0ciNmw==} + engines: {node: '>=16'} + dev: true + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -5401,18 +5347,18 @@ packages: dependencies: is-typedarray: 1.0.0 - /typedoc@0.23.28(typescript@5.0.4): - resolution: {integrity: sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==} - engines: {node: '>= 14.14'} + /typedoc@0.25.2(typescript@5.2.2): + resolution: {integrity: sha512-286F7BeATBiWe/qC4PCOCKlSTwfnsLbC/4cZ68oGBbvAqb9vV33quEOXx7q176OXotD+JdEerdQ1OZGJ818lnA==} + engines: {node: '>= 16'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 7.4.6 - shiki: 0.14.3 - typescript: 5.0.4 + minimatch: 9.0.3 + shiki: 0.14.5 + typescript: 5.2.2 dev: true /types-eslintrc@1.0.3: @@ -5432,9 +5378,9 @@ packages: types-json: 1.2.2 dev: true - /typescript@5.0.4: - resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} - engines: {node: '>=12.20'} + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} hasBin: true dev: true @@ -5447,13 +5393,6 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - /unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -5516,8 +5455,8 @@ packages: builtins: 1.0.3 dev: true - /vscode-languageserver-textdocument@1.0.8: - resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} + /vscode-languageserver-textdocument@1.0.11: + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} dev: true /vscode-oniguruma@1.7.0: @@ -5528,8 +5467,8 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /vscode-uri@3.0.7: - resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} + /vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} dev: true /w3c-keyname@2.2.8: @@ -5549,12 +5488,14 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -5570,7 +5511,7 @@ packages: resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} engines: {node: '>= 0.4'} dependencies: - function.prototype.name: 1.1.5 + function.prototype.name: 1.1.6 has-tostringtag: 1.0.0 is-async-function: 2.0.0 is-date-object: 1.0.5 @@ -5663,8 +5604,8 @@ packages: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5676,11 +5617,6 @@ packages: optional: true dev: false - /xdg-basedir@4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: true - /xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -5721,18 +5657,18 @@ packages: engines: {node: '>=12.20'} dev: true - /zod@3.22.2: - resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false - github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6(eslint@8.48.0): - resolution: {tarball: https://codeload.github.com/dmitmel/eslint-config-dmitmel/tar.gz/690f1b1121d342fcc8ee511ca9f2af7502f53db6} - id: github.com/dmitmel/eslint-config-dmitmel/690f1b1121d342fcc8ee511ca9f2af7502f53db6 + github.com/dmitmel/eslint-config-dmitmel/d97129ec35235415c6ae6a42299f55cdbb5d75fd(eslint@8.51.0): + resolution: {tarball: https://codeload.github.com/dmitmel/eslint-config-dmitmel/tar.gz/d97129ec35235415c6ae6a42299f55cdbb5d75fd} + id: github.com/dmitmel/eslint-config-dmitmel/d97129ec35235415c6ae6a42299f55cdbb5d75fd name: eslint-config-dmitmel - version: 8.2.2 + version: 8.3.0 engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=8.17.0' dependencies: - eslint: 8.48.0 + eslint: 8.51.0 dev: true diff --git a/scripts/build.mts b/scripts/build.mts index 10640b352..a879f74c0 100644 --- a/scripts/build.mts +++ b/scripts/build.mts @@ -21,31 +21,38 @@ const production = process.argv.includes("--production"); const dirname = path.dirname(fileURLToPath(import.meta.url)); +const distDir = production ? "dist-bundle" : "dist"; + +// Delete old builds to prevent issues/confusion from leftover files +rmSync("dist", { recursive: true, force: true }); +rmSync("dist-bundle", { recursive: true, force: true }); +rmSync("replugged.asar", { force: true }); + const preBundle: esbuild.Plugin = { name: "preBundle", setup: (build) => { build.onEnd(() => { - if (!existsSync("dist/i18n")) { - mkdirSync("dist/i18n"); + if (!existsSync(`${distDir}/i18n`)) { + mkdirSync(`${distDir}/i18n`); } readdirSync("i18n").forEach((file) => { if (file.endsWith(".json")) { - copyFileSync(`i18n/${file}`, `dist/i18n/${file}`); + copyFileSync(`i18n/${file}`, `${distDir}/i18n/${file}`); } }); const mainPackage = JSON.parse(readFileSync("package.json", "utf-8")); writeFileSync( - "dist/package.json", + `${distDir}/package.json`, JSON.stringify({ main: "main.js", name: "replugged", version: mainPackage.version, }), ); - asar.createPackage("dist", "replugged.asar"); + asar.createPackage(`${distDir}`, "replugged.asar"); }); }, }; @@ -53,13 +60,8 @@ const preBundle: esbuild.Plugin = { const plugins: esbuild.Plugin[] = []; if (!watch) plugins.push(logBuildPlugin); - if (production) { - rmSync("dist", { recursive: true, force: true }); plugins.push(preBundle); -} else { - rmSync("dist/i18n", { recursive: true, force: true }); - rmSync("dist/package.json", { force: true }); } const common: esbuild.BuildOptions = { @@ -80,8 +82,8 @@ const contexts = await Promise.all([ entryPoints: ["src/main/index.ts"], platform: "node", target: `node${NODE_VERSION}`, - outfile: "dist/main.js", - external: ["electron"], + outfile: `${distDir}/main.js`, + external: ["electron", "original-fs"], }), // Preload esbuild.context({ @@ -89,7 +91,7 @@ const contexts = await Promise.all([ entryPoints: ["src/preload.ts"], platform: "node", target: [`node${NODE_VERSION}`, `chrome${CHROME_VERSION}`], - outfile: "dist/preload.js", + outfile: `${distDir}/preload.js`, external: ["electron"], }), // Renderer @@ -98,7 +100,7 @@ const contexts = await Promise.all([ entryPoints: ["src/renderer/index.ts"], platform: "browser", target: `chrome${CHROME_VERSION}`, - outfile: "dist/renderer.js", + outfile: `${distDir}/renderer.js`, format: "esm", }), ]); diff --git a/scripts/inject/injector.mts b/scripts/inject/injector.mts index 1288668e8..d72a6e176 100644 --- a/scripts/inject/injector.mts +++ b/scripts/inject/injector.mts @@ -2,8 +2,7 @@ import { chown, copyFile, mkdir, rename, rm, stat, writeFile } from "fs/promises import path, { join, sep } from "path"; import { fileURLToPath } from "url"; import { AnsiEscapes, getCommand } from "./util.mjs"; -import readline from "readline"; -import { exec } from "child_process"; +import { execSync } from "child_process"; import { DiscordPlatform, PlatformModule } from "./types.mjs"; import { CONFIG_PATH } from "../../src/util.mjs"; import { existsSync } from "fs"; @@ -109,61 +108,22 @@ export const inject = async ( return false; } + const entryPoint = prod + ? join(CONFIG_PATH, "replugged.asar") + : join(dirname, "..", "..", "dist/main.js"); + const entryPointDir = path.dirname(entryPoint); + if (appDir.includes("flatpak")) { const discordName = platform === "canary" ? "DiscordCanary" : "Discord"; const overrideCommand = `${ appDir.startsWith("/var") ? "sudo flatpak override" : "flatpak override --user" - } com.discordapp.${discordName} --filesystem=${join(dirname, "..")}`; - const updateScript = ` - #!/bin/bash - shopt -s globstar - - for folder in ${join(dirname, "..")}/**/.git; do - (cd "$folder/.." && echo "Pulling $PWD" && git pull) - done`; - const readlineInterface = readline.createInterface({ - input: process.stdin, - output: process.stdout, - }); - - const askExecCmd = (): Promise => - new Promise((resolve) => - readlineInterface.question("Would you like to execute the command now? y/N: ", resolve), - ); - const askViewScript = (): Promise => - new Promise((resolve) => - readlineInterface.question( - "To update Replugged and its plugins, you need to pull in changes with git manually. A script is available for this however. View it? Y/n: ", - resolve, - ), - ); + } com.discordapp.${discordName} --filesystem=${entryPointDir}`; - console.warn( - `${AnsiEscapes.YELLOW}NOTE:${AnsiEscapes.RESET} You seem to be using the Flatpak version of Discord.`, - ); - console.warn( - "Some Replugged features such as auto updates won't work properly with Flatpaks.", - "\n", - ); - console.warn("You'll need to allow Discord to access Replugged's installation directory"); - console.warn( - `You can allow access to Replugged's directory with this command: ${AnsiEscapes.YELLOW}${overrideCommand}${AnsiEscapes.RESET}`, + console.log( + `${AnsiEscapes.YELLOW}Flatpak detected, allowing Discord access to Replugged files (${entryPointDir})${AnsiEscapes.RESET}`, ); - - const doCmd = await askExecCmd(); - - if (doCmd === "y" || doCmd === "yes") { - console.log("Running..."); - exec(overrideCommand); - } else { - console.log("OK. The command will not be executed.", "\n"); - } - - const viewScript = await askViewScript(); - if (viewScript === "" || viewScript === "y" || viewScript === "yes") { - console.log(`${AnsiEscapes.YELLOW}${updateScript}${AnsiEscapes.RESET}`); - } - readlineInterface.close(); + execSync(overrideCommand); + console.log("Done!"); } try { @@ -182,10 +142,6 @@ export const inject = async ( process.exit(process.argv.includes("--no-exit-codes") ? 0 : 1); } - const entryPoint = prod - ? join(CONFIG_PATH, "replugged.asar") - : join(dirname, "..", "..", "dist/main.js"); - if (prod) { await copyFile(join(dirname, "..", "..", "replugged.asar"), entryPoint); if (["linux", "darwin"].includes(process.platform)) { diff --git a/src/main/index.ts b/src/main/index.ts index c0842a060..acbb2dc45 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -28,13 +28,13 @@ Object.defineProperty(global, "appSettings", { class BrowserWindow extends electron.BrowserWindow { public constructor( opts: electron.BrowserWindowConstructorOptions & { - webContents: electron.WebContents; - webPreferences: { + webContents?: electron.WebContents; + webPreferences?: { nativeWindowOpen: boolean; }; }, ) { - const originalPreload = opts.webPreferences.preload; + const originalPreload = opts.webPreferences?.preload; if (opts.webContents) { // General purpose pop-outs used by Discord @@ -125,7 +125,8 @@ electron.app.once("ready", () => { // @todo: Whitelist a few domains instead of removing CSP altogether; See #386 electron.session.defaultSession.webRequest.onHeadersReceived(({ responseHeaders }, done) => { if (!responseHeaders) { - return done({}); + done({}); + return; } const hasFrameOptions = Object.keys(responseHeaders).find((e) => /x-frame-options/i.test(e)); diff --git a/src/main/ipc/installer.ts b/src/main/ipc/installer.ts index 80df14b55..b69b2fc54 100644 --- a/src/main/ipc/installer.ts +++ b/src/main/ipc/installer.ts @@ -9,13 +9,21 @@ import { } from "../../types"; import { Octokit } from "@octokit/rest"; import { CONFIG_PATH, CONFIG_PATHS } from "../../util.mjs"; -import { readFile, writeFile } from "fs/promises"; +import { readFile } from "fs/promises"; +import { writeFile as originalWriteFile } from "original-fs"; import fetch from "node-fetch"; -import { join } from "path"; +import { join, resolve, sep } from "path"; import { AnyAddonManifestOrReplugged, anyAddonOrReplugged } from "src/types/addon"; import { getSetting } from "./settings"; +import { promisify } from "util"; -const octokit = new Octokit(); +const writeFile = promisify(originalWriteFile); + +const octokit = new Octokit({ + request: { + fetch, + }, +}); async function github( identifier: string, @@ -170,6 +178,13 @@ ipcMain.handle( query.set("type", update ? "update" : "install"); if (version) query.set("version", version); + if (type === "replugged") { + // Manually set Path and URL for security purposes + path = "replugged.asar"; + const apiUrl = await getSetting("dev.replugged.Settings", "apiUrl", "https://replugged.dev"); + url = `${apiUrl}/api/v1/store/dev.replugged.Replugged.asar`; + } + let res; try { res = await fetch(`${url}?${query}`); @@ -191,8 +206,20 @@ ipcMain.handle( const buf = Buffer.from(file); + const base = getBaseName(type); + const filePath = resolve(base, path); + if (!filePath.startsWith(`${base}${sep}`)) { + // Ensure file changes are restricted to the base path + return { + success: false, + error: "Invalid path", + }; + } + + console.log(url, filePath); + try { - await writeFile(join(getBaseName(type), path), buf); + await writeFile(filePath, buf); } catch (err) { return { success: false, diff --git a/src/main/ipc/plugins.ts b/src/main/ipc/plugins.ts index fac451063..67b9bc884 100644 --- a/src/main/ipc/plugins.ts +++ b/src/main/ipc/plugins.ts @@ -5,7 +5,7 @@ IPC events: */ import { readFile, readdir, readlink, rm, stat } from "fs/promises"; -import { extname, join } from "path"; +import { extname, join, sep } from "path"; import { ipcMain, shell } from "electron"; import { RepluggedIpcChannels, type RepluggedPlugin } from "../../types"; import { plugin } from "../../types/addon"; @@ -19,8 +19,14 @@ export const isFileAPlugin = (f: Dirent | Stats, name: string): boolean => { }; async function getPlugin(pluginName: string): Promise { + const manifestPath = join(PLUGINS_DIR, pluginName, "manifest.json"); + if (!manifestPath.startsWith(`${PLUGINS_DIR}${sep}`)) { + // Ensure file changes are restricted to the base path + throw new Error("Invalid plugin name"); + } + const manifest: unknown = JSON.parse( - await readFile(join(PLUGINS_DIR, pluginName, "manifest.json"), { + await readFile(manifestPath, { encoding: "utf-8", }), ); @@ -85,7 +91,13 @@ ipcMain.handle(RepluggedIpcChannels.LIST_PLUGINS, async (): Promise { - await rm(join(PLUGINS_DIR, pluginName), { + const pluginPath = join(PLUGINS_DIR, pluginName); + if (!pluginPath.startsWith(`${PLUGINS_DIR}${sep}`)) { + // Ensure file changes are restricted to the base path + throw new Error("Invalid plugin name"); + } + + await rm(pluginPath, { recursive: true, force: true, }); diff --git a/src/main/ipc/react-devtools.ts b/src/main/ipc/react-devtools.ts index d994ddc18..a22e88608 100644 --- a/src/main/ipc/react-devtools.ts +++ b/src/main/ipc/react-devtools.ts @@ -33,7 +33,10 @@ ipcMain.handle(RepluggedIpcChannels.DOWNLOAD_REACT_DEVTOOLS, async () => { return new Promise((resolve, reject) => { zip.extractAllToAsync(OUTPUT_PATH, true, false, (error) => { - if (error) return reject(error); + if (error) { + reject(error); + return; + } resolve(); }); }); diff --git a/src/main/ipc/settings.ts b/src/main/ipc/settings.ts index 80cd524ef..f08f4811e 100644 --- a/src/main/ipc/settings.ts +++ b/src/main/ipc/settings.ts @@ -1,5 +1,5 @@ import { readFile, writeFile } from "fs/promises"; -import { join } from "path"; +import { resolve, sep } from "path"; import { ipcMain, shell } from "electron"; import { RepluggedIpcChannels } from "../../types"; import type { @@ -11,9 +11,19 @@ import { CONFIG_PATHS } from "src/util.mjs"; const SETTINGS_DIR = CONFIG_PATHS.settings; +export function getSettingsPath(namespace: string): string { + const resolved = resolve(SETTINGS_DIR, `${namespace}.json`); + if (!resolved.startsWith(`${SETTINGS_DIR}${sep}`)) { + // Ensure file changes are restricted to the base path + throw new Error("Invalid namespace"); + } + return resolved; +} + async function readSettings(namespace: string): Promise> { + const path = getSettingsPath(namespace); try { - const data = await readFile(join(SETTINGS_DIR, `${namespace}.json`), "utf8"); + const data = await readFile(path, "utf8"); return new Map(Object.entries(JSON.parse(data))); } catch { return new Map(); @@ -22,13 +32,13 @@ async function readSettings(namespace: string): Promise> { function writeSettings(namespace: string, settings: SettingsMap): Promise { return writeFile( - join(SETTINGS_DIR, `${namespace}.json`), + getSettingsPath(namespace), JSON.stringify(Object.fromEntries(settings.entries()), null, 2), "utf8", ); } -const locks: Record> = {}; +const locks: Record | undefined> = {}; async function transaction(namespace: string, handler: TransactionHandler): Promise { const lock = locks[namespace] ?? Promise.resolve(); @@ -54,8 +64,27 @@ export async function writeTransaction( handler: SettingsTransactionHandler, ): Promise { return transaction(namespace, async () => { + const postHandlerTransform: Array<(settings: SettingsMap) => void | Promise> = []; + const settings = await readSettings(namespace); + if (namespace.toLowerCase() === "dev.replugged.settings") { + // Prevent the "apiUrl" setting from changing + const originalValue = settings.get("apiUrl"); + postHandlerTransform.push((settings) => { + if (originalValue) { + settings.set("apiUrl", originalValue); + } else { + settings.delete("apiUrl"); + } + }); + } + const res = await handler(settings); + + for (const transform of postHandlerTransform) { + await transform(settings); + } + await writeSettings(namespace, settings); return res; }); diff --git a/src/main/ipc/themes.ts b/src/main/ipc/themes.ts index aefa92cf2..740bed3f3 100644 --- a/src/main/ipc/themes.ts +++ b/src/main/ipc/themes.ts @@ -5,7 +5,7 @@ IPC events: */ import { readFile, readdir, readlink, rm, stat } from "fs/promises"; -import { extname, join } from "path"; +import { extname, join, sep } from "path"; import { ipcMain, shell } from "electron"; import { RepluggedIpcChannels, type RepluggedTheme } from "../../types"; import { theme } from "../../types/addon"; @@ -19,8 +19,14 @@ export const isFileATheme = (f: Dirent | Stats, name: string): boolean => { }; async function getTheme(path: string): Promise { + const manifestPath = join(THEMES_DIR, path, "manifest.json"); + if (!manifestPath.startsWith(`${THEMES_DIR}${sep}`)) { + // Ensure file changes are restricted to the base path + throw new Error("Invalid theme name"); + } + const manifest: unknown = JSON.parse( - await readFile(join(THEMES_DIR, path, "manifest.json"), { + await readFile(manifestPath, { encoding: "utf-8", }), ); @@ -72,7 +78,13 @@ ipcMain.handle(RepluggedIpcChannels.LIST_THEMES, async (): Promise { - await rm(join(THEMES_DIR, themeName), { + const themePath = join(THEMES_DIR, themeName); + if (!themePath.startsWith(`${THEMES_DIR}${sep}`)) { + // Ensure file changes are restricted to the base path + throw new Error("Invalid theme name"); + } + + await rm(themePath, { recursive: true, force: true, }); diff --git a/src/preload.ts b/src/preload.ts index 6cb8da77b..1a611af16 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -6,6 +6,7 @@ import { } from "electron"; import { RepluggedIpcChannels } from "./types"; +// eslint-disable-next-line no-duplicate-imports -- these are only used for types, the other import is for the actual code import type { CheckResultFailure, CheckResultSuccess, diff --git a/src/renderer/apis/commands.ts b/src/renderer/apis/commands.ts index fc13ba012..81e04edaa 100644 --- a/src/renderer/apis/commands.ts +++ b/src/renderer/apis/commands.ts @@ -1,4 +1,4 @@ -import type { Channel, Guild } from "discord-types/general"; +import type { Channel, Guild, User } from "discord-types/general"; import type { AnyRepluggedCommand, CommandOptionReturn, @@ -10,19 +10,32 @@ import type { RepluggedCommandResult, RepluggedCommandSection, } from "../../types"; +// eslint-disable-next-line no-duplicate-imports import { ApplicationCommandOptionType } from "../../types"; import { constants, i18n, messages, users } from "../modules/common"; import type { Store } from "../modules/common/flux"; import { Logger } from "../modules/logger"; -import { getByStoreName } from "../modules/webpack"; +import { filters, getByStoreName, waitForModule } from "../modules/webpack"; const logger = Logger.api("Commands"); +let RepluggedUser: User | undefined; + interface CommandsAndSection { section: RepluggedCommandSection; commands: Map; } +void waitForModule(filters.bySource(".isStaffPersonal=")).then((User) => { + RepluggedUser = new User({ + avatar: "replugged", + id: "replugged", + bot: true, + username: "Replugged", + system: true, + }); +}); + export const commandAndSections = new Map(); export const defaultSection: RepluggedCommandSection = Object.freeze({ @@ -43,7 +56,7 @@ export class CommandInteraction { channelId: string, optionName: string, draftType: 0, - ) => { uploadedFilename?: string; item?: { file: File } }; + ) => { uploadedFilename?: string; item?: { file: File } } | undefined; } >("UploadAttachmentStore")!; this.options = props.options; @@ -91,11 +104,6 @@ async function executeCommand( loggingName: "Replugged", }); - Object.assign(loadingMessage.author, { - username: "Replugged", - avatar: "replugged", - }); - Object.assign(loadingMessage, { flags: constants.MessageFlags.EPHEMERAL + constants.MessageFlags.LOADING, // adding loading too state: "SENDING", // Keep it a little faded @@ -112,6 +120,7 @@ async function executeCommand( name: command.displayName, }, type: 20, + author: RepluggedUser ?? loadingMessage.author, }); messages.receiveMessage(currentChannelId, loadingMessage, true); const interaction = new CommandInteraction({ options: args, ...currentInfo }); @@ -135,11 +144,6 @@ async function executeCommand( loggingName: "Replugged", }); - Object.assign(botMessage.author, { - username: "Replugged", - avatar: "replugged", - }); - Object.assign(botMessage, { interaction: { // eslint-disable-next-line @typescript-eslint/naming-convention @@ -154,24 +158,19 @@ async function executeCommand( name: command.displayName, }, type: 20, + author: RepluggedUser ?? botMessage.author, }); messages.receiveMessage(currentChannelId, botMessage, true); } } catch (error) { logger.error(error); const currentChannelId = currentInfo.channel.id; - const botMessage = messages.createBotMessage?.({ + const botMessage = messages.createBotMessage({ channelId: currentChannelId, content: i18n.Messages.REPLUGGED_COMMAND_ERROR_GENERIC, embeds: [], loggingName: "Replugged", }); - if (!botMessage) return; - - Object.assign(botMessage.author, { - username: "Replugged", - avatar: "replugged", - }); Object.assign(botMessage, { interaction: { @@ -187,9 +186,10 @@ async function executeCommand( name: command.displayName, }, type: 20, + author: RepluggedUser ?? botMessage.author, }); - messages?.receiveMessage?.(currentChannelId, botMessage, true); + messages.receiveMessage(currentChannelId, botMessage, true); } } @@ -222,14 +222,13 @@ export class CommandManager { command.id ??= command.name; command.execute ??= (args, currentInfo) => { - void executeCommand(command.executor, args ?? [], currentInfo ?? {}, command); + void executeCommand(command.executor, args, currentInfo, command); }; command.options?.map((option) => { option.serverLocalizedName ??= option.displayName; option.displayName ??= option.name; option.displayDescription ??= option.description; - return option; }); @@ -246,6 +245,6 @@ export class CommandManager { * Code to unregister all slash commands registered with this class */ public unregisterAllCommands(): void { - for (const unregister of this.#unregister) unregister?.(); + for (const unregister of this.#unregister) unregister(); } } diff --git a/src/renderer/apis/connections.ts b/src/renderer/apis/connections.ts index 23d14e6c1..b0cfd3a5e 100644 --- a/src/renderer/apis/connections.ts +++ b/src/renderer/apis/connections.ts @@ -12,13 +12,8 @@ class ConnectionsAPI extends EventTarget { return this.connections.filter.bind(this.connections); } - public get(type: string): RepluggedConnection { - const connections: Record = {}; - for (const element of this.connections) { - connections[element.type] = element; - } - - return connections[type]; + public get(type: string): RepluggedConnection | undefined { + return this.connections.find((c) => c.type === type); } public registerConnection(connection: RepluggedConnection): void { diff --git a/src/renderer/apis/notices.ts b/src/renderer/apis/notices.ts index d833d1ea2..23d4257e2 100644 --- a/src/renderer/apis/notices.ts +++ b/src/renderer/apis/notices.ts @@ -14,10 +14,10 @@ class NoticesAPI extends EventTarget { } public getAnnouncement(): RepluggedAnnouncement | undefined { - while (this.announcements?.[0]?._dismissed) { + while (this.announcements[0]?._dismissed) { this.announcements.shift(); } - return this.announcements?.[0]; + return this.announcements[0]; } public closeActiveAnnouncement(): void { diff --git a/src/renderer/apis/settings.ts b/src/renderer/apis/settings.ts index 07a2933c6..2cdfd9a51 100644 --- a/src/renderer/apis/settings.ts +++ b/src/renderer/apis/settings.ts @@ -39,7 +39,7 @@ export class SettingsManager, D extends ke * settings from the file system. * @param namespace Namespace of settings to manage. */ - public constructor(namespace: string, defaultSettings: Partial) { + public constructor(namespace: string, defaultSettings: Partial = {}) { this.namespace = namespace; this.#defaultSettings = defaultSettings; this.#queuedUpdates = new Map(); @@ -63,7 +63,7 @@ export class SettingsManager, D extends ke throw new Error(`Settings not loaded for namespace ${this.namespace}`); } // @ts-expect-error It doesn't understand ig - return this.#settings[key] ?? fallback ?? this.#defaultSettings?.[key]; + return this.#settings[key] ?? fallback ?? this.#defaultSettings[key]; } /** diff --git a/src/renderer/coremods/badges/index.tsx b/src/renderer/coremods/badges/index.tsx index 20e0f502e..7f9bda4c2 100644 --- a/src/renderer/coremods/badges/index.tsx +++ b/src/renderer/coremods/badges/index.tsx @@ -20,10 +20,12 @@ interface BadgeModArgs { size?: BadgeSizes; } -type BadgeMod = (args: BadgeModArgs) => React.ReactElement<{ - children: React.ReactElement[]; - className: string; -}>; +type BadgeMod = (args: BadgeModArgs) => + | React.ReactElement<{ + children?: React.ReactElement[]; + className: string; + }> + | undefined; interface BadgeCache { badges: APIBadges; @@ -66,7 +68,7 @@ export async function start(): Promise { await fetch(`${generalSettings.get("apiUrl")}/api/v1/users/${id}`) .then(async (res) => { const body = (await res.json()) as Record & { - badges: APIBadges; + badges: APIBadges | undefined; }; if (res.status === 200 || res.status === 404) { @@ -95,8 +97,7 @@ export async function start(): Promise { if (!badges) { return res; } - - const children = res?.props?.children; + const children = res?.props.children; if (!children || !Array.isArray(children)) { logger.error("Error injecting badges: res.props.children is not an array", { children }); return res; @@ -111,7 +112,7 @@ export async function start(): Promise { const sizeClass = getBadgeSizeClass(size); children.forEach((badge) => { - const elem: React.ReactElement = badge.props.children?.(); + const elem: React.ReactElement | undefined = badge.props.children?.(); if (elem) { elem.props.children.props.className = sizeClass; badge.props.children = (props: Record) => { diff --git a/src/renderer/coremods/commands/commands.ts b/src/renderer/coremods/commands/commands.ts index 214b27d61..7377fe0f0 100644 --- a/src/renderer/coremods/commands/commands.ts +++ b/src/renderer/coremods/commands/commands.ts @@ -68,8 +68,8 @@ export function loadCommands(): void { ? Messages.REPLUGGED_PLUGIN : Messages.REPLUGGED_THEME, name: - plugins.plugins.get(addonId)?.manifest?.name ?? - themes.themes.get(addonId)?.manifest?.name, + plugins.plugins.get(addonId)?.manifest.name ?? + themes.themes.get(addonId)?.manifest.name, }), }, ], @@ -151,8 +151,8 @@ export function loadCommands(): void { ? Messages.REPLUGGED_PLUGIN : Messages.REPLUGGED_THEME, name: - plugins.plugins.get(addonId)?.manifest?.name ?? - themes.themes.get(addonId)?.manifest?.name, + plugins.plugins.get(addonId)?.manifest.name ?? + themes.themes.get(addonId)?.manifest.name, }), }, ], @@ -229,8 +229,8 @@ export function loadCommands(): void { ? Messages.REPLUGGED_PLUGIN : Messages.REPLUGGED_THEME, name: - plugins.plugins.get(addonId)?.manifest?.name ?? - themes.themes.get(addonId)?.manifest?.name, + plugins.plugins.get(addonId)?.manifest.name ?? + themes.themes.get(addonId)?.manifest.name, }), }, ], @@ -268,12 +268,12 @@ export function loadCommands(): void { required: true, choices: [ { - name: Messages.REPLUGGED_THEME, + name: Messages.REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME, displayName: Messages.REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME, value: "theme", }, { - name: Messages.REPLUGGED_PLUGIN, + name: Messages.REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN, displayName: Messages.REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN, value: "plugin", }, diff --git a/src/renderer/coremods/commands/index.ts b/src/renderer/coremods/commands/index.ts index 34f33b857..8d0fa9dc4 100644 --- a/src/renderer/coremods/commands/index.ts +++ b/src/renderer/coremods/commands/index.ts @@ -16,35 +16,39 @@ const logger = Logger.api("Commands"); const injector = new Injector(); interface ApplicationCommandSearchStoreMod { - [key: string]: (...args: unknown[]) => { - sectionDescriptors: RepluggedCommandSection[]; - commands: AnyRepluggedCommand[]; - filteredSectionId: string; - activeSections: RepluggedCommandSection[]; - commandsByActiveSection: Array<{ - section: RepluggedCommandSection; - data: AnyRepluggedCommand[]; - }>; - }; + [key: string]: (...args: unknown[]) => + | { + sectionDescriptors: RepluggedCommandSection[]; + commands: AnyRepluggedCommand[]; + filteredSectionId: string | null; + activeSections: RepluggedCommandSection[]; + commandsByActiveSection: Array<{ + section: RepluggedCommandSection; + data: AnyRepluggedCommand[]; + }>; + } + | undefined; } interface ApplicationCommandSearchStore { - getChannelState: (...args: unknown[]) => { - applicationSections: RepluggedCommandSection[]; - applicationCommands: AnyRepluggedCommand[]; - }; - getApplicationSections: (...args: unknown[]) => RepluggedCommandSection[]; + getChannelState: (...args: unknown[]) => + | { + applicationSections: RepluggedCommandSection[]; + applicationCommands: AnyRepluggedCommand[]; + } + | undefined; + getApplicationSections: (...args: unknown[]) => RepluggedCommandSection[] | undefined; useSearchManager: (...args: unknown[]) => unknown; - getQueryCommands: (...args: [string, string, string]) => AnyRepluggedCommand[]; + getQueryCommands: (...args: [string, string, string]) => AnyRepluggedCommand[] | undefined; } async function injectRepluggedBotIcon(): Promise { // Adds Avatar for replugged to default avatar to be used by system bot just like clyde // Ain't removing it on stop because we have checks here const DefaultAvatars = await waitForProps<{ - BOT_AVATARS: Record; + BOT_AVATARS: Record | undefined; }>("BOT_AVATARS"); - if (DefaultAvatars?.BOT_AVATARS) { + if (DefaultAvatars.BOT_AVATARS) { DefaultAvatars.BOT_AVATARS.replugged = defaultSection.icon; } else { logger.error("Error while injecting custom icon for slash command replies."); @@ -88,7 +92,7 @@ async function injectApplicationCommandSearchStore(): Promise { const sectionsToAdd = commandAndSectionsArray .map((commandAndSection) => commandAndSection.section) .filter((section) => !res.sectionDescriptors.includes(section)); - if (res.sectionDescriptors.some?.((section) => section?.id === "-2")) { + if (res.sectionDescriptors.some((section) => section.id === "-2")) { res.sectionDescriptors.splice(1, 0, ...sectionsToAdd); } else { res.sectionDescriptors = Array.isArray(res.sectionDescriptors) @@ -109,7 +113,7 @@ async function injectApplicationCommandSearchStore(): Promise { (res.filteredSectionId == null || res.filteredSectionId === section.id) && !res.activeSections.includes(section), ); - if (res.activeSections.some?.((section) => section?.id === "-2")) { + if (res.activeSections.some((section) => section.id === "-2")) { res.activeSections.splice(1, 0, ...sectionsToAdd); } else { res.activeSections = Array.isArray(res.activeSections) @@ -134,8 +138,8 @@ async function injectApplicationCommandSearchStore(): Promise { })); if ( - res.commandsByActiveSection.some?.( - (activeCommandAndSections) => activeCommandAndSections?.section?.id === "-2", + res.commandsByActiveSection.some( + (activeCommandAndSections) => activeCommandAndSections.section.id === "-2", ) ) { res.commandsByActiveSection.splice(1, 0, ...commandsBySectionToAdd); @@ -179,7 +183,7 @@ async function injectApplicationCommandSearchStore(): Promise { if ( !Array.isArray(res.applicationSections) || !commandAndSectionsArray.every((commandAndSection) => - res.applicationSections?.some((section) => section.id === commandAndSection.section.id), + res.applicationSections.some((section) => section.id === commandAndSection.section.id), ) ) { const sectionsToAdd = commandAndSectionsArray.map( @@ -217,16 +221,16 @@ async function injectApplicationCommandSearchStore(): Promise { const commandAndSectionsArray = Array.from(commandAndSections.values()).filter( (commandAndSection) => commandAndSection.commands.size, ); - if (!res || !commandAndSectionsArray.length) return; + if (!commandAndSectionsArray.length) return; if ( - !commandAndSectionsArray.every((commandAndSection) => - res.some((section) => section.id === commandAndSection.section.id), + !commandAndSectionsArray.every( + (commandAndSection) => res?.some((section) => section.id === commandAndSection.section.id), ) ) { const sectionsToAdd = commandAndSectionsArray .map((commandAndSection) => commandAndSection.section) - .filter((section) => res.some((existingSections) => section.id === existingSections.id)); - res = [...res, ...sectionsToAdd]; + .filter((section) => res?.some((existingSections) => section.id === existingSections.id)); + res.push(...sectionsToAdd); } return res; }); diff --git a/src/renderer/coremods/contextMenu/index.tsx b/src/renderer/coremods/contextMenu/index.tsx index 9947c16b0..06d423a67 100644 --- a/src/renderer/coremods/contextMenu/index.tsx +++ b/src/renderer/coremods/contextMenu/index.tsx @@ -13,7 +13,8 @@ const logger = Logger.api("ContextMenu"); export const menuItems = {} as Record< ContextMenuTypes, - Array<{ getItem: GetContextItem; sectionId: number | undefined; indexInSection: number }> + | Array<{ getItem: GetContextItem; sectionId: number | undefined; indexInSection: number }> + | undefined >; /** @@ -23,6 +24,7 @@ export const menuItems = {} as Record< */ function makeItem(raw: RawContextItem | ContextItem | undefined | void): ContextItem | undefined { // Occasionally React won't be loaded when this function is ran, so we don't return anything + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!React) return undefined; if (!raw) { @@ -59,9 +61,9 @@ export function addContextMenuItem( sectionId: number | undefined, indexInSection: number, ): () => void { - if (!menuItems[navId]) menuItems[navId] = []; + menuItems[navId] ||= []; - menuItems[navId].push({ getItem, sectionId, indexInSection }); + menuItems[navId]?.push({ getItem, sectionId, indexInSection }); return () => removeContextMenuItem(navId, getItem); } @@ -72,9 +74,7 @@ export function addContextMenuItem( * @returns */ export function removeContextMenuItem(navId: ContextMenuTypes, getItem: GetContextItem): void { - const items = menuItems[navId]; - - menuItems[navId] = items.filter((item) => item.getItem !== getItem); + menuItems[navId] = menuItems[navId]?.filter((item) => item.getItem !== getItem); } type ContextMenuData = ContextMenuProps["ContextMenu"] & { @@ -104,8 +104,7 @@ export function _insertMenuItems(menu: ContextMenuData): void { "Menu", "MenuItem", "MenuGroup", - ])!; - + ]) || { MenuGroup: undefined }; if (!MenuGroup) return; // The data as passed as Arguments from the calling function, so we just grab what we want from it @@ -127,10 +126,11 @@ export function _insertMenuItems(menu: ContextMenuData): void { menu.children.push(repluggedGroup); } - menuItems[navId].forEach((item) => { + menuItems[navId]?.forEach((item) => { try { - const res = makeItem(item.getItem(data, menu)) as ContextItem & { props: { id?: string } }; - + const res = makeItem(item.getItem(data, menu)) as + | (ContextItem & { props: { id?: string } }) + | undefined; if (res?.props) { // add in unique ids res.props.id = `${res.props.id || "repluggedItem"}-${Math.random() @@ -141,7 +141,10 @@ export function _insertMenuItems(menu: ContextMenuData): void { if (!Array.isArray(menu.children)) menu.children = [menu.children]; const section = typeof item.sectionId === "undefined" ? repluggedGroup : menu.children.at(item.sectionId); - if (!section) return logger.error("Couldn't find section", item.sectionId, menu.children); + if (!section) { + logger.error("Couldn't find section", item.sectionId, menu.children); + return; + } section.props.children.splice(item.indexInSection, 0, res); } catch (err) { logger.error("Error while running GetContextItem function", err, item.getItem); diff --git a/src/renderer/coremods/devCompanion/index.tsx b/src/renderer/coremods/devCompanion/index.tsx index 28bee6d8c..990b322c5 100644 --- a/src/renderer/coremods/devCompanion/index.tsx +++ b/src/renderer/coremods/devCompanion/index.tsx @@ -142,8 +142,10 @@ export function initWs(isManual = false): void { const candidates = search(find); const keys = Object.keys(candidates); - if (keys.length !== 1) - return reply(`Expected exactly one 'find' match, found ${keys.length}`); + if (keys.length !== 1) { + reply(`Expected exactly one 'find' match, found ${keys.length}`); + return; + } let src = String(candidates[keys[0] as keyof typeof candidates]); @@ -163,7 +165,8 @@ export function initWs(isManual = false): void { src = newSource; } catch (err) { - return reply(`Replacement ${i} failed: ${err}`); + reply(`Replacement ${i} failed: ${err}`); + return; } } @@ -176,7 +179,8 @@ export function initWs(isManual = false): void { try { parsedArgs = args.map(parseNode); } catch (err) { - return reply(`Failed to parse args: ${err}`); + reply(`Failed to parse args: ${err}`); + return; } try { @@ -185,7 +189,8 @@ export function initWs(isManual = false): void { if (results.length > 1) throw new Error("Found more than one result! Make this filter more specific."); } catch (err) { - return reply(`Failed to find: ${err}`); + reply(`Failed to find: ${err}`); + return; } reply(); diff --git a/src/renderer/coremods/installer/AddonEmbed.tsx b/src/renderer/coremods/installer/AddonEmbed.tsx index f9fd91b71..0ff620242 100644 --- a/src/renderer/coremods/installer/AddonEmbed.tsx +++ b/src/renderer/coremods/installer/AddonEmbed.tsx @@ -5,9 +5,8 @@ import { Logger } from "@replugged"; import { getByProps } from "@webpack"; import { openExternal } from "src/renderer/util"; import { CheckResultSuccess } from "src/types"; -import { InstallLinkProps } from "."; import { getSourceLink } from "../settings/pages"; -import { authorList, checkIsInstalled, getInfo, install } from "./util"; +import { InstallLinkProps, authorList, checkIsInstalled, getInfo, install } from "./util"; import "./addonEmbed.css"; diff --git a/src/renderer/coremods/installer/commands.ts b/src/renderer/coremods/installer/commands.ts new file mode 100644 index 000000000..26b15f9dd --- /dev/null +++ b/src/renderer/coremods/installer/commands.ts @@ -0,0 +1,83 @@ +import { Injector } from "@replugged"; +import { ApplicationCommandOptionType } from "src/types"; +import { INSTALLER_SOURCES, InstallerSource, installFlow, parseInstallLink } from "./util"; +import { Messages } from "@common/i18n"; + +/** + * A map of display names for installer sources. + */ +const sourceDisplayNames: Record = { + github: "GitHub", + store: Messages.REPLUGGED_STORE, +}; + +export function loadCommands(injector: Injector): void { + injector.utils.registerSlashCommand({ + name: "install", + displayName: Messages.REPLUGGED_COMMAND_INSTALL_NAME, + description: Messages.REPLUGGED_COMMAND_INSTALL_DESC, + options: [ + { + name: "addon", + displayName: Messages.REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME, + description: Messages.REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC, + type: ApplicationCommandOptionType.String, + required: true, + }, + { + name: "source", + displayName: Messages.REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME, + description: Messages.REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC, + type: ApplicationCommandOptionType.String, + required: false, + choices: INSTALLER_SOURCES.map((v) => ({ + name: v, + displayName: sourceDisplayNames[v], + value: v, + })), + }, + { + name: "id", + displayName: Messages.REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME, + description: Messages.REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC, + type: ApplicationCommandOptionType.String, + required: false, + }, + ], + + async executor(i) { + let addon = i.getValue("addon"); + let source = i.getValue("source"); + let id = i.getValue("id"); + + const linkParsed = parseInstallLink(addon); + + if (linkParsed) { + ({ identifier: addon, source, id } = linkParsed); + } + + const resp = await installFlow(addon, source, id, false); + + switch (resp.kind) { + case "FAILED": + return { + result: Messages.REPLUGGED_TOAST_INSTALLER_ADDON_FETCH_INFO_FAILED, + }; + case "ALREADY_INSTALLED": + return { + result: Messages.REPLUGGED_ERROR_ALREADY_INSTALLED.format({ name: resp.manifest.name }), + }; + case "CANCELLED": + return { + result: Messages.REPLUGGED_TOAST_INSTALLER_ADDON_CANCELED_INSTALL, + }; + case "SUCCESS": + return { + result: Messages.REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_SUCCESS.format({ + name: resp.manifest.name, + }), + }; + } + }, + }); +} diff --git a/src/renderer/coremods/installer/index.tsx b/src/renderer/coremods/installer/index.tsx index f796b44bc..a42931b14 100644 --- a/src/renderer/coremods/installer/index.tsx +++ b/src/renderer/coremods/installer/index.tsx @@ -2,13 +2,20 @@ import { Injector, Logger } from "@replugged"; import { filters, getFunctionKeyBySource, waitForModule } from "src/renderer/modules/webpack"; import { ObjectExports } from "src/types"; import { registerRPCCommand } from "../rpc"; -import { InstallResponse, InstallerSource, installFlow, isValidSource } from "./util"; +import { + InstallLinkProps, + InstallResponse, + InstallerSource, + installFlow, + parseInstallLink, +} from "./util"; import { plugins } from "src/renderer/managers/plugins"; import { themes } from "src/renderer/managers/themes"; import AddonEmbed from "./AddonEmbed"; import { generalSettings } from "../settings/pages"; import type { Capture, DefaultInRule } from "simple-markdown"; import { parser } from "@common"; +import { loadCommands } from "./commands"; const injector = new Injector(); const logger = Logger.coremod("Installer"); @@ -18,51 +25,6 @@ interface AnchorProps extends React.ComponentPropsWithoutRef<"a"> { focusProps?: Record; } -export interface InstallLinkProps { - /** Identifier for the addon in the source */ - identifier: string; - /** Updater source type */ - source?: InstallerSource; - /** ID for the addon in that source. Useful for GitHub repositories that have multiple addons. */ - id?: string; -} - -function parseInstallLink(href: string): InstallLinkProps | null { - try { - const url = new URL(href); - const repluggedHostname = new URL(generalSettings.get("apiUrl")).hostname; - if (url.hostname !== repluggedHostname) return null; - - if (url.pathname === "/install") { - const params = url.searchParams; - const identifier = params.get("identifier"); - const source = params.get("source") ?? "store"; - const id = params.get("id") ?? undefined; - if (!identifier) return null; - if (!isValidSource(source)) return null; - return { - identifier, - source, - id, - }; - } - - const storeMatch = url.pathname.match(/^\/store\/([^/]+)$/); - if (storeMatch) { - const identifier = storeMatch[1]; - if (["plugins", "themes"].includes(identifier.toLowerCase())) return null; - return { - identifier, - source: "store", - }; - } - - return null; - } catch { - return null; - } -} - let uninjectFns: Array<() => void> = []; const modalFlows = new Map>(); @@ -169,7 +131,7 @@ async function injectLinks(): Promise { parse: (capture: Capture) => { const installLink = parseInstallLink(capture[1]); return { - ...installLink!, + ...installLink, url: capture[1], }; }, @@ -202,6 +164,7 @@ async function injectLinks(): Promise { export async function start(): Promise { await injectLinks(); injectRpc(); + loadCommands(injector); } export function stop(): void { diff --git a/src/renderer/coremods/installer/util.tsx b/src/renderer/coremods/installer/util.tsx index 3188528e3..a0c5c0c42 100644 --- a/src/renderer/coremods/installer/util.tsx +++ b/src/renderer/coremods/installer/util.tsx @@ -7,24 +7,69 @@ import { openExternal } from "src/renderer/util"; import type { AnyAddonManifest, CheckResultSuccess } from "src/types"; import * as pluginManager from "../../managers/plugins"; import * as themeManager from "../../managers/themes"; -import { getAddonType, getSourceLink, label } from "../settings/pages"; +import { generalSettings, getAddonType, getSourceLink, label } from "../settings/pages"; const logger = Logger.coremod("Installer"); // First item is the default -const INSTALLER_SOURCES = ["store", "github"] as const; +export const INSTALLER_SOURCES = ["store", "github"] as const; export type InstallerSource = (typeof INSTALLER_SOURCES)[number]; const DEFAULT_INSTALLER_SOURCE: InstallerSource = "store"; const CACHE_INTERVAL = 1000 * 60 * 60; -const cache: Map = new Map(); +const cache = new Map(); export function isValidSource(type: string): type is InstallerSource { // @ts-expect-error Doesn't matter that it might not be a valid type return INSTALLER_SOURCES.includes(type); } +export interface InstallLinkProps { + /** Identifier for the addon in the source */ + identifier: string; + /** Updater source type */ + source?: InstallerSource; + /** ID for the addon in that source. Useful for GitHub repositories that have multiple addons. */ + id?: string; +} + +export function parseInstallLink(href: string): InstallLinkProps | null { + try { + const url = new URL(href); + const repluggedHostname = new URL(generalSettings.get("apiUrl")).hostname; + if (url.hostname !== repluggedHostname) return null; + + if (url.pathname === "/install") { + const params = url.searchParams; + const identifier = params.get("identifier"); + const source = params.get("source") ?? "store"; + const id = params.get("id") ?? undefined; + if (!identifier) return null; + if (!isValidSource(source)) return null; + return { + identifier, + source, + id, + }; + } + + const storeMatch = url.pathname.match(/^\/store\/([^/]+)$/); + if (storeMatch) { + const identifier = storeMatch[1]; + if (["plugins", "themes"].includes(identifier.toLowerCase())) return null; + return { + identifier, + source: "store", + }; + } + + return null; + } catch { + return null; + } +} + export async function getInfo( identifier: string, source?: InstallerSource, diff --git a/src/renderer/coremods/rpc/index.ts b/src/renderer/coremods/rpc/index.ts index 21c32b731..04a47e945 100644 --- a/src/renderer/coremods/rpc/index.ts +++ b/src/renderer/coremods/rpc/index.ts @@ -14,7 +14,7 @@ type Socket = Record & { }; type RPCData = { - args: Record; + args: Record; cmd: string; }; diff --git a/src/renderer/coremods/settings/pages/Addons.tsx b/src/renderer/coremods/settings/pages/Addons.tsx index 8a9451b5f..614775b22 100644 --- a/src/renderer/coremods/settings/pages/Addons.tsx +++ b/src/renderer/coremods/settings/pages/Addons.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unnecessary-condition */ import { Messages } from "@common/i18n"; import { React, api, fluxDispatcher, modal, toast, users } from "@common"; import { @@ -574,7 +575,7 @@ export const Addons = (type: AddonType): React.ReactElement => { label: list?.filter?.( (x) => x.manifest.id === section.slice(`rp_${type}_`.length), - )?.[0]?.manifest?.name || "", + )?.[0]?.manifest.name || "", }, ]} onBreadcrumbClick={(breadcrumb) => setSection(breadcrumb.id)} diff --git a/src/renderer/coremods/settings/pages/General.tsx b/src/renderer/coremods/settings/pages/General.tsx index 52374fa5c..daf6165f8 100644 --- a/src/renderer/coremods/settings/pages/General.tsx +++ b/src/renderer/coremods/settings/pages/General.tsx @@ -125,6 +125,7 @@ export const General = (): React.ReactElement => { diff --git a/src/renderer/coremods/settings/pages/QuickCSS.tsx b/src/renderer/coremods/settings/pages/QuickCSS.tsx index 59d96e0ce..daef371e9 100644 --- a/src/renderer/coremods/settings/pages/QuickCSS.tsx +++ b/src/renderer/coremods/settings/pages/QuickCSS.tsx @@ -57,8 +57,7 @@ function useCodeMirror({ value: initialValueParam, onChange, container }: UseCod const [value, setValue] = React.useState(""); const [view, setView] = React.useState(undefined); - // ESLint doesn't think x is a number, but it is - // eslint-disable-next-line @typescript-eslint/restrict-plus-operands + const [update, forceUpdate] = React.useReducer((x) => x + 1, 0); React.useEffect(() => { @@ -94,7 +93,7 @@ function useCodeMirror({ value: initialValueParam, onChange, container }: UseCod container.setAttribute("data-theme", theme); return () => { - newView?.destroy(); + newView.destroy(); setView(undefined); }; }, [container, theme, update]); diff --git a/src/renderer/managers/coremods.ts b/src/renderer/managers/coremods.ts index 40f9e72f0..ec746b064 100644 --- a/src/renderer/managers/coremods.ts +++ b/src/renderer/managers/coremods.ts @@ -37,11 +37,13 @@ export namespace coremods { } export async function start(name: keyof typeof coremods): Promise { - await coremods[name]?.start?.(); + if (!(name in coremods)) throw new Error(`Coremod ${name} does not exist`); + await coremods[name].start?.(); } export async function stop(name: keyof typeof coremods): Promise { - await coremods[name]?.stop?.(); + if (!(name in coremods)) throw new Error(`Coremod ${name} does not exist`); + await coremods[name].stop?.(); } export async function startAll(): Promise { diff --git a/src/renderer/managers/ignition.ts b/src/renderer/managers/ignition.ts index 00184aa1c..44cfbb752 100644 --- a/src/renderer/managers/ignition.ts +++ b/src/renderer/managers/ignition.ts @@ -47,7 +47,7 @@ export async function start(): Promise { "Ignition", "Start", void 0, - `Finished igniting Replugged in ${performance.now() - startTime}ms`, + `Finished igniting Replugged in ${(performance.now() - startTime).toFixed(2)}ms`, ); } @@ -56,13 +56,14 @@ export async function stop(): Promise { const startTime = performance.now(); quickCSS.unload(); - await Promise.all([coremods.stopAll(), plugins.stopAll(), themes.unloadAll()]); + themes.unloadAll(); + await Promise.all([coremods.stopAll(), plugins.stopAll()]); log( "Ignition", "Stop", void 0, - `Finished de-igniting Replugged in ${performance.now() - startTime}ms`, + `Finished de-igniting Replugged in ${(performance.now() - startTime).toFixed(2)}ms`, ); } diff --git a/src/renderer/managers/plugins.ts b/src/renderer/managers/plugins.ts index 38100e6b8..f2534400e 100644 --- a/src/renderer/managers/plugins.ts +++ b/src/renderer/managers/plugins.ts @@ -69,20 +69,20 @@ export async function start(id: string): Promise { const plugin = plugins.get(id); try { if (!plugin) { - throw new Error("Plugin does not exist or is not loaded"); + throw new Error(`Plugin "${id}" does not exist or is not loaded`); } if (running.has(plugin.manifest.id)) { - throw new Error("Plugin is already running"); + throw new Error(`Plugin "${id}" is already running`); } if (plugin.manifest.renderer) { await Promise.race([ new Promise((_, reject) => - setTimeout(() => reject(new Error("Plugin took too long to start")), 5_000), + setTimeout(() => reject(new Error(`Plugin "${id}" took too long to start`)), 5_000), ), (async () => { const pluginExports = await import( - `replugged://plugin/${plugin.path}/${plugin.manifest.renderer}?t=${Date.now()}}` + `replugged://plugin/${plugin.path}/${plugin.manifest.renderer}?t=${Date.now()}` ); plugin.exports = pluginExports; await pluginExports.start?.(); @@ -129,10 +129,10 @@ export async function stop(id: string): Promise { const plugin = plugins.get(id); try { if (!plugin) { - throw new Error("Plugin does not exist or is not loaded"); + throw new Error(`Plugin "${id}" does not exist or is not loaded`); } if (!running.has(id)) { - throw new Error("Plugin is not running"); + throw new Error(`Plugin "${id}" is not running`); } await plugin.exports?.stop?.(); diff --git a/src/renderer/managers/themes.ts b/src/renderer/managers/themes.ts index 19ba23a04..eea566689 100644 --- a/src/renderer/managers/themes.ts +++ b/src/renderer/managers/themes.ts @@ -82,7 +82,7 @@ export function loadSplash(id: string): void { */ export function loadAll(): void { for (const id of themes.keys()) { - if (!disabled.includes(id) && themes.get(id)?.manifest?.main) { + if (!disabled.includes(id) && themes.get(id)?.manifest.main) { load(id); } } @@ -93,7 +93,7 @@ export function loadAll(): void { */ export function loadAllSplash(): void { for (const id of themes.keys()) { - if (!disabled.includes(id) && themes.get(id)?.manifest?.splash) { + if (!disabled.includes(id) && themes.get(id)?.manifest.splash) { loadSplash(id); } } diff --git a/src/renderer/managers/updater.ts b/src/renderer/managers/updater.ts index 82eae4c9f..5123c6b58 100644 --- a/src/renderer/managers/updater.ts +++ b/src/renderer/managers/updater.ts @@ -288,9 +288,11 @@ async function autoUpdateCheck(): Promise { if (isAnUpdate && (areNewUpdates || isFirstRun)) { logger.log("Showing update notification"); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const Messages = common.i18n?.Messages; // Weird hack due to circular dependency const { open } = await openSettingsModPromise; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!Messages) { logger.error("Messages missing, cannot show update notification"); return; diff --git a/src/renderer/modules/common/channels.ts b/src/renderer/modules/common/channels.ts index 8bffd8e94..7adc5841e 100644 --- a/src/renderer/modules/common/channels.ts +++ b/src/renderer/modules/common/channels.ts @@ -21,6 +21,7 @@ export interface ChannelStore { getAllThreadsForParent(channelId: string): Channel[]; getBasicChannel(channelId: string): Channel | undefined; getChannel(channelId: string): Channel | undefined; + getChannelIds(guildId?: string): string[]; getDMFromUserId(userId: string): string | undefined; getDMUserIds(): string[]; getGuildChannelsVersion(guildId: string): number; diff --git a/src/renderer/modules/common/constants.ts b/src/renderer/modules/common/constants.ts index 99d9f286d..5f71311cd 100644 --- a/src/renderer/modules/common/constants.ts +++ b/src/renderer/modules/common/constants.ts @@ -1,6 +1,8 @@ import { virtualMerge } from "src/renderer/util"; import { filters, getExportsForProps, waitForModule, waitForProps } from "../webpack"; +type StringConcat = (...rest: string[]) => string; + const ConstantsCommon = await waitForModule>(filters.bySource("BASE_URL:")); const Constants = await waitForModule>(filters.bySource("USER_PROFILE:")); export const raw = virtualMerge(ConstantsCommon, Constants); @@ -42,7 +44,7 @@ export const ChannelTypes = getExportsForProps>( "DM", "GUILD_FORUM", ])!; -export const Endpoints = getExportsForProps>(Constants, [ +export const Endpoints = getExportsForProps>(Constants, [ "USERS", "INTEGRATIONS", ])!; @@ -54,8 +56,11 @@ export const MessageFlags = getExportsForProps>(Constants "EPHEMERAL", "LOADING", ])!; -export const Routes = getExportsForProps>(Constants, ["INDEX", "LOGIN"])!; -export const UserFlags = getExportsForProps>(Constants, [ +export const Routes = getExportsForProps>(Constants, [ + "INDEX", + "LOGIN", +])!; +export const UserFlags = getExportsForProps>(Constants, [ "STAFF", "SPAMMER", ])!; diff --git a/src/renderer/modules/common/flux.ts b/src/renderer/modules/common/flux.ts index 331000e61..281d321fb 100644 --- a/src/renderer/modules/common/flux.ts +++ b/src/renderer/modules/common/flux.ts @@ -9,9 +9,9 @@ interface Action { type: ActionType; } -type ActionHandler = (action: A) => void; +export type ActionHandler = (action: A) => boolean | void; -type ActionHandlerRecord = { +export type ActionHandlerRecord = { [A in ActionType]: ActionHandler<{ type: A; [key: string]: any }>; }; @@ -43,7 +43,7 @@ export declare class Emitter { type Callback = () => void; -declare class Callbacks { +declare class ChangeListeners { public listeners: Set; public add(listener: Callback): void; public remove(listener: Callback): void; @@ -55,7 +55,11 @@ declare class Callbacks { } export declare class Store { - public constructor(dispatcher: Dispatcher, actions?: ActionHandlerRecord, band?: DispatchBand); + public constructor( + dispatcher: Dispatcher, + actionHandler?: ActionHandlerRecord, + band?: DispatchBand, + ); public static destroy(): void; public static getAll(): Store[]; @@ -65,8 +69,8 @@ export declare class Store { public _isInitialized: boolean; public _dispatchToken: DispatchToken; public _dispatcher: Dispatcher; - public _changeCallbacks: Callbacks; - public _reactChangeCallbacks: Callbacks; + public _changeCallbacks: ChangeListeners; + public _reactChangeCallbacks: ChangeListeners; public _mustEmitChanges: Parameters[0]; public initialize(): void; @@ -75,8 +79,8 @@ export declare class Store { public getName(): string; public emitChange(): void; - public mustEmitChanges(func?: (action?: Action) => boolean): void; - public syncWith(stores: Store[], func: () => boolean, timeout?: number): void; + public mustEmitChanges(actionHandler?: ActionHandler): void; + public syncWith(stores: Store[], callback: () => boolean, timeout?: number): void; public waitFor(...stores: Store[]): void; public addChangeListener(listener: Callback): void; @@ -85,7 +89,7 @@ export declare class Store { public removeChangeListener(listener: Callback): void; public removeReactChangeListener(listener: Callback): void; - public registerActionHandlers(actions: ActionHandlerRecord, band?: DispatchBand): void; + public registerActionHandlers(actionHandlers: ActionHandlerRecord, band?: DispatchBand): void; // eslint-disable-next-line @typescript-eslint/naming-convention public __getLocalVars?(): Record; @@ -175,7 +179,7 @@ export declare class SnapshotStore> extends Store public clear: () => void; public getClass: () => any; public readSnapshot: (version: number) => Snapshot["data"] | null; - public registerActionHandlers: (actions: ActionHandlerRecord) => void; + public registerActionHandlers: (actionHandlers: ActionHandlerRecord) => void; public save: () => void; } diff --git a/src/renderer/modules/common/fluxDispatcher.ts b/src/renderer/modules/common/fluxDispatcher.ts index 232fec2f2..9c2eda770 100644 --- a/src/renderer/modules/common/fluxDispatcher.ts +++ b/src/renderer/modules/common/fluxDispatcher.ts @@ -1,5 +1,7 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import type EventEmitter from "events"; import { waitForProps } from "../webpack"; +import type { ActionHandler, ActionHandlerRecord } from "./flux"; export enum DispatchBand { Early, @@ -7,11 +9,9 @@ export enum DispatchBand { Default, } -type FluxCallback = (action?: { [index: string]: unknown }) => void; - interface Action { type: string; - [index: string]: unknown; + [key: string]: any; } type ActionMetric = [string, string, number]; @@ -57,7 +57,7 @@ declare class ActionLog { } interface NodeData { - actionHandler: Record; + actionHandler: ActionHandlerRecord; band: DispatchBand; name: string; storeDidChange: (action: Action) => void; @@ -86,12 +86,12 @@ export declare class DepGraph { } interface Handler { - actionHandler: FluxCallback; + actionHandler: ActionHandler; name: string; storeDidChange: (action: Action) => void; } -declare class ActionHandlers { +declare class ActionHandlersGraph { public _orderedActionHandlers: Record; public _orderedCallbackTokens: string[]; public _lastID: number; @@ -102,7 +102,7 @@ declare class ActionHandlers { public getOrderedActionHandlers: (action: Action) => Handler[]; public register: ( name: string, - actionHandler: Record, + actionHandlers: ActionHandlerRecord, storeDidChange: (action: Action) => void, band: DispatchBand, token?: string, @@ -117,12 +117,12 @@ declare class ActionHandlers { } export interface FluxDispatcher { - _actionHandlers: ActionHandlers; + _actionHandlers: ActionHandlersGraph; _currentDispatchActionType: string | null; _defaultBand: DispatchBand; _interceptors: Array<(...rest: unknown[]) => unknown>; _processingWaitQueue: boolean; - _subscriptions: Record>; + _subscriptions: Record>; _waitQueue: Array<(...rest: unknown[]) => unknown>; actionLogger: ActionLogger; @@ -139,12 +139,12 @@ export interface FluxDispatcher { dispatch: (action: Action) => void; flushWaitQueue: () => void; isDispatching: () => boolean; - subscribe: (type: string, callback: FluxCallback) => void; - unsubscribe: (type: string, callback: FluxCallback) => void; + subscribe: (type: string, callback: ActionHandler) => void; + unsubscribe: (type: string, callback: ActionHandler) => void; wait: (callback: (...rest: unknown[]) => unknown) => void; register: ( name: string, - actionHandler: Record, + actionHandlers: ActionHandlerRecord, storeDidChange: (action: Action) => void, band: DispatchBand, token?: string, diff --git a/src/renderer/modules/common/index.ts b/src/renderer/modules/common/index.ts index ffbaa31ac..d8d05b17c 100644 --- a/src/renderer/modules/common/index.ts +++ b/src/renderer/modules/common/index.ts @@ -10,11 +10,16 @@ function importTimeout(name: string, moduleImport: Promise, cb: (mod: T) = error("CommonModules", name, void 0, `Could not find module "${name}"`); rej(new Error(`Module not found: "${name}`)); }, 10_000); - void moduleImport.then((mod) => { - clearTimeout(timeout); - cb(mod); - res(); - }); + void moduleImport + .then((mod) => { + clearTimeout(timeout); + cb(mod); + res(); + }) + .catch((err) => { + error("CommonModules", name, void 0, `Failed to import module "${name}"`, err); + rej(err); + }); }), ); } diff --git a/src/renderer/modules/common/messages.ts b/src/renderer/modules/common/messages.ts index 0030ce04a..c09ee8ec1 100644 --- a/src/renderer/modules/common/messages.ts +++ b/src/renderer/modules/common/messages.ts @@ -371,6 +371,12 @@ export interface MessageActions { ) => Promise; sendBotMessage: (channelId: string, content: string, messageName?: string) => void; sendClydeError: (channelId: string, code?: number) => void; + sendClydeProfileOverride: ( + channelId: string, + clydeProfileURL: string, + analyticsTriggeredFrom?: string, + suggestedInvite?: InviteSuggestion, + ) => Promise; sendGreetMessage: ( channelId: string, stickerId: string, diff --git a/src/renderer/modules/common/toast.ts b/src/renderer/modules/common/toast.ts index f4733733e..660221ebe 100644 --- a/src/renderer/modules/common/toast.ts +++ b/src/renderer/modules/common/toast.ts @@ -23,7 +23,7 @@ type ToastFn = ( content: string | React.ReactElement | null, kind?: (typeof Kind)[keyof typeof Kind], opts?: ToastOptions, -) => void; +) => unknown; export interface Toast { toast: ToastFn; diff --git a/src/renderer/modules/components/ButtonItem.tsx b/src/renderer/modules/components/ButtonItem.tsx index 6132201fc..d4720a3c5 100644 --- a/src/renderer/modules/components/ButtonItem.tsx +++ b/src/renderer/modules/components/ButtonItem.tsx @@ -98,9 +98,10 @@ export const Button = await waitForModule(filters.bySource(".BorderColors=")).th (mod) => getFunctionBySource(mod, "wrapperClassName")!, ); -const classes = await waitForProps< - Record<"dividerDefault" | "labelRow" | "note" | "title", string> ->("dividerDefault"); +const classes = + await waitForProps>( + "dividerDefault", + ); interface ButtonItemProps { onClick?: React.MouseEventHandler; diff --git a/src/renderer/modules/components/Category.tsx b/src/renderer/modules/components/Category.tsx index b94d82341..2f92ef3d8 100644 --- a/src/renderer/modules/components/Category.tsx +++ b/src/renderer/modules/components/Category.tsx @@ -2,9 +2,10 @@ import React from "@common/react"; import { Divider, FormText } from "."; import { waitForProps } from "../webpack"; -const classes = await waitForProps< - Record<"labelRow" | "title" | "note" | "dividerDefault", string> ->("dividerDefault"); +const classes = + await waitForProps>( + "dividerDefault", + ); interface CategoryProps { title: string; diff --git a/src/renderer/modules/components/FormItem.tsx b/src/renderer/modules/components/FormItem.tsx index 6394fe1c3..118e0c8cb 100644 --- a/src/renderer/modules/components/FormItem.tsx +++ b/src/renderer/modules/components/FormItem.tsx @@ -40,25 +40,22 @@ export type FormItemType = React.FC; export default ((props) => { const { note, notePosition = "before", noteStyle, noteClassName, divider, ...compProps } = props; + + const noteStyleDefault = notePosition === "before" ? { marginBottom: 8 } : { marginTop: 8 }; + const noteComp = ( + + {note} + + ); + return ( - {note && notePosition === "before" && ( - - {note} - - )} + {note && notePosition === "before" && noteComp} {props.children} - {note && notePosition === "after" && ( - - {note} - - )} + {note && notePosition === "after" && noteComp} {divider && } ); diff --git a/src/renderer/modules/components/Loader.tsx b/src/renderer/modules/components/Loader.tsx index 011d23cd0..64cd51d65 100644 --- a/src/renderer/modules/components/Loader.tsx +++ b/src/renderer/modules/components/Loader.tsx @@ -6,6 +6,7 @@ const Types = { CHASING_DOTS: "chasingDots", PULSING_ELLIPSIS: "pulsingEllipsis", SPINNING_CIRCLE: "spinningCircle", + SPINNING_CIRCLE_SIMPLE: "spinningCircleSimple", LOW_MOTION: "lowMotion", } as const; @@ -20,7 +21,7 @@ type LoaderProps = GenericLoaderProps & { type?: (typeof Types)[keyof typeof Types]; } & React.ComponentPropsWithoutRef<"span">; type SpinningCircleLoaderProps = GenericLoaderProps & { - type?: (typeof Types)["SPINNING_CIRCLE"]; + type?: (typeof Types)["SPINNING_CIRCLE"] | (typeof Types)["SPINNING_CIRCLE_SIMPLE"]; } & React.ComponentPropsWithoutRef<"div">; export type LoaderType = React.FC & { diff --git a/src/renderer/modules/components/Modal.tsx b/src/renderer/modules/components/Modal.tsx index d278c5e9b..d61670a93 100644 --- a/src/renderer/modules/components/Modal.tsx +++ b/src/renderer/modules/components/Modal.tsx @@ -17,6 +17,7 @@ interface ModalRootProps extends Omit, "ch fullscreenOnMobile?: boolean; hideShadow?: boolean; onAnimationEnd?(): string; + returnRef?: React.Ref; } interface ModalHeaderProps { diff --git a/src/renderer/modules/components/RadioItem.tsx b/src/renderer/modules/components/RadioItem.tsx index 3dfdfddf5..1361fd34b 100644 --- a/src/renderer/modules/components/RadioItem.tsx +++ b/src/renderer/modules/components/RadioItem.tsx @@ -16,8 +16,7 @@ type RadioOptionType = { collapsibleContent?: React.ReactNode; }; -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions -type RadioProps = { +interface RadioProps { options: RadioOptionType[]; value?: string; onChange: (option: RadioOptionType) => void; @@ -32,7 +31,7 @@ type RadioProps = { itemTitleClassName?: string; radioItemClassName?: string; collapsibleClassName?: string; -}; +} export type RadioType = React.FC & { Sizes: Record<"NOT_SET" | "NONE" | "SMALL" | "MEDIUM", string>; diff --git a/src/renderer/modules/components/SliderItem.tsx b/src/renderer/modules/components/SliderItem.tsx index de86a11dd..9b1ace67c 100644 --- a/src/renderer/modules/components/SliderItem.tsx +++ b/src/renderer/modules/components/SliderItem.tsx @@ -1,6 +1,6 @@ import type React from "react"; import { FormItem } from "."; -import { filters, waitForModule } from "../webpack"; +import { filters, waitForModule, waitForProps } from "../webpack"; const MarkerPositions = { ABOVE: 0, @@ -61,6 +61,8 @@ export const Slider = ((props) => { }) as SliderType; Slider.MarkerPositions = MarkerPositions; +const classes = await waitForProps>("marginTop20"); + interface SliderItemProps extends SliderProps { note?: string; style?: React.CSSProperties; @@ -69,7 +71,7 @@ interface SliderItemProps extends SliderProps { export type SliderItemType = React.FC>; export const SliderItem = (props: React.PropsWithChildren): React.ReactElement => { - const { children, ...compProps } = props; + const { children, className, ...compProps } = props; return ( ): Rea noteStyle={{ marginBottom: props.markers ? 16 : 4 }} disabled={props.disabled} divider> - + ); }; diff --git a/src/renderer/modules/components/TextInput.tsx b/src/renderer/modules/components/TextInput.tsx index 0f54618e0..4ca3ec057 100644 --- a/src/renderer/modules/components/TextInput.tsx +++ b/src/renderer/modules/components/TextInput.tsx @@ -1,5 +1,5 @@ import type React from "react"; -import { filters, waitForModule } from "../webpack"; +import { waitForProps } from "../webpack"; interface TextInputProps extends Omit, "size" | "onChange"> { @@ -19,8 +19,6 @@ export type TextInputType = React.ComponentClass & { Sizes: Record<"DEFAULT" | "MINI", string>; }; -export default await waitForModule>( - filters.bySource(".getIsOverFlowing"), -).then( - (mod) => Object.values(mod).find((x) => "defaultProps" in x && "maxLength" in x.defaultProps)!, +export default await waitForProps>("TextInput").then( + (x) => x.TextInput, ); diff --git a/src/renderer/modules/components/index.ts b/src/renderer/modules/components/index.ts index 2dd176d30..d5244f228 100644 --- a/src/renderer/modules/components/index.ts +++ b/src/renderer/modules/components/index.ts @@ -15,11 +15,16 @@ function importTimeout( error("Components", name, void 0, `Could not find component "${name}"`); rej(new Error(`Module not found: "${name}`)); }, 10_000); - void moduleImport.then((mod) => { - clearTimeout(timeout); - cb(mod); - res(); - }); + void moduleImport + .then((mod) => { + clearTimeout(timeout); + cb(mod); + res(); + }) + .catch((err) => { + error("Components", name, void 0, `Failed to import component "${name}"`, err); + rej(err); + }); }), ); } diff --git a/src/renderer/modules/injector.ts b/src/renderer/modules/injector.ts index 3acc310bb..8be38446b 100644 --- a/src/renderer/modules/injector.ts +++ b/src/renderer/modules/injector.ts @@ -1,4 +1,5 @@ -import type { CommandOptions, RepluggedCommand } from "src/types"; +import type { CommandOptions } from "../../types/discord"; +import type { RepluggedCommand } from "../../types/coremods/commands"; import type { ContextMenuTypes, GetContextItem } from "../../types/coremods/contextMenu"; import type { GetButtonItem } from "../../types/coremods/message"; import type { AnyFunction } from "../../types/util"; @@ -101,7 +102,7 @@ function replaceMethod, U extends keyof T & str const injectionsForProp = objInjections.injections.get(funcName)!; for (const b of injectionsForProp.before) { - const newArgs = b(args, this); + const newArgs = b.call(this, args, this); if (Array.isArray(newArgs)) { args = newArgs; } @@ -113,7 +114,7 @@ function replaceMethod, U extends keyof T & str res = originalFunc.apply(this, args); } else { for (const i of injectionsForProp.instead) { - const newResult = i(args, originalFunc, this); + const newResult = i.call(this, args, originalFunc, this); if (newResult !== void 0) { res = newResult; } @@ -121,7 +122,7 @@ function replaceMethod, U extends keyof T & str } for (const a of injectionsForProp.after) { - const newResult = a(args, res, this); + const newResult = a.call(this, args, res, this); if (newResult !== void 0) { res = newResult; } diff --git a/src/renderer/modules/webpack/get-modules.ts b/src/renderer/modules/webpack/get-modules.ts index 8da15bee3..a3cc21e10 100644 --- a/src/renderer/modules/webpack/get-modules.ts +++ b/src/renderer/modules/webpack/get-modules.ts @@ -103,6 +103,7 @@ export function getById(id: number, raw?: boolean): T | RawModule | undefi * You should not use this function in production unless the ID is dynamically determined. */ export function getById(id: number, raw = false): T | RawModule | undefined { + if (!wpRequire) throw new Error("Webpack not initialized"); // Load the module if not already initialized if (!(id in wpRequire.c)) { wpRequire(id); diff --git a/src/renderer/modules/webpack/helpers.ts b/src/renderer/modules/webpack/helpers.ts index f99130d29..6ce06dfcd 100644 --- a/src/renderer/modules/webpack/helpers.ts +++ b/src/renderer/modules/webpack/helpers.ts @@ -106,9 +106,12 @@ export function getByProps( ...args: [P[], GetModuleOptions & ByPropsOptions] | P[] ): T | T[] | RawModule | Array> | undefined { const props = (typeof args[0] === "string" ? args : args[0]) as P[]; - const raw = typeof args[0] === "string" ? false : (args[1] as GetModuleOptions)?.raw; + + const raw = typeof args[0] === "string" ? false : (args[1] as GetModuleOptions | undefined)?.raw; + const byPrototype = typeof args[0] === "string" ? false : (args[1] as ByPropsOptions)?.byPrototype; + const result = typeof args.at(-1) === "object" ? getModule(filters.byProps(...props, { byPrototype }), args.at(-1) as GetModuleOptions) @@ -152,9 +155,10 @@ export async function waitForProps( ...args: [P[], WaitForOptions & ByPropsOptions] | P[] ): Promise> { const props = (typeof args[0] === "string" ? args : args[0]) as P[]; - const raw = typeof args[0] === "string" ? false : (args[1] as WaitForOptions)?.raw; - const byPrototype = + const raw = typeof args[0] === "string" ? false : (args[1] as WaitForOptions | undefined)?.raw; + const byPrototype = typeof args[0] === "string" ? false : (args[1] as ByPropsOptions)?.byPrototype; + const result = await (typeof args.at(-1) === "object" ? waitForModule(filters.byProps(...props, { byPrototype }), args.at(-1) as WaitForOptions) : waitForModule(filters.byProps(...props, { byPrototype }))); diff --git a/src/renderer/modules/webpack/patch-load.ts b/src/renderer/modules/webpack/patch-load.ts index 487ea596c..35e865def 100644 --- a/src/renderer/modules/webpack/patch-load.ts +++ b/src/renderer/modules/webpack/patch-load.ts @@ -9,7 +9,7 @@ import { patchModuleSource } from "./plaintext-patch"; * @internal * @hidden */ -export let wpRequire: WebpackRequire; +export let wpRequire: WebpackRequire | undefined; let signalReady: () => void; let ready = false; diff --git a/src/renderer/util.ts b/src/renderer/util.ts index 87c16bb94..34f9a8312 100644 --- a/src/renderer/util.ts +++ b/src/renderer/util.ts @@ -85,6 +85,7 @@ export function forceUpdateElement(selector: string, all = false): void { all ? [...document.querySelectorAll(selector)] : [document.querySelector(selector)] ).filter(Boolean) as Element[]; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- May not actually have forceUpdate elements.forEach((element) => getOwnerInstance(element)?.forceUpdate()); } @@ -175,7 +176,7 @@ export async function openExternal(url: string): Promise { if (!mod) { throw new Error("Could not find openExternal"); } - return await mod(url); + await mod(url); } type ValType = @@ -300,7 +301,7 @@ export function virtualMerge(...objects: O): ExtractObje return new Proxy(fallback, handler) as ExtractObjectType; } -export type Tree = Record; +export type Tree = Record | null; type TreeFilter = string | ((tree: Tree) => boolean); /** @@ -320,7 +321,8 @@ export function findInTree( if (maxRecursion <= 0) return undefined; if (typeof searchFilter === "string") { - if (Object.prototype.hasOwnProperty.call(tree, searchFilter)) return tree[searchFilter] as Tree; + if (Object.prototype.hasOwnProperty.call(tree, searchFilter)) + return tree?.[searchFilter] as Tree; } else if (searchFilter(tree)) { return tree; } diff --git a/src/types/coremods/commands.ts b/src/types/coremods/commands.ts index 9c8445925..95349f84f 100644 --- a/src/types/coremods/commands.ts +++ b/src/types/coremods/commands.ts @@ -3,12 +3,12 @@ import type { ValueOf } from "type-fest"; import { CommandInteraction } from "../../renderer/apis/commands"; import type { APIEmbed, + ApplicationCommandOptionType, CommandChoices, CommandOptionReturn, CommandOptions, StringOptions, } from "../discord"; -import { ApplicationCommandOptionType } from "../discord"; interface OptionTypeMapping { [ApplicationCommandOptionType.String]: string; @@ -28,7 +28,7 @@ type GetConditionallyOptional = Require type GetType = GetConditionallyOptional< T extends StringOptions - ? T["choices"] extends CommandChoices + ? T["choices"] extends readonly CommandChoices[] ? T["choices"][number]["value"] : OptionTypeMapping[T["type"]] : OptionTypeMapping[T["type"]], diff --git a/src/types/discord.ts b/src/types/discord.ts index 0fe4ae8e0..4eedc3783 100644 --- a/src/types/discord.ts +++ b/src/types/discord.ts @@ -1,4 +1,8 @@ +import { Message } from "@common/i18n"; + export enum ApplicationCommandOptionType { + //Subcommand = 1, + //SubcommandGroup = 2, String = 3, Integer = 4, Boolean = 5, @@ -21,14 +25,14 @@ interface BaseCommandOptions { } export interface CommandChoices { - name: string; - displayName: string; + name: string | Message; + displayName: string | Message; value: string | number; } export interface CommandOptionAutocompleteAndChoices { autocomplete?: boolean; - choices?: CommandChoices[]; + choices?: readonly CommandChoices[]; focused?: boolean; } diff --git a/src/types/index.ts b/src/types/index.ts index 022d3c3e4..e614b2c92 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -42,7 +42,7 @@ export interface RepluggedAnnouncement { onClose?: () => void; button?: { text: string; - onClick: () => void; + onClick?: () => void; href?: string; }; }