From e7f4d6c0b3cf82ee21a7e587dbd251683ae8153e Mon Sep 17 00:00:00 2001 From: Maarten van Heusden <50550545+mmvanheusden@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:53:40 +0200 Subject: [PATCH] chore: add vectum base --- .eslintrc.yml | 21 - .gitignore | 8 +- .vscode/extensions.json | 5 +- README.md | 105 +- contributing.md | 3 - eslint.config.js | 18 + package-lock.json | 203 -- package.json | 28 +- pnpm-lock.yaml | 1647 +++++++++++ src-tauri/.gitignore | 11 + src-tauri/Cargo.lock | 2923 +++++++++++-------- src-tauri/Cargo.toml | 26 +- src-tauri/capabilities/default.json | 12 + src-tauri/capabilities/main.json | 18 - src-tauri/gen/schemas/capabilities.json | 1 - src-tauri/gen/schemas/desktop-schema.json | 1 - src-tauri/gen/schemas/linux-schema.json | 1 - src-tauri/gen/schemas/plugin-manifests.json | 1 - src-tauri/src/depotdownloader.rs | 77 + src-tauri/src/main.rs | 125 +- src-tauri/src/steam.rs | 41 + src-tauri/src/terminal.rs | 394 +++ src-tauri/tauri.conf.json | 16 +- src/assets/Hubot-Sans.woff2 | Bin 0 -> 170164 bytes src/assets/Windows.woff | Bin 0 -> 15664 bytes src/assets/javascript.svg | 1 - src/assets/tauri.svg | 6 - src/css/style.css | 145 + src/index.html | 307 +- src/main.js | 18 - src/styles.css | 109 - src/ts/main.ts | 215 ++ src/ts/preload.ts | 34 + src/ts/settings.ts | 49 + tsconfig.json | 27 + vite.config.ts | 35 + 36 files changed, 4990 insertions(+), 1641 deletions(-) delete mode 100644 .eslintrc.yml delete mode 100644 contributing.md create mode 100644 eslint.config.js delete mode 100644 package-lock.json create mode 100644 pnpm-lock.yaml create mode 100644 src-tauri/capabilities/default.json delete mode 100644 src-tauri/capabilities/main.json delete mode 100644 src-tauri/gen/schemas/capabilities.json delete mode 100644 src-tauri/gen/schemas/desktop-schema.json delete mode 100644 src-tauri/gen/schemas/linux-schema.json delete mode 100644 src-tauri/gen/schemas/plugin-manifests.json create mode 100644 src-tauri/src/depotdownloader.rs create mode 100644 src-tauri/src/steam.rs create mode 100644 src-tauri/src/terminal.rs create mode 100644 src/assets/Hubot-Sans.woff2 create mode 100644 src/assets/Windows.woff delete mode 100644 src/assets/javascript.svg delete mode 100644 src/assets/tauri.svg create mode 100644 src/css/style.css delete mode 100644 src/main.js delete mode 100644 src/styles.css create mode 100644 src/ts/main.ts create mode 100644 src/ts/preload.ts create mode 100644 src/ts/settings.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 00136bfd..00000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,21 +0,0 @@ -env: - browser: true - es2021: true - node: true -extends: eslint:recommended -parserOptions: - ecmaVersion: latest - sourceType: module -rules: - indent: - - error - - tab - linebreak-style: - - error - - unix - quotes: - - error - - double - semi: - - error - - never diff --git a/.gitignore b/.gitignore index 22badf4d..537be3ec 100644 --- a/.gitignore +++ b/.gitignore @@ -23,5 +23,9 @@ dist-ssr *.sln *.sw? -# SteamDepotDownloaderGUI files -# TODO \ No newline at end of file +# Vectum files +src-tauri/depotdownloader +src-tauri/*.zip +src-tauri/*.exe +**/DepotDownloader +**/DepotDownloader.xml \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 24d7cc6d..927d3e77 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,6 @@ { - "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] + "recommendations": [ + "tauri-apps.tauri-vscode", + "rust-lang.rust-analyzer" + ] } diff --git a/README.md b/README.md index 7bded5c5..c3528158 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,103 @@ -# SteamDepotDownloaderGUI +
+

SteamDepotDownloaderGUI

+

A graphical wrapper for DepotDownloader, designed to make downloading older versions of Steam games easy.

+ +→ Tutorial ~ +Website ~ +Example usage ← + + + +Last contribution badge +Download latest release badge +Download count badge + +Steam downgrader interface +
+ + +## Features +- **Cross-platform support** + | OS | Supported | + |---------|-----------| + | Windows | ✔️ | + | Linux | ✔️ | + | macOS | ❌ | + +- **Support for every major Linux terminal emulator** +
List of supported terminals + + * GNOME Terminal + * GNOME Console + * Konsole + * Xfce-terminal + * Alacritty + * XTerm + * Terminator + * cool-retro-term + * Kitty + * LXTerminal + * Deepin Terminal + * Terminology + * Tilix +
+ +- **Automatic download and extraction of DepotDownloader** + + +## How to download +> [!CAUTION] +> This GitHub repository is the only official place to download this software. +> If you have paid for this software, or downloaded this from an untrusted place, **you are at risk!** + + +### Windows: +Download the [latest Windows release](https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest). There are multiple variants to choose from, but you are probably looking for the file that ends with **`.exe`**. + + +### Linux: +You'll need at least one of the supported terminal emulators. You most likely already have one of these. + +Download the [latest Linux release](https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest). There are multiple options to choose from. + + +## Tutorials +* https://www.youtube.com/watch?v=H2COwT5OUOo How to download older versions of Steam games tutorial + +* https://www.youtube.com/watch?v=ogiDAuH3VdY How to download older versions of Subnautica tutorial + + +## Credits +This software makes use of the following projects: +- [**DepotDownloader**](https://github.com/SteamRE/DepotDownloader/) +- [Tauri](https://tauri.app) +- [Primer CSS](https://primer.style/css/) +- [async-process](https://github.com/smol-rs/async-process) +- [Hubut Sans](https://github.com/github/hubot-sans) under [license](https://github.com/github/hubot-sans/blob/05d5ea150c20e6434485db8ffd2277ed18a9e911/LICENSE) + + +## Donate +You can donate [here](paypal.me/onderkin) or through the **donate** button in the interface + + +## Contribute +Every pull request is welcome! ;) +Please cleanup the code using: +```console +$ pnpm eslint --fix src/ +``` +Hacktoberfest tags are added :) + + +

+ + + + + + + + Hacktoberfest 2024 logo + +

