diff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml new file mode 100644 index 0000000..5287c23 --- /dev/null +++ b/.github/workflows/meta.yml @@ -0,0 +1,38 @@ +name: Update metainfo on release + +on: + release: + types: + - published + workflow_dispatch: + +jobs: + update: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 # Install pnpm using packageManager key in package.json + + - name: Use Node.js 18.18.2 + uses: actions/setup-node@v3 + with: + node-version: 18.18.2 + + - name: Install dependencies + run: pnpm i + + - name: Update metainfo + run: pnpm updateMeta + + - name: Commit and merge in changes + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git checkout -b ci/meta-update + git add meta/dev.vencord.Vesktop.metainfo.xml + git commit -m "Insert release changes for ${{ github.event.release.tag_name }}" + git push origin ci/meta-update + gh pr create -B main -H ci/meta-update -t "Metainfo for ${{ github.event.release.tag_name }}" -b "This PR updates the metainfo for release ${{ github.event.release.tag_name }}. @lewisakura @Vendicated" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 459edac..6054a10 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,17 +12,32 @@ jobs: strategy: matrix: os: [macos-latest, ubuntu-latest, windows-latest] + include: + - os: macos-latest + platform: mac + - os: ubuntu-latest + platform: linux + - os: windows-latest + platform: windows steps: - - name: Check out Git repository - uses: actions/checkout@v3 + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 # Install pnpm using packageManager key in package.json - - uses: actions/setup-node@v3 + - name: Use Node.js 18.18.2 + uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 18.18.2 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm build - name: Run Electron Builder - uses: samuelmeuli/action-electron-builder@e4b12cd06ddf023422f1ac4e39632bd76f6e6928 - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE: true + run: | + pnpm electron-builder --${{ matrix.platform }} --publish always + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index efd7fff..6d88280 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,10 +14,10 @@ jobs: - uses: actions/checkout@v3 - uses: pnpm/action-setup@v2 # Install pnpm using packageManager key in package.json - - name: Use Node.js 18 + - name: Use Node.js 18.18.2 uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 18.18.2 cache: "pnpm" - name: Install dependencies diff --git a/.vscode/settings.json b/.vscode/settings.json index e729f08..1a277b4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,25 +1,25 @@ -{ - "editor.formatOnSave": true, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true - }, - "[typescript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[javascript]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[typescriptreact]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[javascriptreact]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "[jsonc]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - }, - "cSpell.words": ["Vesktop"] -} +{ + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "cSpell.words": ["Vesktop"] +} diff --git a/README.md b/README.md index 5d2ae0e..c63c163 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ Vesktop is a cross platform desktop app aiming to give you a snappier Discord ex Bug reports, feature requests & contributions are highly appreciated!! -![image](https://user-images.githubusercontent.com/45497981/235024615-94565eaf-f412-4384-a3f5-d8cde7458f6d.png) +![](https://github.com/Vencord/Vesktop/assets/45497981/8608a899-96a9-4027-9725-2cb02ba189fd) +![grafik](https://github.com/Vencord/Vesktop/assets/45497981/8701e5de-52c4-4346-a990-719cb971642e) + ## Installing @@ -21,6 +23,8 @@ Download and run Vesktop-VERSION.dmg from [releases](https://github.com/Vencord/ ### Linux +[![](https://dl.flathub.org/assets/badges/flathub-badge-en.svg)](https://flathub.org/apps/dev.vencord.Vesktop) + #### Arch based Install [vencord-desktop-git](https://aur.archlinux.org/packages/vencord-desktop-git) from the AUR using your favourite AUR helper, for example [yay](https://github.com/Jguer/yay) @@ -37,7 +41,7 @@ Download Vesktop-VERSION.rpm from [releases](https://github.com/Vencord/Vesktop/ Either download Vesktop-VERSION.AppImage and just run it directly or grab Vesktop-VERSION.tar.gz, extract it somewhere and run `vencorddesktop`. -A flatpak is planned, if you want packages for other repos, feel free to create them and they can be linked as unofficial here +If other packages are created, feel free to open an issue and we'll link them here. ## Building @@ -64,7 +68,3 @@ pnpm package:dir ## Motivation The official Discord Desktop app is very resource heavy compared to Discord in your Browser. There are multiple alternative Electron apps (ArmCord, WebCord, probably more) that prove how much of a performance gain you can gain by using a custom app. ArmCord already supports Vencord but makes it pretty limited for us. Making our own standalone app gives us much more control. - -This is just a random idea I (V) got, and might not actually ever be finished heh - -Gluon also seems very attractive for this because of how lightweight it can be and because unlike electron, streaming just works out of the box like in any chromium browser. However, at the time of writing this, it still lacks some features necessary to make it work (synchronous ipc or a way to get node process variables into the onLoad function for instance, plus onLoad seems to load a little too late sometimes) diff --git a/meta/dev.vencord.Vesktop.metainfo.xml b/meta/dev.vencord.Vesktop.metainfo.xml new file mode 100644 index 0000000..d897226 --- /dev/null +++ b/meta/dev.vencord.Vesktop.metainfo.xml @@ -0,0 +1,167 @@ + + + + dev.vencord.Vesktop + Vesktop + Snappier Discord app with Vencord + Vencord Contributors + dev.vencord.Vesktop.desktop + CC0-1.0 + GPL-3.0 + Vencord + +

Vesktop is a cross platform desktop app aiming to give you a snappier Discord experience with Vencord pre-installed.

+

Vesktop comes bundled with Venmic, a purpose-built library to provide functioning audio screenshare.

+
+ + + Vencord settings page and about window open + https://vencord.dev/assets/screenshots/vesktop-1-appstream.png + + + A dialog showing screenshare options + https://vencord.dev/assets/screenshots/vesktop-2-appstream.png + + + A screenshot of a Discord server + https://vencord.dev/assets/screenshots/vesktop-3-appstream.png + + + + + https://github.com/Vencord/Vesktop/releases/tag/v0.4.4 + +

What's Changed

