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/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/i18n/de.json b/i18n/de.json index 32b441428..3abacecd0 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -67,7 +67,7 @@ "REPLUGGED_PLUGIN_EMBED_COPY": "Link kopieren", "REPLUGGED_PLUGIN_EMBED_VIEW_REPO": "Repo ansehen", "REPLUGGED_PLUGIN_EMBED_WHATISTHIS_CONTENT": "Dies ist eine Replugged-Funktion. Sie ermöglicht es dir, Plugins oder Themes direkt aus dem Chat zu installieren.\nKlicke einfach auf die Schaltfläche „Installieren“ in der Einbettung.", - "REPLUGGED_COMMAND_ENABLE_DESC": "Aktiviere ein Plugin/Theme", + "REPLUGGED_COMMAND_ENABLE_DESC": "Aktiviere ein Plugin oder Theme", "REPLUGGED_ERROR_ALREADY_INSTALLED": "{name} ist bereits installiert.", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "Bei der Ausführung des Befehls ist ein Fehler aufgetreten:", "REPLUGGED_ERROR_CHECK_CONSOLE": "Weitere Einzelheiten finden Sie auf der Konsole.", @@ -120,12 +120,12 @@ "REPLUGGED_CANCEL": "Abbrechen", "REPLUGGED_CONFIRM": "Bestätigen", "REPLUGGED_OK": "OK", - "REPLUGGED_COMMAND_DISABLE_DESC": "Deaktiviere ein Plugin/Theme", - "REPLUGGED_COMMAND_RELOAD_DESC": "Ein Plugin/Theme neu laden", + "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 Seite {type}", + "REPLUGGED_ADDON_PAGE_OPEN": "Öffne {type} Seite", "REPLUGGED_ADDON_PROFILE_OPEN": "Öffne {type} Profil", - "REPLUGGED_ADDON_RELOAD": "lade {type} neu", + "REPLUGGED_ADDON_RELOAD": "Lade {type} neu", "REPLUGGED_ADDON_SETTINGS": "Öffne {type} Einstellungen", "REPLUGGED_ADDON_AUTHORS_THREE": "von {author1},{author2} und {author3}", "REPLUGGED_ADDON_AUTHORS_ONE": "von {author1}", @@ -196,5 +196,36 @@ "REPLUGGED_SETTINGS_ADDON_EMBEDS": "Addon-Einbettungen anzeigen", "REPLUGGED_SETTINGS_ADDON_EMBEDS_DESC": "Zeige eine Informationskarte über das Addon when ein Shop-/Installationslink im Chat geteilt wird.", "REPLUGGED_RESTART": "Neustart", - "REPLUGGED_SETTINGS_RESTART_TITLE": "Neustart benötigt" + "REPLUGGED_SETTINGS_RESTART_TITLE": "Neustart benötigt", + "REPLUGGED_COMMAND_ERROR_GENERIC": "Ein Fehler ist aufgetreten, bitte versuchen Sie es später erneut. Falls dieser Fehler weiter auftreten sollte, wenden Sie sich bitte an das Replugged Team.", + "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "Erweiterung", + "REPLUGGED_COMMAND_ADDONS_OPTION_ADDON_DESC": "Suche nach Erweiterung, die aktiviert werden soll", + "REPLUGGED_COMMAND_ENABLE_MESSAGE_ENABLED": "{type} {name} wurde aktiviert!", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "Erweiterung", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "Suche nach Erweiterung, die deaktiviert werden soll", + "REPLUGGED_COMMAND_DISABLE_MESSAGE_ENABLED": "{type} {name} wurde deaktiviert!", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_NAME": "Erweiterung", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_DESC": "Suche nach Erweiterung, die neu geladen werden soll", + "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_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", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "Teile diese Liste öffentlich im Chat", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_DESC": "Welche Erweiterungen sollen gezeigt werden", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "Typ", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "Liste Plugins", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Liste Themes", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "Version", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "Zeige Versionen in der Liste", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "Status", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "Zeige Erweiterungen die aktiviert, deaktivier oder die beides sind", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "Aktiviert", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_DISABLED": "Deaktiviert", + "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" } 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-US.json b/i18n/en-US.json index 520ea94ce..26621b57b 100644 --- a/i18n/en-US.json +++ b/i18n/en-US.json @@ -49,6 +49,14 @@ "REPLUGGED_COMMAND_LIST_HEADER_ENABLED": "Enabled {type}", "REPLUGGED_COMMAND_LIST_HEADER_DISABLED": "Disabled {type}", "REPLUGGED_COMMAND_LIST_ERROR_SPECIFY": "You need to specify whether to send a plugin or theme list", + "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_ERROR_ALREADY_INSTALLED": "{name} is already installed.", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "An error occurred while executing the command:", "REPLUGGED_ERROR_CHECK_CONSOLE": "Check the console for more details.", @@ -62,6 +70,9 @@ "REPLUGGED_PLUGIN": "Plugin", "REPLUGGED_PLUGINS": "Plugins", "REPLUGGED_QUICKCSS": "Quick CSS", + "REPLUGGED_QUICKCSS_CHANGES_APPLY": "Apply Changes", + "REPLUGGED_QUICKCSS_FOLDER_OPEN": "Open Quick CSS Folder", + "REPLUGGED_QUICKCSS_POPPED_OUT": "Quick CSS Editor has been popped out", "REPLUGGED_SETTINGS_ADVANCED_DESC": "Don't touch stuff in here if you don't know what you're doing. Unexpected things can happen to your cat.", "REPLUGGED_SETTINGS_BACKEND": "Backend URL", "REPLUGGED_SETTINGS_BACKEND_DESC": "URL used to fetch some assets and to query Replugged's REST API.", @@ -167,7 +178,6 @@ "REPLUGGED_LIST_RESULTS": "{count, plural, =1 {# match} other {# matches}}", "REPLUGGED_NO_ADDON_RESULTS": "No {type} matched your search.", "REPLUGGED_NO_ADDONS_INSTALLED": "No {type} installed.", - "REPLUGGED_QUICKCSS_CHANGES_APPLY": "Apply Changes", "REPLUGGED_SEARCH_FOR_ADDON": "Search for a {type}", "REPLUGGED_TOAST_ADDON_DISABLE_SUCCESS": "Disabled {name}", "REPLUGGED_TOAST_ADDON_ENABLE_SUCCESS": "Enabled {name}", @@ -189,7 +199,6 @@ "REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_SUCCESS": "{name} installed successfully.", "REPLUGGED_TOAST_INSTALLER_ADDON_FETCH_INFO_FAILED": "Failed to get info for addon.", "REPLUGGED_TOAST_INSTALLER_ADDON_CANCELED_INSTALL": "Install canceled.", - "REPLUGGED_QUICKCSS_FOLDER_OPEN": "Open Quick CSS Folder", "REPLUGGED_ADDON_AUTHORS_ONE": "by {author1}", "REPLUGGED_ADDON_AUTHORS_TWO": "by {author1} and {author2}", "REPLUGGED_ADDON_AUTHORS_THREE": "by {author1}, {author2}, and {author3}", @@ -233,5 +242,6 @@ "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Makes the Discord window transparent, primarily useful for theming. **Requires restart**.", "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_WINDOWS": "****WARNING:**** This will break **window snapping**. In some cases, you may experience a black background, such as when the window is cut off at the top or bottom due to the monitor resolution, or when the development tools are open and docked.", "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_LINUX": "****WARNING:**** **Hardware acceleration** may need to be turned **off**. In some cases, you may experience a black background, such as when the window is cut off at the top or bottom due to the monitor resolution, or when the development tools are open and docked.", - "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}" + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Plugin: {name}", + "REPLUGGED_STORE": "Store" } diff --git a/i18n/es-ES.json b/i18n/es-ES.json index c1d583c39..4a621062d 100644 --- a/i18n/es-ES.json +++ b/i18n/es-ES.json @@ -104,14 +104,14 @@ "REPLUGGED_UPDATES_OPTS_DEBUG_REVISION": "Revisión:", "REPLUGGED_UPDATES_OPTS_DEBUG_REPLUGGED_PATH": "Ruta de Replugged", "REPLUGGED_UPDATES_OPTS_DEBUG_DISCORD_PATH": "Ruta de Discord", - "REPLUGGED_COMMAND_ENABLE_DESC": "Habilita un complemento/tema", + "REPLUGGED_COMMAND_ENABLE_DESC": "Habilita un complemento o tema", "REPLUGGED_NOTICES_WELCOME_NEW_USER": "¡Bienvenido! Replugged se ha inyectado correctamente a tu cliente de Discord. ¡Únete a nuestro servidor de Discord para anuncios, soporte y mas!", "REPLUGGED_BUTTON_GOT_IT": "Entendido", "REPLUGGED_BUTTON_INSTALLER_INSTALLED": "{type} Instalado", "REPLUGGED_BUTTON_INSTALLER_DOWNLOAD": "Descargar {type}", "REPLUGGED_CANCEL": "Cancelar", "REPLUGGED_CONFIRM": "Confirmar", - "REPLUGGED_COMMAND_RELOAD_DESC": "Recarga un complemento/tema", + "REPLUGGED_COMMAND_RELOAD_DESC": "Recarga un complemento o tema", "REPLUGGED_OK": "OK", "REPLUGGED_COMMAND_DISABLE_DESC": "Deshabilitar un complemento o tema", "REPLUGGED_UPDATES_UPDATER": "Actualizador", @@ -213,5 +213,8 @@ "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "enviar", "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "tipo", "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "versión", - "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "estado" + "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" } 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 9832f19c8..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,19 +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_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_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/ja.json b/i18n/ja.json index 6bc7b96d3..a6f31c370 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -38,8 +38,8 @@ "REPLUGGED_UPDATES_FORCE": "強制アップデート", "REPLUGGED_UPDATES_LAST_CHECKED": "最後の確認: {date}", "REPLUGGED_UPDATES_OPEN_UPDATER": "アップデーターを開く", - "REPLUGGED_UPDATES_OPTS_AUTO": "バックグラウンドで自動的にアップデートする", - "REPLUGGED_UPDATES_OPTS_AUTO_DESC": "Repluggedはバックグラウンドでアップデートをダウンロードし、インストールすることができるので、あまり迷惑をかけることはありません。ただし、再読み込みが必要な場合や、競合が発生した場合は、ユーザーによる操作が必要になります。", + "REPLUGGED_UPDATES_OPTS_AUTO": "アップデートを自動的に確認する", + "REPLUGGED_UPDATES_OPTS_AUTO_DESC": "Replugged はバックグラウンドでアップデートを確認し、アップデートがあればアラートを表示します。アップデートを選択するまで、インストールされません。公式アドオンのみが自動的にチェックされます。", "REPLUGGED_UPDATES_OPTS_CHANGE_LOGS": "チェンジログを開く", "REPLUGGED_UPDATES_OPTS_CHANGE_LOGS_DESC": "チェンジログを見逃した、またはもう一度見たい?", "REPLUGGED_UPDATES_OPTS_CONCURRENCY": "アップデートの同時実行数制限", @@ -47,7 +47,7 @@ "REPLUGGED_UPDATES_OPTS_DEBUG": "デバッグ情報", "REPLUGGED_UPDATES_OPTS_DEBUG_DESC": "一部の統計でトラブルシューティングやフレックスに役立つと思われます。", "REPLUGGED_UPDATES_OPTS_INTERVAL": "アップデートチェック間隔", - "REPLUGGED_UPDATES_OPTS_INTERVAL_DESC": "Repluggedがアップデートを確認する頻度(分)。最低10分です。", + "REPLUGGED_UPDATES_OPTS_INTERVAL_DESC": "Repluggedがアップデートを確認する頻度。最低10分。", "REPLUGGED_UPDATES_OPTS_RELEASE": "リリースチャンネルを変更する", "REPLUGGED_UPDATES_OPTS_RELEASE_DESC": "安定版ブランチと開発版ブランチのどちらかを選択することができます。安定版ブランチでは、メジャーアップデート、セキュリティアップデート、クリティカルアップデートのみが行われます。よくわからない場合は、安定版ブランチのままにしてください。", "REPLUGGED_UPDATES_OPTS_RELEASE_DEVELOP_BTN": "開発版ブランチに切り替える", @@ -56,7 +56,7 @@ "REPLUGGED_UPDATES_OPTS_RELEASE_STABLE_BTN": "安定版ブランチに切り替える", "REPLUGGED_UPDATES_OPTS_RELEASE_SWITCH": "切り替え", "REPLUGGED_UPDATES_OPTS_TOAST_ENABLED": "アップデート確認のトーストを表示する", - "REPLUGGED_UPDATES_OPTS_TOAST_ENABLED_DESC": "クライアント上にオーバーレイを表示し、アップデートを確認中であることを示し、アップデートが見つかった場合は、アップデートを促すようにします。バックグラウンドでの更新が無効の場合のみ適用されます。", + "REPLUGGED_UPDATES_OPTS_TOAST_ENABLED_DESC": "アップデートがチェックされていることを示すオーバーレイをクライアント上に表示して、アップデートが見つかった場合はアップデートを促します。バックグラウンドでのアップデートが無効の場合のみ適用されます。", "REPLUGGED_UPDATES_UPDATE": "今すぐアップデート", "REPLUGGED_UPDATES_UPDATING": "Repluggedをアップデートしています…", "REPLUGGED_UPDATES_UPDATING_ITEM": "アップデートしています…", @@ -73,7 +73,7 @@ "REPLUGGED_ERROR_ALREADY_INSTALLED": "{name}は既にインストールされています。", "REPLUGGED_ERROR_AN_ERROR_OCCURRED_COMMAND": "正しくコマンドを実行できませんでした:", "REPLUGGED_ERROR_CHECK_CONSOLE": "詳細はコンソールを確認してください。", - "REPLUGGED_NOTICES_WELCOME_NEW_USER": "ようこそ! Replugged はあなたのDiscordクライアントに正常に導入されました。気軽に私たちのDiscord サーバーに参加すると、アナウンスやサポートなどを得る事が出来ます!", + "REPLUGGED_NOTICES_WELCOME_NEW_USER": "ようこそ!Replugged はあなたのDiscordクライアントに正常に導入されました。気軽に私たちのDiscord サーバーに参加すると、アナウンスやサポートなどを得る事が出来ます!", "REPLUGGED_UPDATES_OPTS_DEBUG_RELEASE_CHANNEL": "リリースチャンネル:", "REPLUGGED_UPDATES_OPTS_DEBUG_PLUGINS_SHOW_LESS": "表示を少なくする", "REPLUGGED_PLUGIN_EMBED_COPY": "リンクをコピー", @@ -153,5 +153,94 @@ "REPLUGGED_PLUGIN_INSTALL_RELOAD_PROMPT_BODY": "{name} を正しく動作させるには再読み込みが必要です。今すぐ再読み込みしますか?", "REPLUGGED_RELOAD": "再読み込み", "REPLUGGED_TOAST_INSTALLER_ADDON_INSTALL_FAILED": "{name}のインストールに失敗しました。", - "REPLUGGED_INSTALLER_INSTALL_PROMPT_BODY": "{name} {authors}をインストールしますか?" + "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})", + "REPLUGGED_ADDON_BROWSE": "{type}を見る", + "REPLUGGED_SETTINGS_ADDON_EMBEDS_DESC": "チャットでストア/インストールリンクが共有されたときに、アドオンの情報が記載されたカードを表示するようにします。", + "REPLUGGED_SETTINGS_TRANSPARENT": "透明なウィンドウ", + "REPLUGGED_ADDON_NOT_REVIEWED": "未審査の{type}", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_WINDOWS": "****警告: **** これにより **ウィンドウスナップ** が機能しなくなります。モニターの解像度の関係でウィンドウの上下が切れている場合や、開発者ツールを開いてドッキングしている場合など、背景が黒くなる場合があります。", + "REPLUGGED_ADDON_NOT_REVIEWED_DESC": "この{type}は Replugged チームによってレビューされておらず、あなたのコンピュータに損害を与える可能性があります。自己責任で使用してください。", + "REPLUGGED_SETTINGS_TRANSPARENT_ISSUES_LINUX": "****警告: **** **ハードウェアアクセラレーション** を **オフ** にする必要があるかもしれません。モニターの解像度の関係でウィンドウの上下が切れている場合や、開発者ツールを開いてドッキングしている場合など、背景が黒くなる場合があります。", + "REPLUGGED_SETTINGS_QUICKCSS_AUTO_APPLY": "Quick CSS を自動的に適用", + "REPLUGGED_I18N": "Replugged 翻訳", + "REPLUGGED_SETTINGS_QUICKCSS_AUTO_APPLY_DESC": "入力中に Quick CSS の変更を自動的に適用します。", + "REPLUGGED_SETTINGS_DEV_COMPANION": "Dev Companion を再接続", + "REPLUGGED_SETTINGS_DEV_COMPANION_DESC": "Dev Companion coremod を VSCode 拡張機能に再接続します。", + "REPLUGGED_SETTINGS_DEV_COMPANION_RECONNECT": "再接続", + "REPLUGGED_SETTINGS_ADVANCED": "高度な設定", + "REPLUGGED_SETTINGS_REACT_DEVTOOLS": "React DevTools を有効化", + "REPLUGGED_SETTINGS_REACT_DEVTOOLS_DESC": "React DevTools 拡張機能をロードし、React ツリーの検査とデバッグをより簡単に行えるようにします。**再起動が必要**", + "REPLUGGED_VIEW_UPDATES": "{count, number} 個のアップデートを見る", + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "プラグイン: {name}", + "REPLUGGED_SETTINGS_REACT_DEVTOOLS_FAILED": "React DevTools のダウンロードに失敗しました。", + "REPLUGGED_INSTALLER_OPEN_STORE": "ストアで見る", + "REPLUGGED_SETTINGS_ADDON_EMBEDS": "アドオンの埋め込みの表示", + "REPLUGGED_SNIPPET_LINE1": "Snippet from #css-snippets applied the {date, date, medium} at {date, time, medium}", + "REPLUGGED_RESTART": "再起動", + "REPLUGGED_SETTINGS_RESTART_TITLE": "再起動", + "REPLUGGED_ADDON_AUTHORS_ONE": "作者: {author1}", + "REPLUGGED_COMMAND_ENABLE_OPTION_ADDON_NAME": "アドオン", + "REPLUGGED_COMMAND_ADDONS_OPTION_ADDON_DESC": "有効にするアドオンを選択してください", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "ソースからインストールするアドオンの ID", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_NAME": "アドオン", + "REPLUGGED_COMMAND_DISABLE_OPTION_ADDON_DESC": "無効にするアドオンを選択してください", + "REPLUGGED_COMMAND_ERROR_GENERIC": "問題が発生しました。後でもう一度お試しください。この問題が解決しない場合は、Replugged チームまでご連絡ください。", + "REPLUGGED_COMMAND_ENABLE_NAME": "enable", + "REPLUGGED_COMMAND_INSTALL_NAME": "install", + "REPLUGGED_COMMAND_ENABLE_MESSAGE_ENABLED": "{type} {name} は有効化されました!", + "REPLUGGED_COMMAND_INSTALL_DESC": "プラグイン/テーマをインストールする", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "アドオンをインストールするソース", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "ソースに複数のアドオンがある場合は、インストールするアドオンを指定してください", + "REPLUGGED_COMMAND_DISABLE_NAME": "disable", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "addon", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "source", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "id", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_NAME": "アドオン", + "REPLUGGED_COMMAND_LIST_NAME": "list", + "REPLUGGED_COMMAND_RELOAD_OPTION_ADDON_DESC": "リロードするアドオンを選択してください", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_DESC": "チャットにリストを公開する", + "REPLUGGED_COMMAND_LIST_OPTION_SEND_NAME": "send", + "REPLUGGED_COMMAND_LIST_DESC": "プラグイン/テーマのリスト", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_NAME": "type", + "REPLUGGED_COMMAND_RELOAD_NAME": "reload", + "REPLUGGED_SETTINGS_BADGES_DESC": "ユーザーのプロフィールに Replugged のカスタムバッジを表示します。", + "REPLUGGED_STORE": "ストア", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_DESC": "表示するアドオンの種類", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_DESC": "リストにバージョンを含める", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_DESC": "有効なアドオン、無効なアドオン、またはその両方を表示するかどうか", + "REPLUGGED_COMMAND_LIST_OPTION_VERSION_NAME": "version", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_NAME": "status", + "REPLUGGED_COMMAND_LIST_OPTION_STATUS_CHOICE_ENABLED": "有効", + "REPLUGGED_UPDATES_UPDATE_TO": "{version} にアップデート", + "REPLUGGED_SETTINGS_TRANSPARENT_DESC": "Discordウィンドウを透明にします、主にテーマ設定に便利です。**再起動が必要**", + "REPLUGGED_COMMAND_SUCCESS_GENERIC": "成功", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "テーマをリスト", + "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "プラグインをリスト", + "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_TOAST_INSTALLER_ADDON_FETCH_INFO_FAILED": "アドオン情報の取得に失敗しました。", + "REPLUGGED_TOAST_INSTALLER_ADDON_CANCELED_INSTALL": "インストールはキャンセルされました。", + "REPLUGGED_ADDON_AUTHORS_MANY": "作者: {author1}, {author2}, {author3}, 他 {count, number} 人", + "REPLUGGED_UPDATES_TOAST_FAILED_ONE": "アップデート失敗!", + "REPLUGGED_UPDATES_TOAST_SUCCESS_ALL": "アップデートは正常に完了しました。", + "REPLUGGED_QUICKCSS_FOLDER_OPEN": "Quick CSS フォルダーを開く", + "REPLUGGED_UPDATES_UPDATE_NOUN": "アップデート", + "REPLUGGED_VERSION": "Replugged {version, select, dev {[DEV MODE]} other {v{version}}}", + "REPLUGGED_SETTINGS_BADGES": "Replugged バッジを有効化", + "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_UPDATES_UPDATE_ALL": "すべてアップデート", + "REPLUGGED_UPDATES_TOAST_NO_NEW": "新しいアップデートはありません。", + "REPLUGGED_UPDATES_TOAST_FAILED_ALL": "アップデート失敗!", + "REPLUGGED_UPDATES_TOAST_SUCCESS_ONE": "アップデートは正常に完了しました。", + "REPLUGGED_UPDATES_TOAST_NEW": "{count, number} 個のアップデートがあります!" } diff --git a/i18n/pl.json b/i18n/pl.json index f0ba78670..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ć", @@ -233,5 +233,14 @@ "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_PLUGIN": "Wyświetl wtyczki", "REPLUGGED_COMMAND_LIST_OPTION_TYPE_CHOICE_THEME": "Wyświetl motywy", "REPLUGGED_COMMAND_SUCCESS_GENERIC": "Sukces", - "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Wtyczka: {name}" + "REPLUGGED_SETTINGS_ERROR_PLUGIN_NAME": "Wtyczka: {name}", + "REPLUGGED_COMMAND_INSTALL_NAME": "zainstaluj", + "REPLUGGED_COMMAND_INSTALL_DESC": "Zainstaluj wtyczkę lub motyw", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_NAME": "dodatek", + "REPLUGGED_COMMAND_INSTALL_OPTION_ADDON_DESC": "Identyfikator dodatku do zainstalowania ze źródła", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_NAME": "źródło", + "REPLUGGED_COMMAND_INSTALL_OPTION_SOURCE_DESC": "Źródło, z którego ma zostać zainstalowany dodatek", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_NAME": "identyfikator", + "REPLUGGED_COMMAND_INSTALL_OPTION_ID_DESC": "Jeśli źródło zawiera wiele dodatków, określ, który z nich ma zostać zainstalowany", + "REPLUGGED_STORE": "Sklep" } 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/package.json b/package.json index a91148eb6..c3029e46d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "replugged", - "version": "4.6.3", + "version": "4.6.5", "description": "A lightweight @discord client mod focused on simplicity and performance", "license": "MIT", "main": "dist/main.mjs", @@ -38,35 +38,35 @@ "devDependencies": { "@types/adm-zip": "^0.5.0", "@types/highlightjs": "^9.12.2", - "@types/lodash": "^4.14.197", - "@types/node": "^18.17.11", + "@types/lodash": "^4.14.198", + "@types/node": "^18.17.14", "@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/react-reconciler": "^0.28.4", + "@types/semver": "^7.5.1", "@types/superagent": "^4.1.18", - "@types/update-notifier": "^6.0.4", + "@types/update-notifier": "^6.0.5", "@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", + "@typescript-eslint/eslint-plugin": "^6.6.0", + "@typescript-eslint/parser": "^6.6.0", + "cspell": "^7.3.2", + "discord-types": "^1.3.3", "eslint": "^8.48.0", - "eslint-config-dmitmel": "github:dmitmel/eslint-config-dmitmel#690f1b1121d342fcc8ee511ca9f2af7502f53db6", + "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", "parcel": "^2.9.3", - "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" + "tsx": "^3.12.8", + "type-fest": "^4.3.1", + "typedoc": "^0.25.1", + "typescript": "^5.2.2" }, "files": [ "dist", @@ -79,7 +79,7 @@ "@ddietr/codemirror-themes": "^1.4.2", "@electron/asar": "^3.2.4", "@lezer/highlight": "^1.1.6", - "@octokit/rest": "^19.0.13", + "@octokit/rest": "^20.0.1", "@parcel/config-default": "^2.9.3", "@parcel/core": "^2.9.3", "@parcel/transformer-sass": "^2.9.3", @@ -92,7 +92,7 @@ "semver": "^7.5.4", "standalone-electron-types": "^1.0.0", "update-notifier": "^6.0.2", - "ws": "^8.13.0", + "ws": "^8.14.0", "yargs": "^17.7.2", "zod": "^3.22.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b09e686b4..b0ce64ddb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '6.1' settings: autoInstallPeers: true @@ -10,7 +10,7 @@ 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.18.0) '@codemirror/language': specifier: ^6.9.0 version: 6.9.0 @@ -27,11 +27,11 @@ dependencies: specifier: ^1.1.6 version: 1.1.6 '@octokit/rest': - specifier: ^19.0.13 - version: 19.0.13 + specifier: ^20.0.1 + version: 20.0.1 '@parcel/config-default': specifier: ^2.9.3 - version: 2.9.3(@parcel/core@2.9.3) + version: 2.9.3(@parcel/core@2.9.3)(typescript@5.2.2) '@parcel/core': specifier: ^2.9.3 version: 2.9.3 @@ -66,8 +66,8 @@ dependencies: specifier: ^6.0.2 version: 6.0.2 ws: - specifier: ^8.13.0 - version: 8.13.0 + specifier: ^8.14.0 + version: 8.14.0 yargs: specifier: ^17.7.2 version: 17.7.2 @@ -83,11 +83,11 @@ devDependencies: specifier: ^9.12.2 version: 9.12.2 '@types/lodash': - specifier: ^4.14.197 - version: 4.14.197 + specifier: ^4.14.198 + version: 4.14.198 '@types/node': - specifier: ^18.17.11 - version: 18.17.11 + specifier: ^18.17.14 + version: 18.17.14 '@types/prompts': specifier: ^2.4.4 version: 2.4.4 @@ -98,17 +98,17 @@ devDependencies: specifier: ^18.2.7 version: 18.2.7 '@types/react-reconciler': - specifier: ^0.28.3 - version: 0.28.3 + specifier: ^0.28.4 + version: 0.28.4 '@types/semver': - specifier: ^7.5.0 - version: 7.5.0 + specifier: ^7.5.1 + version: 7.5.1 '@types/superagent': specifier: ^4.1.18 version: 4.1.18 '@types/update-notifier': - specifier: ^6.0.4 - version: 6.0.4 + specifier: ^6.0.5 + version: 6.0.5 '@types/ws': specifier: ^8.5.5 version: 8.5.5 @@ -116,23 +116,23 @@ devDependencies: specifier: ^17.0.24 version: 17.0.24 '@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.6.0 + version: 6.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.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.6.0 + version: 6.6.0(eslint@8.48.0)(typescript@5.2.2) cspell: - specifier: ^6.31.3 - version: 6.31.3 + specifier: ^7.3.2 + version: 7.3.2 discord-types: - specifier: ^1.3.26 + specifier: ^1.3.3 version: 1.3.26 eslint: specifier: ^8.48.0 version: 8.48.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.48.0) eslint-plugin-node: specifier: ^11.1.0 version: 11.1.0(eslint@8.48.0) @@ -144,13 +144,13 @@ devDependencies: version: 2.29.4 np: specifier: ^8.0.4 - version: 8.0.4 + version: 8.0.4(typescript@5.2.2) parcel: specifier: ^2.9.3 - version: 2.9.3 + version: 2.9.3(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 @@ -158,17 +158,17 @@ devDependencies: specifier: ^4.1.0 version: 4.1.0 tsx: - specifier: ^3.12.7 - version: 3.12.7 + specifier: ^3.12.8 + version: 3.12.8 type-fest: - specifier: ^3.13.1 - version: 3.13.1 + specifier: ^4.3.1 + version: 4.3.1 typedoc: - specifier: ^0.23.28 - version: 0.23.28(typescript@5.0.4) + specifier: ^0.25.1 + version: 0.25.1(typescript@5.2.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: ^5.2.2 + version: 5.2.2 packages: @@ -177,22 +177,22 @@ 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.13 chalk: 2.4.2 - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + /@babel/helper-validator-identifier@7.22.15: + resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} engines: {node: '>=6.9.0'} - /@babel/highlight@7.22.10: - resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} + /@babel/highlight@7.22.13: + resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.15 chalk: 2.4.2 js-tokens: 4.0.0 @@ -204,7 +204,7 @@ 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): + /@codemirror/autocomplete@6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.18.0)(@lezer/common@1.0.4): resolution: {integrity: sha512-Fbwm0V/Wn3BkEJZRhr0hi5BhCo5a7eBL6LYaliPjOSwCyfOpnjXY59HruSxOUNV+1OYer0Tgx1zRNQttjXyDog==} peerDependencies: '@codemirror/language': ^6.0.0 @@ -214,7 +214,7 @@ packages: dependencies: '@codemirror/language': 6.9.0 '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/view': 6.18.0 '@lezer/common': 1.0.4 dev: false @@ -223,14 +223,14 @@ packages: dependencies: '@codemirror/language': 6.9.0 '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/view': 6.18.0 '@lezer/common': 1.0.4 dev: false - /@codemirror/lang-css@6.2.1(@codemirror/view@6.16.0): + /@codemirror/lang-css@6.2.1(@codemirror/view@6.18.0): 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/autocomplete': 6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.18.0)(@lezer/common@1.0.4) '@codemirror/language': 6.9.0 '@codemirror/state': 6.2.1 '@lezer/common': 1.0.4 @@ -243,7 +243,7 @@ packages: resolution: {integrity: sha512-nFu311/0ne/qGuGCL3oKuktBgzVOaxCHZPZv1tLSZkNjPYxxvkjSbzno3MlErG2tgw1Yw1yF8BxMCegeMXqpiw==} dependencies: '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/view': 6.18.0 '@lezer/common': 1.0.4 '@lezer/highlight': 1.1.6 '@lezer/lr': 1.3.10 @@ -254,7 +254,7 @@ packages: resolution: {integrity: sha512-2Hx945qKX7FBan5/gUdTM8fsMYrNG9clIgEcPXestbLVFAUyQYFAuju/5BMNf/PwgpVaX5pvRm4+ovjbp9D9gQ==} dependencies: '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/view': 6.18.0 crelt: 1.0.6 dev: false @@ -262,7 +262,7 @@ packages: resolution: {integrity: sha512-WRihpqd0l9cEh9J3IZe45Yi+Z5MfTsEXnyc3V7qXHP4ZYtIYpGOn+EJ7fyLIkyAm/8S6QIr7/mMISfAadf8zCg==} dependencies: '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/view': 6.18.0 crelt: 1.0.6 dev: false @@ -270,24 +270,24 @@ packages: resolution: {integrity: sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==} dev: false - /@codemirror/view@6.16.0: - resolution: {integrity: sha512-1Z2HkvkC3KR/oEZVuW9Ivmp8TWLzGEd8T8TA04TTwPvqogfkHBdYSlflytDOqmkUxM2d1ywTg7X2dU5mC+SXvg==} + /@codemirror/view@6.18.0: + resolution: {integrity: sha512-T6q1yYAoU+gSWfJFR4ryvDQcyOqS+Mw5RCvh26y0KiNksOOLYhNvdB3BTyLz8vy4fKaYlzbAOyBU7OQPUGHzjQ==} dependencies: '@codemirror/state': 6.2.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.2: + resolution: {integrity: sha512-mmb9gi2/jTj983ijgVsdsQ4FM5Bv/lKslgJt4jDUm6SOtQYW4geCJNl5/MbMzcMQUWSJouS0w4C55AyrJmq0iw==} + engines: {node: '>=16'} dependencies: '@cspell/dict-ada': 4.0.2 - '@cspell/dict-aws': 3.0.0 + '@cspell/dict-aws': 4.0.0 '@cspell/dict-bash': 4.1.1 - '@cspell/dict-companies': 3.0.20 + '@cspell/dict-companies': 3.0.21 '@cspell/dict-cpp': 5.0.4 - '@cspell/dict-cryptocurrencies': 3.0.1 + '@cspell/dict-cryptocurrencies': 4.0.0 '@cspell/dict-csharp': 4.0.2 '@cspell/dict-css': 4.0.7 '@cspell/dict-dart': 2.0.3 @@ -297,9 +297,10 @@ 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.7 '@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 @@ -310,7 +311,7 @@ packages: '@cspell/dict-java': 5.0.5 '@cspell/dict-k8s': 1.0.1 '@cspell/dict-latex': 4.0.0 - '@cspell/dict-lorem-ipsum': 3.0.0 + '@cspell/dict-lorem-ipsum': 4.0.0 '@cspell/dict-lua': 4.0.1 '@cspell/dict-node': 4.0.2 '@cspell/dict-npm': 5.0.8 @@ -322,7 +323,7 @@ packages: '@cspell/dict-ruby': 5.0.0 '@cspell/dict-rust': 4.0.1 '@cspell/dict-scala': 5.0.0 - '@cspell/dict-software-terms': 3.2.1 + '@cspell/dict-software-terms': 3.2.2 '@cspell/dict-sql': 2.1.1 '@cspell/dict-svelte': 1.0.2 '@cspell/dict-swift': 2.0.1 @@ -330,50 +331,57 @@ packages: '@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.2: + resolution: {integrity: sha512-5j1CX2OXkQGO3ljMBzfHjDzEiixodjfxVGR3VKkQX1vxTUMTIkPgt4BsgOVCQtqTiO21Dd2Bzn+H0/Jf4OL37g==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-types': 6.31.3 + '@cspell/cspell-types': 7.3.2 dev: true - /@cspell/cspell-pipe@6.31.3: - resolution: {integrity: sha512-Lv/y4Ya/TJyU1pf66yl1te7LneFZd3lZg1bN5oe1cPrKSmfWdiX48v7plTRecWd/OWyLGd0yN807v79A+/0W7A==} - engines: {node: '>=14'} + /@cspell/cspell-pipe@7.3.2: + resolution: {integrity: sha512-ZKOkb6IxuEXRXtjVAlZ41+4SXhyiGqrQ3FW16iZlCbM9Mp9WJAw2MOVh6wvpXmfKcM5/3jK1A4rFylB7b0QBHw==} + engines: {node: '>=16'} dev: true - /@cspell/cspell-service-bus@6.31.3: - resolution: {integrity: sha512-x5j8j3n39KN8EXOAlv75CpircdpF5WEMCC5pcO916o6GBmJBy8SrdzdsBGJhVcYGGilqy6pf8R9RCZ3yAmG8gQ==} - engines: {node: '>=14'} + /@cspell/cspell-resolver@7.3.2: + resolution: {integrity: sha512-3gvZPlYLkjuPezF2VyCVurEJiJnb3sbr32Jp3MfvpO7x026RXMbetkdH87MKoiSAThxSiyG+qi/jvUeDYY/Wtg==} + 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.2: + resolution: {integrity: sha512-i2sPnUSsFJXc5afijbUsUtv1YEXyO8EbJbXV0kdE6KVu7I0CSMV8jprJaG3X1m5HE6lGftNcpLKLHjSlFOFvsA==} + engines: {node: '>=16'} + dev: true + + /@cspell/cspell-types@7.3.2: + resolution: {integrity: sha512-2lvRUfIgH9TvqGEDpuukuD6J84XPP8KFxR/qphtPZAzwg9SEpiagdN79eFlPe4ZI2xHNvwEsPDJUxuvxXu15wQ==} + 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==} dev: true - /@cspell/dict-companies@3.0.20: - resolution: {integrity: sha512-o13HaqYxkWo20FC5iU9PHKMFexY9D7/XeSj9tvBzy3sEzW324zw5MWEkeDszwmC/GsLZtot+5vopCv6/evRNlA==} + /@cspell/dict-companies@3.0.21: + resolution: {integrity: sha512-u9b7qtCWYS728WqiJeAucJcjRs16Y1yGGwagS/w59SV25R0rXbXbPbQuX8wYDcaeIO8uRHGkbSWngx6O4qFoCQ==} dev: true /@cspell/dict-cpp@5.0.4: resolution: {integrity: sha512-Vmz/CCb2d91ES5juaO8+CFWeTa2AFsbpR8bkCPJq+P8cRP16+37tY0zNXEBSK/1ur4MakaRf76jeQBijpZxw0Q==} 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: @@ -416,16 +424,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.7: + resolution: {integrity: sha512-83V0XXqiXJvXa1pj5cVpviYKeLTN2Dxvouz8ullrwgcfPtY57pYBy+3ACVAMYK0eGByhRPc/xVXlIgv4o0BNZw==} 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: @@ -468,8 +480,8 @@ packages: 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: @@ -518,8 +530,8 @@ 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.2.2: + resolution: {integrity: sha512-DmdS/qAyJVmKKku4ab89HVZhsvRIk84HoPUVIZ/zJhmuCO+LF45Ylzy1/7G32MYLjbG/o1Ze3UvbaE9HY4FKKA==} dev: true /@cspell/dict-sql@2.1.1: @@ -542,16 +554,16 @@ packages: 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.2: + resolution: {integrity: sha512-G2ZBPC08X3lUQmHRobGdFYxb3oTSuSIfpW1P/oTMovqbuVoQh108W2WXv0Va40LVGkQD9OS31ZafHbcLELANeA==} + 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.2: + resolution: {integrity: sha512-Y2JL8A/CG37NnreVtU3DhvcOuYWNEAKUmOSU9NfBeOoptWwTMBvbNF5UbOpmZrf2BXc8OmdHIogIWHXYIESiyg==} + engines: {node: '>=16'} dev: true /@ddietr/codemirror-themes@1.4.2: @@ -559,7 +571,7 @@ packages: dependencies: '@codemirror/language': 6.9.0 '@codemirror/state': 6.2.1 - '@codemirror/view': 6.16.0 + '@codemirror/view': 6.18.0 '@lezer/highlight': 1.1.6 dev: false @@ -577,21 +589,21 @@ packages: /@esbuild-kit/cjs-loader@2.4.2: resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} dependencies: - '@esbuild-kit/core-utils': 3.1.0 + '@esbuild-kit/core-utils': 3.2.2 get-tsconfig: 4.7.0 dev: true - /@esbuild-kit/core-utils@3.1.0: - resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} + /@esbuild-kit/core-utils@3.2.2: + resolution: {integrity: sha512-Ub6LaRaAgF80dTSzUdXpFLM1pVDdmEVB9qb5iAzSpyDlX/mfJTFGOnZ516O05p5uWWteNviMKi4PAyEuRxI5gA==} dependencies: - esbuild: 0.17.19 + esbuild: 0.18.20 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 + '@esbuild-kit/core-utils': 3.2.2 get-tsconfig: 4.7.0 dev: true @@ -604,8 +616,8 @@ packages: dev: false optional: 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] @@ -622,8 +634,8 @@ 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] @@ -640,8 +652,8 @@ 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] @@ -658,8 +670,8 @@ 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] @@ -676,8 +688,8 @@ 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] @@ -694,8 +706,8 @@ 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] @@ -712,8 +724,8 @@ 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] @@ -730,8 +742,8 @@ 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] @@ -748,8 +760,8 @@ 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] @@ -766,8 +778,8 @@ 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] @@ -784,8 +796,8 @@ 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] @@ -802,8 +814,8 @@ 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] @@ -820,8 +832,8 @@ 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] @@ -838,8 +850,8 @@ 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] @@ -856,8 +868,8 @@ 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] @@ -874,8 +886,8 @@ 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] @@ -892,8 +904,8 @@ 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] @@ -910,8 +922,8 @@ 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] @@ -928,8 +940,8 @@ 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] @@ -946,8 +958,8 @@ 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] @@ -964,8 +976,8 @@ 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] @@ -982,8 +994,8 @@ 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] @@ -1028,8 +1040,8 @@ packages: 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 @@ -1197,126 +1209,107 @@ 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.0: + resolution: {integrity: sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==} + 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.1 + '@octokit/request': 8.1.1 + '@octokit/request-error': 5.0.0 + '@octokit/types': 11.1.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.0: + resolution: {integrity: sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==} + engines: {node: '>= 18'} dependencies: - '@octokit/types': 9.3.2 + '@octokit/types': 11.1.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.1: + resolution: {integrity: sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==} + engines: {node: '>= 18'} dependencies: - '@octokit/request': 6.2.8 - '@octokit/types': 9.3.2 + '@octokit/request': 8.1.1 + '@octokit/types': 11.1.0 universal-user-agent: 6.0.0 - transitivePeerDependencies: - - encoding dev: false /@octokit/openapi-types@18.0.0: resolution: {integrity: sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==} 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@8.0.0(@octokit/core@5.0.0): + resolution: {integrity: sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==} + 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.0 + '@octokit/types': 11.1.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.0): + 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.0 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@9.0.0(@octokit/core@5.0.0): + resolution: {integrity: sha512-KquMF/VB1IkKNiVnzJKspY5mFgGyLd7HzdJfVEGTJFzqu9BRFNWt+nwTCMuUiWc72gLQhRWYubTwOkQj+w/1PA==} + 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.0 + '@octokit/types': 11.1.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.0: + resolution: {integrity: sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==} + engines: {node: '>= 18'} dependencies: - '@octokit/types': 9.3.2 + '@octokit/types': 11.1.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.1: + resolution: {integrity: sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==} + engines: {node: '>= 18'} dependencies: - '@octokit/endpoint': 7.0.6 - '@octokit/request-error': 3.0.3 - '@octokit/types': 9.3.2 + '@octokit/endpoint': 9.0.0 + '@octokit/request-error': 5.0.0 + '@octokit/types': 11.1.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'} - 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==} dev: false - /@octokit/types@10.0.0: - resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==} + /@octokit/rest@20.0.1: + resolution: {integrity: sha512-wROV21RwHQIMNb2Dgd4+pY+dVy1Dwmp85pBrgr6YRRDYRBu9Gb+D73f4Bl2EukZSj5hInq2Tui9o7gAQpc2k2Q==} + engines: {node: '>= 18'} dependencies: - '@octokit/openapi-types': 18.0.0 + '@octokit/core': 5.0.0 + '@octokit/plugin-paginate-rest': 8.0.0(@octokit/core@5.0.0) + '@octokit/plugin-request-log': 4.0.0(@octokit/core@5.0.0) + '@octokit/plugin-rest-endpoint-methods': 9.0.0(@octokit/core@5.0.0) dev: false - /@octokit/types@9.3.2: - resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + /@octokit/types@11.1.0: + resolution: {integrity: sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==} dependencies: '@octokit/openapi-types': 18.0.0 dev: false @@ -1360,7 +1353,7 @@ packages: transitivePeerDependencies: - '@parcel/core' - /@parcel/config-default@2.9.3(@parcel/core@2.9.3): + /@parcel/config-default@2.9.3(@parcel/core@2.9.3)(typescript@5.2.2): resolution: {integrity: sha512-tqN5tF7QnVABDZAu76co5E6N8mA9n8bxiWdK4xYyINYFIEHgX172oRTqXTnhEMjlMrdmASxvnGlbaPBaVnrCTw==} peerDependencies: '@parcel/core': ^2.9.3 @@ -1370,7 +1363,7 @@ packages: '@parcel/core': 2.9.3 '@parcel/namer-default': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-css': 2.9.3(@parcel/core@2.9.3) - '@parcel/optimizer-htmlnano': 2.9.3(@parcel/core@2.9.3) + '@parcel/optimizer-htmlnano': 2.9.3(@parcel/core@2.9.3)(typescript@5.2.2) '@parcel/optimizer-image': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-svgo': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-swc': 2.9.3(@parcel/core@2.9.3) @@ -1404,6 +1397,7 @@ packages: - relateurl - srcset - terser + - typescript - uncss /@parcel/core@2.9.3: @@ -1432,7 +1426,7 @@ packages: dotenv: 7.0.0 dotenv-expand: 5.1.0 json5: 2.2.3 - msgpackr: 1.9.7 + msgpackr: 1.9.8 nullthrows: 1.1.1 semver: 7.5.4 @@ -1526,12 +1520,12 @@ packages: transitivePeerDependencies: - '@parcel/core' - /@parcel/optimizer-htmlnano@2.9.3(@parcel/core@2.9.3): + /@parcel/optimizer-htmlnano@2.9.3(@parcel/core@2.9.3)(typescript@5.2.2): resolution: {integrity: sha512-9g/KBck3c6DokmJfvJ5zpHFBiCSolaGrcsTGx8C3YPdCTVTI9P1TDCwUxvAr4LjpcIRSa82wlLCI+nF6sSgxKA==} engines: {node: '>= 12.0.0', parcel: ^2.9.3} dependencies: '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) - htmlnano: 2.0.4(svgo@2.8.0) + htmlnano: 2.0.4(svgo@2.8.0)(typescript@5.2.2) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 @@ -1543,6 +1537,7 @@ packages: - relateurl - srcset - terser + - typescript - uncss /@parcel/optimizer-image@2.9.3(@parcel/core@2.9.3): @@ -1576,7 +1571,7 @@ packages: '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.9.3 - '@swc/core': 1.3.80 + '@swc/core': 1.3.83 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' @@ -1830,7 +1825,7 @@ packages: '@parcel/source-map': 2.1.1 '@parcel/utils': 2.9.3 '@parcel/workers': 2.9.3(@parcel/core@2.9.3) - '@swc/helpers': 0.5.1 + '@swc/helpers': 0.5.2 browserslist: 4.21.10 nullthrows: 1.1.1 regenerator-runtime: 0.13.11 @@ -2122,88 +2117,88 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - /@swc/core-darwin-arm64@1.3.80: - resolution: {integrity: sha512-rhoFTcQMUGfO7IkfOnopPSF6O0/aVJ58B7KueIKbvrMe6YvSfFj9QfObELFjYCcrJZTvUWBhig0QrsfPIiUphA==} + /@swc/core-darwin-arm64@1.3.83: + resolution: {integrity: sha512-Plz2IKeveVLivbXTSCC3OZjD2MojyKYllhPrn9RotkDIZEFRYJZtW5/Ik1tJW/2rzu5HVKuGYrDKdScVVTbOxQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.3.80: - resolution: {integrity: sha512-0dOLedFpVXe+ugkKHXsqSxMKqvQYfFtibWbrZ7j8wOaErzSGPr0VpyWvepNVb9s046725kPXSw+fsGhqZR8wrw==} + /@swc/core-darwin-x64@1.3.83: + resolution: {integrity: sha512-FBGVg5IPF/8jQ6FbK60iDUHjv0H5+LwfpJHKH6wZnRaYWFtm7+pzYgreLu3NTsm3m7/1a7t0+7KURwBGUaJCCw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.80: - resolution: {integrity: sha512-QIjwP3PtDeHBDkwF6+ZZqdUsqAhORbMpxrw2jq3mHe4lQrxBttSFTq018vlMRo2mFEorOvXdadzaD9m+NymPrw==} + /@swc/core-linux-arm-gnueabihf@1.3.83: + resolution: {integrity: sha512-EZcsuRYhGkzofXtzwDjuuBC/suiX9s7zeg2YYXOVjWwyebb6BUhB1yad3mcykFQ20rTLO9JUyIaiaMYDHGobqw==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.3.80: - resolution: {integrity: sha512-cg8WriIueab58ZwkzXmIACnjSzFLzOBwxlC9k65gPXMNgCjab2YbqEYvAbjBqneuqaao02gW6tad2uhjgYaExw==} + /@swc/core-linux-arm64-gnu@1.3.83: + resolution: {integrity: sha512-khI41szLHrCD/cFOcN4p2SYvZgHjhhHlcMHz5BksRrDyteSJKu0qtWRZITVom0N/9jWoAleoFhMnFTUs0H8IWA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.3.80: - resolution: {integrity: sha512-AhdCQ7QKx5mWrtpaOA1mFRiWWvuiiUtspvo0QSpspDetRKTND1rlf/3UB5+gp0kCeCNUTsVmJWU7fIA9ICZtXA==} + /@swc/core-linux-arm64-musl@1.3.83: + resolution: {integrity: sha512-zgT7yNOdbjHcGAwvys79mbfNLK65KBlPJWzeig+Yk7I8TVzmaQge7B6ZS/gwF9/p+8TiLYo/tZ5aF2lqlgdSVw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.3.80: - resolution: {integrity: sha512-+2e5oni1vOrLIjM5Q2/GIzK/uS2YEtuJqnjPvCK8SciRJsSl8OgVsRvyCDbmKeZNtJ2Q+o/O2AQ2w1qpAJG6jg==} + /@swc/core-linux-x64-gnu@1.3.83: + resolution: {integrity: sha512-x+mH0Y3NC/G0YNlFmGi3vGD4VOm7IPDhh+tGrx6WtJp0BsShAbOpxtfU885rp1QweZe4qYoEmGqiEjE2WrPIdA==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.3.80: - resolution: {integrity: sha512-8OK9IlI1zpWOm7vIp1iXmZSEzLAwFpqhsGSEhxPavpOx2m54kLFdPcw/Uv3n461f6TCtszIxkGq1kSqBUdfUBA==} + /@swc/core-linux-x64-musl@1.3.83: + resolution: {integrity: sha512-s5AYhAOmetUwUZwS5g9qb92IYgNHHBGiY2mTLImtEgpAeBwe0LPDj6WrujxCBuZnaS55mKRLLOuiMZE5TpjBNA==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.3.80: - resolution: {integrity: sha512-RKhatwiAGlffnF6z2Mm3Ddid0v3KB+uf5m/Gc7N9zO/EUAV0PnHRuYuZSGyqodHmGFC+mK8YrCooFCEmHL9n+w==} + /@swc/core-win32-arm64-msvc@1.3.83: + resolution: {integrity: sha512-yw2rd/KVOGs95lRRB+killLWNaO1dy4uVa8Q3/4wb5txlLru07W1m041fZLzwOg/1Sh0TMjJgGxj0XHGR3ZXhQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.3.80: - resolution: {integrity: sha512-3jiiZzU/kaw7k4zUp1yMq1QiUe4wJVtCEXIhf+fKuBsIwm7rdvyK/+PIx5KHnZy4TGQnYczKBRhJA5nuBcrUCQ==} + /@swc/core-win32-ia32-msvc@1.3.83: + resolution: {integrity: sha512-POW+rgZ6KWqBpwPGIRd2/3pcf46P+UrKBm4HLt5IwbHvekJ4avIM8ixJa9kK0muJNVJcDpaZgxaU1ELxtJ1j8w==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.3.80: - resolution: {integrity: sha512-2eZtIoIWQBWqykfms92Zd37lveYOBWQTZjdooBGlsLHtcoQLkNpf1NXmR6TKY0yy8q6Yl3OhPvY+izjmO08MSg==} + /@swc/core-win32-x64-msvc@1.3.83: + resolution: {integrity: sha512-CiWQtkFnZElXQUalaHp+Wacw0Jd+24ncRYhqaJ9YKnEQP1H82CxIIuQqLM8IFaLpn5dpY6SgzaeubWF46hjcLA==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.3.80: - resolution: {integrity: sha512-yX2xV5I/lYswHHR+44TPvzBgq3/Y8N1YWpTQADYuvSiX3Jxyvemk5Jpx3rRtigYb8WBkWAAf2i5d5ZJ2M7hhgw==} + /@swc/core@1.3.83: + resolution: {integrity: sha512-PccHDgGQlFjpExgJxH91qA3a4aifR+axCFJ4RieCoiI0m5gURE4nBhxzTBY5YU/YKTBmPO8Gc5Q6inE3+NquWg==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -2214,19 +2209,19 @@ packages: dependencies: '@swc/types': 0.1.4 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.80 - '@swc/core-darwin-x64': 1.3.80 - '@swc/core-linux-arm-gnueabihf': 1.3.80 - '@swc/core-linux-arm64-gnu': 1.3.80 - '@swc/core-linux-arm64-musl': 1.3.80 - '@swc/core-linux-x64-gnu': 1.3.80 - '@swc/core-linux-x64-musl': 1.3.80 - '@swc/core-win32-arm64-msvc': 1.3.80 - '@swc/core-win32-ia32-msvc': 1.3.80 - '@swc/core-win32-x64-msvc': 1.3.80 - - /@swc/helpers@0.5.1: - resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} + '@swc/core-darwin-arm64': 1.3.83 + '@swc/core-darwin-x64': 1.3.83 + '@swc/core-linux-arm-gnueabihf': 1.3.83 + '@swc/core-linux-arm64-gnu': 1.3.83 + '@swc/core-linux-arm64-musl': 1.3.83 + '@swc/core-linux-x64-gnu': 1.3.83 + '@swc/core-linux-x64-musl': 1.3.83 + '@swc/core-win32-arm64-msvc': 1.3.83 + '@swc/core-win32-ia32-msvc': 1.3.83 + '@swc/core-win32-x64-msvc': 1.3.83 + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: tslib: 2.6.2 @@ -2253,7 +2248,7 @@ packages: /@types/adm-zip@0.5.0: resolution: {integrity: sha512-FCJBJq9ODsQZUNURo5ILAQueuA8WJhRvuihS3ke2iI25mJlfV2LK8jG2Qj2z2AWg8U0FtWWqBHVRetceLskSaw==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.17.14 dev: true /@types/cacheable-request@6.0.3: @@ -2261,7 +2256,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 18.17.11 + '@types/node': 18.17.14 '@types/responselike': 1.0.0 dev: true @@ -2287,15 +2282,15 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.17.14 dev: true - /@types/lodash@4.14.197: - resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==} + /@types/lodash@4.14.198: + resolution: {integrity: sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==} dev: true - /@types/node@18.17.11: - resolution: {integrity: sha512-r3hjHPBu+3LzbGBa8DHnr/KAeTEEOrahkcL+cZc4MaBMTM+mk8LtXR+zw+nqfjuDZZzYTYgTcpHuP+BEQk069g==} + /@types/node@18.17.14: + resolution: {integrity: sha512-ZE/5aB73CyGqgQULkLG87N9GnyGe5TcQjv34pwS8tfBs1IkCh0ASM69mydb2znqd6v0eX+9Ytvk6oQRqu8T1Vw==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -2304,7 +2299,7 @@ packages: /@types/prompts@2.4.4: resolution: {integrity: sha512-p5N9uoTH76lLvSAaYSZtBCdEXzpOOufsRjnhjVSrZGXikVGHX9+cc9ERtHRV4hvBKHyZb1bg4K+56Bd2TqUn4A==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.17.14 kleur: 3.0.3 dev: true @@ -2318,8 +2313,8 @@ packages: '@types/react': 18.2.21 dev: true - /@types/react-reconciler@0.28.3: - resolution: {integrity: sha512-srdTEjQKa0e2mVdjIJkISnFAevdXk3py6J7oKQWjLhy1JNaGq9zEgBh2adejjKi36gHn8NGa/Rr1Uh29rF97dQ==} + /@types/react-reconciler@0.28.4: + resolution: {integrity: sha512-Xd55E2aLI9Q/ikDQEmfRzIwYJs4oO0h9ZHA3FZDakzt1WR6JMZcpqtCZlF97I72KVjoY4rHXU5TfvkRDOyr/rg==} dependencies: '@types/react': 18.2.21 dev: true @@ -2342,26 +2337,26 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.17.14 dev: true /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} dev: true - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.1: + resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} dev: true /@types/superagent@4.1.18: resolution: {integrity: sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w==} dependencies: '@types/cookiejar': 2.1.2 - '@types/node': 18.17.11 + '@types/node': 18.17.14 dev: true - /@types/update-notifier@6.0.4: - resolution: {integrity: sha512-CiKJPSmt/3F4sVnkQTjnP/onKtTJxRkib6Gvw4XESM8FNsHlvRnBNqU5qL0IQmqjtKnz5e9E6Y7xChOpvxFzKg==} + /@types/update-notifier@6.0.5: + resolution: {integrity: sha512-uUOhxsJ3edPHu06r3k4I2yJ4eoyqBt+53ra9+caXEx0ruoPwqNHTlkq75CUvI4yWsrCA5+31tih+opunLCYnXw==} dependencies: '@types/configstore': 6.0.0 boxen: 7.1.1 @@ -2370,7 +2365,7 @@ packages: /@types/ws@8.5.5: resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.17.14 dev: true /@types/yargs-parser@21.0.0: @@ -2383,133 +2378,134 @@ packages: '@types/yargs-parser': 21.0.0 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.6.0(@typescript-eslint/parser@6.6.0)(eslint@8.48.0)(typescript@5.2.2): + resolution: {integrity: sha512-CW9YDGTQnNYMIo5lMeuiIG08p4E0cXrXTbcZ2saT/ETE7dWUrNxlijsQeU04qAAKkILiLzdQz+cGFxCJjaZUmA==} + 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) + '@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.6.0 + '@typescript-eslint/type-utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.6.0(eslint@8.48.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.6.0 debug: 4.3.4 eslint: 8.48.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.2(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.6.0(eslint@8.48.0)(typescript@5.2.2): + resolution: {integrity: sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==} + 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.6.0 + '@typescript-eslint/types': 6.6.0 + '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.6.0 debug: 4.3.4 eslint: 8.48.0 - typescript: 5.0.4 + 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.6.0: + resolution: {integrity: sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==} + 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.6.0 + '@typescript-eslint/visitor-keys': 6.6.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.6.0(eslint@8.48.0)(typescript@5.2.2): + resolution: {integrity: sha512-8m16fwAcEnQc69IpeDyokNO+D5spo0w1jepWWY2Q6y5ZKNuj5EhVQXjtVAeDDqvW6Yg7dhclbsz6rTtOvcwpHg==} + 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.6.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.6.0(eslint@8.48.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 + ts-api-utils: 1.0.2(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.6.0: + resolution: {integrity: sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==} + 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.6.0(typescript@5.2.2): + resolution: {integrity: sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==} + 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.6.0 + '@typescript-eslint/visitor-keys': 6.6.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.2(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.6.0(eslint@8.48.0)(typescript@5.2.2): + resolution: {integrity: sha512-mPHFoNa2bPIWWglWYdR0QfY9GN0CfvvXX1Sv6DlSTive3jlMTUy+an67//Gysc+0Me9pjitrq0LJp0nGtLgftw==} + 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 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) + '@types/semver': 7.5.1 + '@typescript-eslint/scope-manager': 6.6.0 + '@typescript-eslint/types': 6.6.0 + '@typescript-eslint/typescript-estree': 6.6.0(typescript@5.2.2) eslint: 8.48.0 - eslint-scope: 5.1.1 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.6.0: + resolution: {integrity: sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/types': 6.6.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2552,8 +2548,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.732: + resolution: {integrity: sha512-sQqderEdnRc1hkAG2Rc/SRdUGFnwOAVkdB4/4AhO94gNd2kFzGFVdEQdso0bJ9+W7gshMKk4yRdfrGVVf/KFoA==} hasBin: true dependencies: commander-version: 1.1.0 @@ -2668,8 +2664,8 @@ 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 @@ -2688,8 +2684,8 @@ 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 @@ -2698,8 +2694,8 @@ packages: 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 @@ -2708,8 +2704,8 @@ packages: 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 @@ -2718,13 +2714,14 @@ packages: 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 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -2821,8 +2818,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001523 - electron-to-chromium: 1.4.503 + caniuse-lite: 1.0.30001528 + electron-to-chromium: 1.4.511 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) @@ -2902,8 +2899,15 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - /caniuse-lite@1.0.30001523: - resolution: {integrity: sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA==} + /caniuse-lite@1.0.30001528: + resolution: {integrity: sha512-0Db4yyjR9QMNlsxh+kKWzQtkyflkG/snYheSzkjmvdEtEXB1+jt7A2HmSEiO6XIJPIbo92lHNGNySvE5pZcs5Q==} + + /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==} @@ -3058,13 +3062,13 @@ packages: /codemirror@6.0.1(@lezer/common@1.0.4): 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/autocomplete': 6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.18.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/view': 6.18.0 transitivePeerDependencies: - '@lezer/common' dev: false @@ -3093,9 +3097,9 @@ packages: commander: 6.2.1 dev: true - /commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} + /commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} dev: true /commander@5.1.0: @@ -3132,18 +3136,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'} @@ -3168,14 +3160,20 @@ packages: path-type: 4.0.0 dev: true - /cosmiconfig@8.2.0: - resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + /cosmiconfig@8.3.4(typescript@5.2.2): + resolution: {integrity: sha512-SF+2P8+o/PTV05rgsAjDzL4OFdVXAulSfC/L19VaeVT7+tpOOSscCt2QLxDZ+CLxF2WOiq6y1K5asvs8qUJT/Q==} 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 /crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} @@ -3190,123 +3188,119 @@ 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.2: + resolution: {integrity: sha512-hL8fOZ7zTkUuE6jq2CUObxUp0fSLsNQyMo+HAkpg0w6ssHvbgnP6HP8kyEN641L/F0X/Ow2vo3CaRBadvyyzCA==} + 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.2 + '@cspell/cspell-types': 7.3.2 + cspell-trie-lib: 7.3.2 fast-equals: 4.0.3 gensequence: 5.0.2 dev: true - /cspell-gitignore@6.31.3: - resolution: {integrity: sha512-vCfVG4ZrdwJnsZHl/cdp8AY+YNPL3Ga+0KR9XJsaz69EkQpgI6porEqehuwle7hiXw5e3L7xFwNEbpCBlxgLRA==} - engines: {node: '>=14'} + /cspell-gitignore@7.3.2: + resolution: {integrity: sha512-NWxxFcf4wwKbRInkZK/p/BrPR2ElCpcB8DLcrBxRkiI4uX7yCX8v5QjI8ZpTyuaUTl9aFqJFYtj9Q7GqkBnPzA==} + engines: {node: '>=16'} hasBin: true dependencies: - cspell-glob: 6.31.3 + cspell-glob: 7.3.2 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.2: + resolution: {integrity: sha512-R/YwtBN5ApOTONkBoTOSCKDMmnRRA1fF9prkaFMfE0aT5oC2VF0N7hLCSYjpQM+kYsXeqLDc13vxFBOnHRuc3g==} + 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.2: + resolution: {integrity: sha512-ale40T4M0jHmwQsPjIbpZKzaRxMVy5dnpyvplwj7ExX4sp2Grt1wcqxk2ELS4r4bsaIap+iIfeYYhoXqYq1dQg==} + engines: {node: '>=16'} hasBin: true dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 + '@cspell/cspell-pipe': 7.3.2 + '@cspell/cspell-types': 7.3.2 dev: true - /cspell-io@6.31.3: - resolution: {integrity: sha512-yCnnQ5bTbngUuIAaT5yNSdI1P0Kc38uvC8aynNi7tfrCYOQbDu1F9/DcTpbdhrsCv+xUn2TB1YjuCmm0STfJlA==} - engines: {node: '>=14'} + /cspell-io@7.3.2: + resolution: {integrity: sha512-nul6K4YUMe1VdxuJDDOMvWUw/hIS2UZkvJLDo5GkAus7YmGSR0knfDueU+hebYszRa0LxjrduuPNcNJE/ZWUFg==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-service-bus': 6.31.3 + '@cspell/cspell-service-bus': 7.3.2 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.2: + resolution: {integrity: sha512-cbo0TSL2JnM/GdiutH193aynxdxSnxBR1DYJ1/8ycIWDU0p4AHO0EZ+5L5MkBFwpM20OicuXvLrAem9WjYVDBQ==} + 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.2 + '@cspell/cspell-pipe': 7.3.2 + '@cspell/cspell-resolver': 7.3.2 + '@cspell/cspell-types': 7.3.2 + '@cspell/dynamic-import': 7.3.2 + '@cspell/strong-weak-map': 7.3.2 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 + cspell-dictionary: 7.3.2 + cspell-glob: 7.3.2 + cspell-grammar: 7.3.2 + cspell-io: 7.3.2 + cspell-trie-lib: 7.3.2 + fast-equals: 5.0.1 + find-up: 6.3.0 gensequence: 5.0.2 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 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.2: + resolution: {integrity: sha512-IXNCWBw4UDZuY6MB+j7YNdcDpTdcfElsLkwTV8fEmNfUeClJacn2mQicQ/LKZJLvOc1TNbcSPWSCe3kQA+uxNw==} + engines: {node: '>=16'} dependencies: - '@cspell/cspell-pipe': 6.31.3 - '@cspell/cspell-types': 6.31.3 + '@cspell/cspell-pipe': 7.3.2 + '@cspell/cspell-types': 7.3.2 gensequence: 5.0.2 dev: true - /cspell@6.31.3: - resolution: {integrity: sha512-VeeShDLWVM6YPiU/imeGy0lmg6ki63tbLEa6hz20BExhzzpmINOP5nSTYtpY0H9zX9TrF/dLbI38TuuYnyG3Uw==} - engines: {node: '>=14'} + /cspell@7.3.2: + resolution: {integrity: sha512-/YY1C0CYBP+GueFon1BUgcDGc1YXDCyAIjuebvRygjt1cXwCklQVF5bZIGCrimgjzTrY+wx0ePgzuVQ9RyJnOQ==} + 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.2 + '@cspell/cspell-pipe': 7.3.2 + '@cspell/cspell-types': 7.3.2 + '@cspell/dynamic-import': 7.3.2 + chalk: 5.3.0 + chalk-template: 1.1.0 + commander: 11.0.0 + cspell-gitignore: 7.3.2 + cspell-glob: 7.3.2 + cspell-io: 7.3.2 + cspell-lib: 7.3.2 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 + get-stdin: 9.0.0 semver: 7.5.4 - strip-ansi: 6.0.1 + strip-ansi: 7.1.0 vscode-uri: 3.0.7 transitivePeerDependencies: - encoding @@ -3418,8 +3412,8 @@ packages: 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 @@ -3492,13 +3486,6 @@ packages: domelementtype: 2.3.0 domhandler: 4.3.1 - /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'} @@ -3522,8 +3509,8 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.503: - resolution: {integrity: sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==} + /electron-to-chromium@1.4.511: + resolution: {integrity: sha512-udHyLfdy390CObLy3uFQitCBvK+WxWu6WZWQMBzO/npNiRy6tanDKR1c/F6OImfAiSt1ylgNszPJBxix2c0w3w==} /elegant-spinner@1.0.1: resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} @@ -3559,12 +3546,12 @@ packages: 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 @@ -3586,11 +3573,11 @@ packages: object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + 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 @@ -3599,8 +3586,8 @@ 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.14: + resolution: {integrity: sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==} dependencies: asynciterator.prototype: 1.0.0 call-bind: 1.0.2 @@ -3614,8 +3601,8 @@ packages: 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.1 + safe-array-concat: 1.0.1 dev: true /es-set-tostringtag@2.0.1: @@ -3672,34 +3659,34 @@ packages: '@esbuild/win32-x64': 0.16.17 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 + '@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: true /escalade@3.1.1: @@ -3756,31 +3743,23 @@ packages: 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 + es-iterator-helpers: 1.0.14 eslint: 8.48.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 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.9 dev: true /eslint-scope@7.2.2: @@ -3817,7 +3796,7 @@ packages: '@eslint-community/regexpp': 4.8.0 '@eslint/eslintrc': 2.1.2 '@eslint/js': 8.48.0 - '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -3883,11 +3862,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'} @@ -3950,6 +3924,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'} @@ -4094,8 +4073,8 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 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 @@ -4132,9 +4111,9 @@ packages: engines: {node: '>=6'} 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: @@ -4189,13 +4168,6 @@ 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'} @@ -4359,7 +4331,7 @@ packages: lru-cache: 7.18.3 dev: true - /htmlnano@2.0.4(svgo@2.8.0): + /htmlnano@2.0.4(svgo@2.8.0)(typescript@5.2.2): resolution: {integrity: sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==} peerDependencies: cssnano: ^6.0.0 @@ -4388,10 +4360,12 @@ packages: uncss: optional: true dependencies: - cosmiconfig: 8.2.0 + cosmiconfig: 8.3.4(typescript@5.2.2) posthtml: 0.16.6 svgo: 2.8.0 timsort: 0.3.0 + transitivePeerDependencies: + - typescript /htmlparser2@7.2.0: resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} @@ -4476,8 +4450,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: @@ -4735,7 +4709,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.732 package-name-conflict: 1.0.3 validate-npm-package-name: 3.0.0 dev: true @@ -4914,14 +4888,13 @@ 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.1: + resolution: {integrity: sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==} dependencies: define-properties: 1.2.0 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 dev: true /js-tokens@4.0.0: @@ -4960,10 +4933,10 @@ 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: @@ -5258,13 +5231,6 @@ 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'} @@ -5274,8 +5240,8 @@ packages: /mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - /meow@12.1.0: - resolution: {integrity: sha512-SvSqzS5ktjGoySdCwxQI16iO/ID1LtxM03QvJ4FF2H5cCtXLN7YbfKBCL9btqXSSuJ5TNG4UH6wvWtXZuvgvrw==} + /meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} dev: true @@ -5328,13 +5294,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'} @@ -5373,8 +5332,8 @@ packages: optionalDependencies: msgpackr-extract: 3.0.2 - /msgpackr@1.9.7: - resolution: {integrity: sha512-baUNaLvKQvVhzfWTNO07njwbZK1Lxjtb0P1JL6/EhXdLTHzR57/mZqqJC39TtQKvOmkJA4pcejS4dbk7BDgLLA==} + /msgpackr@1.9.8: + resolution: {integrity: sha512-dQvfSMSIQ9kXXQTlJFDq+f7J3RrmydhI6Tn23lFy7BItp7zDR3nH70CHk2QIfs2copLSaKRv/PPjMbNSTFu2hA==} optionalDependencies: msgpackr-extract: 3.0.2 @@ -5391,10 +5350,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 @@ -5427,6 +5382,7 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: true /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -5474,14 +5430,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.4(typescript@5.2.2) + del: 7.1.0 escape-goat: 4.0.0 escape-string-regexp: 5.0.0 execa: 7.2.0 @@ -5499,7 +5455,7 @@ 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 onetime: 6.0.0 @@ -5516,6 +5472,7 @@ packages: terminal-link: 3.0.0 update-notifier: 6.0.2 transitivePeerDependencies: + - typescript - zen-observable - zenObservable dev: true @@ -5587,8 +5544,8 @@ packages: 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 @@ -5596,8 +5553,8 @@ packages: es-abstract: 1.22.1 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 @@ -5605,15 +5562,15 @@ packages: es-abstract: 1.22.1 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 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 @@ -5806,7 +5763,7 @@ packages: resolution: {integrity: sha512-DPBNWSUWC0wPofXeNThao0uP4a93J7r90UyhagmJS0QcacTTkorZwXYsOop70phn1hKdcf/2e9lJIhazS8bx5A==} dev: true - /parcel@2.9.3: + /parcel@2.9.3(typescript@5.2.2): resolution: {integrity: sha512-2GTVocFkwblV/TIg9AmT7TI2fO4xdWkyN8aFUEVtiVNWt96GTR3FgQyHFValfCbcj1k9Xf962Ws2hYXYUr9k1Q==} engines: {node: '>= 12.0.0'} hasBin: true @@ -5814,7 +5771,7 @@ packages: '@parcel/core': optional: true dependencies: - '@parcel/config-default': 2.9.3(@parcel/core@2.9.3) + '@parcel/config-default': 2.9.3(@parcel/core@2.9.3)(typescript@5.2.2) '@parcel/core': 2.9.3 '@parcel/diagnostic': 2.9.3 '@parcel/events': 2.9.3 @@ -5836,6 +5793,7 @@ packages: - relateurl - srcset - terser + - typescript - uncss dev: true @@ -5868,7 +5826,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 @@ -5959,9 +5917,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 @@ -6081,8 +6039,8 @@ 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 @@ -6158,13 +6116,6 @@ 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 @@ -6263,8 +6214,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 @@ -6328,8 +6279,8 @@ packages: engines: {node: '>=8'} dev: true - /shiki@0.14.3: - resolution: {integrity: sha512-U3S/a+b0KS+UkTyMjoNojvTgrBHjgp7L6ovhFVZsXmBGnVdQ4K4U9oK0z63w538S91ATngv1vXigHCSWOwnr+g==} + /shiki@0.14.4: + resolution: {integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==} dependencies: ansi-sequence-parser: 1.1.1 jsonc-parser: 3.2.0 @@ -6422,7 +6373,7 @@ packages: /standalone-electron-types@1.0.0: resolution: {integrity: sha512-0HOi/tlTz3mjWhsAz4uRbpQcHMZ+ifj1JzWW9nugykOHClBBG77ps8QinrzX1eow4Iw2pnC+RFaSYRgufF4BOg==} dependencies: - '@types/node': 18.17.11 + '@types/node': 18.17.14 dev: false /string-width@1.0.2: @@ -6458,8 +6409,8 @@ 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.9: + resolution: {integrity: sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -6471,8 +6422,8 @@ packages: 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 @@ -6480,16 +6431,16 @@ packages: es-abstract: 1.22.1 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 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 @@ -6654,6 +6605,16 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /ts-api-utils@1.0.2(typescript@5.2.2): + resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} + 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==} @@ -6662,22 +6623,12 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /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.12.8: + resolution: {integrity: sha512-Lt9KYaRGF023tlLInPj8rgHwsZU8qWLBj4iRXNWxTfjIkU7canGL806AqKear1j722plHuiYNcL2ZCo6uS9UJA==} hasBin: true dependencies: '@esbuild-kit/cjs-loader': 2.4.2 - '@esbuild-kit/core-utils': 3.1.0 + '@esbuild-kit/core-utils': 3.2.2 '@esbuild-kit/esm-loader': 2.5.5 optionalDependencies: fsevents: 2.3.3 @@ -6712,6 +6663,11 @@ packages: engines: {node: '>=14.16'} dev: true + /type-fest@4.3.1: + resolution: {integrity: sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==} + engines: {node: '>=16'} + dev: true + /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -6755,18 +6711,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.1(typescript@5.2.2): + resolution: {integrity: sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==} + 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.4 + typescript: 5.2.2 dev: true /types-eslintrc@1.0.3: @@ -6786,11 +6742,10 @@ 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 /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -6801,13 +6756,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'} @@ -6920,12 +6868,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==} @@ -6941,7 +6891,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 @@ -7034,8 +6984,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.0: + resolution: {integrity: sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -7047,11 +6997,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'} @@ -7099,11 +7044,11 @@ packages: resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} 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.48.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' diff --git a/scripts/build.mts b/scripts/build.mts index b8d0c4b5f..a4389fa46 100644 --- a/scripts/build.mts +++ b/scripts/build.mts @@ -78,7 +78,7 @@ Promise.all([ platform: "node", target: `node${NODE_VERSION}`, outfile: "dist/main.js", - external: ["electron"], + external: ["electron", "original-fs"], }), // Preload esbuild.build({ diff --git a/src/main/index.ts b/src/main/index.ts index f14be6c8c..92d04769f 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..1a1cef52a 100644 --- a/src/main/ipc/installer.ts +++ b/src/main/ipc/installer.ts @@ -9,11 +9,15 @@ 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 writeFile = promisify(originalWriteFile); const octokit = new Octokit(); @@ -170,6 +174,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 +202,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..d821560c3 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,20 @@ 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`); + console.log(resolved, SETTINGS_DIR, resolved.startsWith(SETTINGS_DIR)); + 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 +33,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 +65,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..84f24b563 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 plugin 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/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/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/util.tsx b/src/renderer/coremods/installer/util.tsx index 3188528e3..516de6b7b 100644 --- a/src/renderer/coremods/installer/util.tsx +++ b/src/renderer/coremods/installer/util.tsx @@ -18,7 +18,7 @@ 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 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/icons/Pin.tsx b/src/renderer/coremods/settings/icons/Pin.tsx new file mode 100644 index 000000000..86b9a7517 --- /dev/null +++ b/src/renderer/coremods/settings/icons/Pin.tsx @@ -0,0 +1,5 @@ +export default (): React.ReactElement => ( + + + +); diff --git a/src/renderer/coremods/settings/icons/Popout.tsx b/src/renderer/coremods/settings/icons/Popout.tsx new file mode 100644 index 000000000..35542e904 --- /dev/null +++ b/src/renderer/coremods/settings/icons/Popout.tsx @@ -0,0 +1,5 @@ +export default (): React.ReactElement => ( + + + +); diff --git a/src/renderer/coremods/settings/icons/Unpin.tsx b/src/renderer/coremods/settings/icons/Unpin.tsx new file mode 100644 index 000000000..1dcf38103 --- /dev/null +++ b/src/renderer/coremods/settings/icons/Unpin.tsx @@ -0,0 +1,18 @@ +export default (): React.ReactElement => ( + + + + + + + + + + +); diff --git a/src/renderer/coremods/settings/icons/index.ts b/src/renderer/coremods/settings/icons/index.ts index e6c8be8d6..3b99bb216 100644 --- a/src/renderer/coremods/settings/icons/index.ts +++ b/src/renderer/coremods/settings/icons/index.ts @@ -4,6 +4,9 @@ import Link from "./Link"; import Reload from "./Reload"; import Settings from "./Settings"; import Trash from "./Trash"; +import Popout from "./Popout"; +import Pin from "./Pin"; +import Unpin from "./Unpin"; export default { Discord, @@ -12,4 +15,7 @@ export default { Reload, Settings, Trash, + Popout, + Pin, + Unpin, }; diff --git a/src/renderer/coremods/settings/index.tsx b/src/renderer/coremods/settings/index.tsx index 080b9786b..772fb20e4 100644 --- a/src/renderer/coremods/settings/index.tsx +++ b/src/renderer/coremods/settings/index.tsx @@ -4,7 +4,7 @@ import { Injector } from "@replugged"; import { filters, waitForModule } from "src/renderer/modules/webpack"; import type { Section as SectionType } from "src/types/coremods/settings"; import { Divider, Header, Section, insertSections, settingsTools } from "./lib"; -import { General, Plugins, QuickCSS, Themes, Updater } from "./pages"; +import { ConnectedQuickCSS, General, Plugins, Themes, Updater } from "./pages"; const injector = new Injector(); @@ -47,7 +47,7 @@ export function start(): void { Section({ name: "rp-quickcss", label: () => Messages.REPLUGGED_QUICKCSS, - elem: QuickCSS, + elem: ConnectedQuickCSS as unknown as (args: unknown) => React.ReactElement, }), Section({ name: "rp-plugins", 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.css b/src/renderer/coremods/settings/pages/QuickCSS.css index 3c10b8df6..d76c20502 100644 --- a/src/renderer/coremods/settings/pages/QuickCSS.css +++ b/src/renderer/coremods/settings/pages/QuickCSS.css @@ -1,8 +1,17 @@ +#replugged-quickcss-wrapper { + color: var(--text-normal); +} + +#replugged-quickcss-wrapper[data-popout="true"] { + width: 100% !important; +} + #replugged-quickcss-wrapper .cm-editor { border: 1px solid transparent; border-radius: 4px; border: 1px solid var(--background-tertiary); outline: none !important; + max-height: calc(100vh - 52px); } #replugged-quickcss-wrapper .cm-gutters { @@ -25,4 +34,47 @@ #replugged-quickcss-wrapper .cm-scroller { overflow: auto; + max-height: 75vh; +} + +/* TODO: Fix the height not working in popout */ +#replugged-quickcss-wrapper[data-popout="true"] .cm-scroller { + max-height: 100%; +} + +#replugged-quickcss-wrapper .cm-scroller::-webkit-scrollbar { + width: 10px; + height: 0px; + padding: 10px; +} + +#replugged-quickcss-wrapper .cm-scroller::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-thin-thumb); + border-radius: 10px; +} + +.replugged-quickcss-header { + height: 30px; + color: var(--text-normal); + display: flex; + align-items: center; + justify-content: space-between; + font-size: 14px; + padding: 7px 15px; + background-color: var(--background-secondary); +} +/* Why do these have to be different in different windows.. */ +#replugged-quickcss-wrapper[data-popout="true"] .replugged-quickcss-header { + height: 16px; +} + +.replugged-quickcss-header span, +.replugged-quickcss-header div, +.replugged-quickcss-header svg { + width: 100%; + height: 100%; +} + +[class^="content-2qc4CV"]:has(> #replugged-quickcss-wrapper) { + display: block; } diff --git a/src/renderer/coremods/settings/pages/QuickCSS.tsx b/src/renderer/coremods/settings/pages/QuickCSS.tsx index 59d96e0ce..02095b39c 100644 --- a/src/renderer/coremods/settings/pages/QuickCSS.tsx +++ b/src/renderer/coremods/settings/pages/QuickCSS.tsx @@ -1,13 +1,19 @@ -import { React, toast } from "@common"; +import { React, flux, toast } from "@common"; import { Messages } from "@common/i18n"; import { EditorView, basicSetup } from "codemirror"; import { EditorState } from "@codemirror/state"; import { css } from "@codemirror/lang-css"; import { githubDark, githubLight } from "./codemirror-github"; import { webpack } from "@replugged"; -import { Button, Divider, Flex, Text } from "@components"; -import "./QuickCSS.css"; +import { Button, ButtonItem, Clickable, Divider, Flex, Text, Tooltip } from "@components"; import { generalSettings } from "./General"; +import { ReactComponent } from "src/types"; +import { Store } from "@common/flux"; +import Popout from "../icons/Popout"; +import Unpin from "../icons/Unpin"; +import Pin from "../icons/Pin"; + +import "./QuickCSS.css"; interface UseCodeMirrorOptions { value?: string; @@ -22,6 +28,34 @@ type ThemeModule = { removeChangeListener: (listener: () => unknown) => unknown; }; +const PopoutModule = await webpack.waitForModule( + webpack.filters.bySource('type:"POPOUT_WINDOW_OPEN"'), +)!; +const openPopout = webpack.getFunctionBySource< + (key: string, render: React.ComponentType, features: Record) => void +>(PopoutModule, "POPOUT_WINDOW_OPEN")!; +const closePopout = webpack.getFunctionBySource<(key: string) => void>( + PopoutModule, + "POPOUT_WINDOW_CLOSE", +)!; + +const setAlwaysOnTop = webpack.getFunctionBySource<(key: string, alwaysOnTop: boolean) => void>( + PopoutModule, + "POPOUT_WINDOW_SET_ALWAYS_ON_TOP", +)!; + +const PopoutWindowStore = webpack.getByStoreName< + Store & { + getWindow: (key: string) => Window; + getWindowOpen: (key: string) => boolean; + getIsAlwaysOnTop: (key: string) => boolean; + } +>("PopoutWindowStore")!; + +const PopoutWindow = webpack.getBySource>( + ".EMBEDDED_ACTIVITIES_ARE_YOU_SURE_WANT_TO_LEAVE", +)!; + function useTheme(): "light" | "dark" { const [theme, setTheme] = React.useState<"light" | "dark">("dark"); @@ -57,8 +91,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 +127,7 @@ function useCodeMirror({ value: initialValueParam, onChange, container }: UseCod container.setAttribute("data-theme", theme); return () => { - newView?.destroy(); + newView.destroy(); setView(undefined); }; }, [container, theme, update]); @@ -110,7 +143,7 @@ function useCodeMirror({ value: initialValueParam, onChange, container }: UseCod return { value, setValue: customSetValue }; } -export const QuickCSS = (): React.ReactElement => { +const QuickCSS = (props: { popout: boolean } & Record): React.ReactElement => { const ref = React.useRef(null); const { value, setValue } = useCodeMirror({ container: ref.current, @@ -170,24 +203,100 @@ export const QuickCSS = (): React.ReactElement => { if (autoApply) setReloadTimer(setTimeout(reload, 500)); }, [value]); + if (props.popout) { + React.useEffect(() => { + const window = PopoutWindowStore?.getWindow("DISCORD_REPLUGGED_QUICKCSS"); + + let el = window.document.createElement("link"); + el.rel = "stylesheet"; + el.href = `replugged://renderer.css?t=${Date.now()}`; + window.document.head.appendChild(el); + }, []); + } + + const [alwaysOnTop, setAlwaysOnTop_] = React.useState(props.popoutOnTop); + return ( <> - - {Messages.REPLUGGED_QUICKCSS} -
- {autoApply ? null : ( - - )} - + {!props.popout ? ( + <> + + {Messages.REPLUGGED_QUICKCSS} +
+ {autoApply ? null : ( + + )} + +
+
+ + + ) : null} + + {!props.popout && props.isPopoutOpen ? ( + { + closePopout("DISCORD_REPLUGGED_QUICKCSS"); + }}> + {Messages.REPLUGGED_QUICKCSS_POPPED_OUT} + + ) : ( +
+
+ {props.popout ? ( + + { + setAlwaysOnTop("DISCORD_REPLUGGED_QUICKCSS", !alwaysOnTop); + setAlwaysOnTop_(!alwaysOnTop); + }}> + {alwaysOnTop ? : } + + + ) : ( + + { + openPopout( + "DISCORD_REPLUGGED_QUICKCSS", + () => ( + + + + ), + {}, + ); + }}> + + + + )} +
+
- - -
+ )} ); }; + +export const ConnectedQuickCSS = flux.connectStores< + { popout: boolean }, + { popout: boolean; isPopoutOpen: boolean } +>([PopoutWindowStore], (props) => { + return { + isPopoutOpen: PopoutWindowStore.getWindowOpen("DISCORD_REPLUGGED_QUICKCSS"), + popoutOnTop: PopoutWindowStore.getIsAlwaysOnTop("DISCORD_REPLUGGED_QUICKCSS"), + ...props, + }; +})(QuickCSS); diff --git a/src/renderer/managers/coremods.ts b/src/renderer/managers/coremods.ts index 39771892a..a0ec8744c 100644 --- a/src/renderer/managers/coremods.ts +++ b/src/renderer/managers/coremods.ts @@ -35,11 +35,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 7bc4ed9b5..74f035b3f 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/quick-css.ts b/src/renderer/managers/quick-css.ts index ac231b149..f89f09a9c 100644 --- a/src/renderer/managers/quick-css.ts +++ b/src/renderer/managers/quick-css.ts @@ -12,6 +12,5 @@ export function unload(): void { } export function reload(): void { - unload(); - load(); + if (el) el.href = `replugged://quickcss/main.css?t=${Date.now()}`; } 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/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/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/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/webpack/get-modules.ts b/src/renderer/modules/webpack/get-modules.ts index e2a282486..c9c0d57d2 100644 --- a/src/renderer/modules/webpack/get-modules.ts +++ b/src/renderer/modules/webpack/get-modules.ts @@ -81,6 +81,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 c6182c236..62817c752 100644 --- a/src/renderer/modules/webpack/helpers.ts +++ b/src/renderer/modules/webpack/helpers.ts @@ -106,7 +106,7 @@ export function getByProps( ...args: [P[], GetModuleOptions] | 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 result = typeof args.at(-1) === "object" @@ -151,7 +151,7 @@ export async function waitForProps( ...args: [P[], WaitForOptions] | 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 raw = typeof args[0] === "string" ? false : (args[1] as WaitForOptions | undefined)?.raw; const result = await (typeof args.at(-1) === "object" ? waitForModule(filters.byProps(...props), args.at(-1) as WaitForOptions) 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/index.ts b/src/types/index.ts index 37ea7a987..1bc3ebbaf 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; }; }