-This branch will house the complete rewrite of SteamDepotDownloaderGUI, which will be written in Rust. -Tauri will be used as our desktop framework of choice. \ No newline at end of file diff --git a/contributing.md b/contributing.md deleted file mode 100644 index 73780c4a..00000000 --- a/contributing.md +++ /dev/null @@ -1,3 +0,0 @@ -# Contributing to SteamDepotDownloaderGUI - -TODO ! \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..607f01a7 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,18 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + { + files: ["src/**"], + rules: { + "semi": ["error", "always"], // semicolons + "indent": ["error", "tab"], // tabs indents + "linebreak-style": ["error", "unix"], + "quotes": ["error", "double"] + } + }, + eslint.configs.recommended, + ...tseslint.configs.stylistic, +); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 91713209..00000000 --- a/package-lock.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "name": "steamdepotdownloadergui", - "version": "3.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "steamdepotdownloadergui", - "version": "3.0.0", - "devDependencies": { - "@tauri-apps/cli": "^2.0.0-beta.0" - } - }, - "node_modules/@tauri-apps/cli": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-beta.1.tgz", - "integrity": "sha512-u3AcZPdHsg9qT3e9PSD0H2IVZetQvWuBOyF81CN7/sY+AJGOli7i2d38Bj4wJs50tuMotoseiMcxuyxTlAdBnw==", - "dev": true, - "bin": { - "tauri": "tauri.js" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/tauri" - }, - "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "2.0.0-beta.1", - "@tauri-apps/cli-darwin-x64": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-beta.1", - "@tauri-apps/cli-linux-arm64-musl": "2.0.0-beta.1", - "@tauri-apps/cli-linux-x64-gnu": "2.0.0-beta.1", - "@tauri-apps/cli-linux-x64-musl": "2.0.0-beta.1", - "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-beta.1", - "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-beta.1", - "@tauri-apps/cli-win32-x64-msvc": "2.0.0-beta.1" - } - }, - "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.1.tgz", - "integrity": "sha512-d71utEr9H3fXAI6nKPaPuINpnvMQn+UIscOTzTMcrmIDqptOO0ix8z6C3HSvNxV0OjtlxzNJGWwOb24U0OYrgw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.1.tgz", - "integrity": "sha512-bzsWZjQt5NG1uhbDTGw8Hmvm+J1d+9J7HXMMMwQc4E3kBns95sr4bIoXvgIq3cZYS4uyZOvdhEdjkSGg1c65Lg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.1.tgz", - "integrity": "sha512-FMnZpk4a5D9QgZKkT00P3f4CHEZFpn/b+pWfZJ7vxCdir+Cc1eKOHiqhvmMBEeLlYlQFBaYeAK0EaZWnN82ZJA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.1.tgz", - "integrity": "sha512-0kE65P+6ppeAOFsJV6av5VhkjDv1dcHkObErpjJHpwYowuC3aqaCCnH3biR9gNvcoVUXsCwmMA/BkxUpq9W9/g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.1.tgz", - "integrity": "sha512-Wsj1eSrrAVeuFQWJq1gVIA78I8JM50fEsxbrMAOf89ZXpCYxJTNCJkyRQyLB+yHhv9nmhA3a1Mmr5ubhRETy1Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.1.tgz", - "integrity": "sha512-LkzLJWg+ud2gWuq8yAWJ3Sahrp79Vbd2Cotbm/RbfMi7RbRV8TQYj4zfUhyFJVnk4nF89kTnwfNxLdTw67CAOw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.1.tgz", - "integrity": "sha512-Ro3PuLSNEZAw9/Rc2CP3k9P7LaUQ2TOFXJeW6G4aCXrd0MlJwlGhhjdZuLbmgzD1rda4dSpZGJPhbYvu8YD7eQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-SWNF+5B+lBbW/Kq1wTMVG9x97PqJUOo8eWAr/nlMm3J0lYbTWAa8/ScibaPjq82HiPhv8WCJXlcO6FEqWCoJ2A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-NvfP16fSlfq6GLHJH+gAxEsJn+Jvz3HoxMTLxAg7Ra0ycMODFu4xbNn6Hp7Djn297qTHHLYDva4Np6Whw5DUlQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.1.tgz", - "integrity": "sha512-9TKbDQyVHW0p1a7aXQEKg+MhCyFMpzD26puLKOxbTPiTcRUR4lUFq5Bhf1VR5ihoqnZNhJEtuR1mA16ZrIkuKQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - } - } -} diff --git a/package.json b/package.json index c5b7d766..f56cbe52 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,29 @@ { - "name": "steamdepotdownloadergui", + "name": "vectum", "private": true, - "version": "3.0.0", + "version": "3.0.0-alpha.1", "type": "module", "scripts": { - "tauri": "tauri", - "dev": "WEBKIT_DISABLE_COMPOSITING_MODE=1 tauri dev" + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "@tauri-apps/api": "2.0.0-rc.4", + "@tauri-apps/plugin-dialog": "2.0.0-rc.1", + "@tauri-apps/plugin-shell": "2.0.0-rc.1", + "jquery": "^3.7.1" }, "devDependencies": { - "@tauri-apps/cli": "^2.0.0-beta.0" - } + "@eslint/js": "^9.10.0", + "@tauri-apps/cli": "2.0.0-rc.15", + "@types/eslint__js": "^8.42.3", + "@types/jquery": "^3.5.30", + "eslint": "^9.10.0", + "typescript": "^5.6.2", + "typescript-eslint": "^8.5.0", + "vite": "^5.4.5" + }, + "packageManager": "pnpm@9.6.0+sha512.38dc6fba8dba35b39340b9700112c2fe1e12f10b17134715a4aa98ccf7bb035e76fd981cf0bb384dfa98f8d6af5481c2bef2f4266a24bfa20c34eb7147ce0b5e" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..b0b9556e --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1647 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@tauri-apps/api': + specifier: 2.0.0-rc.4 + version: 2.0.0-rc.4 + '@tauri-apps/plugin-dialog': + specifier: 2.0.0-rc.1 + version: 2.0.0-rc.1 + '@tauri-apps/plugin-shell': + specifier: 2.0.0-rc.1 + version: 2.0.0-rc.1 + jquery: + specifier: ^3.7.1 + version: 3.7.1 + devDependencies: + '@eslint/js': + specifier: ^9.10.0 + version: 9.10.0 + '@tauri-apps/cli': + specifier: 2.0.0-rc.15 + version: 2.0.0-rc.15 + '@types/eslint__js': + specifier: ^8.42.3 + version: 8.42.3 + '@types/jquery': + specifier: ^3.5.30 + version: 3.5.30 + eslint: + specifier: ^9.10.0 + version: 9.10.0 + typescript: + specifier: ^5.6.2 + version: 5.6.2 + typescript-eslint: + specifier: ^8.5.0 + version: 8.5.0(eslint@9.10.0)(typescript@5.6.2) + vite: + specifier: ^5.4.5 + version: 5.4.5 + +packages: + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.10.0': + resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.1.0': + resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rollup/rollup-android-arm-eabi@4.21.3': + resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.21.3': + resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.21.3': + resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.21.3': + resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.21.3': + resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.21.3': + resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.21.3': + resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.21.3': + resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.21.3': + resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.21.3': + resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.21.3': + resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.21.3': + resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.21.3': + resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.21.3': + resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.21.3': + resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==} + cpu: [x64] + os: [win32] + + '@tauri-apps/api@2.0.0-rc.4': + resolution: {integrity: sha512-UNiIhhKG08j4ooss2oEEVexffmWkgkYlC2M3GcX3VPtNsqFgVNL8Mcw/4Y7rO9M9S+ffAMnLOF5ypzyuyb8tyg==} + + '@tauri-apps/cli-darwin-arm64@2.0.0-rc.15': + resolution: {integrity: sha512-WuzQRELJTeSHe/uLu6IClCCEkwQy4qtZdHUmcAW3baKD217WCytn4jQ5+NFs2GxhK1a2GLHMQtQZSFTLkKiXkw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tauri-apps/cli-darwin-x64@2.0.0-rc.15': + resolution: {integrity: sha512-71H1dNWlEr+Hyi096Ir3SnlClw4CSR4MhJ8UG8IUBqYwydJPYFzA+GFWRAgnPgcV6sBzdt8trcV9BLV4teDzEw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.15': + resolution: {integrity: sha512-hO7AS09l6XZRCu/vqvB/iv6CvIlD//h9njhyw++0tJPCNH3X4rl13ji6SnoO0V6ZUCEeCeQBTAALsanYAlZelQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.15': + resolution: {integrity: sha512-r9FrwY83TD4w3vX7J9zS3GPSeis0YWq52p/MVLYR1i8sSJppbvYY72EXi5pR2CZ3vb+6z9/w7LpYTv+hOd2RbA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.15': + resolution: {integrity: sha512-PqMn3/GiqLAhs7p0jr5XqwWN1t7SAgvo6+bFuYNL/SWx1Ui6mOck3ncfDkf+dQAnXnrhX2Qfwkl3agiOZxUZtA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.15': + resolution: {integrity: sha512-o8lvgVBGXwthMV8+8EzEwXQY5jk2q+c700xeC/LY+J0lBL5ai3i0revlhO+3RwKnjnRLZMCXatr5K3gGtXIsoQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.15': + resolution: {integrity: sha512-cmANCyhcdInZSfIM3CPjA0eDu1toYABapSttA1rHbNrcJrHIq2KPKRCNuXIjWiBggxfIhJKWX7mTgQCQIyHd/w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.15': + resolution: {integrity: sha512-FyWwCQb+uCCBtEDTDKtILH3wv0TWCQ2mXwMyZlibpbZ4RbaV5yDY82h8h7usfEuPHtBtAJHknHvX5WV1ETl5kw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.15': + resolution: {integrity: sha512-+bOBX7EdpmkCSBxgd9HcC/p9LoG/q1a5dJebWFuL9GhmdPeb5hv4plB/OTUAtg1OnEVGPXhTiSkcdRatZVryfA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.15': + resolution: {integrity: sha512-Phpk18bs1YxC+OFYaZNWiddYRmiZvMjB9Rzjl6M128gIkgnqDGnZyfWtM5GZ85/BmX1HVGgILK/46RU6Q88z1g==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tauri-apps/cli@2.0.0-rc.15': + resolution: {integrity: sha512-w5cq2WBKYRJDCE5wi5gyjM79Cq3AchTFImbcGBB+uyB/m3PDBXEidaTBTHqwiup2hKbMivuBAzGUCHt+OfgBhA==} + engines: {node: '>= 10'} + hasBin: true + + '@tauri-apps/plugin-dialog@2.0.0-rc.1': + resolution: {integrity: sha512-H28gh6BfZtjflHQ+HrmWwunDriBI3AQLAKnMs50GA6zeNUULqbQr7VXbAAKeJL/0CmWcecID4PKXVoSlaWRhEg==} + + '@tauri-apps/plugin-shell@2.0.0-rc.1': + resolution: {integrity: sha512-JtNROc0rqEwN/g93ig5pK4cl1vUo2yn+osCpY9de64cy/d9hRzof7AuYOgvt/Xcd5VPQmlgo2AGvUh5sQRSR1A==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/eslint__js@8.42.3': + resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/jquery@3.5.30': + resolution: {integrity: sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/sizzle@2.3.8': + resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} + + '@typescript-eslint/eslint-plugin@8.5.0': + resolution: {integrity: sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.5.0': + resolution: {integrity: sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.5.0': + resolution: {integrity: sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.5.0': + resolution: {integrity: sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@8.5.0': + resolution: {integrity: sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.5.0': + resolution: {integrity: sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.5.0': + resolution: {integrity: sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@8.5.0': + resolution: {integrity: sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + 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.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.10.0: + resolution: {integrity: sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jquery@3.7.1: + resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.21.3: + resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.5.0: + resolution: {integrity: sha512-uD+XxEoSIvqtm4KE97etm32Tn5MfaZWgWfMMREStLxR6JzvHkc2Tkj7zhTEK5XmtpTmKHNnG8Sot6qDfhHtR1Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + vite@5.4.5: + resolution: {integrity: sha512-pXqR0qtb2bTwLkev4SE3r4abCNioP3GkjvIDLlzziPpXtHgiJIjuKl+1GN6ESOT3wMjG3JTeARopj2SwYaHTOA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0)': + dependencies: + eslint: 9.10.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 10.1.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.10.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.1.0': + dependencies: + levn: 0.4.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@rollup/rollup-android-arm-eabi@4.21.3': + optional: true + + '@rollup/rollup-android-arm64@4.21.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.21.3': + optional: true + + '@rollup/rollup-darwin-x64@4.21.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.21.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.21.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.21.3': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.21.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.21.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.21.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.21.3': + optional: true + + '@tauri-apps/api@2.0.0-rc.4': {} + + '@tauri-apps/cli-darwin-arm64@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-darwin-x64@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.15': + optional: true + + '@tauri-apps/cli@2.0.0-rc.15': + optionalDependencies: + '@tauri-apps/cli-darwin-arm64': 2.0.0-rc.15 + '@tauri-apps/cli-darwin-x64': 2.0.0-rc.15 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-rc.15 + '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-rc.15 + '@tauri-apps/cli-linux-arm64-musl': 2.0.0-rc.15 + '@tauri-apps/cli-linux-x64-gnu': 2.0.0-rc.15 + '@tauri-apps/cli-linux-x64-musl': 2.0.0-rc.15 + '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-rc.15 + '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-rc.15 + '@tauri-apps/cli-win32-x64-msvc': 2.0.0-rc.15 + + '@tauri-apps/plugin-dialog@2.0.0-rc.1': + dependencies: + '@tauri-apps/api': 2.0.0-rc.4 + + '@tauri-apps/plugin-shell@2.0.0-rc.1': + dependencies: + '@tauri-apps/api': 2.0.0-rc.4 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/eslint__js@8.42.3': + dependencies: + '@types/eslint': 9.6.1 + + '@types/estree@1.0.5': {} + + '@types/jquery@3.5.30': + dependencies: + '@types/sizzle': 2.3.8 + + '@types/json-schema@7.0.15': {} + + '@types/sizzle@2.3.8': {} + + '@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0)(typescript@5.6.2))(eslint@9.10.0)(typescript@5.6.2)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.5.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.5.0 + '@typescript-eslint/type-utils': 8.5.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/utils': 8.5.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.5.0 + eslint: 9.10.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.5.0(eslint@9.10.0)(typescript@5.6.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.5.0 + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.5.0 + debug: 4.3.7 + eslint: 9.10.0 + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.5.0': + dependencies: + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/visitor-keys': 8.5.0 + + '@typescript-eslint/type-utils@8.5.0(eslint@9.10.0)(typescript@5.6.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.5.0(eslint@9.10.0)(typescript@5.6.2) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@8.5.0': {} + + '@typescript-eslint/typescript-estree@8.5.0(typescript@5.6.2)': + dependencies: + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/visitor-keys': 8.5.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.5.0(eslint@9.10.0)(typescript@5.6.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0) + '@typescript-eslint/scope-manager': 8.5.0 + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.6.2) + eslint: 9.10.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@8.5.0': + dependencies: + '@typescript-eslint/types': 8.5.0 + eslint-visitor-keys: 3.4.3 + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escape-string-regexp@4.0.0: {} + + eslint-scope@8.0.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@9.10.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.10.0 + '@eslint/plugin-kit': 0.1.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7 + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.1.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flatted@3.3.1: {} + + fsevents@2.3.3: + optional: true + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + isexe@2.0.0: {} + + jquery@3.7.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.3: {} + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.0: {} + + picomatch@2.3.1: {} + + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + resolve-from@4.0.0: {} + + reusify@1.0.4: {} + + rollup@4.21.3: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.3 + '@rollup/rollup-android-arm64': 4.21.3 + '@rollup/rollup-darwin-arm64': 4.21.3 + '@rollup/rollup-darwin-x64': 4.21.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.3 + '@rollup/rollup-linux-arm-musleabihf': 4.21.3 + '@rollup/rollup-linux-arm64-gnu': 4.21.3 + '@rollup/rollup-linux-arm64-musl': 4.21.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.3 + '@rollup/rollup-linux-riscv64-gnu': 4.21.3 + '@rollup/rollup-linux-s390x-gnu': 4.21.3 + '@rollup/rollup-linux-x64-gnu': 4.21.3 + '@rollup/rollup-linux-x64-musl': 4.21.3 + '@rollup/rollup-win32-arm64-msvc': 4.21.3 + '@rollup/rollup-win32-ia32-msvc': 4.21.3 + '@rollup/rollup-win32-x64-msvc': 4.21.3 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + semver@7.6.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + source-map-js@1.2.1: {} + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + text-table@0.2.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@1.3.0(typescript@5.6.2): + dependencies: + typescript: 5.6.2 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.5.0(eslint@9.10.0)(typescript@5.6.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.10.0)(typescript@5.6.2))(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/parser': 8.5.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/utils': 8.5.0(eslint@9.10.0)(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + + typescript@5.6.2: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + vite@5.4.5: + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.21.3 + optionalDependencies: + fsevents: 2.3.3 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yocto-queue@0.1.0: {} diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore index f4dfb82b..4cb710f8 100644 --- a/src-tauri/.gitignore +++ b/src-tauri/.gitignore @@ -2,3 +2,14 @@ # will have compiled files and executables /target/ +# Generated by Tauri +# will have schema files for capabilities auto-completion +/gen/schemas + + +# DepotDownloader +depot/ +downloads/ +.DepotDownloader/ +Games/ +Depots/ \ No newline at end of file diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index ae3728f8..cf689a9c 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] @@ -18,10 +18,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "aho-corasick" -version = "1.1.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -58,185 +75,153 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.80" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" +name = "arbitrary" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" - -[[package]] -name = "async-broadcast" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" dependencies = [ - "event-listener 2.5.3", - "futures-core", + "derive_arbitrary", ] [[package]] -name = "async-channel" -version = "2.2.0" +name = "ashpd" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" +checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" dependencies = [ - "concurrent-queue", - "event-listener 5.1.0", - "event-listener-strategy 0.5.0", + "enumflags2", + "futures-channel", + "futures-util", + "rand 0.8.5", + "serde", + "serde_repr", + "tokio", + "url", + "zbus", +] + +[[package]] +name = "async-broadcast" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +dependencies = [ + "event-listener", + "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] -name = "async-executor" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" -dependencies = [ - "async-lock 3.3.0", - "async-task", - "concurrent-queue", - "fastrand 2.0.1", - "futures-lite 2.2.0", - "slab", -] - -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", -] - -[[package]] -name = "async-io" +name = "async-channel" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ - "async-lock 3.3.0", + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-io" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +dependencies = [ + "async-lock", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.2.0", + "futures-lite", "parking", - "polling 3.5.0", - "rustix 0.38.31", + "polling", + "rustix", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "async-lock" -version = "2.8.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 2.5.3", -] - -[[package]] -name = "async-lock" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" -dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "event-listener", + "event-listener-strategy", "pin-project-lite", ] [[package]] name = "async-process" -version = "1.8.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", + "async-channel", + "async-io", + "async-lock", "async-signal", + "async-task", "blocking", "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.31", - "windows-sys 0.48.0", + "event-listener", + "futures-lite", + "rustix", + "tracing", ] [[package]] name = "async-recursion" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "async-signal" -version = "0.2.5" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.1", - "async-lock 2.8.0", + "async-io", + "async-lock", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.31", + "rustix", "signal-hook-registry", "slab", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "async-task" -version = "4.7.0" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.77" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] @@ -270,23 +255,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.8.0", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -295,6 +280,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -303,9 +294,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ "serde", ] @@ -326,26 +317,32 @@ dependencies = [ ] [[package]] -name = "blocking" -version = "1.5.1" +name = "block2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel", - "async-lock 3.3.0", "async-task", - "fastrand 2.0.1", "futures-io", - "futures-lite 2.2.0", + "futures-lite", "piper", - "tracing", ] [[package]] name = "brotli" -version = "3.4.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -354,9 +351,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.5.1" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -364,29 +361,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.15.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a994c2b3ca201d9b263612a374263f05e7adde37c4707f693dcd375076d1f" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.14.3" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.49", -] +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -396,20 +379,41 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "cairo-rs" version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "cairo-sys-rs", "glib", "libc", @@ -430,18 +434,18 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.6" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" dependencies = [ "serde", ] @@ -472,11 +476,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" dependencies = [ + "jobserver", "libc", + "shlex", ] [[package]] @@ -498,9 +504,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", "target-lexicon", @@ -514,70 +520,68 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cfg_aliases" -version = "0.1.1" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - -[[package]] -name = "cfg_aliases" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.34" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", ] [[package]] name = "cocoa" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", "cocoa-foundation", - "core-foundation", + "core-foundation 0.10.0", "core-graphics", - "foreign-types", + "foreign-types 0.5.0", "libc", "objc", ] [[package]] name = "cocoa-foundation" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "block", - "core-foundation", + "core-foundation 0.10.0", "core-graphics-types", "libc", "objc", ] -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -585,13 +589,19 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + [[package]] name = "convert_case" version = "0.4.0" @@ -609,67 +619,92 @@ dependencies = [ ] [[package]] -name = "core-foundation-sys" -version = "0.8.6" +name = "core-foundation" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.6.0", + "core-foundation 0.10.0", "core-graphics-types", - "foreign-types", + "foreign-types 0.5.0", "libc", ] [[package]] name = "core-graphics-types" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.6.0", + "core-foundation 0.10.0", "libc", ] [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] [[package]] -name = "crc32fast" -version = "1.4.0" +name = "crc" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -705,24 +740,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "ctor" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "darling" -version = "0.20.6" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c376d08ea6aa96aafe61237c7200d1241cb177b7d3a542d791f2d118e9cbb955" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -730,29 +765,35 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.6" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33043dcd19068b8192064c704b3f83eb464f91f1ff527b44a4e2b08d9cdb8855" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "darling_macro" -version = "0.20.6" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a91391accf613803c2a9bf9abccdbaa07c54b4244a5b64883f9c3c137c86be" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.49", + "syn 2.0.77", ] +[[package]] +name = "deflate64" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" + [[package]] name = "deranged" version = "0.3.11" @@ -775,16 +816,38 @@ dependencies = [ ] [[package]] -name = "derive_more" -version = "0.99.17" +name = "derive-getters" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "74ef43543e701c01ad77d3a5922755c6a1d71b22d942cb8042be4994b380caff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "derive_arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] @@ -795,27 +858,28 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", + "subtle", ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "cfg-if", - "dirs-sys-next", + "dirs-sys", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", + "option-ext", "redox_users", - "winapi 0.3.9", + "windows-sys 0.48.0", ] [[package]] @@ -825,57 +889,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" [[package]] -name = "dlib" -version = "0.5.2" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "libloading 0.8.1", + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] -name = "downcast-rs" -version = "1.2.0" +name = "dlopen2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "drm" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" -dependencies = [ - "bitflags 2.4.2", - "bytemuck", - "drm-ffi", - "drm-fourcc", - "rustix 0.38.31", -] - -[[package]] -name = "drm-ffi" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" -dependencies = [ - "drm-sys", - "rustix 0.38.31", -] - -[[package]] -name = "drm-fourcc" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" - -[[package]] -name = "drm-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" dependencies = [ + "dlopen2_derive", "libc", - "linux-raw-sys 0.6.4", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +dependencies = [ + "serde", ] [[package]] @@ -886,37 +939,37 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dtoa-short" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" dependencies = [ "dtoa", ] [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "embed-resource" -version = "2.4.1" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bde55e389bea6a966bd467ad1ad7da0ae14546a5bc794d16d1e55e7fca44881" +checksum = "4edcacde9351c33139a41e3c97eb2334351a81a2791bebb0b243df837128f602" dependencies = [ "cc", "memchr", "rustc_version", "toml 0.8.2", "vswhom", - "winreg 0.51.0", + "winreg", ] [[package]] @@ -927,18 +980,24 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" [[package]] name = "encoding_rs" -version = "0.8.33" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] [[package]] -name = "enumflags2" -version = "0.7.9" +name = "endi" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" dependencies = [ "enumflags2_derive", "serde", @@ -946,13 +1005,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] @@ -962,10 +1021,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno" -version = "0.3.8" +name = "erased-serde" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -973,37 +1042,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.3" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ad6fd685ce13acd6d9541a30f6db6567a7a24c9ffd4ba2955d29e3f22c8b27" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", "parking", @@ -1012,38 +1053,19 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" -dependencies = [ - "event-listener 5.1.0", + "event-listener", "pin-project-lite", ] [[package]] name = "fastrand" -version = "1.9.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" @@ -1060,18 +1082,27 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset 0.9.0", + "memoffset", "rustc_version", ] [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", +] + +[[package]] +name = "fluent-uri" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" +dependencies = [ + "bitflags 1.3.2", ] [[package]] @@ -1080,6 +1111,15 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -1087,7 +1127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared", + "foreign-types-shared 0.3.1", ] [[package]] @@ -1098,9 +1138,15 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -1160,26 +1206,11 @@ checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" -version = "1.13.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-lite" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" -dependencies = [ - "fastrand 2.0.1", + "fastrand", "futures-core", "futures-io", "parking", @@ -1194,7 +1225,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] @@ -1357,16 +1388,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "gethostname" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" -dependencies = [ - "libc", - "windows-targets 0.48.5", -] - [[package]] name = "getrandom" version = "0.1.16" @@ -1380,9 +1401,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1391,9 +1412,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "gio" @@ -1424,7 +1445,7 @@ dependencies = [ "gobject-sys", "libc", "system-deps", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1433,7 +1454,7 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "futures-channel", "futures-core", "futures-executor", @@ -1456,12 +1477,12 @@ version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] @@ -1540,22 +1561,22 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "h2" -version = "0.3.24" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", - "indexmap 2.2.3", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -1570,9 +1591,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "heck" @@ -1581,10 +1602,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hermit-abi" -version = "0.3.6" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hex" @@ -1592,6 +1625,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "html5ever" version = "0.26.0" @@ -1608,60 +1650,115 @@ dependencies = [ [[package]] name = "http" -version = "0.2.11" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", - "itoa 1.0.10", + "itoa 1.0.11", ] [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "hyper" -version = "0.14.28" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", - "itoa 1.0.10", + "itoa 1.0.11", "pin-project-lite", - "socket2 0.5.5", + "smallvec", "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", "tower-service", "tracing", - "want", ] [[package]] @@ -1675,7 +1772,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -1713,18 +1810,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "image" -version = "0.24.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-traits", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -1738,49 +1823,47 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "serde", ] [[package]] name = "infer" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" dependencies = [ "cfb", ] [[package]] -name = "instant" -version = "0.1.12" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is-docker" @@ -1809,9 +1892,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "javascriptcore-rs" @@ -1848,7 +1931,7 @@ dependencies = [ "jni-sys", "log", "thiserror", - "walkdir 2.4.0", + "walkdir", "windows-sys 0.45.0", ] @@ -1859,34 +1942,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] -name = "js-sys" -version = "0.3.68" +name = "jobserver" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] [[package]] name = "json-patch" -version = "1.2.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" +checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" dependencies = [ + "jsonptr", "serde", "serde_json", "thiserror", - "treediff", ] [[package]] -name = "kernel32-sys" -version = "0.2.2" +name = "jsonptr" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "fluent-uri", + "serde", + "serde_json", ] [[package]] @@ -1895,7 +1988,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "serde", "unicode-segmentation", ] @@ -1915,9 +2008,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libappindicator" @@ -1939,15 +2032,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" dependencies = [ "gtk-sys", - "libloading 0.7.4", + "libloading", "once_cell", ] [[package]] name = "libc" -version = "0.2.153" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" @@ -1956,72 +2049,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", - "winapi 0.3.9", -] - -[[package]] -name = "libloading" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "winapi", ] [[package]] name = "libredox" -version = "0.0.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "libc", - "redox_syscall", -] - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", ] [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - -[[package]] -name = "linux-raw-sys" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", ] [[package]] -name = "log" -version = "0.4.20" +name = "lockfree-object-pool" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -2038,6 +2105,16 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "lzma-rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" +dependencies = [ + "byteorder", + "crc", +] + [[package]] name = "mac" version = "0.1.1" @@ -2084,33 +2161,15 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memmap2" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" -dependencies = [ - "libc", -] +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" -version = "0.7.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -2123,33 +2182,44 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", "simd-adler32", ] [[package]] -name = "mio" -version = "0.8.10" +name = "miniz_oxide" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "muda" -version = "0.11.4" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e406691fa7749604bbc7964bde28a300572d52621bb84540f6907c0f8fe08737" +checksum = "ba8ac4080fb1e097c2c22acae467e46e4da72d941f02e82b67a87a2a89fa38b1" dependencies = [ "cocoa", "crossbeam-channel", + "dpi", "gtk", "keyboard-types", "objc", @@ -2157,20 +2227,38 @@ dependencies = [ "png", "serde", "thiserror", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", ] [[package]] name = "ndk" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "jni-sys", + "log", "ndk-sys", "num_enum", - "raw-window-handle 0.5.2", + "raw-window-handle", "thiserror", ] @@ -2182,29 +2270,29 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.4.1+23.1.7779620" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ "jni-sys", ] [[package]] name = "new_debug_unreachable" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nix" -version = "0.26.4" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "cfg-if", "libc", - "memoffset 0.7.1", + "memoffset", ] [[package]] @@ -2220,7 +2308,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ "overload", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2231,42 +2319,32 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "num_enum" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] @@ -2279,6 +2357,116 @@ dependencies = [ "objc_exception", ] +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.6.0", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -2299,30 +2487,80 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "33ea5043e58958ee56f3e15a90aee535795cd7dfd319846288d93c5b57d85cbe" [[package]] name = "open" -version = "4.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a083c0c7e5e4a8ec4176346cf61f67ac674e8bfb059d9226e1c54a96b377c12" +checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" dependencies = [ "is-wsl", "libc", "pathdiff", ] +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "ordered-stream" version = "0.2.0" @@ -2335,12 +2573,12 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.1.5" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2376,15 +2614,15 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2392,15 +2630,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -2409,6 +2647,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -2519,7 +2767,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] @@ -2550,10 +2798,30 @@ dependencies = [ ] [[package]] -name = "pin-project-lite" -version = "0.2.13" +name = "pin-project" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -2563,12 +2831,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.0.1", + "fastrand", "futures-io", ] @@ -2580,13 +2848,12 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plist" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64", - "indexmap 2.2.3", - "line-wrap", + "base64 0.22.1", + "indexmap 2.5.0", "quick-xml", "serde", "time", @@ -2602,37 +2869,22 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] name = "polling" -version = "2.8.0" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "polling" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if", "concurrent-queue", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.31", + "rustix", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2643,9 +2895,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -2705,27 +2960,27 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -2790,7 +3045,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.15", ] [[package]] @@ -2813,46 +3068,40 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "raw-window-handle" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.15", "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.10.3" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.5", - "regex-syntax 0.8.2", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -2866,13 +3115,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax 0.8.4", ] [[package]] @@ -2883,17 +3132,17 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "reqwest" -version = "0.11.24" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", @@ -2901,20 +3150,27 @@ dependencies = [ "h2", "http", "http-body", + "http-body-util", "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", "mime", + "native-tls", "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "system-configuration", "tokio", + "tokio-native-tls", "tokio-util", "tower-service", "url", @@ -2922,78 +3178,127 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg 0.50.0", + "windows-registry", +] + +[[package]] +name = "rfd" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" +dependencies = [ + "ashpd", + "block", + "dispatch", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", ] [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.37.27" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" -dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys", "windows-sys 0.52.0", ] [[package]] -name = "rustversion" -version = "1.0.14" +name = "rustls" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7" -dependencies = [ - "kernel32-sys", - "winapi 0.2.8", -] +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -3005,10 +3310,19 @@ dependencies = [ ] [[package]] -name = "schemars" -version = "0.8.16" +name = "schannel" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", "indexmap 1.9.3", @@ -3020,14 +3334,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.16" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] @@ -3042,6 +3356,29 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "selectors" version = "0.22.0" @@ -3064,71 +3401,83 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.196" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] -name = "serde_derive" -version = "1.0.196" +name = "serde-untagged" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + +[[package]] +name = "serde_derive" +version = "1.0.210" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "serde_derive_internals" -version = "0.26.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.113" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ - "itoa 1.0.10", + "itoa 1.0.11", + "memchr", "ryu", "serde", ] [[package]] name = "serde_repr" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -3140,22 +3489,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.10", + "itoa 1.0.11", "ryu", "serde", ] [[package]] name = "serde_with" -version = "3.6.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ - "base64", + "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.3", + "indexmap 2.5.0", "serde", "serde_derive", "serde_json", @@ -3165,14 +3514,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.6.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] @@ -3229,6 +3578,19 @@ dependencies = [ "digest", ] +[[package]] +name = "sha256" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" +dependencies = [ + "async-trait", + "bytes", + "hex", + "sha2", + "tokio", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -3240,19 +3602,25 @@ dependencies = [ [[package]] name = "shared_child" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" dependencies = [ "libc", - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] -name = "signal-hook-registry" -version = "1.4.1" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -3280,59 +3648,40 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.4.10" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "winapi 0.3.9", -] - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "softbuffer" -version = "0.4.1" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071916a85d1db274b4ed57af3a14afb66bd836ae7f82ebb6f1fd3455107830d9" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ - "as-raw-xcb-connection", "bytemuck", - "cfg_aliases 0.2.0", - "cocoa", + "cfg_aliases", "core-graphics", - "drm", - "fastrand 2.0.1", - "foreign-types", + "foreign-types 0.5.0", "js-sys", "log", - "memmap2", - "objc", - "raw-window-handle 0.6.0", + "objc2", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", "redox_syscall", - "rustix 0.38.31", - "tiny-xlib", "wasm-bindgen", - "wayland-backend", - "wayland-client", - "wayland-sys", "web-sys", - "windows-sys 0.52.0", - "x11rb", + "windows-sys 0.59.0", ] [[package]] @@ -3361,6 +3710,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -3382,16 +3737,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "steamdepotdownloadergui" -version = "3.0.0" -dependencies = [ - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-shell", -] - [[package]] name = "string_cache" version = "0.8.7" @@ -3420,17 +3765,23 @@ dependencies = [ [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "swift-rs" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" dependencies = [ - "base64", + "base64 0.21.7", "serde", "serde_json", ] @@ -3448,9 +3799,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.49" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -3459,26 +3810,29 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", - "core-foundation", + "bitflags 2.6.0", + "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -3486,12 +3840,12 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.2.0" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck", + "heck 0.5.0", "pkg-config", "toml 0.8.2", "version-compare", @@ -3499,21 +3853,21 @@ dependencies = [ [[package]] name = "tao" -version = "0.25.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa7ba6ee5b8908ba3a62e6a4f3683490ed732fca614cdd3f4c989bba548f9a9" +checksum = "2a93f2c6b8fdaeb7f417bda89b5bc767999745c3052969664ae1fa65892deb7e" dependencies = [ - "bitflags 1.3.2", - "cc", + "bitflags 2.6.0", "cocoa", - "core-foundation", + "core-foundation 0.10.0", "core-graphics", "crossbeam-channel", "dispatch", + "dlopen2", + "dpi", "gdkwayland-sys", "gdkx11-sys", "gtk", - "image", "instant", "jni", "lazy_static", @@ -3525,70 +3879,68 @@ dependencies = [ "objc", "once_cell", "parking_lot", - "png", - "raw-window-handle 0.5.2", - "raw-window-handle 0.6.0", + "raw-window-handle", "scopeguard", "tao-macros", "unicode-segmentation", "url", - "windows 0.52.0", - "windows-implement", + "windows 0.58.0", + "windows-core 0.58.0", "windows-version", "x11-dl", - "zbus", ] [[package]] name = "tao-macros" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] name = "target-lexicon" -version = "0.12.13" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.0-beta.2" +version = "2.0.0-rc.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a584d146c38bf174398dee0ec2cdd8f8fce142daee0306c370cf78f050304c60" +checksum = "2fa32e2741bda64c1da02d93252a466893180052fc6de61c8803b0356504b70d" dependencies = [ "anyhow", "bytes", - "cocoa", - "dirs-next", + "dirs", + "dunce", "embed_plist", "futures-util", - "getrandom 0.2.12", + "getrandom 0.2.15", "glob", "gtk", - "heck", + "heck 0.5.0", "http", "jni", "libc", "log", "mime", "muda", - "nix", - "objc", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", - "raw-window-handle 0.5.2", + "plist", + "raw-window-handle", "reqwest", "serde", "serde_json", "serde_repr", "serialize-to-javascript", "state", - "static_assertions", "swift-rs", "tauri-build", "tauri-macros", @@ -3599,23 +3951,24 @@ dependencies = [ "tokio", "tray-icon", "url", + "urlpattern", "webkit2gtk", "webview2-com", "window-vibrancy", - "windows 0.52.0", + "windows 0.58.0", ] [[package]] name = "tauri-build" -version = "2.0.0-beta.1" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314089a25d92a62f33f60d2a19c277f465e9088ee3ea251032ae914d6f2b1ce0" +checksum = "148441d64674b2885c1ba5baf3ae61662bb8753859ffcfb541962cbc6b847f39" dependencies = [ "anyhow", "cargo_toml", - "dirs-next", + "dirs", "glob", - "heck", + "heck 0.5.0", "json-patch", "schemars", "semver", @@ -3624,16 +3977,16 @@ dependencies = [ "tauri-utils", "tauri-winres", "toml 0.8.2", - "walkdir 2.4.0", + "walkdir", ] [[package]] name = "tauri-codegen" -version = "2.0.0-beta.1" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6ff13874390499976f01decf75103f28e7609abc5c155c6bfb56cf574a5628" +checksum = "72a15c3f9282c82871c69ddb65d02ae552738bbac848c8adcab521bf14d8b9e6" dependencies = [ - "base64", + "base64 0.22.1", "brotli", "ico", "json-patch", @@ -3645,33 +3998,34 @@ dependencies = [ "serde", "serde_json", "sha2", + "syn 2.0.77", "tauri-utils", "thiserror", "time", "url", "uuid", - "walkdir 2.4.0", + "walkdir", ] [[package]] name = "tauri-macros" -version = "2.0.0-beta.1" +version = "2.0.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18707774f70a8ec20dbf653f07d12af1e0d7c1e3a625b7bd5a2cfe72c2b2549b" +checksum = "f12d1aa317bec56f78388cf6012d788876d838595a48f95cbd7835642db356a0" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin" -version = "2.0.0-beta.1" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb732726fec855b56e4a238464f1b0c10006f618180ef402ce5f394d840e61b" +checksum = "d82a2adea16b8a71b7a5ad23f720bb13f8d2830b820cc1c266512314ba99bf67" dependencies = [ "anyhow", "glob", @@ -3681,14 +4035,53 @@ dependencies = [ "serde_json", "tauri-utils", "toml 0.8.2", - "walkdir 1.0.7", + "walkdir", +] + +[[package]] +name = "tauri-plugin-dialog" +version = "2.0.0-rc.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "785722c81beb4a6b729ae55d06aeb68d47166c933e64b727e33254dcb5d4d82d" +dependencies = [ + "log", + "raw-window-handle", + "rfd", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror", + "url", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.0.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cb1dfbbea322afbc9dec49351bc29edf4e85e74d37d9a3fcc72d67ed55ffdbd" +dependencies = [ + "anyhow", + "dunce", + "glob", + "percent-encoding", + "schemars", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "thiserror", + "url", + "uuid", ] [[package]] name = "tauri-plugin-shell" -version = "2.0.0-beta.0" +version = "2.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfaeb1d7afaff06304737abddd29cdada33419241d14eec85689d82675fc529e" +checksum = "e83800ddf78b820172efb5ed7310344e8e4f97fd30cd8237a3f20c12a79eb136" dependencies = [ "encoding_rs", "log", @@ -3702,61 +4095,65 @@ dependencies = [ "tauri", "tauri-plugin", "thiserror", + "tokio", ] [[package]] name = "tauri-runtime" -version = "2.0.0-beta.1" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d72194de56e885dbd9fd8c493ccf95012e584c928900188da248f9ea4223b23" +checksum = "389f78c8e8e6eff3897d8d9581087943b5976ea96a0ab5036be691f28c2b0df0" dependencies = [ + "dpi", "gtk", "http", "jni", - "raw-window-handle 0.5.2", + "raw-window-handle", "serde", "serde_json", "tauri-utils", "thiserror", "url", - "windows 0.52.0", + "windows 0.58.0", ] [[package]] name = "tauri-runtime-wry" -version = "2.0.0-beta.1" +version = "2.0.0-rc.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74a71bd248a7ce857835b1f65845a9de22171e30d8129e018b42961502565efb" +checksum = "e17625b7cf63958d53945e199391d11c9f195fb3d1cb8aeb64dc3084d0091b92" dependencies = [ - "cocoa", "gtk", "http", "jni", - "nix", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", - "raw-window-handle 0.5.2", + "raw-window-handle", "softbuffer", "tao", "tauri-runtime", "tauri-utils", + "url", "webkit2gtk", "webview2-com", - "windows 0.52.0", + "windows 0.58.0", "wry", ] [[package]] name = "tauri-utils" -version = "2.0.0-beta.1" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7104f0639a1f3a7ebd7aac793be47d7924f569e7c10c6853083529bf9bb3fe6" +checksum = "3019641087c9039b57ebfca95fa42a93c07056845b7d8d57c8966061bcee83b4" dependencies = [ "brotli", "cargo_metadata", "ctor", "dunce", "glob", - "heck", "html5ever", "infer", "json-patch", @@ -3766,16 +4163,19 @@ dependencies = [ "phf 0.11.2", "proc-macro2", "quote", + "regex", "schemars", "semver", "serde", + "serde-untagged", "serde_json", "serde_with", "swift-rs", "thiserror", "toml 0.8.2", "url", - "walkdir 2.4.0", + "urlpattern", + "walkdir", ] [[package]] @@ -3790,14 +4190,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", - "fastrand 2.0.1", - "rustix 0.38.31", - "windows-sys 0.52.0", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -3819,29 +4220,29 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.57" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.57" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -3849,12 +4250,12 @@ dependencies = [ [[package]] name = "time" -version = "0.3.34" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", - "itoa 1.0.10", + "itoa 1.0.11", "num-conv", "powerfmt", "serde", @@ -3870,31 +4271,19 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ "num-conv", "time-core", ] -[[package]] -name = "tiny-xlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4098d49269baa034a8d1eae9bd63e9fa532148d772121dace3bcd6a6c98eb6d" -dependencies = [ - "as-raw-xcb-connection", - "ctor", - "libloading 0.8.1", - "tracing", -] - [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -3907,32 +4296,53 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.36.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "pin-project-lite", - "socket2 0.5.5", - "windows-sys 0.48.0", + "signal-hook-registry", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", ] [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -3974,7 +4384,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.3", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", @@ -3987,7 +4397,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.2.3", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", @@ -3995,10 +4405,31 @@ dependencies = [ ] [[package]] -name = "tower-service" -version = "0.3.2" +name = "tower" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -4019,7 +4450,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] @@ -4063,31 +4494,23 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.11.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4d9ddd4a7c0f3b6862af1c4911b529a49db4ee89310d3a258859c2f5053fdd" +checksum = "044d7738b3d50f288ddef035b793228740ad4d927f5466b0af55dc15e7e03cfe" dependencies = [ - "cocoa", "core-graphics", "crossbeam-channel", - "dirs-next", + "dirs", "libappindicator", "muda", - "objc", + "objc2", + "objc2-app-kit", + "objc2-foundation", "once_cell", "png", "serde", "thiserror", - "windows-sys 0.52.0", -] - -[[package]] -name = "treediff" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d127780145176e2b5d16611cc25a900150e86e9fd79d3bde6ff3a37359c9cb5" -dependencies = [ - "serde_json", + "windows-sys 0.59.0", ] [[package]] @@ -4096,6 +4519,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" @@ -4108,9 +4537,50 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ - "memoffset 0.9.0", + "memoffset", "tempfile", - "winapi 0.3.9", + "winapi", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", ] [[package]] @@ -4121,30 +4591,36 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -4152,6 +4628,18 @@ dependencies = [ "serde", ] +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + [[package]] name = "utf-8" version = "0.7.6" @@ -4160,11 +4648,11 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.15", ] [[package]] @@ -4174,16 +4662,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] -name = "version-compare" -version = "0.1.1" +name = "vcpkg" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vectum" +version = "3.0.0-alpha.1" +dependencies = [ + "async-process", + "derive-getters", + "reqwest", + "serde", + "serde_json", + "sha256", + "tauri", + "tauri-build", + "tauri-plugin-dialog", + "tauri-plugin-shell", + "zip", +] + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vswhom" @@ -4205,30 +4716,13 @@ dependencies = [ "libc", ] -[[package]] -name = "waker-fn" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" - [[package]] name = "walkdir" -version = "1.0.7" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ - "kernel32-sys", - "same-file 0.1.3", - "winapi 0.2.8", -] - -[[package]] -name = "walkdir" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" -dependencies = [ - "same-file 1.0.6", + "same-file", "winapi-util", ] @@ -4255,34 +4749,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.41" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -4292,9 +4787,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4302,22 +4797,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" @@ -4332,60 +4827,11 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wayland-backend" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" -dependencies = [ - "cc", - "downcast-rs", - "rustix 0.38.31", - "scoped-tls", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" -dependencies = [ - "bitflags 2.4.2", - "rustix 0.38.31", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" -dependencies = [ - "proc-macro2", - "quick-xml", - "quote", -] - -[[package]] -name = "wayland-sys" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" -dependencies = [ - "dlib", - "log", - "once_cell", - "pkg-config", -] - [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -4437,46 +4883,40 @@ dependencies = [ [[package]] name = "webview2-com" -version = "0.28.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ae9c7e420783826cf769d2c06ac9ba462f450eca5893bb8c6c6529a4e5dd33" +checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.52.0", - "windows-core", + "windows 0.58.0", + "windows-core 0.58.0", "windows-implement", "windows-interface", ] [[package]] name = "webview2-com-macros" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" +checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "webview2-com-sys" -version = "0.28.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6ad85fceee6c42fa3d61239eba5a11401bf38407a849ed5ea1b407df08cca72" +checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" dependencies = [ "thiserror", - "windows 0.52.0", - "windows-core", + "windows 0.58.0", + "windows-core 0.58.0", ] -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -4487,12 +4927,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -4501,11 +4935,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] @@ -4516,14 +4950,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window-vibrancy" -version = "0.4.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6abc2b9c56bd95887825a1ce56cde49a2a97c07e28db465d541f5098a2656c" +checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" dependencies = [ - "cocoa", - "objc", - "raw-window-handle 0.5.2", - "windows-sys 0.52.0", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", "windows-version", ] @@ -4538,14 +4973,12 @@ dependencies = [ [[package]] name = "windows" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core", - "windows-implement", - "windows-interface", - "windows-targets 0.52.0", + "windows-core 0.58.0", + "windows-targets 0.52.6", ] [[package]] @@ -4554,29 +4987,72 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", ] [[package]] name = "windows-implement" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", ] [[package]] name = "windows-interface" -version = "0.52.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.49", + "syn 2.0.77", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -4603,7 +5079,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -4638,26 +5123,27 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows-version" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", ] [[package]] @@ -4674,9 +5160,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -4692,9 +5178,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -4710,9 +5196,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -4728,9 +5220,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4746,9 +5238,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4764,9 +5256,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4782,9 +5274,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -4797,19 +5289,9 @@ dependencies = [ [[package]] name = "winreg" -version = "0.50.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - -[[package]] -name = "winreg" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ "cfg-if", "windows-sys 0.48.0", @@ -4817,16 +5299,16 @@ dependencies = [ [[package]] name = "wry" -version = "0.35.2" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3016c47c9b6f7029a9da7cd48af8352327226bba0e955f3c92e2966651365a9" +checksum = "f4d715cf5fe88e9647f3d17b207b6d060d4a88e7171d4ccb2d2c657dd1d44728" dependencies = [ - "base64", + "base64 0.22.1", "block", - "cfg_aliases 0.1.1", "cocoa", "core-graphics", "crossbeam-channel", + "dpi", "dunce", "gdkx11", "gtk", @@ -4836,26 +5318,21 @@ dependencies = [ "jni", "kuchikiki", "libc", - "log", "ndk", - "ndk-context", - "ndk-sys", "objc", "objc_id", "once_cell", - "raw-window-handle 0.5.2", - "serde", - "serde_json", + "percent-encoding", + "raw-window-handle", "sha2", "soup3", "tao-macros", "thiserror", - "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.52.0", - "windows-implement", + "windows 0.58.0", + "windows-core 0.58.0", "windows-version", "x11-dl", ] @@ -4881,72 +5358,44 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "x11rb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading 0.8.1", - "once_cell", - "rustix 0.38.31", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" - [[package]] name = "xdg-home" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" dependencies = [ "libc", - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] name = "zbus" -version = "3.15.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c45d06ae3b0f9ba1fb2671268b975557d8f5a84bb5ec6e43964f87e763d8bca8" +checksum = "7b8e3d6ae3342792a6cc2340e4394334c7402f3d793b390d2c5494a4032b3030" dependencies = [ "async-broadcast", - "async-executor", - "async-fs", - "async-io 1.13.0", - "async-lock 2.8.0", "async-process", "async-recursion", - "async-task", "async-trait", - "blocking", - "byteorder", "derivative", "enumflags2", - "event-listener 2.5.3", + "event-listener", "futures-core", "futures-sink", "futures-util", "hex", "nix", - "once_cell", "ordered-stream", "rand 0.8.5", "serde", "serde_repr", "sha1", "static_assertions", + "tokio", "tracing", "uds_windows", - "winapi 0.3.9", + "windows-sys 0.52.0", "xdg-home", "zbus_macros", "zbus_names", @@ -4955,9 +5404,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.15.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a1ba45ed0ad344b85a2bb5a1fe9830aed23d67812ea39a586e7d0136439c7d" +checksum = "b7a3e850ff1e7217a3b7a07eba90d37fe9bb9e89a310f718afcde5885ca9b6d7" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", @@ -4969,9 +5418,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "2.6.0" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", @@ -4979,24 +5428,136 @@ dependencies = [ ] [[package]] -name = "zvariant" -version = "3.15.0" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "zip" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "deflate64", + "displaydoc", + "flate2", + "hmac", + "indexmap 2.5.0", + "lzma-rs", + "memchr", + "pbkdf2", + "rand 0.8.5", + "sha1", + "thiserror", + "time", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zvariant" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e09e8be97d44eeab994d752f341e67b3b0d80512a8b315a0671d47232ef1b65" +dependencies = [ + "endi", "enumflags2", - "libc", "serde", "static_assertions", + "url", "zvariant_derive", ] [[package]] name = "zvariant_derive" -version = "3.15.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +checksum = "72a5857e2856435331636a9fbb415b09243df4521a267c5bedcd5289b4d5799e" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", @@ -5007,9 +5568,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" dependencies = [ "proc-macro2", "quote", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7087f316..d6c36241 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,21 +1,23 @@ [package] -name = "steamdepotdownloadergui" -version = "3.0.0" -description = "A Tauri App" +name = "vectum" +version = "3.0.0-alpha.1" +description = "Download older versions of Steam games with DepotDownloader" authors = ["mmvanheusden"] edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build = { version = "2.0.0-beta", features = [] } +tauri-build = { version = "2.0.0-rc.11", features = [] } [dependencies] -tauri = { version = "2.0.0-beta", features = [] } -tauri-plugin-shell = "2.0.0-beta" -serde_json = "1.0" - -[features] -# this feature is used for production builds or when `devPath` points to the filesystem -# DO NOT REMOVE!! -custom-protocol = ["tauri/custom-protocol"] +tauri = { version = "2.0.0-rc.14", features = [] } +tauri-plugin-shell = "2.0.0-rc.3" +tauri-plugin-dialog = "2.0.0-rc.7" +serde = { version = "1", features = ["derive"] } +serde_json = "1" +derive-getters = "0.5.0" +sha256 = "1.5.0" +reqwest = { version = "0.12.7" } +zip = "2.2.0" +async-process = "2.3.0" diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json new file mode 100644 index 00000000..15114ef4 --- /dev/null +++ b/src-tauri/capabilities/default.json @@ -0,0 +1,12 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Capability for the main window", + "windows": ["main"], + "permissions": [ + "core:default", + "shell:allow-open", + "dialog:default", + "shell:default" + ] +} \ No newline at end of file diff --git a/src-tauri/capabilities/main.json b/src-tauri/capabilities/main.json deleted file mode 100644 index 8f65df64..00000000 --- a/src-tauri/capabilities/main.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "./schemas/desktop-schema.json", - "identifier": "default", - "description": "Capability for the main window", - "windows": [ - "main" - ], - "permissions": [ - "path:default", - "event:default", - "window:default", - "app:default", - "resources:default", - "menu:default", - "tray:default", - "shell:allow-open" - ] -} diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json deleted file mode 100644 index 0e44dbab..00000000 --- a/src-tauri/gen/schemas/capabilities.json +++ /dev/null @@ -1 +0,0 @@ -{"default":{"identifier":"default","description":"Capability for the main window","context":"local","windows":["main"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","shell:allow-open"],"platforms":["linux","macOS","windows","android","iOS"]}} \ No newline at end of file diff --git a/src-tauri/gen/schemas/desktop-schema.json b/src-tauri/gen/schemas/desktop-schema.json deleted file mode 100644 index e42d396a..00000000 --- a/src-tauri/gen/schemas/desktop-schema.json +++ /dev/null @@ -1 +0,0 @@ -{schema_str} \ No newline at end of file diff --git a/src-tauri/gen/schemas/linux-schema.json b/src-tauri/gen/schemas/linux-schema.json deleted file mode 100644 index e42d396a..00000000 --- a/src-tauri/gen/schemas/linux-schema.json +++ /dev/null @@ -1 +0,0 @@ -{schema_str} \ No newline at end of file diff --git a/src-tauri/gen/schemas/plugin-manifests.json b/src-tauri/gen/schemas/plugin-manifests.json deleted file mode 100644 index 8cef28f2..00000000 --- a/src-tauri/gen/schemas/plugin-manifests.json +++ /dev/null @@ -1 +0,0 @@ -{"app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"version":null,"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]},"scope":{}},"allow-app-show":{"version":null,"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]},"scope":{}},"allow-name":{"version":null,"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]},"scope":{}},"allow-tauri-version":{"version":null,"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]},"scope":{}},"allow-version":{"version":null,"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]},"scope":{}},"deny-app-hide":{"version":null,"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]},"scope":{}},"deny-app-show":{"version":null,"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]},"scope":{}},"deny-name":{"version":null,"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]},"scope":{}},"deny-tauri-version":{"version":null,"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]},"scope":{}},"deny-version":{"version":null,"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"version":null,"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]},"scope":{}},"allow-emit-to":{"version":null,"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]},"scope":{}},"allow-listen":{"version":null,"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]},"scope":{}},"allow-unlisten":{"version":null,"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]},"scope":{}},"deny-emit":{"version":null,"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]},"scope":{}},"deny-emit-to":{"version":null,"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]},"scope":{}},"deny-listen":{"version":null,"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]},"scope":{}},"deny-unlisten":{"version":null,"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":[]},"permissions":{"allow-append":{"version":null,"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]},"scope":{}},"allow-create-default":{"version":null,"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]},"scope":{}},"allow-get":{"version":null,"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]},"scope":{}},"allow-insert":{"version":null,"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]},"scope":{}},"allow-is-checked":{"version":null,"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]},"scope":{}},"allow-is-enabled":{"version":null,"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]},"scope":{}},"allow-items":{"version":null,"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]},"scope":{}},"allow-new":{"version":null,"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]},"scope":{}},"allow-popup":{"version":null,"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]},"scope":{}},"allow-prepend":{"version":null,"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]},"scope":{}},"allow-remove":{"version":null,"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]},"scope":{}},"allow-remove-at":{"version":null,"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]},"scope":{}},"allow-set-accelerator":{"version":null,"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]},"scope":{}},"allow-set-as-app-menu":{"version":null,"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]},"scope":{}},"allow-set-as-help-menu-for-nsapp":{"version":null,"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]},"scope":{}},"allow-set-as-window-menu":{"version":null,"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]},"scope":{}},"allow-set-as-windows-menu-for-nsapp":{"version":null,"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]},"scope":{}},"allow-set-checked":{"version":null,"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]},"scope":{}},"allow-set-enabled":{"version":null,"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]},"scope":{}},"allow-set-icon":{"version":null,"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]},"scope":{}},"allow-set-text":{"version":null,"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]},"scope":{}},"allow-text":{"version":null,"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]},"scope":{}},"deny-append":{"version":null,"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]},"scope":{}},"deny-create-default":{"version":null,"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]},"scope":{}},"deny-get":{"version":null,"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]},"scope":{}},"deny-insert":{"version":null,"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]},"scope":{}},"deny-is-checked":{"version":null,"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]},"scope":{}},"deny-is-enabled":{"version":null,"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]},"scope":{}},"deny-items":{"version":null,"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]},"scope":{}},"deny-new":{"version":null,"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]},"scope":{}},"deny-popup":{"version":null,"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]},"scope":{}},"deny-prepend":{"version":null,"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]},"scope":{}},"deny-remove":{"version":null,"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]},"scope":{}},"deny-remove-at":{"version":null,"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]},"scope":{}},"deny-set-accelerator":{"version":null,"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]},"scope":{}},"deny-set-as-app-menu":{"version":null,"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]},"scope":{}},"deny-set-as-help-menu-for-nsapp":{"version":null,"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]},"scope":{}},"deny-set-as-window-menu":{"version":null,"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]},"scope":{}},"deny-set-as-windows-menu-for-nsapp":{"version":null,"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]},"scope":{}},"deny-set-checked":{"version":null,"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]},"scope":{}},"deny-set-enabled":{"version":null,"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]},"scope":{}},"deny-set-icon":{"version":null,"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]},"scope":{}},"deny-set-text":{"version":null,"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]},"scope":{}},"deny-text":{"version":null,"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"version":null,"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]},"scope":{}},"allow-dirname":{"version":null,"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]},"scope":{}},"allow-extname":{"version":null,"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]},"scope":{}},"allow-is-absolute":{"version":null,"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]},"scope":{}},"allow-join":{"version":null,"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]},"scope":{}},"allow-normalize":{"version":null,"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]},"scope":{}},"allow-resolve":{"version":null,"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]},"scope":{}},"allow-resolve-directory":{"version":null,"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]},"scope":{}},"deny-basename":{"version":null,"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]},"scope":{}},"deny-dirname":{"version":null,"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]},"scope":{}},"deny-extname":{"version":null,"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]},"scope":{}},"deny-is-absolute":{"version":null,"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]},"scope":{}},"deny-join":{"version":null,"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]},"scope":{}},"deny-normalize":{"version":null,"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]},"scope":{}},"deny-resolve":{"version":null,"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]},"scope":{}},"deny-resolve-directory":{"version":null,"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"version":null,"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]},"scope":{}},"deny-close":{"version":null,"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":null,"permissions":{"allow-execute":{"version":null,"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]},"scope":{}},"allow-kill":{"version":null,"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]},"scope":{}},"allow-open":{"version":null,"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]},"scope":{}},"allow-stdin-write":{"version":null,"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]},"scope":{}},"deny-execute":{"version":null,"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]},"scope":{}},"deny-kill":{"version":null,"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]},"scope":{}},"deny-open":{"version":null,"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]},"scope":{}},"deny-stdin-write":{"version":null,"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]},"scope":{}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","definitions":{"ShellAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\n[regex]: https://docs.rs/regex/latest/regex/#syntax","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"A command allowed to be executed by the webview API.","properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellAllowedArgs"}],"description":"The allowed arguments for the command execution."},"command":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["args","command","name","sidecar"],"title":"Entry","type":"object"}},"tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":[]},"permissions":{"allow-new":{"version":null,"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]},"scope":{}},"allow-set-icon":{"version":null,"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]},"scope":{}},"allow-set-icon-as-template":{"version":null,"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]},"scope":{}},"allow-set-menu":{"version":null,"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]},"scope":{}},"allow-set-show-menu-on-left-click":{"version":null,"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]},"scope":{}},"allow-set-temp-dir-path":{"version":null,"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]},"scope":{}},"allow-set-title":{"version":null,"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]},"scope":{}},"allow-set-tooltip":{"version":null,"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]},"scope":{}},"allow-set-visible":{"version":null,"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]},"scope":{}},"deny-new":{"version":null,"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]},"scope":{}},"deny-set-icon":{"version":null,"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]},"scope":{}},"deny-set-icon-as-template":{"version":null,"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]},"scope":{}},"deny-set-menu":{"version":null,"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]},"scope":{}},"deny-set-show-menu-on-left-click":{"version":null,"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]},"scope":{}},"deny-set-temp-dir-path":{"version":null,"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]},"scope":{}},"deny-set-title":{"version":null,"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]},"scope":{}},"deny-set-tooltip":{"version":null,"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]},"scope":{}},"deny-set-visible":{"version":null,"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"version":null,"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]},"scope":{}},"allow-create-webview-window":{"version":null,"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]},"scope":{}},"allow-internal-toggle-devtools":{"version":null,"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]},"scope":{}},"allow-print":{"version":null,"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]},"scope":{}},"allow-set-webview-focus":{"version":null,"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]},"scope":{}},"allow-set-webview-position":{"version":null,"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]},"scope":{}},"allow-set-webview-size":{"version":null,"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]},"scope":{}},"allow-webview-close":{"version":null,"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]},"scope":{}},"allow-webview-position":{"version":null,"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]},"scope":{}},"allow-webview-size":{"version":null,"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]},"scope":{}},"deny-create-webview":{"version":null,"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]},"scope":{}},"deny-create-webview-window":{"version":null,"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]},"scope":{}},"deny-internal-toggle-devtools":{"version":null,"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]},"scope":{}},"deny-print":{"version":null,"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]},"scope":{}},"deny-set-webview-focus":{"version":null,"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]},"scope":{}},"deny-set-webview-position":{"version":null,"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]},"scope":{}},"deny-set-webview-size":{"version":null,"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]},"scope":{}},"deny-webview-close":{"version":null,"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]},"scope":{}},"deny-webview-position":{"version":null,"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]},"scope":{}},"deny-webview-size":{"version":null,"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null},"window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-available-monitors","allow-theme","allow-internal-toggle-maximize","allow-internal-on-mousemove","allow-internal-on-mousedown"]},"permissions":{"allow-available-monitors":{"version":null,"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]},"scope":{}},"allow-center":{"version":null,"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]},"scope":{}},"allow-close":{"version":null,"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]},"scope":{}},"allow-create":{"version":null,"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]},"scope":{}},"allow-current-monitor":{"version":null,"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]},"scope":{}},"allow-destroy":{"version":null,"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]},"scope":{}},"allow-hide":{"version":null,"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]},"scope":{}},"allow-inner-position":{"version":null,"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]},"scope":{}},"allow-inner-size":{"version":null,"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]},"scope":{}},"allow-internal-on-mousedown":{"version":null,"identifier":"allow-internal-on-mousedown","description":"Enables the internal_on_mousedown command without any pre-configured scope.","commands":{"allow":["internal_on_mousedown"],"deny":[]},"scope":{}},"allow-internal-on-mousemove":{"version":null,"identifier":"allow-internal-on-mousemove","description":"Enables the internal_on_mousemove command without any pre-configured scope.","commands":{"allow":["internal_on_mousemove"],"deny":[]},"scope":{}},"allow-internal-toggle-maximize":{"version":null,"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]},"scope":{}},"allow-is-closable":{"version":null,"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]},"scope":{}},"allow-is-decorated":{"version":null,"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]},"scope":{}},"allow-is-focused":{"version":null,"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]},"scope":{}},"allow-is-fullscreen":{"version":null,"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]},"scope":{}},"allow-is-maximizable":{"version":null,"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]},"scope":{}},"allow-is-maximized":{"version":null,"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]},"scope":{}},"allow-is-minimizable":{"version":null,"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]},"scope":{}},"allow-is-minimized":{"version":null,"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]},"scope":{}},"allow-is-resizable":{"version":null,"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]},"scope":{}},"allow-is-visible":{"version":null,"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]},"scope":{}},"allow-maximize":{"version":null,"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]},"scope":{}},"allow-minimize":{"version":null,"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]},"scope":{}},"allow-outer-position":{"version":null,"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]},"scope":{}},"allow-outer-size":{"version":null,"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]},"scope":{}},"allow-primary-monitor":{"version":null,"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]},"scope":{}},"allow-request-user-attention":{"version":null,"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]},"scope":{}},"allow-scale-factor":{"version":null,"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]},"scope":{}},"allow-set-always-on-bottom":{"version":null,"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]},"scope":{}},"allow-set-always-on-top":{"version":null,"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]},"scope":{}},"allow-set-closable":{"version":null,"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]},"scope":{}},"allow-set-content-protected":{"version":null,"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]},"scope":{}},"allow-set-cursor-grab":{"version":null,"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]},"scope":{}},"allow-set-cursor-icon":{"version":null,"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]},"scope":{}},"allow-set-cursor-position":{"version":null,"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]},"scope":{}},"allow-set-cursor-visible":{"version":null,"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]},"scope":{}},"allow-set-decorations":{"version":null,"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]},"scope":{}},"allow-set-effects":{"version":null,"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]},"scope":{}},"allow-set-focus":{"version":null,"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]},"scope":{}},"allow-set-fullscreen":{"version":null,"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]},"scope":{}},"allow-set-icon":{"version":null,"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]},"scope":{}},"allow-set-ignore-cursor-events":{"version":null,"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]},"scope":{}},"allow-set-max-size":{"version":null,"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]},"scope":{}},"allow-set-maximizable":{"version":null,"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]},"scope":{}},"allow-set-min-size":{"version":null,"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]},"scope":{}},"allow-set-minimizable":{"version":null,"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]},"scope":{}},"allow-set-position":{"version":null,"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]},"scope":{}},"allow-set-progress-bar":{"version":null,"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]},"scope":{}},"allow-set-resizable":{"version":null,"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]},"scope":{}},"allow-set-shadow":{"version":null,"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]},"scope":{}},"allow-set-size":{"version":null,"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]},"scope":{}},"allow-set-skip-taskbar":{"version":null,"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]},"scope":{}},"allow-set-title":{"version":null,"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]},"scope":{}},"allow-set-visible-on-all-workspaces":{"version":null,"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]},"scope":{}},"allow-show":{"version":null,"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]},"scope":{}},"allow-start-dragging":{"version":null,"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]},"scope":{}},"allow-theme":{"version":null,"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]},"scope":{}},"allow-title":{"version":null,"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]},"scope":{}},"allow-toggle-maximize":{"version":null,"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]},"scope":{}},"allow-unmaximize":{"version":null,"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]},"scope":{}},"allow-unminimize":{"version":null,"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]},"scope":{}},"deny-available-monitors":{"version":null,"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]},"scope":{}},"deny-center":{"version":null,"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]},"scope":{}},"deny-close":{"version":null,"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]},"scope":{}},"deny-create":{"version":null,"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]},"scope":{}},"deny-current-monitor":{"version":null,"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]},"scope":{}},"deny-destroy":{"version":null,"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]},"scope":{}},"deny-hide":{"version":null,"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]},"scope":{}},"deny-inner-position":{"version":null,"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]},"scope":{}},"deny-inner-size":{"version":null,"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]},"scope":{}},"deny-internal-on-mousedown":{"version":null,"identifier":"deny-internal-on-mousedown","description":"Denies the internal_on_mousedown command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_on_mousedown"]},"scope":{}},"deny-internal-on-mousemove":{"version":null,"identifier":"deny-internal-on-mousemove","description":"Denies the internal_on_mousemove command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_on_mousemove"]},"scope":{}},"deny-internal-toggle-maximize":{"version":null,"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]},"scope":{}},"deny-is-closable":{"version":null,"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]},"scope":{}},"deny-is-decorated":{"version":null,"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]},"scope":{}},"deny-is-focused":{"version":null,"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]},"scope":{}},"deny-is-fullscreen":{"version":null,"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]},"scope":{}},"deny-is-maximizable":{"version":null,"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]},"scope":{}},"deny-is-maximized":{"version":null,"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]},"scope":{}},"deny-is-minimizable":{"version":null,"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]},"scope":{}},"deny-is-minimized":{"version":null,"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]},"scope":{}},"deny-is-resizable":{"version":null,"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]},"scope":{}},"deny-is-visible":{"version":null,"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]},"scope":{}},"deny-maximize":{"version":null,"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]},"scope":{}},"deny-minimize":{"version":null,"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]},"scope":{}},"deny-outer-position":{"version":null,"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]},"scope":{}},"deny-outer-size":{"version":null,"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]},"scope":{}},"deny-primary-monitor":{"version":null,"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]},"scope":{}},"deny-request-user-attention":{"version":null,"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]},"scope":{}},"deny-scale-factor":{"version":null,"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]},"scope":{}},"deny-set-always-on-bottom":{"version":null,"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]},"scope":{}},"deny-set-always-on-top":{"version":null,"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]},"scope":{}},"deny-set-closable":{"version":null,"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]},"scope":{}},"deny-set-content-protected":{"version":null,"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]},"scope":{}},"deny-set-cursor-grab":{"version":null,"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]},"scope":{}},"deny-set-cursor-icon":{"version":null,"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]},"scope":{}},"deny-set-cursor-position":{"version":null,"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]},"scope":{}},"deny-set-cursor-visible":{"version":null,"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]},"scope":{}},"deny-set-decorations":{"version":null,"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]},"scope":{}},"deny-set-effects":{"version":null,"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]},"scope":{}},"deny-set-focus":{"version":null,"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]},"scope":{}},"deny-set-fullscreen":{"version":null,"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]},"scope":{}},"deny-set-icon":{"version":null,"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]},"scope":{}},"deny-set-ignore-cursor-events":{"version":null,"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]},"scope":{}},"deny-set-max-size":{"version":null,"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]},"scope":{}},"deny-set-maximizable":{"version":null,"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]},"scope":{}},"deny-set-min-size":{"version":null,"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]},"scope":{}},"deny-set-minimizable":{"version":null,"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]},"scope":{}},"deny-set-position":{"version":null,"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]},"scope":{}},"deny-set-progress-bar":{"version":null,"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]},"scope":{}},"deny-set-resizable":{"version":null,"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]},"scope":{}},"deny-set-shadow":{"version":null,"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]},"scope":{}},"deny-set-size":{"version":null,"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]},"scope":{}},"deny-set-skip-taskbar":{"version":null,"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]},"scope":{}},"deny-set-title":{"version":null,"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]},"scope":{}},"deny-set-visible-on-all-workspaces":{"version":null,"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]},"scope":{}},"deny-show":{"version":null,"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]},"scope":{}},"deny-start-dragging":{"version":null,"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]},"scope":{}},"deny-theme":{"version":null,"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]},"scope":{}},"deny-title":{"version":null,"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]},"scope":{}},"deny-toggle-maximize":{"version":null,"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]},"scope":{}},"deny-unmaximize":{"version":null,"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]},"scope":{}},"deny-unminimize":{"version":null,"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]},"scope":{}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/src-tauri/src/depotdownloader.rs b/src-tauri/src/depotdownloader.rs new file mode 100644 index 00000000..2a670814 --- /dev/null +++ b/src-tauri/src/depotdownloader.rs @@ -0,0 +1,77 @@ +use std::fs::File; +use std::io::ErrorKind::AlreadyExists; +use std::{fs, io}; +use std::{io::Write, path::Path}; + +use reqwest; +use sha256; + +pub fn calc_checksum(path: &Path) -> io::Result { + let bytes = fs::read(path)?; + let hash = sha256::digest(&bytes); + Ok(hash) +} + +/// Downloads a file. The file will be saved to the [`filename`] provided. +pub async fn download_file(url: &str, filename: &Path) -> io::Result<()> { + if filename.exists() { + println!("DEBUG: Not downloading. File already exists."); + return Err(io::Error::from(AlreadyExists)); + } + + let mut file = File::create(filename)?; + let response = reqwest::get(url) + .await + .expect("Failed to contact internet."); + + let content = response + .bytes() + .await + .expect("Failed to get response content."); + + file.write_all(&content)?; + Ok(()) +} + +/// Unzips DepotDownloader zips +pub fn unzip(zip_file: &Path) -> io::Result<()> { + let file = File::open(zip_file)?; + let mut archive = zip::ZipArchive::new(file)?; + + for i in 0..archive.len() { + let mut file = archive.by_index(i)?; + + let outpath = match file.enclosed_name() { + Some(path) => path, + None => continue + }; + + println!("Extracted {} from archive.", outpath.display()); + + if let Some(p) = outpath.parent() { + if !p.exists() { + fs::create_dir_all(p)?; + } + } + let mut outfile = File::create(&outpath)?; + io::copy(&mut file, &mut outfile)?; + + + // Copy over permissions from enclosed file to extracted file on UNIX systems. + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + + // If the mode `file.unix_mode()` is something (not None), copy it over to the extracted file. + if let Some(mode) = file.unix_mode() { + fs::set_permissions(&outpath, fs::Permissions::from_mode(mode))?; + } + + // Set DepotDownloader executable. + if outpath.display().to_string() == "DepotDownloader" { + fs::set_permissions(&outpath, fs::Permissions::from_mode(0o755))?; // WTF is an octal? + } + } + } + Ok(()) +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 96361fbc..4487463d 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,16 +1,125 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command +use std::io; +use std::path::{Path}; +use std::sync::OnceLock; +use std::time::Duration; + +use tauri::{AppHandle, Emitter}; + +use crate::terminal::Terminal; + +mod steam; +mod depotdownloader; +mod terminal; + +static DEPOTDOWNLOADER_VERSION: &str = "2.7.1"; +//TODO: arm +static DEPOTDOWNLOADER_LINUX_URL: &str = "https://github.com/SteamRE/DepotDownloader/releases/download/DepotDownloader_2.7.1/DepotDownloader-linux-x64.zip"; +static DEPOTDOWNLOADER_WIN_URL: &str = "https://github.com/SteamRE/DepotDownloader/releases/download/DepotDownloader_2.7.1/DepotDownloader-windows-x64.zip"; + + +// We create this variable now, and quickly populate it in preload_vectum(). Then we later access the data in start_download() +static TERMINAL: OnceLock> = OnceLock::new(); + +/// This function is called every time the app is reloaded/started. It quickly populates the [`TERMINAL`] variable with a working terminal. #[tauri::command] -fn greet(name: &str) -> String { - format!("Hello, {}! You've been greeted from Rust!", name) +async fn preload_vectum(app: AppHandle) { + // Only fill this variable once. + if TERMINAL.get().is_none() { TERMINAL.set(terminal::get_installed_terminals(true).await).expect("Failed to set available terminals") } + + // Send the default terminal name to the frontend. + app.emit("default-terminal", Terminal::pretty_name(&TERMINAL.get().unwrap()[0])).unwrap(); +} + +#[tauri::command] +async fn start_download(steam_download: steam::SteamDownload) { + let default_terminal = TERMINAL.get().unwrap(); + let working_dir = std::env::current_dir().unwrap(); + + let terminal_to_use = if steam_download.options().terminal().is_none() { default_terminal.first().unwrap() } else { &Terminal::from_index(&steam_download.options().terminal().unwrap()).unwrap() }; + + println!("\n\n---------------------HELLO FROM RUST!---------------------"); + println!("We received these values from frontend:"); + println!("\t- Username: {}", steam_download.username().as_ref().unwrap_or(&String::from("Not provided"))); + println!("\t- Password: {}", steam_download.password().as_ref().unwrap_or(&String::from("Not provided"))); + println!("\t- App ID: {}", steam_download.app_id()); + println!("\t- Depot ID: {}", steam_download.depot_id()); + println!("\t- Manifest ID: {}", steam_download.manifest_id()); + println!("\t- Output Path: {}", steam_download.output_path()); + println!("------------------------DEBUG INFORMATION-----------------"); + println!("\t- Default terminal: {}", Terminal::pretty_name(&default_terminal[0])); + println!("\t- Terminal command: {:?}", terminal_to_use.create_command(&steam_download)); + println!("\t- Working directory: {}", working_dir.display()); + println!("----------------------------------------------------------"); + + terminal_to_use.create_command(&steam_download).spawn().ok(); +} + + +/// Downloads the DepotDownloader zip file from the internet based on the OS. +#[tauri::command] +async fn download_depotdownloader() { + let url = if std::env::consts::OS == "windows" { + DEPOTDOWNLOADER_WIN_URL + } else { + DEPOTDOWNLOADER_LINUX_URL + }; + + // Where we store the DepotDownloader zip. + let zip_filename = format!("DepotDownloader-v{}-{}.zip", DEPOTDOWNLOADER_VERSION, std::env::consts::OS); + let depotdownloader_zip = Path::new(&zip_filename); + + println!("Downloading DepotDownloader for {} to .{}{}", std::env::consts::OS, std::path::MAIN_SEPARATOR, depotdownloader_zip.display()); + + match depotdownloader::download_file(url, depotdownloader_zip).await { + Err(e) => { + if e.kind() == io::ErrorKind::AlreadyExists { + println!("DepotDownloader already exists. Skipping download."); + return; + } + + println!("Failed to download DepotDownloader: {}", e); + return; + }, + _ => {} + } + + println!("Succesfully downloaded DepotDownloader from {}", url); + + depotdownloader::unzip(depotdownloader_zip).unwrap(); + println!("Succesfully extracted DepotDownloader zip."); +} + +/// Checks internet connectivity using Google +#[tauri::command] +async fn internet_connection() -> bool { + let client = reqwest::Client::builder().timeout(Duration::from_secs(5)).build().unwrap(); + + client.get("https://connectivitycheck.android.com/generate_204").send().await.is_ok() +} + + +#[tauri::command] +async fn get_all_terminals(app: AppHandle) { + let terminals = terminal::get_installed_terminals(false).await; + + terminals.iter().for_each(|terminal| { + println!("Terminal #{} ({}) is installed!", terminal.index().unwrap(), terminal.pretty_name()); + + // Sends: (terminal index aligned with dropdown; total terminals) + app.emit("working-terminal", (terminal.index(), Terminal::total())).unwrap(); + }); } fn main() { - tauri::Builder::default() - .plugin(tauri_plugin_shell::init()) - .invoke_handler(tauri::generate_handler![greet]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); + println!(); + tauri::Builder::default().plugin(tauri_plugin_dialog::init()).plugin(tauri_plugin_shell::init()).invoke_handler(tauri::generate_handler![ + start_download, + download_depotdownloader, + internet_connection, + preload_vectum, + get_all_terminals + ]).run(tauri::generate_context!()).expect("error while running tauri application"); } diff --git a/src-tauri/src/steam.rs b/src-tauri/src/steam.rs new file mode 100644 index 00000000..2db8c5b8 --- /dev/null +++ b/src-tauri/src/steam.rs @@ -0,0 +1,41 @@ +use std::path::PathBuf; +use derive_getters::Getters; +use serde::Deserialize; + + +/// Represents the data required to download a Steam depot. +#[derive(Deserialize, Debug, Getters)] +pub struct SteamDownload { + username: Option, + password: Option, + app_id: String, + depot_id: String, + manifest_id: String, + options: VectumOptions +} + +#[derive(Debug, Deserialize, Getters)] +pub struct VectumOptions { + terminal: Option, + output_directory: Option, + directory_name: Option +} + + +impl SteamDownload { + /// If a username or password are not provided, the download is considered anonymous + pub fn is_anonymous(&self) -> bool { + self.username.is_none() || self.password.is_none() + } + + /// The directory where the download should happen + pub fn output_path(&self) -> String { + let sep = std::path::MAIN_SEPARATOR.to_string(); + match (&self.options.output_directory, &self.options.directory_name) { + (Some(output_dir), Some(dir_name)) => format!("{}{}{}", output_dir.display(), sep, dir_name), + (Some(output_dir), None) => format!("{}{}{}", output_dir.display(), sep, &self.manifest_id), + (None, Some(dir_name)) => format!(".{}{}", sep, dir_name), + (None, None) => format!(".{}{}", sep, &self.manifest_id) + } + } +} \ No newline at end of file diff --git a/src-tauri/src/terminal.rs b/src-tauri/src/terminal.rs new file mode 100644 index 00000000..9da8126a --- /dev/null +++ b/src-tauri/src/terminal.rs @@ -0,0 +1,394 @@ +use crate::steam::SteamDownload; +use async_process::Command; +use serde::Serialize; + +/// Represents a terminal that can be used to run commands. +/// **Should be in sync with the terminal dropdown in the frontend.** +#[derive(Debug, Serialize, PartialEq)] +pub enum Terminal { + GNOMETerminal, + Alacritty, + Konsole, + GNOMEConsole, + Xfce4Terminal, + DeepinTerminal, + Terminator, + Terminology, + Kitty, + LXTerminal, + Tilix, + CoolRetroTerm, + XTerm, + CMD, +} + + +impl Terminal { + /// Iterates through each terminal + pub fn iter() -> impl Iterator { + use self::Terminal::*; + + vec![ + GNOMETerminal, Alacritty, Konsole, GNOMEConsole, Xfce4Terminal, DeepinTerminal, Terminator, Terminology, Kitty, LXTerminal, Tilix, CoolRetroTerm, XTerm, CMD, + ].into_iter() + } + + /// Get terminal from index in order of the [`Terminal`] enum + pub fn from_index(index: &u8) -> Option { + Terminal::iter().nth(*index as usize) + } + + /// Get the index of a terminal in the order of the [`Terminal`] enum + /// Returns `None` if the terminal is not found. + pub fn index(&self) -> Option { + Terminal::iter().position(|x| x == *self).map(|x| x as u8) + } + + + /// Get total number of terminals **possible** depending on the OS + pub fn total() -> u8 { + if cfg!(windows) { + return 1; + } + + Terminal::iter().count() as u8 - 1 // -1 because cmd is not available on linux + } + + /// Get the pretty name of a terminal + pub fn pretty_name(&self) -> &str { + match self { + Terminal::GNOMETerminal => "GNOME Terminal", + Terminal::GNOMEConsole => "GNOME Console", + Terminal::Konsole => "Konsole", + Terminal::Xfce4Terminal => "Xfce Terminal", + Terminal::Terminator => "Terminator", + Terminal::Terminology => "Terminology", + Terminal::XTerm => "XTerm", + Terminal::Kitty => "Kitty", + Terminal::LXTerminal => "LXTerminal", + Terminal::Tilix => "Tilix", + Terminal::DeepinTerminal => "Deepin Terminal", + Terminal::CoolRetroTerm => "cool-retro-term", + Terminal::Alacritty => "Alacritty", + Terminal::CMD => "CMD", + } + } + + + //region Probing a terminal + /// Checks if a [`Terminal`] is installed. + /// **See:** [`get_installed_terminals`] + pub async fn installed(&self) -> bool { + match self { + Terminal::CMD => { + let mut cmd = Command::new("cmd"); + cmd.arg("/?").output().await.is_ok() + } + Terminal::GNOMETerminal => { + let mut cmd = Command::new("gnome-terminal"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::GNOMEConsole => { + let mut cmd = Command::new("kgx"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::Konsole => { + let mut cmd = Command::new("konsole"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::Xfce4Terminal => { + let mut cmd = Command::new("xfce4-terminal"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::Terminator => { + let mut cmd = Command::new("terminator"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::Terminology => { + let mut cmd = Command::new("terminology"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::XTerm => { + let mut cmd = Command::new("xterm"); + cmd.arg("-v").output().await.is_ok() + } + Terminal::Kitty => { + let mut cmd = Command::new("kitty"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::LXTerminal => { + let mut cmd = Command::new("lxterminal"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::Tilix => { + let mut cmd = Command::new("tilix"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::DeepinTerminal => { + let mut cmd = Command::new("deepin-terminal"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::CoolRetroTerm => { + let mut cmd = Command::new("cool-retro-term"); + cmd.arg("--version").output().await.is_ok() + } + Terminal::Alacritty => { + let mut cmd = Command::new("alacritty"); + cmd.arg("--version").output().await.is_ok() + } + } + } + //endregion + + + //region Running a command in the terminal + /** + Returns a [`Command`] that, when executed should open the terminal and run the command. + + + ## Commands + `{command}` = `{command};echo Command finished with code $?;sleep infinity` + + | Terminal | Command to open terminal | + |----------------|---------------------------------------------------------------------------| + | CMD | `start cmd.exe /k {command}` | + | GNOMETerminal | `gnome-terminal -- /usr/bin/env sh -c {command}` | + | GNOMEConsole | `kgx -e /usr/bin/env sh -c {command}` | + | Konsole | `konsole -e /usr/bin/env sh -c {command}` | + | Xfce4Terminal | `xfce4-terminal -x /usr/bin/env sh -c {command}` | + | Terminator | `terminator -T "Downloading depot..." -e {command}` | + | Terminology | `terminology -e /usr/bin/env sh -c {command}` | + | XTerm | `xterm -hold -T "Downloading depot..." -e /usr/bin/env sh -c {command}` | + | Kitty | `kitty /usr/bin/env sh -c {command}` | + | LXTerminal | `lxterminal -e /usr/bin/env sh -c {command}` | + | Tilix | `tilix -e /usr/bin/env sh -c {command}` | + | DeepinTerminal | `deepin-terminal -e /usr/bin/env sh -c {command}` | + | CoolRetroTerm | `cool-retro-term -e /usr/bin/env sh -c {command}` | + | Alacritty | `alacritty -e /usr/bin/env sh -c {command}` | + + */ + pub fn create_command(&self, steam_download: &SteamDownload) -> Command { + let command = create_depotdownloader_command(steam_download); + + match self { + Terminal::CMD => { + let mut cmd = Command::new("cmd.exe"); + cmd.args(&["/c", "start", "PowerShell.exe", "-NoExit", "-Command"]).args(command); + cmd + } + Terminal::GNOMETerminal => { + let mut cmd = Command::new("gnome-terminal"); + cmd.args([ + "--", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::GNOMEConsole => { + let mut cmd = Command::new("kgx"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c" + ]).args(command); + cmd + } + Terminal::Konsole => { + let mut cmd = Command::new("konsole"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::Xfce4Terminal => { + let mut cmd = Command::new("xfce4-terminal"); + cmd.args([ + "-x", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::Terminator => { + let mut cmd = Command::new("terminator"); + cmd.args([ + "-T", + "Downloading depot...", + "-e", + ]).args(command); + cmd + } + Terminal::Terminology => { + let mut cmd = Command::new("terminology"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::XTerm => { + let mut cmd = Command::new("xterm"); + cmd.args([ + "-hold", + "-T", + "Downloading depot...", + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::Kitty => { + let mut cmd = Command::new("kitty"); + cmd.args([ + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::LXTerminal => { + let mut cmd = Command::new("lxterminal"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::Tilix => { + let mut cmd = Command::new("tilix"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::DeepinTerminal => { + let mut cmd = Command::new("deepin-terminal"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::CoolRetroTerm => { + let mut cmd = Command::new("cool-retro-term"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + Terminal::Alacritty => { + let mut cmd = Command::new("alacritty"); + cmd.args([ + "-e", + "/usr/bin/env", + "sh", + "-c", + ]).args(command); + cmd + } + } + } + //endregion +} + +/** +Checks if terminals are installed by checking if they respond to commands. + +## How it works +Probes a list of popular terminals and checks if they return an error when calling their `--version` or similar command line flag. + +## Options +* `return_immediately`: [`bool`]: Return as soon as one terminal is found. + +## Returns +A vector containing a list of terminals that should work. + +## Commands +| Terminal | Command to check if installed | +|----------------|-------------------------------| +| CMD | `cmd /?` | +| GNOMETerminal | `gnome-terminal --version` | +| GNOMEConsole | `kgx --version` | +| Konsole | `konsole --version` | +| Xfce4Terminal | `xfce4-terminal --version` | +| Terminator | `terminator --version` | +| Terminology | `terminology --version` | +| XTerm | `xterm -v` | +| Kitty | `kitty --version` | +| LXTerminal | `lxterminal --version` | +| Tilix | `tilix --version` | +| DeepinTerminal | `deepin-terminal --version` | +| CoolRetroTerm | `cool-retro-term --version` | +| Alacritty | `alacritty --version` | + + */ +pub async fn get_installed_terminals(return_immediately: bool) -> Vec { + #[cfg(windows)] + // For Windows, only CMD is available. + return vec!(Terminal::CMD); + + let mut available_terminals: Vec = Vec::new(); + + for terminal in Terminal::iter() { + // Probe terminal. If it doesn't raise an error, it is probably installed. + if terminal.installed().await { + if return_immediately { + return vec![terminal]; + } + available_terminals.push(terminal); + } + } + + if available_terminals.is_empty() { + eprintln!("No terminals were detected. Try installing one."); + } + + available_terminals +} + +/// Creates the DepotDownloader command necessary to download the requested manifest. +fn create_depotdownloader_command(steam_download: &SteamDownload) -> Vec { + let output_dir = if cfg!(windows) { + // In PowerShell, spaces can be escaped with a backtick. + steam_download.output_path().replace(" ", "` ") + } else { + // In bash, spaces can be escaped with a backslash. + steam_download.output_path().replace(" ", "\\ ") + }; + + + if cfg!(not(windows)) { + if steam_download.is_anonymous() { + vec![format!(r#"./DepotDownloader -app {} -depot {} -manifest {} -dir {};echo Done!;sleep infinity"#, steam_download.app_id(), steam_download.depot_id(), steam_download.manifest_id(), output_dir)] + } else { + vec![format!(r#"./DepotDownloader -username {} -password {} -app {} -depot {} -manifest {} -dir {};echo Done!;sleep infinity"#, steam_download.username().clone().unwrap(), steam_download.password().clone().unwrap(), steam_download.app_id(), steam_download.depot_id(), steam_download.manifest_id(), output_dir)] + } + } else { + if steam_download.is_anonymous() { + vec![format!(r#".\DepotDownloader.exe -app {} -depot {} -manifest {} -dir {}"#, steam_download.app_id(), steam_download.depot_id(), steam_download.manifest_id(), output_dir)] + } else { + vec![format!(r#".\DepotDownloader.exe -username {} -password {} -app {} -depot {} -manifest {} -dir {}"#, steam_download.username().clone().unwrap(), steam_download.password().clone().unwrap(), steam_download.app_id(), steam_download.depot_id(), steam_download.manifest_id(), output_dir)] + } + } +} \ No newline at end of file diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 776c3cb7..b3c7b608 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,17 +1,21 @@ { "productName": "SteamDepotDownloaderGUI", - "version": "3.0.0", - "identifier": "net.00pium.depotdownloader", + "version": "3.0.0-alpha.1", + "identifier": "net.oopium.depotdownloader", "build": { - "frontendDist": "../src" + "beforeDevCommand": "pnpm dev", + "devUrl": "http://localhost:1420", + "beforeBuildCommand": "pnpm build", + "frontendDist": "../dist" }, "app": { "withGlobalTauri": true, "windows": [ { - "title": "steamdepotdownloadergui", - "width": 800, - "height": 600 + "title": "SteamDepotDownloaderGUI", + "width": 445, + "height": 650, + "resizable": false } ], "security": { diff --git a/src/assets/Hubot-Sans.woff2 b/src/assets/Hubot-Sans.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c8281213136fda52ff9d74167f5be12558cb74b5 GIT binary patch literal 170164 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 ZG(Giu+waHE=KLP3?{_}_7ii^D008U2F!ule literal 0 HcmV?d00001 diff --git a/src/assets/Windows.woff b/src/assets/Windows.woff new file mode 100644 index 0000000000000000000000000000000000000000..577965973b5b625a8caeb02bcd37b0c637cc3fc7 GIT binary patch literal 15664 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 E54UjOdjJ3c literal 0 HcmV?d00001 diff --git a/src/assets/javascript.svg b/src/assets/javascript.svg deleted file mode 100644 index f9abb2b7..00000000 --- a/src/assets/javascript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/tauri.svg b/src/assets/tauri.svg deleted file mode 100644 index 31b62c92..00000000 --- a/src/assets/tauri.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/css/style.css b/src/css/style.css new file mode 100644 index 00000000..860ceb7d --- /dev/null +++ b/src/css/style.css @@ -0,0 +1,145 @@ +@font-face { + font-family: 'Hubot Sans'; + src: url('../assets/Hubot-Sans.woff2') format('woff2 supports variations'), + url('../assets/Hubot-Sans.woff2') format('woff2-variations'); + font-weight: 700; + font-stretch: expanded; +} + +@font-face { + font-family: 'Windows'; + src: url('../assets/Windows.woff') format('woff2 supports variations'), + url('../assets/Windows.woff') format('woff2-variations'); + font-weight: 700; + font-stretch: expanded; +} + +.f1-light { + font-family: 'Hubot Sans', sans-serif; + overflow: hidden; + white-space: nowrap; +} + +/* The grey part */ +.settings-surrounding { + display: none; + position: fixed; + z-index: 1; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: hidden; + background-color: rgba(0, 0, 0, 0.33); +} + +.settings-content { + position: relative; + border-radius: 10px; + overflow: auto; + /*noinspection CssUnresolvedCustomProperty*/ + background-color: var(--bgColor-default, var(--color-canvas-default)); + margin: 5%; + padding: 25px; + border: 1.5px solid white; + width: 90vw; /* 90vw -> 90% */ + height: 90vh; /* 90vh -> 90% */ + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 20px rgba(0, 0, 0, 0.1); +} + +[data-color-mode="light"] .settings-content { + border: 1.5px solid black; +} + +@media (prefers-color-scheme: light) { + [data-color-mode="auto"] .settings-content { + border: 1.5px solid black; + } +} + +.hide { + display: none; +} + +hr { + border: 0; + height: 1px; + background: black linear-gradient(to right, #0c1016, #ccc, #0c1016); +} + +[data-color-mode="light"] hr { + filter: invert(1); +} + +@media (prefers-color-scheme: light) { + [data-color-mode="auto"] hr { + filter: invert(1); + } +} + +.version-info { + position: absolute; + bottom: 0; + right: 0; + font-size: 0.9em; + padding: 5px 10px; + font-family: monospace; + cursor: pointer; +} + +.opium-button { + position: absolute; + bottom: 0; + left: 0; + font-size: 0.9em; + padding: 5px 10px; + font-family: monospace; + cursor: pointer; +} + +.AnimatedEllipsis { + display: inline-block; + overflow: hidden; + vertical-align: bottom +} + +.AnimatedEllipsis::after { + display: inline-block; + content: "..."; + animation: AnimatedEllipsis-keyframes 1s steps(4, jump-none) infinite +} + +@keyframes AnimatedEllipsis-keyframes { + 0% { + transform: translateX(-100%) + } +} + +.knopje { + position: absolute; + bottom: 0; + left: 0; + cursor: pointer; + margin-left: 5px; + margin-bottom: 4px; + + border: 1px solid #000; + background: linear-gradient(180deg, #8C8C8C 25%, #434343 75%); + display: inline-block; + font: 16px "Windows", monospace; + padding: 2px 5px; + color: darkred; + text-decoration: none; + +} + +.knopje:hover { + cursor: zoom-in; + background: linear-gradient(180deg, #b0b0b0 25%, #504f4f 75%); +} + +.knopje:active { + cursor: crosshair; + border: 1px inset black; + background: linear-gradient(180deg, #333232 25%, #504f4f 75%); +} \ No newline at end of file diff --git a/src/index.html b/src/index.html index f06978ee..b837d6b4 100644 --- a/src/index.html +++ b/src/index.html @@ -1,46 +1,275 @@ - - - - - - - Tauri App - - - + + - -
-

