diff --git a/.github/ISSUE_TEMPLATE/dev-issue.yml b/.github/ISSUE_TEMPLATE/dev-issue.yml index 936e935b9..501989bde 100644 --- a/.github/ISSUE_TEMPLATE/dev-issue.yml +++ b/.github/ISSUE_TEMPLATE/dev-issue.yml @@ -5,8 +5,13 @@ body: - type: markdown attributes: value: | - ![Are you a developer? No? This form is not for you!](https://github.com/Vencord/Vesktop/blob/main/.github/ISSUE_TEMPLATE/developer-banner.png?raw=true) - GitHub Issues are for developers, not support. Please use our [support server](https://vencord.dev/discord) if you are not a developer. + # This form is reserved for Vesktop Developers. Do not open an issue. + + Instead, use the [#vesktop-support channel](https://discord.com/channels/1015060230222131221/1345457031426871417) on our [Discord server](https://vencord.dev/discord) for help and reporting issues. + + Your issue will be closed immediately with no comment and you will be blocked if you ignore this. + + This is because 99% of issues are not actually bugs, but rather user or system issues and it adds a lot of noise to our development process. - type: textarea id: content attributes: diff --git a/.github/ISSUE_TEMPLATE/developer-banner.png b/.github/ISSUE_TEMPLATE/developer-banner.png deleted file mode 100644 index 5fa12fc37..000000000 Binary files a/.github/ISSUE_TEMPLATE/developer-banner.png and /dev/null differ diff --git a/.github/workflows/meta.yml b/.github/workflows/meta.yml index 83d70a498..b27a8641e 100644 --- a/.github/workflows/meta.yml +++ b/.github/workflows/meta.yml @@ -37,6 +37,6 @@ jobs: git add meta/dev.vencord.Vesktop.metainfo.xml git commit -m "metainfo: add entry for ${{ github.event.release.tag_name }}" - git push + git push origin HEAD:main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index d946bd3d4..967d1c201 100644 --- a/README.md +++ b/README.md @@ -17,48 +17,7 @@ Vesktop is a custom Discord desktop app ## Installing -### Windows - -If you don't know the difference, pick the Installer. - -- [Installer](https://vencord.dev/download/vesktop/universal/windows) -- Portable: - - [x64 / amd64](https://vencord.dev/download/vesktop/amd64/windows-portable) - - [ArmĀ® 64](https://vencord.dev/download/vesktop/arm64/windows-portable) - -### Mac - -Download the latest [Vesktop.dmg](https://vencord.dev/download/vesktop/universal/dmg) or use [Homebrew](https://brew.sh/) - -```sh -brew install vesktop -``` - -### Linux - -[![Download on Flathub](https://dl.flathub.org/assets/badges/flathub-badge-en.svg)](https://flathub.org/apps/dev.vencord.Vesktop) - -If you don't know the difference, pick amd64. - -- amd64 / x86_64 - - [AppImage](https://vencord.dev/download/vesktop/amd64/appimage) - - [Ubuntu/Debian (.deb)](https://vencord.dev/download/vesktop/amd64/deb) - - [Fedora/RHEL (.rpm)](https://vencord.dev/download/vesktop/amd64/rpm) - - [tarball](https://vencord.dev/download/vesktop/amd64/tar) -- ArmĀ® 64 / aarch64 - - [AppImage](https://vencord.dev/download/vesktop/arm64/appimage) - - [Ubuntu/Debian (.deb)](https://vencord.dev/download/vesktop/arm64/deb) - - [Fedora/RHEL (.rpm)](https://vencord.dev/download/vesktop/arm64/rpm) - - [tarball](https://vencord.dev/download/vesktop/arm64/tar) - -#### Community packages - -Below you can find unofficial packages created by the community. They are not officially supported by us, so before reporting issues, please first confirm the issue also happens on official builds. When in doubt, consult with their packager first. The flatpak and AppImage should work on any distro that [supports them](https://flatpak.org/setup/), so I recommend you just use those instead! - -- Arch Linux: [Vesktop on the Arch user repository](https://aur.archlinux.org/packages?K=vesktop) -- NixOS: https://wiki.nixos.org/wiki/Discord#Vesktop -- Slackware: [Vesktop on the SlackBuilds](https://slackbuilds.org/result/?search=vesktop) -- Windows - Scoop: https://scoop.sh/#/apps?q=Vesktop +Visit https://vesktop.vencord.dev/install ## Building from Source diff --git a/meta/dev.vencord.Vesktop.metainfo.xml b/meta/dev.vencord.Vesktop.metainfo.xml deleted file mode 100644 index 2141f87b9..000000000 --- a/meta/dev.vencord.Vesktop.metainfo.xml +++ /dev/null @@ -1,281 +0,0 @@ - - - - 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/v1.5.6 - -

What's Changed

-
    -
  • Fixes the new Discord titlebar @Sqaaakoi
  • -
  • Fixes Clipboard copy actions not working
  • -
  • Should now properly hide the "Download Apps" button again
  • -
  • No longer responds to Browser Tab shortcuts like Ctrl+W by @rushiiMachine
  • -
  • DevTools keybind should now work properly on Mac @ryanccn
  • -
  • Should no longer throw Sandbox errors on Ubuntu
  • -
-
-
- - https://github.com/Vencord/Vesktop/releases/tag/v1.5.5 - -

What's Changed

-
    -
  • Now remembers your previous Screenshare resolution & FPS
  • -
  • You can now disable the splash screen in Vesktop Settings
  • -
  • Now supports deep links (opening Discord Message Links in Vesktop) by @Covkie
  • -
  • Now supports discord:// uri scheme, allowing it to open things like invites from your Browser even while closed by @Covkie
  • -
  • Added 4k resolution to screenshare by @makindotcc
  • -
  • Fixed some performance issues caused by a recent Discord update
  • -
  • Updated Electron to v34 & chromium to v132, bringing new features and fixes
  • -
-
-
- - https://github.com/Vencord/Vesktop/releases/tag/v1.5.4 - -

What's Changed

-
    -
  • Upgraded electron to version 33 which brings many improvements and bug fixes
  • -
  • AudioShare: add even more granular selection, Allow device sharing by @Curve
  • -
  • Enable speech-dispatcher support for TTS on linux by @adryd325
  • -
  • fixed screenshare picker window subtitle alignment by @ryawaa
  • -
  • fixed splash corners by @Covkie
  • -
-
-
- - https://github.com/Vencord/Vesktop/releases/tag/v1.5.3 - -

Features

-
    -
  • added arm64 Windows support
  • -
  • windows & macOS builds are now universal
  • -
  • added option to configure spellcheck languages
  • -
  • will auto-update from now on
  • -
  • updated electron to 31 & Chromium to 126
  • -
  • macOS: Added customized dmg background by @khcrysalis
  • -
  • Windows Portable: store settings in portable folder by @MrGarlic1
  • -
  • linux audioshare: added granular selection, more options, better ui by @Curve
  • -
  • changed default screen-sharing quality to 720p 30 FPS by @Tiagoquix
  • -
-

Fixes

-
    -
  • macOS: Added workaround for making things in draggable area clickable by @HAHALOSAH
  • -
  • fixed Screenshare UI for non-linux systems by @PolisanTheEasyNick
  • -
  • fixed opening on screen that was disconnected by @MrGarlic1
  • -
  • mac: hide native window controls with custom titlebar enabled by @MrGarlic1
  • -
  • fixed some broken patches by @D3SOX
  • -
  • fixed framerate in constraints by @kittykel
  • -
  • fixed some first launch switches not applying
  • -
  • fixed potential sandbox escape via custom vencord location
  • -
-
-
- - https://github.com/Vencord/Vesktop/releases/tag/v1.5.2 - -

What's Changed

-
    -
  • Fixed scrollbars looking wrong (actually Discord's fault)
  • -
  • Tray: Added left click hide/show feature by @0bCdian
  • -
  • MacOS: Fixed the app not properly requesting microphone permissions by @ssalggnikool
  • -
  • Linux: Various fixed related to audio screenshare by @Curve
  • -
  • Linux: Overhauled & improved screenshare with better framerate by @kaitlynkittyy
  • -
  • Users can now pass --enable/disable-features command line flags by @takase1121
  • -
-
-
- - https://github.com/Vencord/Vesktop/releases/tag/v1.5.1 - -

New Features

-
    -
  • Added categories to Vesktop settings to reduce visual clutter by @justin13888
  • -
  • Added support for Vencord's transparent window options
  • -
-

Fixes

-
    -
  • Fixed ugly error popups when starting Vesktop without working internet connection
  • -
  • Fixed popout title bars on Windows
  • -
  • Fixed spellcheck entries
  • -
  • Fixed screenshare audio using microphone on debian, by @Curve
  • -
  • Fixed a bug where autostart on Linux won't preserve command line flags
  • -
-
-
- - https://github.com/Vencord/Vesktop/releases/tag/v1.5.0 - -

What's Changed

-
    -
  • fully renamed to Vesktop. You will likely have to login to Discord again. You might have to re-create your vesktop shortcut
  • -
  • added option to disable smooth scrolling by @ZirixCZ
  • -
  • added setting to disable hardware acceleration by @zt64
  • -
  • fixed adding connections
  • -
  • fixed / improved discord popouts
  • -
  • you can now use the custom discord titlebar on linux/mac
  • -
  • the splash window is now draggable
  • -
  • now signed on mac
  • -
-
-
- - 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 - Network - - - pointing - keyboard - 420 - always - - - voice - 760 - 1200 - - - intense - intense - intense - intense - - - Discord - Vencord - Vesktop - Privacy - Mod - -
\ No newline at end of file diff --git a/package.json b/package.json index a14624347..84a33c2b6 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "nexop", - "version": "1.5.6", + "version": "1.5.8", "private": true, - "description": "Vesktop is a custom Discord desktop app", + "description": "Nexop is a custom Discord desktop app", "keywords": [], "homepage": "https://nexulien.github.io/", "license": "GPL-3.0-or-later", @@ -34,27 +34,27 @@ }, "devDependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@stylistic/eslint-plugin": "^4.2.0", - "@types/node": "^22.15.18", + "@stylistic/eslint-plugin": "^5.1.0", + "@types/node": "^24.0.10", "@types/react": "18.3.1", "@vencord/types": "^1.11.5", "dotenv": "^16.5.0", - "electron": "^36.2.1", + "electron": "^37.2.0", "electron-builder": "^26.0.12", - "esbuild": "^0.25.4", - "eslint": "^9.27.0", + "esbuild": "^0.25.5", + "eslint": "^9.30.1", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-path-alias": "^2.1.0", - "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-prettier": "^5.5.1", "eslint-plugin-simple-header": "^1.2.2", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-unused-imports": "^4.1.4", - "prettier": "^3.5.3", + "prettier": "^3.6.2", "source-map-support": "^0.5.21", - "tsx": "^4.19.4", + "tsx": "^4.20.3", "type-fest": "^4.41.0", "typescript": "^5.8.3", - "typescript-eslint": "^8.32.1", + "typescript-eslint": "^8.35.1", "xml-formatter": "^3.6.6" }, "packageManager": "pnpm@10.7.1", @@ -199,7 +199,8 @@ }, "pnpm": { "patchedDependencies": { - "arrpc@3.5.0": "patches/arrpc@3.5.0.patch" + "arrpc@3.5.0": "patches/arrpc@3.5.0.patch", + "electron-updater": "patches/electron-updater.patch" }, "onlyBuiltDependencies": [ "@vencord/venmic", diff --git a/patches/electron-updater.patch b/patches/electron-updater.patch new file mode 100644 index 000000000..b9e960620 --- /dev/null +++ b/patches/electron-updater.patch @@ -0,0 +1,16 @@ +diff --git a/out/RpmUpdater.js b/out/RpmUpdater.js +index 563187bb18cb0bd154dff6620cb62b8c8f534cd6..d91594026c2bac9cc78ef3b1183df3241d7d9624 100644 +--- a/out/RpmUpdater.js ++++ b/out/RpmUpdater.js +@@ -32,7 +32,10 @@ class RpmUpdater extends BaseUpdater_1.BaseUpdater { + const sudo = this.wrapSudo(); + // pkexec doesn't want the command to be wrapped in " quotes + const wrapper = /pkexec/i.test(sudo) ? "" : `"`; +- const packageManager = this.spawnSyncLog("which zypper"); ++ let packageManager; ++ try { ++ packageManager = this.spawnSyncLog("which zypper"); ++ } catch {} + const installerPath = this.installerPath; + if (installerPath == null) { + this.dispatchError(new Error("No valid update available, can't quit and install")); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44880d3cf..fb64edb12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ patchedDependencies: arrpc@3.5.0: hash: 4313fe844324a52ef0453078a86f5d1ee2d4f406331201211020d9fa243323c4 path: patches/arrpc@3.5.0.patch + electron-updater: + hash: 080505564abb2ebbda932bbf8fe91540c74dd905de994888d52ffce6f882f887 + path: patches/electron-updater.patch importers: @@ -18,17 +21,17 @@ importers: version: https://codeload.github.com/OpenAsar/arrpc/tar.gz/2234e9c9111f4c42ebcc3aa6a2215bfd979eef77(patch_hash=4313fe844324a52ef0453078a86f5d1ee2d4f406331201211020d9fa243323c4) electron-updater: specifier: ^6.6.2 - version: 6.6.2 + version: 6.6.2(patch_hash=080505564abb2ebbda932bbf8fe91540c74dd905de994888d52ffce6f882f887) devDependencies: '@fal-works/esbuild-plugin-global-externals': specifier: ^2.1.2 version: 2.1.2 '@stylistic/eslint-plugin': - specifier: ^4.2.0 - version: 4.2.0(eslint@9.27.0)(typescript@5.8.3) + specifier: ^5.1.0 + version: 5.1.0(eslint@9.30.1) '@types/node': - specifier: ^22.15.18 - version: 22.15.18 + specifier: ^24.0.10 + version: 24.0.10 '@types/react': specifier: 18.3.1 version: 18.3.1 @@ -37,46 +40,46 @@ importers: version: 1.11.5 dotenv: specifier: ^16.5.0 - version: 16.5.0 + version: 16.6.1 electron: - specifier: ^36.2.1 - version: 36.2.1 + specifier: ^37.2.0 + version: 37.2.0 electron-builder: specifier: ^26.0.12 version: 26.0.12(electron-builder-squirrel-windows@25.1.8) esbuild: - specifier: ^0.25.4 - version: 0.25.4 + specifier: ^0.25.5 + version: 0.25.5 eslint: - specifier: ^9.27.0 - version: 9.27.0 + specifier: ^9.30.1 + version: 9.30.1 eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)) + version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)) eslint-plugin-path-alias: specifier: ^2.1.0 - version: 2.1.0(eslint@9.27.0) + version: 2.1.0(eslint@9.30.1) eslint-plugin-prettier: - specifier: ^5.4.0 - version: 5.4.0(eslint@9.27.0)(prettier@3.5.3) + specifier: ^5.5.1 + version: 5.5.1(eslint@9.30.1)(prettier@3.6.2) eslint-plugin-simple-header: specifier: ^1.2.2 - version: 1.2.2(eslint@9.27.0) + version: 1.2.2(eslint@9.30.1) eslint-plugin-simple-import-sort: specifier: ^12.1.1 - version: 12.1.1(eslint@9.27.0) + version: 12.1.1(eslint@9.30.1) eslint-plugin-unused-imports: specifier: ^4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1) prettier: - specifier: ^3.5.3 - version: 3.5.3 + specifier: ^3.6.2 + version: 3.6.2 source-map-support: specifier: ^0.5.21 version: 0.5.21 tsx: - specifier: ^4.19.4 - version: 4.19.4 + specifier: ^4.20.3 + version: 4.20.3 type-fest: specifier: ^4.41.0 version: 4.41.0 @@ -84,8 +87,8 @@ importers: specifier: ^5.8.3 version: 5.8.3 typescript-eslint: - specifier: ^8.32.1 - version: 8.32.1(eslint@9.27.0)(typescript@5.8.3) + specifier: ^8.35.1 + version: 8.35.1(eslint@9.30.1)(typescript@5.8.3) xml-formatter: specifier: ^3.6.6 version: 3.6.6 @@ -145,162 +148,156 @@ packages: resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} engines: {node: '>=16.4'} - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + '@esbuild/aix-ppc64@0.25.5': + resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + '@esbuild/android-arm64@0.25.5': + resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + '@esbuild/android-arm@0.25.5': + resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + '@esbuild/android-x64@0.25.5': + resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + '@esbuild/darwin-arm64@0.25.5': + resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + '@esbuild/darwin-x64@0.25.5': + resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + '@esbuild/freebsd-arm64@0.25.5': + resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + '@esbuild/freebsd-x64@0.25.5': + resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + '@esbuild/linux-arm64@0.25.5': + resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + '@esbuild/linux-arm@0.25.5': + resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + '@esbuild/linux-ia32@0.25.5': + resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + '@esbuild/linux-loong64@0.25.5': + resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + '@esbuild/linux-mips64el@0.25.5': + resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + '@esbuild/linux-ppc64@0.25.5': + resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + '@esbuild/linux-riscv64@0.25.5': + resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + '@esbuild/linux-s390x@0.25.5': + resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + '@esbuild/linux-x64@0.25.5': + resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + '@esbuild/netbsd-arm64@0.25.5': + resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + '@esbuild/netbsd-x64@0.25.5': + resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + '@esbuild/openbsd-arm64@0.25.5': + resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + '@esbuild/openbsd-x64@0.25.5': + resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + '@esbuild/sunos-x64@0.25.5': + resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + '@esbuild/win32-arm64@0.25.5': + resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + '@esbuild/win32-ia32@0.25.5': + resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + '@esbuild/win32-x64@0.25.5': + resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.6.1': - resolution: {integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.7.0': resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -311,32 +308,36 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.14.0': resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.27.0': - resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} + '@eslint/js@9.30.1': + resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + '@eslint/plugin-kit@0.3.3': + resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fal-works/esbuild-plugin-global-externals@2.1.2': @@ -365,6 +366,14 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -402,8 +411,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.2.4': - resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} + '@pkgr/core@0.2.7': + resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} '@rtsao/scc@1.1.0': @@ -413,8 +422,8 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@stylistic/eslint-plugin@4.2.0': - resolution: {integrity: sha512-8hXezgz7jexGHdo5WN6JBEIPHCSFyyU4vgbxevu4YLVS5vl+sxqAAGyXSzfNDyR6xMNSH5H1x67nsXcYMOHtZA==} + '@stylistic/eslint-plugin@5.1.0': + resolution: {integrity: sha512-TJRJul4u/lmry5N/kyCU+7RWWOk0wyXN+BncRlDYBqpLFnzXkd7QGVfN7KewarFIXv0IX0jSF/Ksu7aHWEDeuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' @@ -433,8 +442,8 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} @@ -457,8 +466,11 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.15.18': - resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} + '@types/node@22.16.0': + resolution: {integrity: sha512-B2egV9wALML1JCpv3VQoQ+yesQKAmNMBIAY7OteVrikcOcAkWm+dGL6qpeCktPjAv6N1JLnhbNiqS35UpFyBsQ==} + + '@types/node@24.0.10': + resolution: {integrity: sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==} '@types/plist@3.0.5': resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} @@ -484,76 +496,63 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} + '@typescript-eslint/eslint-plugin@8.35.1': + resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.35.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} + '@typescript-eslint/parser@8.35.1': + resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.29.0': - resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} + '@typescript-eslint/project-service@8.35.1': + resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.29.0': - resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} + '@typescript-eslint/scope-manager@8.35.1': + resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.29.0': - resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} + '@typescript-eslint/tsconfig-utils@8.35.1': + resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} + '@typescript-eslint/type-utils@8.35.1': + resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: + eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.29.0': - resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} + '@typescript-eslint/types@8.35.1': + resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.35.1': + resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} + '@typescript-eslint/utils@8.35.1': + resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.29.0': - resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} + '@typescript-eslint/visitor-keys@8.35.1': + resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vencord/types@1.11.5': @@ -576,8 +575,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true @@ -676,8 +675,8 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} array-unique@0.3.2: @@ -770,11 +769,11 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1087,8 +1086,8 @@ packages: resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} engines: {node: '>=12'} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -1120,8 +1119,8 @@ packages: electron-updater@6.6.2: resolution: {integrity: sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==} - electron@36.2.1: - resolution: {integrity: sha512-mm1Y+Ms46xcOTA69h8hpqfX392HfV4lga9aEkYkd/Syx1JBStvcACOIouCgGrnZpxNZPVS1jM8NTcMkNjuK6BQ==} + electron@37.2.0: + resolution: {integrity: sha512-dE6+qeg6SBUVd5d8CD2+GH82kh+gF1v40+hs+U+UOno681NMSGmBtgqwldQRpbvtnQDD7V2M9Cpfr3+Abw7aBg==} engines: {node: '>= 12.20.55'} hasBin: true @@ -1134,8 +1133,8 @@ packages: encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} @@ -1144,8 +1143,8 @@ packages: err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -1175,8 +1174,8 @@ packages: es6-error@4.1.1: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + esbuild@0.25.5: + resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} hasBin: true @@ -1197,8 +1196,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -1233,8 +1232,8 @@ packages: peerDependencies: eslint: ^8.0.0 - eslint-plugin-prettier@5.4.0: - resolution: {integrity: sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==} + eslint-plugin-prettier@5.5.1: + resolution: {integrity: sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1266,20 +1265,20 @@ packages: '@typescript-eslint/eslint-plugin': optional: true - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.27.0: - resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} + eslint@9.30.1: + resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1288,8 +1287,8 @@ packages: jiti: optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esquery@1.6.0: @@ -1409,6 +1408,10 @@ packages: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} + form-data@4.0.3: + resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} + engines: {node: '>= 6'} + fragment-cache@0.2.1: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} @@ -1482,6 +1485,9 @@ packages: get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -1637,8 +1643,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} import-fresh@3.3.1: @@ -1768,6 +1774,10 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -2032,6 +2042,10 @@ packages: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2296,8 +2310,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true @@ -2327,8 +2341,8 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -2558,8 +2572,8 @@ packages: resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} engines: {node: '>= 10'} - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + socks@2.8.5: + resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} source-map-resolve@0.5.3: @@ -2603,6 +2617,10 @@ packages: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2661,8 +2679,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - synckit@0.11.4: - resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==} + synckit@0.11.8: + resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} engines: {node: ^14.18.0 || >=16.0.0} tar-stream@2.2.0: @@ -2713,11 +2731,8 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsx@4.19.4: - resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} + tsx@4.20.3: + resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} engines: {node: '>=18.0.0'} hasBin: true @@ -2749,8 +2764,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.32.1: - resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} + typescript-eslint@8.35.1: + resolution: {integrity: sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2768,6 +2783,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} @@ -2956,7 +2974,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.1 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -3034,94 +3052,89 @@ snapshots: transitivePeerDependencies: - supports-color - '@esbuild/aix-ppc64@0.25.4': + '@esbuild/aix-ppc64@0.25.5': optional: true - '@esbuild/android-arm64@0.25.4': + '@esbuild/android-arm64@0.25.5': optional: true - '@esbuild/android-arm@0.25.4': + '@esbuild/android-arm@0.25.5': optional: true - '@esbuild/android-x64@0.25.4': + '@esbuild/android-x64@0.25.5': optional: true - '@esbuild/darwin-arm64@0.25.4': + '@esbuild/darwin-arm64@0.25.5': optional: true - '@esbuild/darwin-x64@0.25.4': + '@esbuild/darwin-x64@0.25.5': optional: true - '@esbuild/freebsd-arm64@0.25.4': + '@esbuild/freebsd-arm64@0.25.5': optional: true - '@esbuild/freebsd-x64@0.25.4': + '@esbuild/freebsd-x64@0.25.5': optional: true - '@esbuild/linux-arm64@0.25.4': + '@esbuild/linux-arm64@0.25.5': optional: true - '@esbuild/linux-arm@0.25.4': + '@esbuild/linux-arm@0.25.5': optional: true - '@esbuild/linux-ia32@0.25.4': + '@esbuild/linux-ia32@0.25.5': optional: true - '@esbuild/linux-loong64@0.25.4': + '@esbuild/linux-loong64@0.25.5': optional: true - '@esbuild/linux-mips64el@0.25.4': + '@esbuild/linux-mips64el@0.25.5': optional: true - '@esbuild/linux-ppc64@0.25.4': + '@esbuild/linux-ppc64@0.25.5': optional: true - '@esbuild/linux-riscv64@0.25.4': + '@esbuild/linux-riscv64@0.25.5': optional: true - '@esbuild/linux-s390x@0.25.4': + '@esbuild/linux-s390x@0.25.5': optional: true - '@esbuild/linux-x64@0.25.4': + '@esbuild/linux-x64@0.25.5': optional: true - '@esbuild/netbsd-arm64@0.25.4': + '@esbuild/netbsd-arm64@0.25.5': optional: true - '@esbuild/netbsd-x64@0.25.4': + '@esbuild/netbsd-x64@0.25.5': optional: true - '@esbuild/openbsd-arm64@0.25.4': + '@esbuild/openbsd-arm64@0.25.5': optional: true - '@esbuild/openbsd-x64@0.25.4': + '@esbuild/openbsd-x64@0.25.5': optional: true - '@esbuild/sunos-x64@0.25.4': + '@esbuild/sunos-x64@0.25.5': optional: true - '@esbuild/win32-arm64@0.25.4': + '@esbuild/win32-arm64@0.25.5': optional: true - '@esbuild/win32-ia32@0.25.4': + '@esbuild/win32-ia32@0.25.5': optional: true - '@esbuild/win32-x64@0.25.4': + '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.6.1(eslint@9.27.0)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1)': dependencies: - eslint: 9.27.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0)': - dependencies: - eslint: 9.27.0 + eslint: 9.30.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 debug: 4.4.1 @@ -3129,17 +3142,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.2': {} + '@eslint/config-helpers@0.3.0': {} '@eslint/core@0.14.0': dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.15.1': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 debug: 4.4.1 - espree: 10.3.0 + espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 @@ -3149,13 +3166,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.27.0': {} + '@eslint/js@9.30.1': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.1': + '@eslint/plugin-kit@0.3.3': dependencies: - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.1 levn: 0.4.1 '@fal-works/esbuild-plugin-global-externals@2.1.2': {} @@ -3175,6 +3192,12 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -3212,7 +3235,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.1 + semver: 7.7.2 '@npmcli/move-file@2.0.1': dependencies: @@ -3222,23 +3245,21 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.2.4': {} + '@pkgr/core@0.2.7': {} '@rtsao/scc@1.1.0': {} '@sindresorhus/is@4.6.0': {} - '@stylistic/eslint-plugin@4.2.0(eslint@9.27.0)(typescript@5.8.3)': + '@stylistic/eslint-plugin@5.1.0(eslint@9.30.1)': dependencies: - '@typescript-eslint/utils': 8.29.0(eslint@9.27.0)(typescript@5.8.3) - eslint: 9.27.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) + '@typescript-eslint/types': 8.35.1 + eslint: 9.30.1 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.2 - transitivePeerDependencies: - - supports-color - - typescript '@szmarczak/http-timer@4.0.6': dependencies: @@ -3250,18 +3271,18 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.15.18 + '@types/node': 24.0.10 '@types/responselike': 1.0.3 '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 - '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.15.18 + '@types/node': 24.0.10 '@types/http-cache-semantics@4.0.4': {} @@ -3271,19 +3292,23 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.15.18 + '@types/node': 24.0.10 '@types/lodash@4.17.15': {} '@types/ms@2.1.0': {} - '@types/node@22.15.18': + '@types/node@22.16.0': dependencies: undici-types: 6.21.0 + '@types/node@24.0.10': + dependencies: + undici-types: 7.8.0 + '@types/plist@3.0.5': dependencies: - '@types/node': 22.15.18 + '@types/node': 24.0.10 xmlbuilder: 15.1.1 optional: true @@ -3305,88 +3330,82 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 22.15.18 + '@types/node': 24.0.10 '@types/verror@1.10.11': optional: true '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.15.18 + '@types/node': 24.0.10 optional: true - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.27.0 + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/type-utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.1 + eslint: 9.30.1 graphemer: 1.4.0 - ignore: 7.0.4 + ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.35.1 debug: 4.4.1 - eslint: 9.27.0 + eslint: 9.30.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.29.0': + '@typescript-eslint/project-service@8.35.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.29.0 - '@typescript-eslint/visitor-keys': 8.29.0 - - '@typescript-eslint/scope-manager@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - - '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0)(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) + '@typescript-eslint/types': 8.35.1 debug: 4.4.1 - eslint: 9.27.0 - ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.29.0': {} + '@typescript-eslint/scope-manager@8.35.1': + dependencies: + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 - '@typescript-eslint/types@8.32.1': {} + '@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 - '@typescript-eslint/typescript-estree@8.29.0(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.35.1(eslint@9.30.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.29.0 - '@typescript-eslint/visitor-keys': 8.29.0 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3) debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 + eslint: 9.30.1 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': + '@typescript-eslint/types@8.35.1': {} + + '@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 + '@typescript-eslint/project-service': 8.35.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3) + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/visitor-keys': 8.35.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -3397,42 +3416,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.29.0(eslint@9.27.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.35.1(eslint@9.30.1)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.27.0) - '@typescript-eslint/scope-manager': 8.29.0 - '@typescript-eslint/types': 8.29.0 - '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.3) - eslint: 9.27.0 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) + '@typescript-eslint/scope-manager': 8.35.1 + '@typescript-eslint/types': 8.35.1 + '@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3) + eslint: 9.30.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.27.0)(typescript@5.8.3)': + '@typescript-eslint/visitor-keys@8.35.1': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.27.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.29.0': - dependencies: - '@typescript-eslint/types': 8.29.0 - eslint-visitor-keys: 4.2.0 - - '@typescript-eslint/visitor-keys@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 + '@typescript-eslint/types': 8.35.1 + eslint-visitor-keys: 4.2.1 '@vencord/types@1.11.5': dependencies: '@types/lodash': 4.17.15 - '@types/node': 22.15.18 + '@types/node': 22.16.0 '@types/react': 18.3.1 '@types/react-dom': 18.3.1 discord-types: 1.3.26 @@ -3452,15 +3455,15 @@ snapshots: abbrev@1.1.1: {} - acorn-jsx@5.3.2(acorn@8.14.1): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.14.1 + acorn: 8.15.0 - acorn@8.14.1: {} + acorn@8.15.0: {} agent-base@6.0.2: dependencies: - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -3517,12 +3520,12 @@ snapshots: config-file-ts: 0.2.8-rc1 debug: 4.4.1 dmg-builder: 26.0.12(electron-builder-squirrel-windows@25.1.8) - dotenv: 16.5.0 + dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 electron-builder-squirrel-windows: 25.1.8(dmg-builder@26.0.12) electron-publish: 25.1.7 - form-data: 4.0.2 + form-data: 4.0.3 fs-extra: 10.1.0 hosted-git-info: 4.1.0 is-ci: 3.0.1 @@ -3530,7 +3533,7 @@ snapshots: js-yaml: 4.1.0 json5: 2.2.3 lazy-val: 1.0.5 - minimatch: 10.0.1 + minimatch: 10.0.3 resedit: 1.7.2 sanitize-filename: 1.6.3 semver: 7.7.2 @@ -3558,7 +3561,7 @@ snapshots: config-file-ts: 0.2.8-rc1 debug: 4.4.0 dmg-builder: 26.0.12(electron-builder-squirrel-windows@25.1.8) - dotenv: 16.5.0 + dotenv: 16.6.1 dotenv-expand: 11.0.7 ejs: 3.1.10 electron-builder-squirrel-windows: 25.1.8(dmg-builder@26.0.12) @@ -3635,14 +3638,16 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 - array-includes@3.1.8: + array-includes@3.1.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 + math-intrinsics: 1.1.0 array-unique@0.3.2: {} @@ -3651,7 +3656,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -3660,14 +3665,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 arraybuffer.prototype.slice@1.0.4: @@ -3675,7 +3680,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -3749,12 +3754,12 @@ snapshots: boolean@3.2.0: optional: true - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -4153,9 +4158,9 @@ snapshots: dotenv-expand@11.0.7: dependencies: - dotenv: 16.5.0 + dotenv: 16.6.1 - dotenv@16.5.0: {} + dotenv@16.6.1: {} dunder-proto@1.0.1: dependencies: @@ -4222,7 +4227,7 @@ snapshots: transitivePeerDependencies: - supports-color - electron-updater@6.6.2: + electron-updater@6.6.2(patch_hash=080505564abb2ebbda932bbf8fe91540c74dd905de994888d52ffce6f882f887): dependencies: builder-util-runtime: 9.3.1 fs-extra: 10.1.0 @@ -4235,10 +4240,10 @@ snapshots: transitivePeerDependencies: - supports-color - electron@36.2.1: + electron@37.2.0: dependencies: '@electron/get': 2.0.3 - '@types/node': 22.15.18 + '@types/node': 22.16.0 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -4252,7 +4257,7 @@ snapshots: iconv-lite: 0.6.3 optional: true - end-of-stream@1.4.4: + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -4260,7 +4265,7 @@ snapshots: err-code@2.0.3: {} - es-abstract@1.23.9: + es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -4289,7 +4294,9 @@ snapshots: is-array-buffer: 3.0.5 is-callable: 1.2.7 is-data-view: 1.0.2 + is-negative-zero: 2.0.3 is-regex: 1.2.1 + is-set: 2.0.3 is-shared-array-buffer: 1.0.4 is-string: 1.1.1 is-typed-array: 1.1.15 @@ -4304,6 +4311,7 @@ snapshots: safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 string.prototype.trim: 1.2.10 string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 @@ -4342,41 +4350,41 @@ snapshots: es6-error@4.1.1: optional: true - esbuild@0.25.4: + esbuild@0.25.5: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 + '@esbuild/aix-ppc64': 0.25.5 + '@esbuild/android-arm': 0.25.5 + '@esbuild/android-arm64': 0.25.5 + '@esbuild/android-x64': 0.25.5 + '@esbuild/darwin-arm64': 0.25.5 + '@esbuild/darwin-x64': 0.25.5 + '@esbuild/freebsd-arm64': 0.25.5 + '@esbuild/freebsd-x64': 0.25.5 + '@esbuild/linux-arm': 0.25.5 + '@esbuild/linux-arm64': 0.25.5 + '@esbuild/linux-ia32': 0.25.5 + '@esbuild/linux-loong64': 0.25.5 + '@esbuild/linux-mips64el': 0.25.5 + '@esbuild/linux-ppc64': 0.25.5 + '@esbuild/linux-riscv64': 0.25.5 + '@esbuild/linux-s390x': 0.25.5 + '@esbuild/linux-x64': 0.25.5 + '@esbuild/netbsd-arm64': 0.25.5 + '@esbuild/netbsd-x64': 0.25.5 + '@esbuild/openbsd-arm64': 0.25.5 + '@esbuild/openbsd-x64': 0.25.5 + '@esbuild/sunos-x64': 0.25.5 + '@esbuild/win32-arm64': 0.25.5 + '@esbuild/win32-ia32': 0.25.5 + '@esbuild/win32-x64': 0.25.5 escalade@3.2.0: {} escape-string-regexp@4.0.0: {} - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)): dependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -4386,28 +4394,28 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.27.0): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) - eslint: 9.27.0 + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1)(typescript@5.8.3) + eslint: 9.30.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1): dependencies: '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 + array-includes: 3.1.9 array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.27.0 + eslint: 9.30.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.27.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -4419,74 +4427,74 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-path-alias@2.1.0(eslint@9.27.0): + eslint-plugin-path-alias@2.1.0(eslint@9.30.1): dependencies: - eslint: 9.27.0 + eslint: 9.30.1 find-pkg: 2.0.0 get-tsconfig: 4.10.0 nanomatch: 1.2.13 transitivePeerDependencies: - supports-color - eslint-plugin-prettier@5.4.0(eslint@9.27.0)(prettier@3.5.3): + eslint-plugin-prettier@5.5.1(eslint@9.30.1)(prettier@3.6.2): dependencies: - eslint: 9.27.0 - prettier: 3.5.3 + eslint: 9.30.1 + prettier: 3.6.2 prettier-linter-helpers: 1.0.0 - synckit: 0.11.4 + synckit: 0.11.8 - eslint-plugin-simple-header@1.2.2(eslint@9.27.0): + eslint-plugin-simple-header@1.2.2(eslint@9.30.1): dependencies: - eslint: 9.27.0 + eslint: 9.30.1 - eslint-plugin-simple-import-sort@12.1.1(eslint@9.27.0): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.30.1): dependencies: - eslint: 9.27.0 + eslint: 9.30.1 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1): dependencies: - eslint: 9.27.0 + eslint: 9.30.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3) - eslint-scope@8.3.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} - eslint@9.27.0: + eslint@9.30.1: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.27.0 - '@eslint/plugin-kit': 0.3.1 + '@eslint/js': 9.30.1 + '@eslint/plugin-kit': 0.3.3 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -4504,11 +4512,11 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.3.0: + espree@10.4.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esquery@1.6.0: dependencies: @@ -4629,6 +4637,14 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + form-data@4.0.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + fragment-cache@0.2.1: dependencies: map-cache: 0.2.2 @@ -4715,7 +4731,7 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.2 + pump: 3.0.3 get-symbol-description@1.1.0: dependencies: @@ -4727,6 +4743,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + get-value@2.0.6: {} glob-parent@5.1.2: @@ -4871,7 +4891,7 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -4890,7 +4910,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -4919,7 +4939,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.4: {} + ignore@7.0.5: {} import-fresh@3.3.1: dependencies: @@ -5047,6 +5067,8 @@ snapshots: is-map@2.0.3: {} + is-negative-zero@2.0.3: {} + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -5290,19 +5312,23 @@ snapshots: minimatch@10.0.1: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 + + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@5.1.6: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -5456,14 +5482,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 object.pick@1.3.0: dependencies: @@ -5575,7 +5601,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.5.3: {} + prettier@3.6.2: {} proc-log@2.0.1: {} @@ -5593,9 +5619,9 @@ snapshots: proxy-from-env@1.1.0: optional: true - pump@3.0.2: + pump@3.0.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 punycode@2.3.1: {} @@ -5642,7 +5668,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -5870,12 +5896,12 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.4.0 - socks: 2.8.4 + debug: 4.4.1 + socks: 2.8.5 transitivePeerDependencies: - supports-color - socks@2.8.4: + socks@2.8.5: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 @@ -5911,7 +5937,7 @@ snapshots: standalone-electron-types@34.2.0: dependencies: - '@types/node': 22.15.18 + '@types/node': 22.16.0 stat-mode@1.0.0: {} @@ -5920,6 +5946,11 @@ snapshots: define-property: 0.2.5 object-copy: 0.1.0 + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -5938,7 +5969,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -5990,15 +6021,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - synckit@0.11.4: + synckit@0.11.8: dependencies: - '@pkgr/core': 0.2.4 - tslib: 2.8.1 + '@pkgr/core': 0.2.7 tar-stream@2.2.0: dependencies: bl: 4.1.0 - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 @@ -6059,12 +6089,10 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.8.1: {} - - tsx@4.19.4: + tsx@4.20.3: dependencies: - esbuild: 0.25.4 - get-tsconfig: 4.10.0 + esbuild: 0.25.5 + get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 @@ -6110,12 +6138,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.32.1(eslint@9.27.0)(typescript@5.8.3): + typescript-eslint@8.35.1(eslint@9.30.1)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) - eslint: 9.27.0 + '@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.1)(typescript@5.8.3))(eslint@9.30.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.35.1(eslint@9.30.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.35.1(eslint@9.30.1)(typescript@5.8.3) + eslint: 9.30.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -6131,6 +6159,8 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.8.0: {} + union-value@1.0.1: dependencies: arr-union: 3.1.0 diff --git a/scripts/build/build.mts b/scripts/build/build.mts index 2aa98fca8..ee3f7caad 100644 --- a/scripts/build/build.mts +++ b/scripts/build/build.mts @@ -58,6 +58,12 @@ await Promise.all([ outfile: "dist/js/main.js", footer: { js: "//# sourceURL=VCDMain" } }), + createContext({ + ...NodeCommonOpts, + entryPoints: ["src/main/arrpc/worker.ts"], + outfile: "dist/js/arRpcWorker.js", + footer: { js: "//# sourceURL=VCDArRpcWorker" } + }), createContext({ ...NodeCommonOpts, entryPoints: ["src/preload/index.ts"], diff --git a/src/main/about.ts b/src/main/about.ts index 88c3d6586..bed2f347b 100644 --- a/src/main/about.ts +++ b/src/main/about.ts @@ -4,25 +4,33 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { BrowserWindow } from "electron"; +import { app, BrowserWindow } from "electron"; import { join } from "path"; import { ICON_PATH, VIEW_DIR } from "shared/paths"; import { makeLinksOpenExternally } from "./utils/makeLinksOpenExternally"; -export function createAboutWindow() { +export async function createAboutWindow() { + const height = 750; + const width = height * (4 / 3); + const about = new BrowserWindow({ center: true, autoHideMenuBar: true, icon: ICON_PATH, - webPreferences: { - preload: join(__dirname, "updaterPreload.js") - } + height, + width }); makeLinksOpenExternally(about); - about.loadFile(join(VIEW_DIR, "about.html")); + const data = new URLSearchParams({ + APP_VERSION: app.getVersion() + }); + + about.loadFile(join(VIEW_DIR, "about.html"), { + search: data.toString() + }); return about; } diff --git a/src/main/arrpc.ts b/src/main/arrpc.ts deleted file mode 100644 index 9f6ee323e..000000000 --- a/src/main/arrpc.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Vesktop, a desktop app aiming to give you a snappier Discord Experience - * Copyright (c) 2023 Vendicated and Vencord contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import Server from "arrpc"; -import { IpcCommands } from "shared/IpcEvents"; - -import { sendRendererCommand } from "./ipcCommands"; -import { Settings } from "./settings"; - -let server: any; - -const inviteCodeRegex = /^(\w|-)+$/; - -export async function initArRPC() { - if (server || !Settings.store.arRPC) return; - - try { - server = await new Server(); - server.on("activity", (data: any) => sendRendererCommand(IpcCommands.RPC_ACTIVITY, JSON.stringify(data))); - server.on("invite", async (invite: string, callback: (valid: boolean) => void) => { - invite = String(invite); - if (!inviteCodeRegex.test(invite)) return callback(false); - - await sendRendererCommand(IpcCommands.RPC_INVITE, invite).then(callback); - }); - server.on("link", async (data: any, deepCallback: (valid: boolean) => void) => { - await sendRendererCommand(IpcCommands.RPC_DEEP_LINK, data).then(deepCallback); - }); - } catch (e) { - console.error("Failed to start arRPC server", e); - } -} - -Settings.addChangeListener("arRPC", initArRPC); diff --git a/src/main/arrpc/index.ts b/src/main/arrpc/index.ts new file mode 100644 index 000000000..d4d663db1 --- /dev/null +++ b/src/main/arrpc/index.ts @@ -0,0 +1,77 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2023 Vendicated and Vencord contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { resolve } from "path"; +import { IpcCommands } from "shared/IpcEvents"; +import { MessageChannel, Worker } from "worker_threads"; + +import { sendRendererCommand } from "../ipcCommands"; +import { Settings } from "../settings"; +import { ArRpcEvent, ArRpcHostEvent } from "./types"; + +let worker: Worker; + +const inviteCodeRegex = /^(\w|-)+$/; + +export async function initArRPC() { + if (worker || !Settings.store.arRPC) return; + + try { + const { port1: hostPort, port2: workerPort } = new MessageChannel(); + + worker = new Worker(resolve(__dirname, "./arRpcWorker.js"), { + workerData: { + workerPort + }, + transferList: [workerPort] + }); + + hostPort.on("message", async ({ type, nonce, data }: ArRpcEvent) => { + switch (type) { + case "activity": { + sendRendererCommand(IpcCommands.RPC_ACTIVITY, data); + break; + } + + case "invite": { + const invite = String(data); + + const response: ArRpcHostEvent = { + type: "ack-invite", + nonce, + data: false + }; + + if (!inviteCodeRegex.test(invite)) { + return hostPort.postMessage(response); + } + + response.data = await sendRendererCommand(IpcCommands.RPC_INVITE, invite).catch(() => false); + + hostPort.postMessage(response); + break; + } + + case "link": { + const response: ArRpcHostEvent = { + type: "ack-link", + nonce: nonce, + data: false + }; + + response.data = await sendRendererCommand(IpcCommands.RPC_DEEP_LINK, data).catch(() => false); + + hostPort.postMessage(response); + break; + } + } + }); + } catch (e) { + console.error("Failed to start arRPC server", e); + } +} + +Settings.addChangeListener("arRPC", initArRPC); diff --git a/src/main/arrpc/types.ts b/src/main/arrpc/types.ts new file mode 100644 index 000000000..6e2c7ee69 --- /dev/null +++ b/src/main/arrpc/types.ts @@ -0,0 +1,38 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2025 Vendicated and Vesktop contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +export type ArRpcEvent = ArRpcActivityEvent | ArRpcInviteEvent | ArRpcLinkEvent; +export type ArRpcHostEvent = ArRpcHostAckInviteEvent | ArRpcHostAckLinkEvent; + +export interface ArRpcActivityEvent { + type: "activity"; + nonce: string; + data: string; +} + +export interface ArRpcInviteEvent { + type: "invite"; + nonce: string; + data: string; +} + +export interface ArRpcLinkEvent { + type: "link"; + nonce: string; + data: any; +} + +export interface ArRpcHostAckInviteEvent { + type: "ack-invite"; + nonce: string; + data: boolean; +} + +export interface ArRpcHostAckLinkEvent { + type: "ack-link"; + nonce: string; + data: boolean; +} diff --git a/src/main/arrpc/worker.ts b/src/main/arrpc/worker.ts new file mode 100644 index 000000000..4c2c7787c --- /dev/null +++ b/src/main/arrpc/worker.ts @@ -0,0 +1,73 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2025 Vendicated and Vesktop contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import Server from "arrpc"; +import { randomUUID } from "crypto"; +import { MessagePort, workerData } from "worker_threads"; + +import { ArRpcEvent, ArRpcHostEvent } from "./types"; + +let server: any; + +type InviteCallback = (valid: boolean) => void; +type LinkCallback = InviteCallback; + +const inviteCallbacks = new Map(); +const linkCallbacks = new Map(); + +(async function () { + const { workerPort } = workerData as { workerPort: MessagePort }; + + server = await new Server(); + + server.on("activity", (data: any) => { + const event: ArRpcEvent = { + type: "activity", + data: JSON.stringify(data), + nonce: randomUUID() + }; + workerPort.postMessage(event); + }); + + server.on("invite", (invite: string, callback: InviteCallback) => { + const nonce = randomUUID(); + inviteCallbacks.set(nonce, callback); + + const event: ArRpcEvent = { + type: "invite", + data: invite, + nonce + }; + workerPort.postMessage(event); + }); + + server.on("link", async (data: any, callback: LinkCallback) => { + const nonce = randomUUID(); + linkCallbacks.set(nonce, callback); + + const event: ArRpcEvent = { + type: "link", + data, + nonce + }; + workerPort.postMessage(event); + }); + + workerPort.on("message", (e: ArRpcHostEvent) => { + switch (e.type) { + case "ack-invite": { + inviteCallbacks.get(e.nonce)?.(e.data); + inviteCallbacks.delete(e.nonce); + break; + } + case "ack-link": { + linkCallbacks.get(e.nonce)?.(e.data); + linkCallbacks.delete(e.nonce); + break; + } + } + }); +})(); diff --git a/src/main/index.ts b/src/main/index.ts index 5a55f405c..f58311362 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -28,23 +28,30 @@ process.env.VENCORD_USER_DATA_DIR = DATA_DIR; const isLinux = process.platform === "linux"; +export let enableHardwareAcceleration = true; + function init() { app.setAsDefaultProtocolClient("discord"); - const { disableSmoothScroll, hardwareAcceleration } = Settings.store; + const { disableSmoothScroll, hardwareAcceleration, hardwareVideoAcceleration } = Settings.store; const enabledFeatures = new Set(app.commandLine.getSwitchValue("enable-features").split(",")); const disabledFeatures = new Set(app.commandLine.getSwitchValue("disable-features").split(",")); + app.commandLine.removeSwitch("enable-features"); + app.commandLine.removeSwitch("disable-features"); - if (hardwareAcceleration === false) { + if (hardwareAcceleration === false || process.argv.includes("--disable-gpu")) { + enableHardwareAcceleration = false; app.disableHardwareAcceleration(); } else { - enabledFeatures.add("AcceleratedVideoEncoder"); - enabledFeatures.add("AcceleratedVideoDecoder"); - - if (isLinux) { - enabledFeatures.add("AcceleratedVideoDecodeLinuxGL"); - enabledFeatures.add("AcceleratedVideoDecodeLinuxZeroCopyGL"); + if (hardwareVideoAcceleration) { + enabledFeatures.add("AcceleratedVideoEncoder"); + enabledFeatures.add("AcceleratedVideoDecoder"); + + if (isLinux) { + enabledFeatures.add("AcceleratedVideoDecodeLinuxGL"); + enabledFeatures.add("AcceleratedVideoDecodeLinuxZeroCopyGL"); + } } } @@ -74,17 +81,22 @@ function init() { if (isLinux) { // Support TTS on Linux using https://wiki.archlinux.org/title/Speech_dispatcher app.commandLine.appendSwitch("enable-speech-dispatcher"); - - // Work around Gtk-ERROR: GTK 2/3 symbols detected. Using GTK 2/3 and GTK 4 in the same process is not supported - // https://github.com/electron/electron/issues/46538 - // TODO: Remove this when upstream fixes it - app.commandLine.appendSwitch("gtk-version", "3"); } disabledFeatures.forEach(feat => enabledFeatures.delete(feat)); - app.commandLine.appendSwitch("enable-features", [...enabledFeatures].filter(Boolean).join(",")); - app.commandLine.appendSwitch("disable-features", [...disabledFeatures].filter(Boolean).join(",")); + const enabledFeaturesArray = enabledFeatures.values().filter(Boolean).toArray(); + const disabledFeaturesArray = disabledFeatures.values().filter(Boolean).toArray(); + + if (enabledFeaturesArray.length) { + app.commandLine.appendSwitch("enable-features", enabledFeaturesArray.join(",")); + console.log("Enabled Chromium features:", enabledFeaturesArray.join(", ")); + } + + if (disabledFeaturesArray.length) { + app.commandLine.appendSwitch("disable-features", disabledFeaturesArray.join(",")); + console.log("Disabled Chromium features:", disabledFeaturesArray.join(", ")); + } // In the Flatpak on SteamOS the theme is detected as light, but SteamOS only has a dark mode, so we just override it if (isDeckGameMode) nativeTheme.themeSource = "dark"; diff --git a/src/main/ipc.ts b/src/main/ipc.ts index fa0fe33ba..94eb67158 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -20,6 +20,7 @@ import { } from "electron"; import { mkdirSync, readFileSync, watch } from "fs"; import { open, readFile } from "fs/promises"; +import { enableHardwareAcceleration } from "main"; import { release } from "os"; import { join } from "path"; import { debounce } from "shared/utils/debounce"; @@ -45,6 +46,7 @@ handleSync(IpcEvents.GET_RENDERER_CSS_FILE, () => join(__dirname, "renderer.css" handleSync(IpcEvents.GET_SETTINGS, () => Settings.plain); handleSync(IpcEvents.GET_VERSION, () => app.getVersion()); +handleSync(IpcEvents.GET_ENABLE_HARDWARE_ACCELERATION, () => enableHardwareAcceleration); handleSync( IpcEvents.SUPPORTS_WINDOWS_TRANSPARENCY, diff --git a/src/main/ipcCommands.ts b/src/main/ipcCommands.ts index 51332b484..8731b8df9 100644 --- a/src/main/ipcCommands.ts +++ b/src/main/ipcCommands.ts @@ -31,6 +31,11 @@ export interface IpcResponse { * You must add a handler for the message in the renderer process. */ export function sendRendererCommand(message: string, data?: any) { + if (mainWin.isDestroyed()) { + console.warn("Main window is destroyed, cannot send IPC command:", message); + return Promise.reject(new Error("Main window is destroyed")); + } + const nonce = randomUUID(); const promise = new Promise((resolve, reject) => { diff --git a/src/main/mainWindow.ts b/src/main/mainWindow.ts index 14f756146..762d39be9 100644 --- a/src/main/mainWindow.ts +++ b/src/main/mainWindow.ts @@ -388,6 +388,15 @@ function initSpellCheck(win: BrowserWindow) { initSpellCheckLanguages(win, Settings.store.spellCheckLanguages); } +function initDevtoolsListeners(win: BrowserWindow) { + win.webContents.on("devtools-opened", () => { + win.webContents.send(IpcEvents.DEVTOOLS_OPENED); + }); + win.webContents.on("devtools-closed", () => { + win.webContents.send(IpcEvents.DEVTOOLS_CLOSED); + }); +} + function initStaticTitle(win: BrowserWindow) { const listener = (e: { preventDefault: Function }) => e.preventDefault(); @@ -473,6 +482,7 @@ function createMainWindow() { makeLinksOpenExternally(win); initSettingsListeners(win); initSpellCheck(win); + initDevtoolsListeners(win); initStaticTitle(win); win.webContents.setUserAgent(BrowserUserAgent); diff --git a/src/preload/VesktopNative.ts b/src/preload/VesktopNative.ts index ec993c1d9..1525965f6 100644 --- a/src/preload/VesktopNative.ts +++ b/src/preload/VesktopNative.ts @@ -20,12 +20,19 @@ ipcRenderer.on(IpcEvents.SPELLCHECK_RESULT, (_, w: string, s: string[]) => { spellCheckCallbacks.forEach(cb => cb(w, s)); }); +let onDevtoolsOpen = () => {}; +let onDevtoolsClose = () => {}; + +ipcRenderer.on(IpcEvents.DEVTOOLS_OPENED, () => onDevtoolsOpen()); +ipcRenderer.on(IpcEvents.DEVTOOLS_CLOSED, () => onDevtoolsClose()); + export const VesktopNative = { app: { relaunch: () => invoke(IpcEvents.RELAUNCH), getVersion: () => sendSync(IpcEvents.GET_VERSION), setBadgeCount: (count: number) => invoke(IpcEvents.SET_BADGE_COUNT, count), - supportsWindowsTransparency: () => sendSync(IpcEvents.SUPPORTS_WINDOWS_TRANSPARENCY) + supportsWindowsTransparency: () => sendSync(IpcEvents.SUPPORTS_WINDOWS_TRANSPARENCY), + getEnableHardwareAcceleration: () => sendSync(IpcEvents.GET_ENABLE_HARDWARE_ACCELERATION) }, autostart: { isEnabled: () => sendSync(IpcEvents.AUTOSTART_ENABLED), @@ -56,7 +63,11 @@ export const VesktopNative = { focus: () => invoke(IpcEvents.FOCUS), close: (key?: string) => invoke(IpcEvents.CLOSE, key), minimize: (key?: string) => invoke(IpcEvents.MINIMIZE, key), - maximize: (key?: string) => invoke(IpcEvents.MAXIMIZE, key) + maximize: (key?: string) => invoke(IpcEvents.MAXIMIZE, key), + setDevtoolsCallbacks: (onOpen: () => void, onClose: () => void) => { + onDevtoolsOpen = onOpen; + onDevtoolsClose = onClose; + } }, capturer: { getLargeThumbnail: (id: string) => invoke(IpcEvents.CAPTURER_GET_LARGE_THUMBNAIL, id) diff --git a/src/renderer/components/settings/AutoStartToggle.tsx b/src/renderer/components/settings/AutoStartToggle.tsx index 2fec7a679..349917042 100644 --- a/src/renderer/components/settings/AutoStartToggle.tsx +++ b/src/renderer/components/settings/AutoStartToggle.tsx @@ -4,15 +4,16 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { Switch, useState } from "@vencord/types/webpack/common"; +import { useState } from "@vencord/types/webpack/common"; import { SettingsComponent } from "./Settings"; +import { VesktopSettingsSwitch } from "./VesktopSettingsSwitch"; export const AutoStartToggle: SettingsComponent = () => { const [autoStartEnabled, setAutoStartEnabled] = useState(VesktopNative.autostart.isEnabled()); return ( - { await VesktopNative.autostart[v ? "enable" : "disable"](); @@ -21,6 +22,6 @@ export const AutoStartToggle: SettingsComponent = () => { note="Automatically start Vesktop on computer start-up" > Start With System - + ); }; diff --git a/src/renderer/components/settings/NotificationBadgeToggle.tsx b/src/renderer/components/settings/NotificationBadgeToggle.tsx index 598bfa730..efc53539d 100644 --- a/src/renderer/components/settings/NotificationBadgeToggle.tsx +++ b/src/renderer/components/settings/NotificationBadgeToggle.tsx @@ -4,14 +4,14 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { Switch } from "@vencord/types/webpack/common"; import { setBadge } from "renderer/appBadge"; import { SettingsComponent } from "./Settings"; +import { VesktopSettingsSwitch } from "./VesktopSettingsSwitch"; export const NotificationBadgeToggle: SettingsComponent = ({ settings }) => { return ( - { settings.appBadge = v; @@ -21,6 +21,6 @@ export const NotificationBadgeToggle: SettingsComponent = ({ settings }) => { note="Show mention badge on the app icon" > Notification Badge - + ); }; diff --git a/src/renderer/components/settings/Settings.tsx b/src/renderer/components/settings/Settings.tsx index 7baae7c10..45e0a22e1 100644 --- a/src/renderer/components/settings/Settings.tsx +++ b/src/renderer/components/settings/Settings.tsx @@ -7,7 +7,7 @@ import "./settings.css"; import { ErrorBoundary } from "@vencord/types/components"; -import { Forms, Switch, Text } from "@vencord/types/webpack/common"; +import { Forms, Text } from "@vencord/types/webpack/common"; import { ComponentType } from "react"; import { Settings, useSettings } from "renderer/settings"; import { isMac, isWindows } from "renderer/utils"; @@ -16,6 +16,7 @@ import { AutoStartToggle } from "./AutoStartToggle"; import { DeveloperOptionsButton } from "./DeveloperOptions"; import { DiscordBranchPicker } from "./DiscordBranchPicker"; import { NotificationBadgeToggle } from "./NotificationBadgeToggle"; +import { VesktopSettingsSwitch } from "./VesktopSettingsSwitch"; import { WindowsTransparencyControls } from "./WindowsTransparencyControls"; interface BooleanSetting { @@ -38,6 +39,14 @@ const SettingsOptions: Record> title: "Hardware Acceleration", description: "Enable hardware acceleration", defaultValue: true + }, + { + key: "hardwareVideoAcceleration", + title: "Video Hardware Acceleration", + description: + "Enable hardware video acceleration. This can improve performance of screenshare and video playback, but may cause graphical glitches and infinitely loading streams.", + defaultValue: false, + disabled: () => Settings.store.hardwareAcceleration === false } ], "User Interface": [ @@ -132,32 +141,35 @@ const SettingsOptions: Record> function SettingsSections() { const Settings = useSettings(); - const sections = Object.entries(SettingsOptions).map(([title, settings]) => ( - - {settings.map(Setting => { - if (typeof Setting === "function") return ; + const sections = Object.entries(SettingsOptions).map(([title, settings], i, arr) => ( +
+ + {title} + - const { defaultValue, title, description, key, disabled, invisible } = Setting; - if (invisible?.()) return null; +
+ {settings.map(Setting => { + if (typeof Setting === "function") return ; - return ( - (Settings[key as any] = v)} - note={description} - disabled={disabled?.()} - key={key} - > - {title} - - ); - })} - + const { defaultValue, title, description, key, disabled, invisible } = Setting; + if (invisible?.()) return null; + + return ( + (Settings[key as any] = v)} + note={description} + disabled={disabled?.()} + key={key} + > + {title} + + ); + })} +
+ + {i < arr.length - 1 && } +
)); return <>{sections}; @@ -167,10 +179,11 @@ export default ErrorBoundary.wrap( function SettingsUI() { return ( - + {/* FIXME: Outdated type */} + {/* @ts-expect-error Outdated type */} + Vesktop Settings - ); diff --git a/src/renderer/components/settings/VesktopSettingsSwitch.tsx b/src/renderer/components/settings/VesktopSettingsSwitch.tsx new file mode 100644 index 000000000..bd1c2fb07 --- /dev/null +++ b/src/renderer/components/settings/VesktopSettingsSwitch.tsx @@ -0,0 +1,16 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2025 Vendicated and Vesktop contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { Switch } from "@vencord/types/webpack/common"; +import { ComponentProps } from "react"; + +export function VesktopSettingsSwitch(props: ComponentProps) { + return ( + + {props.children} + + ); +} diff --git a/src/renderer/components/settings/WindowsTransparencyControls.tsx b/src/renderer/components/settings/WindowsTransparencyControls.tsx index 14d3f8e9a..3e864a7eb 100644 --- a/src/renderer/components/settings/WindowsTransparencyControls.tsx +++ b/src/renderer/components/settings/WindowsTransparencyControls.tsx @@ -13,8 +13,8 @@ export const WindowsTransparencyControls: SettingsComponent = ({ settings }) => if (!VesktopNative.app.supportsWindowsTransparency()) return null; return ( - <> - Transparency Options +
+ Transparency Options Requires a full restart. You will need a theme that supports transparency for this to work. @@ -42,8 +42,6 @@ export const WindowsTransparencyControls: SettingsComponent = ({ settings }) => isSelected={v => v === settings.transparencyOption} serialize={s => s} /> - - - +
); }; diff --git a/src/renderer/components/settings/settings.css b/src/renderer/components/settings/settings.css index 294ecec8f..5ae9887b1 100644 --- a/src/renderer/components/settings/settings.css +++ b/src/renderer/components/settings/settings.css @@ -5,10 +5,30 @@ margin-top: 0.5em; } -.vcd-settings-section { - margin-top: 1.5rem; +.vcd-settings-title { + margin-bottom: 32px; } -.vcd-settings-title { - margin-bottom: 0.5rem; +.vcd-settings-category { + display: flex; + flex-direction: column; +} + +.vcd-settings-category-title { + margin-bottom: 16px; +} + +.vcd-settings-category-content { + display: flex; + flex-direction: column; + gap: 24px; +} + +.vcd-settings-category-divider { + margin-top: 32px; + margin-bottom: 32px; +} + +.vcd-settings-switch { + margin-bottom: 0; } \ No newline at end of file diff --git a/src/renderer/patches/allowDevToolsKeybind.ts b/src/renderer/patches/allowDevToolsKeybind.ts deleted file mode 100644 index 59698e231..000000000 --- a/src/renderer/patches/allowDevToolsKeybind.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Vesktop, a desktop app aiming to give you a snappier Discord Experience - * Copyright (c) 2025 Vendicated and Vesktop contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import { addPatch } from "./shared"; - -addPatch({ - patches: [ - { - find: '"mod+alt+i"', - replacement: { - match: /"discord\.com"===location\.host/, - replace: "false" - } - } - ] -}); diff --git a/src/renderer/patches/devtoolsFixes.ts b/src/renderer/patches/devtoolsFixes.ts new file mode 100644 index 000000000..188132966 --- /dev/null +++ b/src/renderer/patches/devtoolsFixes.ts @@ -0,0 +1,41 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2025 Vendicated and Vesktop contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { addPatch } from "./shared"; + +addPatch({ + patches: [ + // Discord Web blocks the devtools keybin on mac specifically, disable that + { + find: '"mod+alt+i"', + replacement: { + match: /"discord\.com"===location\.host/, + replace: "false" + } + }, + + // Discord Web uses an incredibly broken devtools detector with false positives. + // They "hide" (aka remove from storage) your token if it "detects" open devtools. + // Due to the false positives, this leads to random logouts. + // Patch their devtools detection to use proper Electron APIs instead to fix the false positives + { + find: ".setDevtoolsCallbacks(", + group: true, + replacement: [ + { + // eslint-disable-next-line no-useless-escape + match: /if\(null!=(\i)\)(?=.{0,50}\1\.window\.setDevtoolsCallbacks)/, + replace: "if(true)" + }, + { + // eslint-disable-next-line no-useless-escape + match: /\b\i\.window\.setDevtoolsCallbacks/g, + replace: "VesktopNative.win.setDevtoolsCallbacks" + } + ] + } + ] +}); diff --git a/src/renderer/patches/spellCheck.tsx b/src/renderer/patches/spellCheck.tsx index 5396b497a..89b886822 100644 --- a/src/renderer/patches/spellCheck.tsx +++ b/src/renderer/patches/spellCheck.tsx @@ -56,7 +56,7 @@ addContextMenuPatch("textarea-context", children => { const settings = useSettings(); const spellCheckLanguages = (settings.spellCheckLanguages ??= [...new Set(navigator.languages)]); - const pasteSectionIndex = children.findIndex(c => c?.props?.children?.some(c => c?.props?.id === "paste")); + const pasteSectionIndex = children.findIndex(c => c?.props?.children?.some?.(c => c?.props?.id === "paste")); children.splice( pasteSectionIndex === -1 ? children.length : pasteSectionIndex, diff --git a/src/renderer/patches/windowMethods.tsx b/src/renderer/patches/windowMethods.tsx index f58996f4f..5d6793409 100644 --- a/src/renderer/patches/windowMethods.tsx +++ b/src/renderer/patches/windowMethods.tsx @@ -21,6 +21,10 @@ addPatch({ // eslint-disable-next-line no-useless-escape match: /(focus(\(\i\)){).{0,150}?\.focus\(\i,\i\)/, replace: "$1VesktopNative.win.focus$2" + }, + { + match: /,getEnableHardwareAcceleration/, + replace: "$&:VesktopNative.app.getEnableHardwareAcceleration,_oldGetEnableHardwareAcceleration" } ] } diff --git a/src/renderer/patches/windowsTitleBar.tsx b/src/renderer/patches/windowsTitleBar.tsx index 1b9e180db..6156a7319 100644 --- a/src/renderer/patches/windowsTitleBar.tsx +++ b/src/renderer/patches/windowsTitleBar.tsx @@ -24,7 +24,7 @@ if (Settings.store.customTitleBar) }, // Visual Refresh { - find: '"data-windows":', + find: ".systemBar,", replacement: [ { // TODO: Fix eslint rule diff --git a/src/renderer/themedSplash.ts b/src/renderer/themedSplash.ts index 13d762b02..36ad28150 100644 --- a/src/renderer/themedSplash.ts +++ b/src/renderer/themedSplash.ts @@ -59,7 +59,7 @@ function resolveColor(color: string) { const updateSplashColors = () => { const bodyStyles = document.body.computedStyleMap(); - const color = bodyStyles.get("--text-normal"); + const color = bodyStyles.get("--text-default"); const backgroundColor = bodyStyles.get("--background-primary"); if (isValidColor(color)) { diff --git a/src/shared/IpcEvents.ts b/src/shared/IpcEvents.ts index e2da5db9c..03126d286 100644 --- a/src/shared/IpcEvents.ts +++ b/src/shared/IpcEvents.ts @@ -12,6 +12,7 @@ export const enum IpcEvents { GET_VERSION = "VCD_GET_VERSION", SUPPORTS_WINDOWS_TRANSPARENCY = "VCD_SUPPORTS_WINDOWS_TRANSPARENCY", + GET_ENABLE_HARDWARE_ACCELERATION = "VCD_GET_ENABLE_HARDWARE_ACCELERATION", RELAUNCH = "VCD_RELAUNCH", CLOSE = "VCD_CLOSE", @@ -48,14 +49,15 @@ export const enum IpcEvents { VIRT_MIC_START_SYSTEM = "VCD_VIRT_MIC_START_ALL", VIRT_MIC_STOP = "VCD_VIRT_MIC_STOP", - ARRPC_ACTIVITY = "VCD_ARRPC_ACTIVITY", - CLIPBOARD_COPY_IMAGE = "VCD_CLIPBOARD_COPY_IMAGE", DEBUG_LAUNCH_GPU = "VCD_DEBUG_LAUNCH_GPU", DEBUG_LAUNCH_WEBRTC_INTERNALS = "VCD_DEBUG_LAUNCH_WEBRTC", - IPC_COMMAND = "VCD_IPC_COMMAND" + IPC_COMMAND = "VCD_IPC_COMMAND", + + DEVTOOLS_OPENED = "VCD_DEVTOOLS_OPENED", + DEVTOOLS_CLOSED = "VCD_DEVTOOLS_CLOSED" } export const enum IpcCommands { diff --git a/src/shared/settings.d.ts b/src/shared/settings.d.ts index 0279aebaf..01c26e593 100644 --- a/src/shared/settings.d.ts +++ b/src/shared/settings.d.ts @@ -16,6 +16,7 @@ export interface Settings { enableMenu?: boolean; disableSmoothScroll?: boolean; hardwareAcceleration?: boolean; + hardwareVideoAcceleration?: boolean; arRPC?: boolean; appBadge?: boolean; disableMinSize?: boolean; diff --git a/static/views/about.html b/static/views/about.html index 6e66b2f7f..38ea463af 100644 --- a/static/views/about.html +++ b/static/views/about.html @@ -1,4 +1,6 @@ + About Vesktop + -

Vesktop

-

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

+

Vesktop v{{APP_VERSION}}

+

Vesktop is a cross platform Discord Desktop client, aiming to give you a better Discord experience

Links

+
+

License

+

+ Vesktop is licensed under the + GNU General Public License v3.0. +
+ This is free software, and you are welcome to redistribute it under certain conditions; see the license for + details. +

+
+

Acknowledgements

These awesome libraries empower Vesktop

@@ -53,23 +72,36 @@

Acknowledgements

  • rohrkabel - - A C++ RAII Pipewire-API Wrapper + - A C++ RAII Pipewire-API Wrapper
  • And many more awesome open source librariesmore open source libraries
  • - diff --git a/static/views/first-launch.html b/static/views/first-launch.html index 037216749..769dc774c 100644 --- a/static/views/first-launch.html +++ b/static/views/first-launch.html @@ -1,4 +1,6 @@ + Vesktop Setup +