+
    +
  • improve venmic system compatibility by @Curve
  • +
  • Update steamdeck controller layout by @AAGaming00
  • +
  • feat: Add option to disable smooth scrolling by @ZirixCZ
  • +
  • unblur shiggy in splash screen by @viacoro
  • +
  • update electron & arrpc @D3SOX
  • +
+
+
+ + https://github.com/Vencord/Vesktop/releases/tag/v0.4.3 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.4.2 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.4.1 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.4.0 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.3.3 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.3.2 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.3.1 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.3.0 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.9 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.8 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.7 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.6 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.5 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.4 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.3 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.2 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.1 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.2.0 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.9 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.8 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.7 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.6 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.5 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.4 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.3 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.2 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.1 + + + https://github.com/Vencord/Vesktop/releases/tag/v0.1.0 + +
+ https://vencord.dev/ + https://github.com/Vencord/Vesktop/issues + https://vencord.dev/faq/ + https://github.com/Vencord/Vesktop/issues + https://github.com/sponsors/Vendicated + https://github.com/Vencord/Vesktop + + InstantMessaging + AudioVideo + + + pointing + keyboard + 420 + always + + + voice + 760 + 1200 + always + + + always + + + intense + intense + intense + intense + + + Discord + Vencord + Vesktop + Privacy + Mod + +
\ No newline at end of file diff --git a/package.json b/package.json index bf4ba93..fb23c98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "VencordDesktop", - "version": "0.4.3", + "version": "0.4.4", "private": true, "description": "", "keywords": [], @@ -20,26 +20,27 @@ "start:watch": "pnpm build:dev && tsx scripts/startWatch.mts", "test": "pnpm lint && pnpm testTypes", "testTypes": "tsc --noEmit", - "watch": "pnpm build --watch" + "watch": "pnpm build --watch", + "updateMeta": "tsx scripts/utils/updateMeta.mts" }, "dependencies": { - "arrpc": "github:OpenAsar/arrpc#89f4da610ccfac93f461826a446a17cd3b23953d" + "arrpc": "github:OpenAsar/arrpc#3e22fd776273afaa4a80c51deb86077ffdd4d2ae" }, "optionalDependencies": { - "@vencord/venmic": "^2.1.2" + "@vencord/venmic": "^2.1.3" }, "devDependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@types/node": "^20.8.4", - "@types/react": "^18.2.28", - "@typescript-eslint/eslint-plugin": "^6.7.5", - "@typescript-eslint/parser": "^6.7.5", + "@types/node": "^20.10.0", + "@types/react": "^18.2.39", + "@typescript-eslint/eslint-plugin": "^6.13.1", + "@typescript-eslint/parser": "^6.13.1", "@vencord/types": "^0.1.2", "dotenv": "^16.3.1", - "electron": "^27.0.0", - "electron-builder": "^24.6.4", - "esbuild": "^0.19.4", - "eslint": "^8.51.0", + "electron": "^27.1.2", + "electron-builder": "^24.9.1", + "esbuild": "^0.19.8", + "eslint": "^8.54.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-license-header": "^0.6.0", @@ -47,13 +48,14 @@ "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^3.0.0", - "prettier": "^3.0.3", + "prettier": "^3.1.0", "source-map-support": "^0.5.21", - "tsx": "^3.13.0", - "type-fest": "^4.4.0", - "typescript": "^5.2.2" + "tsx": "^4.6.0", + "type-fest": "^4.8.2", + "typescript": "^5.3.2", + "xml-formatter": "^3.6.0" }, - "packageManager": "pnpm@8.6.11", + "packageManager": "pnpm@8.11.0", "engines": { "node": ">=18", "pnpm": ">=8" @@ -109,7 +111,6 @@ "Type": "Application", "Categories": "Network;InstantMessaging;Chat;", "Keywords": "discord;vencord;electron;chat;", - "WMClass": "VencordDesktop", "StartupWMClass": "VencordDesktop" } }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3d4db8..6d089f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,30 +6,30 @@ settings: dependencies: arrpc: - specifier: github:OpenAsar/arrpc#89f4da610ccfac93f461826a446a17cd3b23953d - version: github.com/OpenAsar/arrpc/89f4da610ccfac93f461826a446a17cd3b23953d + specifier: github:OpenAsar/arrpc#3e22fd776273afaa4a80c51deb86077ffdd4d2ae + version: github.com/OpenAsar/arrpc/3e22fd776273afaa4a80c51deb86077ffdd4d2ae optionalDependencies: '@vencord/venmic': - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.1.3 + version: 2.1.3 devDependencies: '@fal-works/esbuild-plugin-global-externals': specifier: ^2.1.2 version: 2.1.2 '@types/node': - specifier: ^20.8.4 - version: 20.8.4 + specifier: ^20.10.0 + version: 20.10.0 '@types/react': - specifier: ^18.2.28 - version: 18.2.28 + specifier: ^18.2.39 + version: 18.2.39 '@typescript-eslint/eslint-plugin': - specifier: ^6.7.5 - version: 6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.13.1 + version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2) '@typescript-eslint/parser': - specifier: ^6.7.5 - version: 6.7.5(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.13.1 + version: 6.13.1(eslint@8.54.0)(typescript@5.3.2) '@vencord/types': specifier: ^0.1.2 version: 0.1.2 @@ -37,20 +37,20 @@ devDependencies: specifier: ^16.3.1 version: 16.3.1 electron: - specifier: ^27.0.0 - version: 27.0.0 + specifier: ^27.1.2 + version: 27.1.2 electron-builder: - specifier: ^24.6.4 - version: 24.6.4 + specifier: ^24.9.1 + version: 24.9.1 esbuild: - specifier: ^0.19.4 - version: 0.19.4 + specifier: ^0.19.8 + version: 0.19.8 eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.54.0 + version: 8.54.0 eslint-config-prettier: specifier: ^9.0.0 - version: 9.0.0(eslint@8.51.0) + version: 9.0.0(eslint@8.54.0) eslint-import-resolver-alias: specifier: ^1.1.2 version: 1.1.2(eslint-plugin-import@2.29.0) @@ -59,36 +59,39 @@ devDependencies: version: 0.6.0 eslint-plugin-path-alias: specifier: ^1.0.0 - version: 1.0.0(eslint@8.51.0) + version: 1.0.0(eslint@8.54.0) eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3) + version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.54.0)(prettier@3.1.0) eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.51.0) + version: 10.0.0(eslint@8.54.0) eslint-plugin-unused-imports: specifier: ^3.0.0 - version: 3.0.0(@typescript-eslint/eslint-plugin@6.7.5)(eslint@8.51.0) + version: 3.0.0(@typescript-eslint/eslint-plugin@6.13.1)(eslint@8.54.0) prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.1.0 + version: 3.1.0 source-map-support: specifier: ^0.5.21 version: 0.5.21 tsx: - specifier: ^3.13.0 - version: 3.13.0 + specifier: ^4.6.0 + version: 4.6.0 type-fest: - specifier: ^4.4.0 - version: 4.4.0 + specifier: ^4.8.2 + version: 4.8.2 typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.3.2 + version: 5.3.2 + xml-formatter: + specifier: ^3.6.0 + version: 3.6.0 packages: - /7zip-bin@5.1.1: - resolution: {integrity: sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==} + /7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} dev: true /@aashutoshrathi/word-wrap@1.2.6: @@ -181,8 +184,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.4: - resolution: {integrity: sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==} + /@esbuild/android-arm64@0.19.8: + resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -199,8 +202,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.4: - resolution: {integrity: sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==} + /@esbuild/android-arm@0.19.8: + resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -217,8 +220,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.4: - resolution: {integrity: sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==} + /@esbuild/android-x64@0.19.8: + resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -235,8 +238,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.4: - resolution: {integrity: sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==} + /@esbuild/darwin-arm64@0.19.8: + resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -253,8 +256,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.4: - resolution: {integrity: sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==} + /@esbuild/darwin-x64@0.19.8: + resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -271,8 +274,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.4: - resolution: {integrity: sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==} + /@esbuild/freebsd-arm64@0.19.8: + resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -289,8 +292,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.4: - resolution: {integrity: sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==} + /@esbuild/freebsd-x64@0.19.8: + resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -307,8 +310,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.4: - resolution: {integrity: sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==} + /@esbuild/linux-arm64@0.19.8: + resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -325,8 +328,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.4: - resolution: {integrity: sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==} + /@esbuild/linux-arm@0.19.8: + resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -343,8 +346,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.4: - resolution: {integrity: sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==} + /@esbuild/linux-ia32@0.19.8: + resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -361,8 +364,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.4: - resolution: {integrity: sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==} + /@esbuild/linux-loong64@0.19.8: + resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -379,8 +382,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.4: - resolution: {integrity: sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==} + /@esbuild/linux-mips64el@0.19.8: + resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -397,8 +400,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.4: - resolution: {integrity: sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==} + /@esbuild/linux-ppc64@0.19.8: + resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -415,8 +418,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.4: - resolution: {integrity: sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==} + /@esbuild/linux-riscv64@0.19.8: + resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -433,8 +436,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.4: - resolution: {integrity: sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==} + /@esbuild/linux-s390x@0.19.8: + resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -451,8 +454,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.4: - resolution: {integrity: sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==} + /@esbuild/linux-x64@0.19.8: + resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -469,8 +472,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.4: - resolution: {integrity: sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==} + /@esbuild/netbsd-x64@0.19.8: + resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -487,8 +490,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.4: - resolution: {integrity: sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==} + /@esbuild/openbsd-x64@0.19.8: + resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -505,8 +508,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.4: - resolution: {integrity: sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==} + /@esbuild/sunos-x64@0.19.8: + resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -523,8 +526,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.4: - resolution: {integrity: sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==} + /@esbuild/win32-arm64@0.19.8: + resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -541,8 +544,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.4: - resolution: {integrity: sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==} + /@esbuild/win32-ia32@0.19.8: + resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -559,8 +562,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.4: - resolution: {integrity: sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==} + /@esbuild/win32-x64@0.19.8: + resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -568,13 +571,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.54.0 eslint-visitor-keys: 3.4.3 dev: true @@ -583,8 +586,8 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -600,8 +603,8 @@ packages: - supports-color dev: true - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.54.0: + resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -609,11 +612,11 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -625,8 +628,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@malept/cross-spawn-promise@1.1.1: @@ -703,7 +706,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.2 '@types/keyv': 3.1.4 - '@types/node': 20.8.4 + '@types/node': 20.10.0 '@types/responselike': 1.0.1 dev: true @@ -716,7 +719,7 @@ packages: /@types/fs-extra@9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 20.8.4 + '@types/node': 20.10.0 dev: true /@types/http-cache-semantics@4.0.2: @@ -734,7 +737,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.8.4 + '@types/node': 20.10.0 dev: true /@types/lodash@4.14.199: @@ -749,17 +752,17 @@ packages: resolution: {integrity: sha512-t3rNFBgJRugIhackit2mVcLfF6IRc0JE4oeizPQL8Zrm8n2WY/0wOdpOPhdtG0V9Q2TlW/axbF1MJ6z+Yj/kKQ==} dev: true - /@types/node@20.8.4: - resolution: {integrity: sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==} + /@types/node@20.10.0: + resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==} dependencies: - undici-types: 5.25.3 + undici-types: 5.26.5 dev: true /@types/plist@3.0.4: resolution: {integrity: sha512-pTa9xUFQFM9WJGSWHajYNljD+DbVylE1q9IweK1LBhUYJdJ28YNU8j3KZ4Q1Qw+cSl4+QLLLOVmqNjhhvVO8fA==} requiresBuild: true dependencies: - '@types/node': 20.8.4 + '@types/node': 20.10.0 xmlbuilder: 15.1.1 dev: true optional: true @@ -771,7 +774,7 @@ packages: /@types/react-dom@18.2.13: resolution: {integrity: sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==} dependencies: - '@types/react': 18.2.28 + '@types/react': 18.2.39 dev: true /@types/react@17.0.2: @@ -781,8 +784,8 @@ packages: csstype: 3.1.2 dev: true - /@types/react@18.2.28: - resolution: {integrity: sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==} + /@types/react@18.2.39: + resolution: {integrity: sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==} dependencies: '@types/prop-types': 15.7.8 '@types/scheduler': 0.16.4 @@ -792,7 +795,7 @@ packages: /@types/responselike@1.0.1: resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==} dependencies: - '@types/node': 20.8.4 + '@types/node': 20.10.0 dev: true /@types/scheduler@0.16.4: @@ -813,12 +816,12 @@ packages: resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==} requiresBuild: true dependencies: - '@types/node': 20.8.4 + '@types/node': 20.10.0 dev: true optional: true - /@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==} + /@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -829,25 +832,25 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/type-utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/parser': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/type-utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.1 debug: 4.3.4 - eslint: 8.51.0 + eslint: 8.54.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==} + /@typescript-eslint/parser@6.13.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -856,27 +859,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + '@typescript-eslint/visitor-keys': 6.13.1 debug: 4.3.4 - eslint: 8.51.0 - typescript: 5.2.2 + eslint: 8.54.0 + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.7.5: - resolution: {integrity: sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==} + /@typescript-eslint/scope-manager@6.13.1: + resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/visitor-keys': 6.13.1 dev: true - /@typescript-eslint/type-utils@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==} + /@typescript-eslint/type-utils@6.13.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -885,23 +888,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + '@typescript-eslint/utils': 6.13.1(eslint@8.54.0)(typescript@5.3.2) debug: 4.3.4 - eslint: 8.51.0 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + eslint: 8.54.0 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.7.5: - resolution: {integrity: sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==} + /@typescript-eslint/types@6.13.1: + resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.7.5(typescript@5.2.2): - resolution: {integrity: sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==} + /@typescript-eslint/typescript-estree@6.13.1(typescript@5.3.2): + resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -909,59 +912,63 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/visitor-keys': 6.13.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + ts-api-utils: 1.0.3(typescript@5.3.2) + typescript: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==} + /@typescript-eslint/utils@6.13.1(eslint@8.54.0)(typescript@5.3.2): + resolution: {integrity: sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@types/json-schema': 7.0.13 '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - eslint: 8.51.0 + '@typescript-eslint/scope-manager': 6.13.1 + '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) + eslint: 8.54.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.7.5: - resolution: {integrity: sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==} + /@typescript-eslint/visitor-keys@6.13.1: + resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.5 + '@typescript-eslint/types': 6.13.1 eslint-visitor-keys: 3.4.3 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /@vencord/types@0.1.2: resolution: {integrity: sha512-C/dqZHn3aod/4izZT9sgZEef4478M7QNKTY8Gx2yB1CRYawJcs6hupXT/1SMmepKqrULbltL04Cnh5ieBm3Ucw==} dependencies: '@types/lodash': 4.14.199 '@types/node': 18.18.4 - '@types/react': 18.2.28 + '@types/react': 18.2.39 '@types/react-dom': 18.2.13 discord-types: 1.3.26 standalone-electron-types: 1.0.0 type-fest: 3.13.1 dev: true - /@vencord/venmic@2.1.2: - resolution: {integrity: sha512-2++ozTgEVORoJ0kJ1DpFy7MJVLoG3qD503CKqG4Ztm7fUCWyxXICWDBdtCIsFzVZCBfScz+c9XXae4gXRBeJ3Q==} + /@vencord/venmic@2.1.3: + resolution: {integrity: sha512-X7VXu4r5v18YK7muusViDJhFccCdfzlHUx5iRKtOfZ7ls93Y+KnrByQU5q88Mpk9w7qY3FXMIveL8mocvzjq+Q==} engines: {node: '>=14.15'} os: [linux] requiresBuild: true @@ -1034,11 +1041,11 @@ packages: resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} dev: true - /app-builder-lib@24.6.4: - resolution: {integrity: sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==} + /app-builder-lib@24.9.1: + resolution: {integrity: sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==} engines: {node: '>=14.0.0'} dependencies: - 7zip-bin: 5.1.1 + 7zip-bin: 5.2.0 '@develar/schema-utils': 2.6.5 '@electron/notarize': 2.1.0 '@electron/osx-sign': 1.0.5 @@ -1047,12 +1054,12 @@ packages: '@types/fs-extra': 9.0.13 async-exit-hook: 2.0.1 bluebird-lst: 1.0.9 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 chromium-pickle-js: 0.2.0 debug: 4.3.4 ejs: 3.1.9 - electron-publish: 24.5.0 + electron-publish: 24.8.1 form-data: 4.0.0 fs-extra: 10.1.0 hosted-git-info: 4.1.0 @@ -1323,8 +1330,8 @@ packages: dev: true optional: true - /builder-util-runtime@9.2.1: - resolution: {integrity: sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==} + /builder-util-runtime@9.2.3: + resolution: {integrity: sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==} engines: {node: '>=12.0.0'} dependencies: debug: 4.3.4 @@ -1333,14 +1340,14 @@ packages: - supports-color dev: true - /builder-util@24.5.0: - resolution: {integrity: sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==} + /builder-util@24.8.1: + resolution: {integrity: sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==} dependencies: - 7zip-bin: 5.1.1 + 7zip-bin: 5.2.0 '@types/debug': 4.1.9 app-builder-bin: 4.0.0 bluebird-lst: 1.0.9 - builder-util-runtime: 9.2.1 + builder-util-runtime: 9.2.3 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 @@ -1661,16 +1668,6 @@ packages: engines: {node: '>=10'} dev: true - /define-data-property@1.1.0: - resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} - engines: {node: '>= 0.4'} - requiresBuild: true - dependencies: - get-intrinsic: 1.2.1 - gopd: 1.0.1 - has-property-descriptors: 1.0.0 - dev: true - /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} @@ -1689,8 +1686,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.0 - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: true @@ -1753,12 +1750,12 @@ packages: moment: 2.29.4 dev: true - /dmg-builder@24.6.4: - resolution: {integrity: sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==} + /dmg-builder@24.9.1: + resolution: {integrity: sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==} dependencies: - app-builder-lib: 24.6.4 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + app-builder-lib: 24.9.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.0 @@ -1822,16 +1819,16 @@ packages: jake: 10.8.7 dev: true - /electron-builder@24.6.4: - resolution: {integrity: sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==} + /electron-builder@24.9.1: + resolution: {integrity: sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==} engines: {node: '>=14.0.0'} hasBin: true dependencies: - app-builder-lib: 24.6.4 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + app-builder-lib: 24.9.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 chalk: 4.1.2 - dmg-builder: 24.6.4 + dmg-builder: 24.9.1 fs-extra: 10.1.0 is-ci: 3.0.1 lazy-val: 1.0.5 @@ -1842,12 +1839,12 @@ packages: - supports-color dev: true - /electron-publish@24.5.0: - resolution: {integrity: sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==} + /electron-publish@24.8.1: + resolution: {integrity: sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==} dependencies: '@types/fs-extra': 9.0.13 - builder-util: 24.5.0 - builder-util-runtime: 9.2.1 + builder-util: 24.8.1 + builder-util-runtime: 9.2.3 chalk: 4.1.2 fs-extra: 10.1.0 lazy-val: 1.0.5 @@ -1856,8 +1853,8 @@ packages: - supports-color dev: true - /electron@27.0.0: - resolution: {integrity: sha512-mr3Zoy82l8XKK/TgguE5FeNeHZ9KHXIGIpUMjbjZWIREfAv+X2Q3vdX6RG0Pmi1K23AFAxANXQezIHBA2Eypwg==} + /electron@27.1.2: + resolution: {integrity: sha512-Dy6BUuGLiIJv+zfsXwr78TV2TNppi24rXF4PIIS+OjDblEKdkI9r1iM8JUd3/x3sbGUy5mdLMSPhvmu//IhkgA==} engines: {node: '>= 12.20.55'} hasBin: true requiresBuild: true @@ -1992,34 +1989,34 @@ packages: '@esbuild/win32-x64': 0.18.20 dev: true - /esbuild@0.19.4: - resolution: {integrity: sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==} + /esbuild@0.19.8: + resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.19.4 - '@esbuild/android-arm64': 0.19.4 - '@esbuild/android-x64': 0.19.4 - '@esbuild/darwin-arm64': 0.19.4 - '@esbuild/darwin-x64': 0.19.4 - '@esbuild/freebsd-arm64': 0.19.4 - '@esbuild/freebsd-x64': 0.19.4 - '@esbuild/linux-arm': 0.19.4 - '@esbuild/linux-arm64': 0.19.4 - '@esbuild/linux-ia32': 0.19.4 - '@esbuild/linux-loong64': 0.19.4 - '@esbuild/linux-mips64el': 0.19.4 - '@esbuild/linux-ppc64': 0.19.4 - '@esbuild/linux-riscv64': 0.19.4 - '@esbuild/linux-s390x': 0.19.4 - '@esbuild/linux-x64': 0.19.4 - '@esbuild/netbsd-x64': 0.19.4 - '@esbuild/openbsd-x64': 0.19.4 - '@esbuild/sunos-x64': 0.19.4 - '@esbuild/win32-arm64': 0.19.4 - '@esbuild/win32-ia32': 0.19.4 - '@esbuild/win32-x64': 0.19.4 + '@esbuild/android-arm': 0.19.8 + '@esbuild/android-arm64': 0.19.8 + '@esbuild/android-x64': 0.19.8 + '@esbuild/darwin-arm64': 0.19.8 + '@esbuild/darwin-x64': 0.19.8 + '@esbuild/freebsd-arm64': 0.19.8 + '@esbuild/freebsd-x64': 0.19.8 + '@esbuild/linux-arm': 0.19.8 + '@esbuild/linux-arm64': 0.19.8 + '@esbuild/linux-ia32': 0.19.8 + '@esbuild/linux-loong64': 0.19.8 + '@esbuild/linux-mips64el': 0.19.8 + '@esbuild/linux-ppc64': 0.19.8 + '@esbuild/linux-riscv64': 0.19.8 + '@esbuild/linux-s390x': 0.19.8 + '@esbuild/linux-x64': 0.19.8 + '@esbuild/netbsd-x64': 0.19.8 + '@esbuild/openbsd-x64': 0.19.8 + '@esbuild/sunos-x64': 0.19.8 + '@esbuild/win32-arm64': 0.19.8 + '@esbuild/win32-ia32': 0.19.8 + '@esbuild/win32-x64': 0.19.8 dev: true /escalade@3.1.1: @@ -2031,13 +2028,13 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@9.0.0(eslint@8.51.0): + /eslint-config-prettier@9.0.0(eslint@8.54.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.54.0 dev: true /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.0): @@ -2046,7 +2043,7 @@ packages: peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.7.5)(eslint@8.51.0) + eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.54.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -2059,7 +2056,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2080,15 +2077,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.13.1(eslint@8.54.0)(typescript@5.3.2) debug: 3.2.7 - eslint: 8.51.0 + eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.7.5)(eslint@8.51.0): + /eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.54.0): resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} engines: {node: '>=4'} peerDependencies: @@ -2098,16 +2095,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.13.1(eslint@8.54.0)(typescript@5.3.2) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.51.0 + eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -2129,18 +2126,18 @@ packages: requireindex: 1.2.0 dev: true - /eslint-plugin-path-alias@1.0.0(eslint@8.51.0): + /eslint-plugin-path-alias@1.0.0(eslint@8.54.0): resolution: {integrity: sha512-FXus57yC+Zd3sMv46pbloXYwFeNVNHJqlACr9V68FG/IzGFBBokGJpmjDbEjpt8ZCeVSndUubeDWWl2A8sCNVQ==} peerDependencies: eslint: ^7 dependencies: - eslint: 8.51.0 + eslint: 8.54.0 nanomatch: 1.2.13 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3): + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.54.0)(prettier@3.1.0): resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2154,22 +2151,22 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.51.0 - eslint-config-prettier: 9.0.0(eslint@8.51.0) - prettier: 3.0.3 + eslint: 8.54.0 + eslint-config-prettier: 9.0.0(eslint@8.54.0) + prettier: 3.1.0 prettier-linter-helpers: 1.0.0 synckit: 0.8.5 dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.51.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.54.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.54.0 dev: true - /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.7.5)(eslint@8.51.0): + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.13.1)(eslint@8.54.0): resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2179,8 +2176,8 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2) - eslint: 8.51.0 + '@typescript-eslint/eslint-plugin': 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.54.0)(typescript@5.3.2) + eslint: 8.54.0 eslint-rule-composer: 0.3.0 dev: true @@ -2202,18 +2199,19 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.54.0: + resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.54.0 + '@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -2513,11 +2511,6 @@ packages: dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - requiresBuild: true - dev: true - /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true @@ -2556,16 +2549,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - requiresBuild: true - dependencies: - function-bind: 1.1.1 - has: 1.0.4 - has-proto: 1.0.1 - has-symbols: 1.0.3 - dev: true - /get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: @@ -2674,7 +2657,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 dev: true /got@11.8.6: @@ -2710,13 +2693,6 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - requiresBuild: true - dependencies: - get-intrinsic: 1.2.1 - dev: true - /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: @@ -2777,12 +2753,6 @@ packages: kind-of: 4.0.0 dev: true - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - requiresBuild: true - dev: true - /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} @@ -3755,8 +3725,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + /prettier@3.1.0: + resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} engines: {node: '>=14'} hasBin: true dev: true @@ -4357,13 +4327,13 @@ packages: utf8-byte-length: 1.0.4 dev: true - /ts-api-utils@1.0.3(typescript@5.2.2): + /ts-api-utils@1.0.3(typescript@5.3.2): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.2.2 + typescript: 5.3.2 dev: true /tsconfig-paths@3.14.2: @@ -4379,13 +4349,13 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsx@3.13.0: - resolution: {integrity: sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A==} + /tsx@4.6.0: + resolution: {integrity: sha512-HLHaDQ78mly4Pd5co6tWQOiNVYoYYAPUcwSSZK4bcs3zSEsg+/67LS/ReHook0E7DKPfe1J5jc0ocIhUrnaR4w==} + engines: {node: '>=18.0.0'} hasBin: true dependencies: esbuild: 0.18.20 get-tsconfig: 4.7.2 - source-map-support: 0.5.21 optionalDependencies: fsevents: 2.3.3 dev: true @@ -4414,8 +4384,8 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.4.0: - resolution: {integrity: sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==} + /type-fest@4.8.2: + resolution: {integrity: sha512-mcvrCjixA5166hSrUoJgGb9gBQN4loMYyj9zxuMs/66ibHNEFd5JXMw37YVDx58L4/QID9jIzdTBB4mDwDJ6KQ==} engines: {node: '>=16'} dev: true @@ -4463,8 +4433,8 @@ packages: hasBin: true dev: true - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -4478,8 +4448,8 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici-types@5.25.3: - resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true /union-value@1.0.1: @@ -4618,6 +4588,18 @@ packages: optional: true dev: false + /xml-formatter@3.6.0: + resolution: {integrity: sha512-Wic80ENNLF/5mLcc82hVLmoOWQlLDJtVv+N1/hkP4hBuVXPLKrXo92/4V23QYPKfUxvCU6Y2AcdpHCIA/xexFw==} + engines: {node: '>= 14'} + dependencies: + xml-parser-xo: 4.1.1 + dev: true + + /xml-parser-xo@4.1.1: + resolution: {integrity: sha512-Ggf2y90+Y6e9IK5hoPuembVHJ03PhDSdhldEmgzbihzu9k0XBo0sfcFxaSi4W1PlUSSI1ok+MJ0JCXUn+U4Ilw==} + engines: {node: '>= 14'} + dev: true + /xmlbuilder@15.1.1: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} @@ -4659,8 +4641,8 @@ packages: engines: {node: '>=10'} dev: true - github.com/OpenAsar/arrpc/89f4da610ccfac93f461826a446a17cd3b23953d: - resolution: {tarball: https://codeload.github.com/OpenAsar/arrpc/tar.gz/89f4da610ccfac93f461826a446a17cd3b23953d} + github.com/OpenAsar/arrpc/3e22fd776273afaa4a80c51deb86077ffdd4d2ae: + resolution: {tarball: https://codeload.github.com/OpenAsar/arrpc/tar.gz/3e22fd776273afaa4a80c51deb86077ffdd4d2ae} name: arrpc version: 3.2.0 hasBin: true diff --git a/scripts/build/build.mts b/scripts/build/build.mts index cd46ad8..27f45cc 100644 --- a/scripts/build/build.mts +++ b/scripts/build/build.mts @@ -78,8 +78,6 @@ await Promise.all([ inject: ["./scripts/build/injectReact.mjs"], jsxFactory: "VencordCreateElement", jsxFragment: "VencordFragment", - // Work around https://github.com/evanw/esbuild/issues/2460 - tsconfig: "./scripts/build/tsconfig.esbuild.json", external: ["@vencord/types/*"], plugins: [vencordDep], footer: { js: "//# sourceURL=VCDRenderer" } diff --git a/scripts/build/tsconfig.esbuild.json b/scripts/build/tsconfig.esbuild.json deleted file mode 100644 index e3e28a1..0000000 --- a/scripts/build/tsconfig.esbuild.json +++ /dev/null @@ -1,7 +0,0 @@ -// Work around https://github.com/evanw/esbuild/issues/2460 -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "jsx": "react" - } -} diff --git a/scripts/utils/updateMeta.mts b/scripts/utils/updateMeta.mts new file mode 100644 index 0000000..44327b7 --- /dev/null +++ b/scripts/utils/updateMeta.mts @@ -0,0 +1,93 @@ +/* + * SPDX-License-Identifier: GPL-3.0 + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2023 Vendicated and Vencord contributors + */ + +import { promises as fs } from "node:fs"; + +import { DOMParser, XMLSerializer } from "@xmldom/xmldom"; +import xmlFormat from "xml-formatter"; + +function generateDescription(description: string, descriptionNode: Element) { + const lines = description.replace(/\r/g, "").split("\n"); + let currentList: Element | null = null; + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + + if (line.includes("New Contributors")) { + // we're done, don't parse any more since the new contributors section is the last one + break; + } + + if (line.startsWith("## ")) { + const pNode = descriptionNode.ownerDocument.createElement("p"); + pNode.textContent = line.slice(3); + descriptionNode.appendChild(pNode); + } else if (line.startsWith("* ")) { + const liNode = descriptionNode.ownerDocument.createElement("li"); + liNode.textContent = line.slice(2).split("in https://github.com")[0].trim(); // don't include links to github + + if (!currentList) { + currentList = descriptionNode.ownerDocument.createElement("ul"); + } + + currentList.appendChild(liNode); + } + + if (currentList && !lines[i + 1].startsWith("* ")) { + descriptionNode.appendChild(currentList); + currentList = null; + } + } +} + +const latestReleaseInformation = await fetch("https://api.github.com/repos/Vencord/Vesktop/releases/latest", { + headers: { + Accept: "application/vnd.github+json", + "X-Github-Api-Version": "2022-11-28" + } +}).then(res => res.json()); + +const metaInfo = await fs.readFile("./meta/dev.vencord.Vesktop.metainfo.xml", "utf-8"); + +const parser = new DOMParser().parseFromString(metaInfo, "text/xml"); + +const releaseList = parser.getElementsByTagName("releases")[0]; + +for (let i = 0; i < releaseList.childNodes.length; i++) { + const release = releaseList.childNodes[i] as Element; + + if (release.nodeType === 1 && release.getAttribute("version") === latestReleaseInformation.name) { + console.log("Latest release already added, nothing to be done"); + process.exit(0); + } +} + +const release = parser.createElement("release"); +release.setAttribute("version", latestReleaseInformation.name); +release.setAttribute("date", latestReleaseInformation.published_at.split("T")[0]); +release.setAttribute("type", "stable"); + +const releaseUrl = parser.createElement("url"); +releaseUrl.textContent = latestReleaseInformation.html_url; + +release.appendChild(releaseUrl); + +const description = parser.createElement("description"); + +// we're not using a full markdown parser here since we don't have a lot of formatting options to begin with +generateDescription(latestReleaseInformation.body, description); + +release.appendChild(description); + +releaseList.insertBefore(release, releaseList.childNodes[0]); + +const output = xmlFormat(new XMLSerializer().serializeToString(parser), { + lineSeparator: "\n", + collapseContent: true, + indentation: " " +}); + +await fs.writeFile("./meta/dev.vencord.Vesktop.metainfo.xml", output, "utf-8"); diff --git a/src/main/index.ts b/src/main/index.ts index c37d433..832afc8 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -24,6 +24,12 @@ if (IS_DEV) { process.env.VENCORD_USER_DATA_DIR = DATA_DIR; function init() { + const { disableSmoothScroll } = Settings.store; + + if (disableSmoothScroll) { + app.commandLine.appendSwitch("disable-smooth-scrolling"); + } + // work around chrome 66 disabling autoplay by default app.commandLine.appendSwitch("autoplay-policy", "no-user-gesture-required"); diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 84755f4..504bd10 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -21,6 +21,7 @@ import { VENCORD_FILES_DIR, VENCORD_QUICKCSS_FILE, VENCORD_THEMES_DIR } from "./ import { mainWin } from "./mainWindow"; import { Settings } from "./settings"; import { handle, handleSync } from "./utils/ipcWrappers"; +import { isDeckGameMode, showGamePage } from "./utils/steamOS"; import { isValidVencordInstall } from "./utils/vencordLoader"; handleSync(IpcEvents.GET_VENCORD_PRELOAD_FILE, () => join(VENCORD_FILES_DIR, "vencordDesktopPreload.js")); @@ -47,11 +48,14 @@ handle(IpcEvents.SET_SETTINGS, (_, settings: typeof Settings.store, path?: strin Settings.setData(settings, path); }); -handle(IpcEvents.RELAUNCH, () => { +handle(IpcEvents.RELAUNCH, async () => { const options: RelaunchOptions = { args: process.argv.slice(1).concat(["--relaunch"]) }; - if (app.isPackaged && process.env.APPIMAGE) { + if (isDeckGameMode) { + // We can't properly relaunch when running under gamescope, but we can at least navigate to our page in Steam. + await showGamePage(); + } else if (app.isPackaged && process.env.APPIMAGE) { execFile(process.env.APPIMAGE, options.args); } else { app.relaunch(options); diff --git a/src/main/mainWindow.ts b/src/main/mainWindow.ts index 1395d16..73137ac 100644 --- a/src/main/mainWindow.ts +++ b/src/main/mainWindow.ts @@ -442,7 +442,8 @@ function createMainWindow() { const runVencordMain = once(() => require(join(VENCORD_FILES_DIR, "vencordDesktopMain.js"))); export async function createWindows() { - const splash = createSplashWindow(); + const { startMinimized } = Settings.store; + const splash = createSplashWindow(startMinimized); // SteamOS letterboxes and scales it terribly, so just full screen it if (isDeckGameMode) splash.setFullScreen(true); await ensureVencordFiles(); @@ -457,9 +458,7 @@ export async function createWindows() { mainWin!.hide(); mainWin!.show(); - if (Settings.store.maximized && !isDeckGameMode) { - mainWin!.maximize(); - } + if (!startMinimized || isDeckGameMode) mainWin!.show(); if (isDeckGameMode) { // always use entire display @@ -469,5 +468,11 @@ export async function createWindows() { } }); + mainWin.once("show", () => { + if (Settings.store.maximized && !mainWin!.isMaximized() && !isDeckGameMode) { + mainWin!.maximize(); + } + }); + initArRPC(); } diff --git a/src/main/splash.ts b/src/main/splash.ts index f21799d..7c05de9 100644 --- a/src/main/splash.ts +++ b/src/main/splash.ts @@ -11,10 +11,11 @@ import { ICON_PATH, VIEW_DIR } from "shared/paths"; import { Settings } from "./settings"; -export function createSplashWindow() { +export function createSplashWindow(startMinimized = false) { const splash = new BrowserWindow({ ...SplashProps, - icon: ICON_PATH + icon: ICON_PATH, + show: !startMinimized }); splash.loadFile(join(VIEW_DIR, "splash.html")); diff --git a/src/main/utils/makeLinksOpenExternally.ts b/src/main/utils/makeLinksOpenExternally.ts index b30b865..5197261 100644 --- a/src/main/utils/makeLinksOpenExternally.ts +++ b/src/main/utils/makeLinksOpenExternally.ts @@ -7,6 +7,7 @@ import { BrowserWindow, shell } from "electron"; import { Settings } from "../settings"; +import { execSteamURL, isDeckGameMode, steamOpenURL } from "./steamOS"; export function makeLinksOpenExternally(win: BrowserWindow) { win.webContents.setWindowOpenHandler(({ url }) => { @@ -30,9 +31,20 @@ export function makeLinksOpenExternally(win: BrowserWindow) { } // eslint-disable-next-line no-fallthrough case "mailto:": - case "steam:": case "spotify:": - shell.openExternal(url); + if (isDeckGameMode) { + steamOpenURL(url); + } else { + shell.openExternal(url); + } + break; + case "steam:": + if (isDeckGameMode) { + execSteamURL(url); + } else { + shell.openExternal(url); + } + break; } return { action: "deny" }; diff --git a/src/main/utils/steamOS.ts b/src/main/utils/steamOS.ts index feeafe4..8145e5a 100644 --- a/src/main/utils/steamOS.ts +++ b/src/main/utils/steamOS.ts @@ -4,22 +4,21 @@ * Copyright (c) 2023 Vendicated and Vencord contributors */ -import { exec as callbackExec } from "child_process"; import { BrowserWindow, dialog } from "electron"; -import { sleep } from "shared/utils/sleep"; -import { promisify } from "util"; +import { writeFile } from "fs/promises"; +import { join } from "path"; import { MessageBoxChoice } from "../constants"; import { Settings } from "../settings"; -const exec = promisify(callbackExec); - // Bump this to re-show the prompt const layoutVersion = 2; // Get this from "show details" on the profile after exporting as a shared personal layout or using share with community const layoutId = "3080264545"; // Vesktop Layout v2 const numberRegex = /^[0-9]*$/; +let steamPipeQueue = Promise.resolve(); + export const isDeckGameMode = process.env.SteamOS === "1" && process.env.SteamGamepadUI === "1"; export function applyDeckKeyboardFix() { @@ -42,16 +41,30 @@ function getAppId(): string | null { return null; } -async function execSteamURL(url: string): Promise { - await exec(`steam -ifrunning ${url}`); +export function execSteamURL(url: string) { + // This doesn't allow arbitrary execution despite the weird syntax. + steamPipeQueue = steamPipeQueue.then(() => + writeFile( + join(process.env.HOME || "/home/deck", ".steam", "steam.pipe"), + // replace ' to prevent argument injection + `'${process.env.HOME}/.local/share/Steam/ubuntu12_32/steam' '-ifrunning' '${url.replaceAll("'", "%27")}'\n`, + "utf-8" + ) + ); +} + +export function steamOpenURL(url: string) { + execSteamURL(`steam://openurl/${url}`); +} + +export async function showGamePage() { + const appId = getAppId(); + if (!appId) return; + await execSteamURL(`steam://nav/games/details/${appId}`); } async function showLayout(appId: string) { - await execSteamURL(`steam://controllerconfig/${appId}/${layoutId}`); - // because the UI doesn't consistently reload after the data for the config has loaded... - // HOW HAS NOBODY AT VALVE RUN INTO THIS YET - await sleep(100); - await execSteamURL(`steam://controllerconfig/${appId}/${layoutId}`); + execSteamURL(`steam://controllerconfig/${appId}/${layoutId}`); } export async function askToApplySteamLayout(win: BrowserWindow) { diff --git a/src/renderer/components/Settings.tsx b/src/renderer/components/Settings.tsx index e0dcd55..b90c746 100644 --- a/src/renderer/components/Settings.tsx +++ b/src/renderer/components/Settings.tsx @@ -42,13 +42,15 @@ export default function SettingsUi() { ], ["staticTitle", "Static Title", 'Makes the window title "Vesktop" instead of changing to the current page'], ["enableMenu", "Enable Menu Bar", "Enables the application menu bar. Press ALT to toggle visibility."], + ["disableSmoothScroll", "Disable smooth scrolling", "Disables smooth scrolling in Vesktop", false], ["splashTheming", "Splash theming", "Adapt the splash window colors to your custom theme", false], [ "openLinksWithElectron", "Open Links in app (experimental)", "Opens links in a new Vesktop window instead of your web browser" ], - ["checkUpdates", "Check for updates", "Automatically check for Vesktop updates", true] + ["checkUpdates", "Check for updates", "Automatically check for Vesktop updates", true], + ["startMinimized", "Start minimized", "Vesktop remains in minimized mode on start", false] ]; const switches = allSwitches.filter(isTruthy); diff --git a/src/shared/settings.d.ts b/src/shared/settings.d.ts index 5b5fd4c..236cdfc 100644 --- a/src/shared/settings.d.ts +++ b/src/shared/settings.d.ts @@ -15,9 +15,11 @@ export interface Settings { openLinksWithElectron?: boolean; staticTitle?: boolean; enableMenu?: boolean; + disableSmoothScroll?: boolean; arRPC?: boolean; appBadge?: boolean; discordWindowsTitleBar?: boolean; + startMinimized?: boolean; maximized?: boolean; minimized?: boolean; diff --git a/src/shared/utils/SettingsStore.ts b/src/shared/utils/SettingsStore.ts index 87fe0b6..89c57dd 100644 --- a/src/shared/utils/SettingsStore.ts +++ b/src/shared/utils/SettingsStore.ts @@ -12,8 +12,8 @@ type ResolvePropDeep = P extends `${infer Pre}.${infer Suf}` ? ResolvePropDeep : any : P extends keyof T - ? T[P] - : any; + ? T[P] + : any; /** * The SettingsStore allows you to easily create a mutable store that diff --git a/static/views/splash.html b/static/views/splash.html index 7cb571b..94ef13e 100644 --- a/static/views/splash.html +++ b/static/views/splash.html @@ -22,8 +22,9 @@ } img { - width: 6em; - height: 6em; + width: 128px; + height: 128px; + image-rendering: pixelated; }