Welcome to Tauri!

+ + + + SteamDepotDownloaderGUI + + + + + + - + +
+
+
Steam Depot Downloader
+
+
+
+ +
+ +
-

Click on the Tauri logo to learn more about the framework

+
+
+ +
+ +
- - - -
+
+
+ +
+ +
-

+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ Set location +
+ +
+ Open location +
+ + + Busy + + +
+ + +
+
+
+ + +
+
+ +
+ + + + + Discord +
+ +
+ + SteamDB +
+ +
+ + + + Donate +
+ +
+ + + + + Tutorial +
+
+ +
+ + + + + +
- + +
+
+
+ + +

Settings

+
+

Appearance

+
+
+ +
+
+
+ + + +
+
+
+
+

Output

+
+
+
+ +
+
+
+ + +
+
+ +
+
+
+

Debugging

+
+
+ +
+
+
+ +
+ found: none +
default: none +
+
+
+
+
+
+
+ + diff --git a/src/main.js b/src/main.js deleted file mode 100644 index 9a7530b8..00000000 --- a/src/main.js +++ /dev/null @@ -1,18 +0,0 @@ -const { invoke } = window.__TAURI__.core; - -let greetInputEl; -let greetMsgEl; - -async function greet() { - // Learn more about Tauri commands at https://tauri.app/v1/guides/features/command - greetMsgEl.textContent = await invoke("greet", { name: greetInputEl.value }); -} - -window.addEventListener("DOMContentLoaded", () => { - greetInputEl = document.querySelector("#greet-input"); - greetMsgEl = document.querySelector("#greet-msg"); - document.querySelector("#greet-form").addEventListener("submit", (e) => { - e.preventDefault(); - greet(); - }); -}); diff --git a/src/styles.css b/src/styles.css deleted file mode 100644 index f7de85bf..00000000 --- a/src/styles.css +++ /dev/null @@ -1,109 +0,0 @@ -:root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; - - color: #0f0f0f; - background-color: #f6f6f6; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -.container { - margin: 0; - padding-top: 10vh; - display: flex; - flex-direction: column; - justify-content: center; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: 0.75s; -} - -.logo.tauri:hover { - filter: drop-shadow(0 0 2em #24c8db); -} - -.row { - display: flex; - justify-content: center; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} - -a:hover { - color: #535bf2; -} - -h1 { - text-align: center; -} - -input, -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - color: #0f0f0f; - background-color: #ffffff; - transition: border-color 0.25s; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); -} - -button { - cursor: pointer; -} - -button:hover { - border-color: #396cd8; -} -button:active { - border-color: #396cd8; - background-color: #e8e8e8; -} - -input, -button { - outline: none; -} - -#greet-input { - margin-right: 5px; -} - -@media (prefers-color-scheme: dark) { - :root { - color: #f6f6f6; - background-color: #2f2f2f; - } - - a:hover { - color: #24c8db; - } - - input, - button { - color: #ffffff; - background-color: #0f0f0f98; - } - button:active { - background-color: #0f0f0f69; - } -} diff --git a/src/ts/main.ts b/src/ts/main.ts new file mode 100644 index 00000000..1cf53e72 --- /dev/null +++ b/src/ts/main.ts @@ -0,0 +1,215 @@ +import $ from "jquery"; +import {invoke} from "@tauri-apps/api/core"; +import {open as openDialog} from "@tauri-apps/plugin-dialog"; +import {open as openShell} from "@tauri-apps/plugin-shell"; +import {listen} from "@tauri-apps/api/event"; + +function setLoader(state: boolean) { + $("#busy").prop("hidden", !state); +} + + +function setLoadingState(state: boolean) { + $("#busy").prop("hidden", !state); + + // loop through all buttons and input fields and disable them + for (const element of document.querySelectorAll("button, input")) { + if (element.closest("#settings-content")) continue; + (element as any).disabled = state; + } + + // These elements need additional properties to be properly disabled + $("#pickpath").prop("ariaDisabled", state); + $("#downloadbtn").prop("ariaDisabled", state); + + // disable internet buttons + for (const element of document.querySelectorAll("#internet-btns div")) { + element.ariaDisabled = String(state); + } +} + + +/// Returns list of IDs of invalid form fields +const invalidFields = () => { + const form = document.forms[0]; + + const invalidFields: string[] = []; + for (const input of form) { + const inputElement = input as HTMLInputElement; + const valid = !(inputElement.value === "" && inputElement?.parentElement?.classList.contains("required")); + if (!valid) { + invalidFields.push(inputElement.id); + } + } + // console.debug(`[${invalidFields.join(", ")}] fields invalid/empty`); + + return invalidFields; +}; + + +$(async () => { + let terminalsCollected = false; + let downloadDirectory: string | null; + + // Startup logic + setLoadingState(true); + + await invoke("preload_vectum"); + + setLoadingState(false); + + + // Collect the rest of the terminals in the background. + if (!terminalsCollected) { + setLoader(true); + // @ts-ignore + const terminals = await invoke("get_all_terminals") as string[]; + for (const terminal in terminals) { + console.log(terminal); + } + + // Allow opening settings now that it is ready to be shown. + $("#settings-button").prop("ariaDisabled", false); + terminalsCollected = true; + setLoader(false); + } + + $("#pickpath").on("click", async () => { + // Open a dialog + downloadDirectory = await openDialog({ + title: "Choose where to download the game. You can specify the directory later.", + multiple: false, + directory: true, + canCreateDirectories: true + }); + + if (downloadDirectory == null) { + // user cancelled + $("#checkpath").prop("ariaDisabled", true); + $("#checkpath").prop("disabled", true); + return; + } + + $("#checkpath").prop("ariaDisabled", false); + $("#checkpath").prop("disabled", false); + + console.log(downloadDirectory); + }); + + $("#checkpath").on("click", async () => { + console.log(`Checking path: ${downloadDirectory}`); + + if (downloadDirectory != null) { + await openShell(downloadDirectory); + } else { + $("#checkpath").prop("ariaDisabled", true); + } + }); + + $("#downloadbtn").on("click", async () => { + console.log("download button clicked"); + + if (invalidFields().length > 0) { + // Loop through invalid fields. If there are any, make those "errored" and block the download button. + for (const id of invalidFields()) { + document.getElementById(id)?.parentElement?.classList.toggle("errored", true); + $("#emptywarning").prop("hidden", false); + $("#downloadbtn").prop("ariaDisabled", true); + } + return; + } + + setLoadingState(true); + $("#downloadingnotice").prop("hidden", false); + $("#busy").prop("hidden", true); // Don't show the loader this time. + + const terminalChoice = (document.getElementById("terminal-dropdown") as HTMLSelectElement).selectedIndex; + const directoryNameChoice = $("#folder-name-custom-input").val(); + + + // Output path w/ directories chosen is: {downloadDirectory}/{directoryNameChoice} + const vectumOptions = { + terminal: terminalChoice == 14 ? null : terminalChoice, + output_directory: downloadDirectory || null, // if not specified let backend choose a path. + directory_name: directoryNameChoice || null, + }; + + const steamDownload = { + // String || null translate to Some(String) || None + username: String($("#username").val()).trim() || null, + password: String($("#password").val()).trim() || null, + app_id: $("#appid").val(), + depot_id: $("#depotid").val(), + manifest_id: $("#manifestid").val(), + options: vectumOptions + }; + + console.log(steamDownload); + await invoke("download_depotdownloader"); + + $("#downloadingnotice").prop("hidden", true); + setLoadingState(false); + + console.debug("DepotDownloader download process completed. Starting game download..."); + + await invoke("start_download", {steamDownload: steamDownload}); + console.log("All done. Ready for next game"); + }); + + $("#settings-button").on("click", async () => { + if (terminalsCollected) $("#settings-surrounding").css("display", "block"); + }); + + $("#settings-surrounding").on("click", (event) => { + if (event.target === document.getElementById("settings-surrounding")) { + $("#settings-surrounding").css("display", "none"); + + } + }); + + $("#opium-btn").on("click", () => { + openShell("https://00pium.net"); + }); + + + document.forms[0].addEventListener("input", (event) => { + // Remove errored class. This is a bad way to do it, but it works for now. + const target = event.target as HTMLElement; + target?.parentElement?.classList.toggle("errored", false); + + // If there are no more invalid fields, hide the warning and enable the download button again + if (invalidFields().length === 0) { + $("#emptywarning").prop("hidden", true); + $("#downloadbtn").prop("ariaDisabled", false); + } + }); +}); + + +let a = 0; +// Each terminal that is installed gets received from rust with this event. +listen<[number, number]>("working-terminal", (event) => { + a++; + console.log( + `Terminal #${event.payload[0]} is installed. a = ${a}` + ); + const terminalSelection = (document.getElementById("terminal-dropdown") as HTMLSelectElement); + + // Enable the