From 146004129e339dc20692c7b99dc59d7d653ce9d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 May 2023 19:47:36 +0200 Subject: [PATCH 01/64] fix(deps): update rust crate iota-crypto to 0.18 (#342) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Cargo.lock | 6 +++--- plugins/stronghold/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 53f2709f..c4d74456 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2003,9 +2003,9 @@ dependencies = [ [[package]] name = "iota-crypto" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4f42fc99281d9677950005223e2d0b122f5b08da6c92d91833017b279373db" +checksum = "0a08e58104d88c45ec2c7de6112a35ea33d70f497ff89c396374e89c6dcfaf3c" dependencies = [ "autocfg", ] @@ -4442,7 +4442,7 @@ name = "tauri-plugin-stronghold" version = "0.0.0" dependencies = [ "hex", - "iota-crypto 0.17.0", + "iota-crypto 0.18.0", "iota_stronghold", "log", "rand 0.8.5", diff --git a/plugins/stronghold/Cargo.toml b/plugins/stronghold/Cargo.toml index fb3ac3b8..480eed5c 100644 --- a/plugins/stronghold/Cargo.toml +++ b/plugins/stronghold/Cargo.toml @@ -16,7 +16,7 @@ tauri.workspace = true log.workspace = true thiserror.workspace = true iota_stronghold = "1" -iota-crypto = "0.17" +iota-crypto = "0.18" hex = "0.4" zeroize = { version = "1", features = ["zeroize_derive"] } From 02754f527cdec3935b9db54f76b5a5f52a4c1521 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sat, 6 May 2023 08:27:53 -0700 Subject: [PATCH 02/64] refactor(examples): remove dedicated dialog example (#343) --- examples/api/src-tauri/Cargo.lock | 4 + examples/api/src/App.svelte | 2 +- examples/api/src/views/Dialog.svelte | 13 +- plugins/dialog/examples/tauri-app/.gitignore | 24 - plugins/dialog/examples/tauri-app/README.md | 1 - plugins/dialog/examples/tauri-app/index.html | 14 - .../dialog/examples/tauri-app/jsconfig.json | 34 - .../dialog/examples/tauri-app/package.json | 22 - .../examples/tauri-app/src-tauri/.gitignore | 5 - .../examples/tauri-app/src-tauri/Cargo.lock | 4243 ----------------- .../examples/tauri-app/src-tauri/Cargo.toml | 29 - .../examples/tauri-app/src-tauri/build.rs | 3 - .../src-tauri/gen/android/app/.editorconfig | 12 - .../src-tauri/gen/android/app/.gitignore | 18 - .../src-tauri/gen/android/app/app/.gitignore | 4 - .../gen/android/app/app/build.gradle.kts | 113 - .../gen/android/app/app/proguard-rules.pro | 21 - .../app/app/src/main/AndroidManifest.xml | 32 - .../main/java/app/tauri/app/MainActivity.kt | 7 - .../drawable-v24/ic_launcher_foreground.xml | 30 - .../res/drawable/ic_launcher_background.xml | 170 - .../app/src/main/res/layout/activity_main.xml | 18 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3524 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 14102 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3524 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3377 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 9081 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3377 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 7971 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 18900 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 7971 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 12392 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 29506 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 12392 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 16751 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 40510 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 16751 -> 0 bytes .../app/src/main/res/values-night/themes.xml | 16 - .../app/app/src/main/res/values/colors.xml | 10 - .../app/app/src/main/res/values/strings.xml | 4 - .../app/app/src/main/res/values/themes.xml | 16 - .../app/app/src/main/res/xml/file_paths.xml | 5 - .../gen/android/app/build.gradle.kts | 25 - .../gen/android/app/buildSrc/build.gradle.kts | 23 - .../java/app/tauri/app/kotlin/BuildTask.kt | 58 - .../java/app/tauri/app/kotlin/RustPlugin.kt | 59 - .../gen/android/app/gradle.properties | 23 - .../app/gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - .../src-tauri/gen/android/app/gradlew | 185 - .../src-tauri/gen/android/app/gradlew.bat | 89 - .../src-tauri/gen/android/app/settings.gradle | 6 - .../tauri-app/src-tauri/gen/apple/.gitignore | 3 - .../AppIcon.appiconset/AppIcon-20x20@1x.png | Bin 844 -> 0 bytes .../AppIcon.appiconset/AppIcon-20x20@2x-1.png | Bin 2199 -> 0 bytes .../AppIcon.appiconset/AppIcon-20x20@2x.png | Bin 2199 -> 0 bytes .../AppIcon.appiconset/AppIcon-20x20@3x.png | Bin 3622 -> 0 bytes .../AppIcon.appiconset/AppIcon-29x29@1x.png | Bin 1419 -> 0 bytes .../AppIcon.appiconset/AppIcon-29x29@2x-1.png | Bin 3509 -> 0 bytes .../AppIcon.appiconset/AppIcon-29x29@2x.png | Bin 3509 -> 0 bytes .../AppIcon.appiconset/AppIcon-29x29@3x.png | Bin 5618 -> 0 bytes .../AppIcon.appiconset/AppIcon-40x40@1x.png | Bin 2199 -> 0 bytes .../AppIcon.appiconset/AppIcon-40x40@2x-1.png | Bin 5143 -> 0 bytes .../AppIcon.appiconset/AppIcon-40x40@2x.png | Bin 5143 -> 0 bytes .../AppIcon.appiconset/AppIcon-40x40@3x.png | Bin 7879 -> 0 bytes .../AppIcon.appiconset/AppIcon-512@2x.png | Bin 155248 -> 0 bytes .../AppIcon.appiconset/AppIcon-512x512@2x.png | Bin 15001 -> 0 bytes .../AppIcon.appiconset/AppIcon-60x60@2x.png | Bin 7879 -> 0 bytes .../AppIcon.appiconset/AppIcon-60x60@3x.png | Bin 12188 -> 0 bytes .../AppIcon.appiconset/AppIcon-76x76@1x.png | Bin 4789 -> 0 bytes .../AppIcon.appiconset/AppIcon-76x76@2x.png | Bin 10113 -> 0 bytes .../AppIcon-83.5x83.5@2x.png | Bin 11189 -> 0 bytes .../AppIcon.appiconset/Contents.json | 116 - .../gen/apple/Assets.xcassets/Contents.json | 6 - .../src-tauri/gen/apple/ExportOptions.plist | 8 - .../tauri-app/src-tauri/gen/apple/Podfile | 21 - .../gen/apple/Sources/app/bindings/bindings.h | 8 - .../src-tauri/gen/apple/Sources/app/main.mm | 6 - .../gen/apple/app.xcodeproj/project.pbxproj | 442 -- .../contents.xcworkspacedata | 7 - .../xcshareddata/WorkspaceSettings.xcsettings | 10 - .../xcshareddata/xcschemes/app_iOS.xcscheme | 131 - .../src-tauri/gen/apple/app_iOS/Info.plist | 44 - .../tauri-app/src-tauri/gen/apple/project.yml | 85 - .../tauri-app/src-tauri/icons/128x128.png | Bin 11059 -> 0 bytes .../tauri-app/src-tauri/icons/128x128@2x.png | Bin 23137 -> 0 bytes .../tauri-app/src-tauri/icons/32x32.png | Bin 2225 -> 0 bytes .../tauri-app/src-tauri/icons/icon.icns | Bin 277003 -> 0 bytes .../tauri-app/src-tauri/icons/icon.ico | Bin 37710 -> 0 bytes .../tauri-app/src-tauri/icons/icon.png | Bin 49979 -> 0 bytes .../examples/tauri-app/src-tauri/src/lib.rs | 16 - .../examples/tauri-app/src-tauri/src/main.rs | 7 - .../tauri-app/src-tauri/tauri.conf.json | 66 - .../dialog/examples/tauri-app/src/App.svelte | 19 - .../tauri-app/src/lib/FileDialogs.svelte | 27 - .../tauri-app/src/lib/MessageDialogs.svelte | 24 - plugins/dialog/examples/tauri-app/src/main.js | 8 - .../dialog/examples/tauri-app/src/style.css | 102 - .../examples/tauri-app/src/vite-env.d.ts | 2 - .../dialog/examples/tauri-app/vite.config.ts | 44 - 100 files changed, 17 insertions(+), 6529 deletions(-) delete mode 100644 plugins/dialog/examples/tauri-app/.gitignore delete mode 100644 plugins/dialog/examples/tauri-app/README.md delete mode 100644 plugins/dialog/examples/tauri-app/index.html delete mode 100644 plugins/dialog/examples/tauri-app/jsconfig.json delete mode 100644 plugins/dialog/examples/tauri-app/package.json delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/.gitignore delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/Cargo.lock delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/Cargo.toml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/build.rs delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.editorconfig delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.gitignore delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/.gitignore delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/build.gradle.kts delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/proguard-rules.pro delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/AndroidManifest.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/java/app/tauri/app/MainActivity.kt delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/layout/activity_main.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values-night/themes.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/colors.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/strings.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/themes.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/xml/file_paths.xml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/build.gradle.kts delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/build.gradle.kts delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/BuildTask.kt delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/RustPlugin.kt delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle.properties delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle/wrapper/gradle-wrapper.jar delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle/wrapper/gradle-wrapper.properties delete mode 100755 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew.bat delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/settings.gradle delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/.gitignore delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512x512@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Podfile delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/bindings/bindings.h delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/main.mm delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.pbxproj delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app_iOS/Info.plist delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/icons/128x128.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/icons/128x128@2x.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/icons/32x32.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/icons/icon.icns delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/icons/icon.ico delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/icons/icon.png delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/src/lib.rs delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/src/main.rs delete mode 100644 plugins/dialog/examples/tauri-app/src-tauri/tauri.conf.json delete mode 100644 plugins/dialog/examples/tauri-app/src/App.svelte delete mode 100644 plugins/dialog/examples/tauri-app/src/lib/FileDialogs.svelte delete mode 100644 plugins/dialog/examples/tauri-app/src/lib/MessageDialogs.svelte delete mode 100644 plugins/dialog/examples/tauri-app/src/main.js delete mode 100644 plugins/dialog/examples/tauri-app/src/style.css delete mode 100644 plugins/dialog/examples/tauri-app/src/vite-env.d.ts delete mode 100644 plugins/dialog/examples/tauri-app/vite.config.ts diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index 3e52a758..d00f81ce 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -3677,11 +3677,15 @@ version = "0.1.0" dependencies = [ "log", "notify-rust", + "rand 0.8.5", "serde", "serde_json", + "serde_repr", "tauri", "tauri-build", "thiserror", + "time", + "url", "win7-notifications", ] diff --git a/examples/api/src/App.svelte b/examples/api/src/App.svelte index b955ee61..06bc4f53 100644 --- a/examples/api/src/App.svelte +++ b/examples/api/src/App.svelte @@ -56,7 +56,7 @@ component: Cli, icon: 'i-codicon-terminal' }, - !isMobile && { + { label: 'Dialog', component: Dialog, icon: 'i-codicon-multiple-windows' diff --git a/examples/api/src/views/Dialog.svelte b/examples/api/src/views/Dialog.svelte index f6cabc22..73a7ea2c 100644 --- a/examples/api/src/views/Dialog.svelte +++ b/examples/api/src/views/Dialog.svelte @@ -1,5 +1,5 @@ - - diff --git a/plugins/dialog/examples/tauri-app/jsconfig.json b/plugins/dialog/examples/tauri-app/jsconfig.json deleted file mode 100644 index ee5e92f2..00000000 --- a/plugins/dialog/examples/tauri-app/jsconfig.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "compilerOptions": { - "moduleResolution": "Node", - "target": "ESNext", - "module": "ESNext", - /** - * svelte-preprocess cannot figure out whether you have - * a value or a type, so tell TypeScript to enforce using - * `import type` instead of `import` for Types. - */ - "importsNotUsedAsValues": "error", - "isolatedModules": true, - "resolveJsonModule": true, - /** - * To have warnings / errors of the Svelte compiler at the - * correct position, enable source maps by default. - */ - "sourceMap": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "baseUrl": ".", - /** - * Typecheck JS in `.svelte` and `.js` files by default. - * Disable this if you'd like to use dynamic types. - */ - "checkJs": true - }, - /** - * Use global.d.ts instead of compilerOptions.types - * to avoid limiting type declarations. - */ - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/plugins/dialog/examples/tauri-app/package.json b/plugins/dialog/examples/tauri-app/package.json deleted file mode 100644 index 39488aee..00000000 --- a/plugins/dialog/examples/tauri-app/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "tauri-app", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "tauri": "tauri" - }, - "dependencies": { - "tauri-plugin-dialog-api": "link:../../" - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.1", - "@tauri-apps/cli": "^2.0.0-alpha.7", - "internal-ip": "^7.0.0", - "svelte": "^3.49.0", - "vite": "^3.0.2" - } -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/.gitignore b/plugins/dialog/examples/tauri-app/src-tauri/.gitignore deleted file mode 100644 index c055de2d..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -/target/ - -.cargo diff --git a/plugins/dialog/examples/tauri-app/src-tauri/Cargo.lock b/plugins/dialog/examples/tauri-app/src-tauri/Cargo.lock deleted file mode 100644 index 0e4a9644..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/Cargo.lock +++ /dev/null @@ -1,4243 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "android_log-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" - -[[package]] -name = "android_logger" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8619b80c242aa7bd638b5c7ddd952addeecb71f69c75e33f1d47b2804f8f883a" -dependencies = [ - "android_log-sys", - "env_logger", - "log", - "once_cell", -] - -[[package]] -name = "anyhow" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - -[[package]] -name = "app" -version = "0.0.0" -dependencies = [ - "log", - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-dialog", - "tauri-plugin-log", -] - -[[package]] -name = "async-broadcast" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" -dependencies = [ - "event-listener", - "futures-core", -] - -[[package]] -name = "async-channel" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-executor" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" -dependencies = [ - "async-lock", - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock", - "autocfg", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite", - "log", - "parking", - "polling", - "rustix", - "slab", - "socket2", - "waker-fn", -] - -[[package]] -name = "async-lock" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-recursion" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-task" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" - -[[package]] -name = "async-trait" -version = "0.1.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "atomic-waker" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "blocking" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" -dependencies = [ - "async-channel", - "async-lock", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "byte-unit" -version = "4.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c" -dependencies = [ - "serde", - "utf8-width", -] - -[[package]] -name = "bytemuck" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "cargo_toml" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfbc36312494041e2cdd5f06697b7e89d4b76f42773a0b5556ac290ff22acc2" -dependencies = [ - "serde", - "toml", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "concurrent-queue" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enumflags2" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "errno" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fern" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" -dependencies = [ - "log", -] - -[[package]] -name = "field-offset" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" -dependencies = [ - "memoffset 0.6.5", - "rustc_version 0.3.3", -] - -[[package]] -name = "filetime" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "windows-sys 0.45.0", -] - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" - -[[package]] -name = "futures-executor" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" - -[[package]] -name = "futures-util" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266041a359dfa931b370ef684cceb84b166beb14f7f0421f4a6a3d0c446d12e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.39.0", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e084807350b01348b6d9dbabb724d1a0bb987f47a2c85de200e98e12e30733bf" -dependencies = [ - "anyhow", - "heck 0.4.1", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfd6557b1018b773e43c8de9d0d13581d6b36190d0501916cbec4731db5ccff" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "h2" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.5", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.5", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "infer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" -dependencies = [ - "cfb", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" - -[[package]] -name = "javascriptcore-rs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e712e62827c382a77b87f590532febb1f8b2fdbc3eefa1ee37fe7281687075ef" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.139" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", - "value-bag", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "mac-notification-sys" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" -dependencies = [ - "cc", - "dirs-next", - "objc-foundation", - "objc_id", - "time", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nix" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset 0.7.1", - "pin-utils", - "static_assertions", -] - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nom8" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8" -dependencies = [ - "memchr", -] - -[[package]] -name = "notify-rust" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260208751689b605138bb55ab6af43ad75f628619a7e0b818d63bf6629e59467" -dependencies = [ - "mac-notification-sys", - "serde", - "tauri-winrt-notification", - "zbus", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0072973714303aa6e3631c7e8e777970cf4bdd25dc4932e41031027b8bcc4e" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0629cbd6b897944899b1f10496d9c4a7ac5878d45fd61bc22e9e79bfbbc29597" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "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_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "open" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" -dependencies = [ - "pathdiff", - "windows-sys 0.42.0", -] - -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "os_info" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5209b2162b2c140df493a93689e04f8deab3a67634f5bc7a553c0a98e5b8d399" -dependencies = [ - "log", - "serde", - "winapi", -] - -[[package]] -name = "os_pipe" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12" -dependencies = [ - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pest" -version = "2.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" -dependencies = [ - "thiserror", - "ucd-trie", -] - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "plist" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5329b8f106a176ab0dce4aae5da86bfcb139bb74fb00882859e03745011f3635" -dependencies = [ - "base64 0.13.1", - "indexmap", - "line-wrap", - "quick-xml 0.26.0", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" -dependencies = [ - "bitflags", - "crc32fast", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "polling" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" -dependencies = [ - "autocfg", - "bitflags", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.45.0", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" -dependencies = [ - "memchr", -] - -[[package]] -name = "quick-xml" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.8", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a" -dependencies = [ - "cty", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.8", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "reqwest" -version = "0.11.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "winreg", -] - -[[package]] -name = "rfd" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe3bae427b011620cf4436d5dd7405c1a86dce3dfcdc0cda12b41fd31569ac3" -dependencies = [ - "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 0.44.0", -] - -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.16", -] - -[[package]] -name = "rustix" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.45.0", -] - -[[package]] -name = "rustversion" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" - -[[package]] -name = "ryu" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "serde" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" -dependencies = [ - "itoa 1.0.5", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.5", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shared_child" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup3" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" -dependencies = [ - "bitflags", - "futures-channel", - "gio", - "glib", - "libc", - "once_cell", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_cache" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" -dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "swift-rs" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fa67d647176dfa7bdc5775430a1cb339e0ea48fe24707424023a4b17eb9688e" -dependencies = [ - "base64 0.21.0", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "6.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff" -dependencies = [ - "cfg-expr", - "heck 0.4.1", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d16138f5d521fcde40580e1a34df784b063dd9ac05c7cbe344bf01f02a23be" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid", - "windows 0.44.0", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tauri" -version = "2.0.0-alpha.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25eefe4ca0a396a73fd0309f778eeb22a19953a3169bf316b893abadc2118fb" -dependencies = [ - "anyhow", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck 0.4.1", - "http", - "ignore", - "jni", - "libc", - "log", - "notify-rust", - "objc", - "once_cell", - "open", - "os_info", - "os_pipe", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "regex", - "reqwest", - "rfd", - "semver 1.0.16", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "shared_child", - "state", - "swift-rs", - "tar", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "tokio", - "url", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", -] - -[[package]] -name = "tauri-build" -version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c492211c72b95f8866e5c1fbc0a915080a5ebb9f03f9b250a1c936534b680a76" -dependencies = [ - "anyhow", - "cargo_toml", - "filetime", - "heck 0.4.1", - "json-patch", - "semver 1.0.16", - "serde", - "serde_json", - "swift-rs", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818c570932ebc2ff6d498be89d93494b89ff142131937a7e56d7cfb9c8ef0ad0" -dependencies = [ - "base64 0.21.0", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "regex", - "semver 1.0.16", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b596485d89003d2d7869469b2830e9a846de9ac2eecd69bc7c24890234aefc" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-dialog" -version = "0.1.0" -dependencies = [ - "glib", - "log", - "raw-window-handle", - "rfd", - "serde", - "serde_json", - "tauri", - "tauri-build", - "thiserror", -] - -[[package]] -name = "tauri-plugin-log" -version = "0.1.0" -dependencies = [ - "android_logger", - "byte-unit", - "cocoa", - "fern", - "log", - "objc", - "serde", - "serde_json", - "serde_repr", - "swift-rs", - "tauri", - "tauri-build", - "time", -] - -[[package]] -name = "tauri-runtime" -version = "0.13.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "404367cd32a5a8d33368448aab7da54bb2187b6a632526f1019de3fd13591cc2" -dependencies = [ - "gtk", - "http", - "http-range", - "jni", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid", - "webview2-com", - "windows 0.44.0", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203764d673b440877dea87b972772be4091ee0ab25141748008646ca774a20dc" -dependencies = [ - "cocoa", - "gtk", - "jni", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fa79bc56f04ece491268a64273de945f65627bcda30d9e8ecc8708b89bca26" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck 0.4.1", - "html5ever", - "infer", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver 1.0.16", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows 0.44.0", -] - -[[package]] -name = "tauri-winres" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7a78dc04f75fb5ab815e66ac561c81e92a968a40f29e7c21afd152d694fad8" -dependencies = [ - "toml", - "version_check", -] - -[[package]] -name = "tauri-winrt-notification" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" -dependencies = [ - "quick-xml 0.23.1", - "strum", - "windows 0.39.0", -] - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c" -dependencies = [ - "itoa 1.0.5", - "libc", - "num_threads", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.42.0", -] - -[[package]] -name = "tokio-util" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_datetime" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" - -[[package]] -name = "toml_edit" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b" -dependencies = [ - "indexmap", - "nom8", - "toml_datetime", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-trie" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" - -[[package]] -name = "uds_windows" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" -dependencies = [ - "tempfile", - "winapi", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8-width" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" - -[[package]] -name = "uuid" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" -dependencies = [ - "getrandom 0.2.8", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "value-bag" -version = "1.0.0-alpha.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" -dependencies = [ - "ctor", - "version_check", -] - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-streams" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - -[[package]] -name = "webview2-com" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "webview2-com-sys" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.44.0", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" -dependencies = [ - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", -] - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets", -] - -[[package]] -name = "windows-bindgen" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-interface" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "windows-metadata" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", -] - -[[package]] -name = "windows-tokens" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" - -[[package]] -name = "windows_i686_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "wry" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf0dbfa7ccbd2e3832a3098b19d4b552360ea00a40b244a99caef46bffd84f" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "soup3", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] - -[[package]] -name = "zbus" -version = "3.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc29e76f558b2cb94190e8605ecfe77dd40f5df8c072951714b4b71a97f5848" -dependencies = [ - "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-recursion", - "async-task", - "async-trait", - "byteorder", - "derivative", - "dirs", - "enumflags2", - "event-listener", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix", - "once_cell", - "ordered-stream", - "rand 0.8.5", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tracing", - "uds_windows", - "winapi", - "zbus_macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "3.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62a80fd82c011cd08459eaaf1fd83d3090c1b61e6d5284360074a7475af3a85d" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "syn", - "zvariant_utils", -] - -[[package]] -name = "zbus_names" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3" -dependencies = [ - "serde", - "static_assertions", - "zvariant", -] - -[[package]] -name = "zvariant" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8" -dependencies = [ - "byteorder", - "enumflags2", - "libc", - "serde", - "static_assertions", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", - "zvariant_utils", -] - -[[package]] -name = "zvariant_utils" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/plugins/dialog/examples/tauri-app/src-tauri/Cargo.toml b/plugins/dialog/examples/tauri-app/src-tauri/Cargo.toml deleted file mode 100644 index 1abf91c9..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -workspace = {} - -[package] -name = "app" -version = "0.0.0" -description = "A Tauri App" -authors = ["you"] -license = "" -repository = "" -edition = "2021" -rust-version = "1.64" - -[lib] -crate-type = ["staticlib", "cdylib", "rlib"] - -[build-dependencies] -tauri-build = { version = "2.0.0-alpha.4", features = [] } - -[dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } -tauri = { version = "2.0.0-alpha.8", features = ["api-all"] } -tauri-plugin-dialog = { path = "../../../" } -tauri-plugin-log = { path = "../../../../log" } -log = "0.4" - -[features] -# DO NOT remove this -custom-protocol = [ "tauri/custom-protocol" ] diff --git a/plugins/dialog/examples/tauri-app/src-tauri/build.rs b/plugins/dialog/examples/tauri-app/src-tauri/build.rs deleted file mode 100644 index 795b9b7c..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - tauri_build::build() -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.editorconfig b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.editorconfig deleted file mode 100644 index ebe51d3b..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# EditorConfig is awesome: https://EditorConfig.org - -# top-most EditorConfig file -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = false -insert_final_newline = false \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.gitignore b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.gitignore deleted file mode 100644 index 6bb2f5ee..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea/caches -/.idea/libraries -/.idea/modules.xml -/.idea/workspace.xml -/.idea/navEditor.xml -/.idea/assetWizardSettings.xml -.DS_Store -build -/captures -.externalNativeBuild -.cxx -local.properties - -/.tauri -/tauri.settings.gradle \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/.gitignore b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/.gitignore deleted file mode 100644 index 810469e2..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/src/main/java/app/tauri/app/generated -/src/main/jniLibs/**/*.so -/tauri.build.gradle.kts -/proguard-tauri.pro \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/build.gradle.kts b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/build.gradle.kts deleted file mode 100644 index 6ada65f2..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/build.gradle.kts +++ /dev/null @@ -1,113 +0,0 @@ -plugins { - id("com.android.application") - id("org.jetbrains.kotlin.android") - id("rustPlugin") -} - -android { - compileSdk = 33 - defaultConfig { - manifestPlaceholders["usesCleartextTraffic"] = "false" - applicationId = "app.tauri.app" - minSdk = 24 - targetSdk = 33 - versionCode = 1 - versionName = "1.0" - } - sourceSets.getByName("main") { - // Vulkan validation layers - val ndkHome = System.getenv("NDK_HOME") - jniLibs.srcDir("${ndkHome}/sources/third_party/vulkan/src/build-android/jniLibs") - } - buildTypes { - getByName("debug") { - manifestPlaceholders["usesCleartextTraffic"] = "true" - isDebuggable = true - isJniDebuggable = true - isMinifyEnabled = false - packagingOptions { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so") - jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so") - jniLibs.keepDebugSymbols.add("*/x86/*.so") - jniLibs.keepDebugSymbols.add("*/x86_64/*.so") - } - } - getByName("release") { - isMinifyEnabled = true - val proguards = fileTree(".") { - include("*.pro") - } - proguardFiles(*proguards.toList().toTypedArray()) - } - } - flavorDimensions.add("abi") - productFlavors { - create("universal") { - dimension = "abi" - ndk { - abiFilters += (findProperty("abiList") as? String)?.split(",") ?: listOf( "arm64-v8a", "armeabi-v7a", "x86", "x86_64", - ) - } - } - create("arm64") { - dimension = "abi" - ndk { - abiFilters += listOf("arm64-v8a") - } - } - - create("arm") { - dimension = "abi" - ndk { - abiFilters += listOf("armeabi-v7a") - } - } - - create("x86") { - dimension = "abi" - ndk { - abiFilters += listOf("x86") - } - } - - create("x86_64") { - dimension = "abi" - ndk { - abiFilters += listOf("x86_64") - } - } - } - - assetPacks += mutableSetOf() - namespace = "app.tauri.app" -} - -rust { - rootDirRel = "../../../../" - targets = (findProperty("targetList") as? String)?.split(",") ?: listOf("aarch64", "armv7", "i686", "x86_64") - arches = (findProperty("archList") as? String)?.split(",") ?: listOf("arm64", "arm", "x86", "x86_64") -} - -dependencies { - implementation("androidx.webkit:webkit:1.5.0") - implementation("androidx.appcompat:appcompat:1.5.1") - implementation("com.google.android.material:material:1.7.0") - testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.4") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0") - implementation(project(":tauri-android")) -} - -apply(from = "tauri.build.gradle.kts") - -afterEvaluate { - android.applicationVariants.all { - tasks["mergeUniversalReleaseJniLibFolders"].dependsOn(tasks["rustBuildRelease"]) - tasks["mergeUniversalDebugJniLibFolders"].dependsOn(tasks["rustBuildDebug"]) - if (findProperty("targetList") == null) { - productFlavors.filter{ it.name != "universal" }.forEach { _ -> - val archAndBuildType = name.capitalize() - tasks["merge${archAndBuildType}JniLibFolders"].dependsOn(tasks["rustBuild${archAndBuildType}"]) - } - } - } -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/proguard-rules.pro b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/proguard-rules.pro deleted file mode 100644 index 481bb434..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/AndroidManifest.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/AndroidManifest.xml deleted file mode 100644 index dadb02a0..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/java/app/tauri/app/MainActivity.kt b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/java/app/tauri/app/MainActivity.kt deleted file mode 100644 index 3dff0081..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/java/app/tauri/app/MainActivity.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.tauri.app - -import app.tauri.plugin.PluginManager - -class MainActivity : TauriActivity() { - var pluginManager: PluginManager = PluginManager(this) -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d11..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable/ic_launcher_background.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9c..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/layout/activity_main.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 4fc24441..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-hdpi/ic_launcher.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 28f1aa119119336781390c2531c381499576ed59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3524 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 diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 28f1aa119119336781390c2531c381499576ed59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3524 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 Hu0mjfi}+A- diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index 13dd21476b5c7f69cdfb82969bce7150244c127f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9081 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 diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 73e48dbfb7dc31ed1e951b77820af88b93fcc418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3377 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 Hu0mjfi}+A- diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 1d98044f13bdd3afc7cb426644ae118688c03c14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7971 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 Z{{b+Ide7&7`HKJm002ovPDHLkV1iT#V`TsU diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index a888b336b5bc84b42c0c266ce9b8ec5d9eafed0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18900 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 I*#%+#2dtK;n*aa+ diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 1d98044f13bdd3afc7cb426644ae118688c03c14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7971 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 Z{{b+Ide7&7`HKJm002ovPDHLkV1iT#V`TsU diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 081832466b4a17180fe9255fa0d3fcba2010592c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12392 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 K@hVZnfd2y&>ZwQo diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index a2a838e7b550ac82b12e73d71427c6ffea06a944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29506 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 K@hVZnfd2y&>ZwQo diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b18bceb64d257ed31d50e65d7f2b98abcfb21158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16751 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 XrJNsHnTG=pQeg0O^>bP0l+XkK^)z{o diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 3f8a57f38e0273699c8cdd1012042bffdc38abce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40510 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

C z(CX6fIh8mroxe4Fy?l{bj%8R307X*fDQ#(v@y+x%4>XY?ax zC^p*eaCfrcq#aa-hT`A*7=V1wKdlx2BoX`y?{jb4s1j@)b7-etD6E@cKXx@8e&Vf zWehdcr8jm&_uNAX*$0NY%B&gn)>)@jQLcO5F3UZEr zds`B64=#T7qE6myk{5rNg+99@E{Zf&GEI$b?&PagH-fv#5k*V6EEmp!A*tE}RWk_SsM5#wN>{l7X5DBVl)bv~bNp*#NXY*I)h$Ng diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index b18bceb64d257ed31d50e65d7f2b98abcfb21158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16751 zcmb4KLwhbtvwdURwv8Rzwr$%scWm3XZQIt4Z7279Kj99#dRUWwdQ~k%D#(e$L1RM$ z001~i2@$3L?*9KBNbvuv(zXo*03gUFDI%!ik$tTT;e)!e+PBn7ktHSs9D>iKBwDFd zOhrv73N{?p(}vJ>`|e}p+gi3h5~Oq$5kL$naZCDyECEbptK2I0IorVk6LFj|b7Ph? zecu)qQqRru>hDDYj%5-r`2Q;_hDOoih{555^BBS^-`a1vrp@+P*V8IrO+mkFe&Qo} zgKd?S*mH9R0bEaaNN2Q#IE=CTqS?}oVYi68iN~B_f&MdRUxkzXWaF5lOKg~gYQ@}O zJkYLqXAc{F#)nvoospV=yV1zR3yZ~Z6RZvHS#bZ8{W@D(X&*nuXaAnk?IVP8Jr9<+ zex_q_dGKWFTY?8TiaXdM%5qi}QKt0)g8&QUs=!<@fg+bwx$kVUV%e~b<-VvMv@s?; za=rNZSi_81S>=%FmztUi5j7M+H}1%OjmR95zJ#N*T|MGg3 z%^nNg5qwoe_uuvo=C*p74>)xPT97LN)OP%mf-D(u5D~dWl6j3n$q(gx`PkEqsE<*1 z{6&(Ruil)i;7wL0cVm<{^Z=8eWcv7ivwNy1UdmOV;yZj1c5AtJV1t|N6A0EknY*6I z6+eI$=XVVn8LVoZv)8~(!$pA)e|CKg9nIKyAsDyd)|3Xn=9AinSb zvQE#W3^SuT`~+4H8U9mI+pLUmisCG;1&Z6?JtQ<@$<15vZ=EN9L2gF#>^c1$WreU{ z4vNYfupSkWUgquvuvJj_b*WI&I%Bq3OSMbKwy=1DcVgjSTJgof~I_U#&u3; z*J#Ck5@C&jY~b8@oyFC-)KtHRcllaRX*M<7rC&IhA5fA%h+>SGgwy@(ApLfotfuSV zNlSLNi<@3d>-RiBV=Aze&|kSiKyxCncPoaFx#Beey3 z|F#SyPs$rq9?x?W5l8e<|Jc)|@QB0dEC2N~OP}XueXVMW{fI#TGez9Iw>Lu+97H7v z0Es(%RH5mxBRXN5*U9(2F-ljRMs!D(M_i;^2ht~p4A243X9+^vb}$ID-KyH{`R4aT zsN2<4m1rJEAz3MkNEiV4>t7VDpDJFIk=_5>fym_dS_qAdOAH{6z>j~!Em}3*&yz(| zOe8WMeQ?~T^e|n^CXo8Q&0TvmPfM0gFFz85lz0}z!i2qhE#{-Kn$*wXW3Je`bZ7V8 zN+o_u9MA-{hP3e+TwC*oAOP~k%$3}i)XeqYaBXs``*l)%SA@-KWX(`(o1(pl8U9Q7 zrnosVagUqvYf{y9)5mlqEojP28b@2e*}qIu@f)5g@4TN9pq+{**Lz)T7`etNbA=>P zc`cFvmQjrI7B&&dbPyB@_nd3_`71$615hHk+UrE#h=epe zL!A*!N;;K_gILY>KmCz*$9qT(;0+n^E*t>3X4ebA1;nxSJblf`hV5{ZT}w-tagxr1 z625~SL0N((5GJrU0gFI9-1;4y-Tl&1P6nP1Ux`6Q5be@GRImJLtP+$y?}6KV)=^{#u)Y!e z28$Fe12-H#1ts4~(|`5F6=i4)kH_RNa#Y$3banLGzQD9Uc)&T9)^J z#!bUiNmCZ~lt-DvB$z|=4vDJ#Lh(3R&nsEd1L|O8=J$O8VwWW)Z2S^G6)5!9tm3pt zOpSrz7zrPE)W;22V1*IQPyLgNNea~ex=F^qH$ES~x72KEHc`xt5$N>vJ$Zgj@}big zf;F|ir&R!5`;S$tde=7hyjxq?pI=g|=|8hCG1*_7Gb}SXgi%>y{!3MeSXJ^1(MQcc zA&@&LYH?20NffU`=>*u4m!yCJmALWO5)`oGi2(WkoY=mJWx<%HpIud5MVcQHaY~H z`9kF^J`4D?nMFS62>lEwYu)#%_e*pBZV%poAFAtMjYt<`uX=VYZPI6J;z&na=g)RA zbzZKTdl^2-Gs=|6aaLrUQ45S26b_Dp{d9l5r28&%OCL!iJ7Uq`C}1Y7VTfC8-Os&h z^-R{L=%j8bjwBsc<;g9M*cQjoTOYTF7ij`6m$AW=<4+o1=pt!tS{j8yRpFv%XcRD6 zG83LQc||q5y3P9)tF^0Wj@oWx@lSvUJ-VU@QGW=TQHUq-LYV|qMJYWVvrGz%TBjcw zcJN3tx`hL50EyuIvgiFOxiJG?%2%NZ)l?@dJj6U{d}H>!gaMmvt3h?0ZHqU&$0_{z$+%N-=H>+7$C?v|4~Pl5 zPai$+q1ZqCd*80>0CxV>zo*#AP{nPG)J1bq^14rAYO#ljNrKd2Bj=)zK`aeCNSLqL z3{iDmKO04PQH@f~9_`drOqfXG%7~1UL#}@%9dSL6cFo*nyE%@@4pUn`4Xx=hUCOeJ zr)A{YsJglYi=~UBkw{P?v7^EBOXGx!XfFP$Z}y%tHuMnD6NL_)i;5?;HTv`y*>rus z8wV5koxWK`yBU!};9YCjk`!YDH6x2z_R|`nS3A_~_>X@My&Xsv4TLyK5nqEDSifx( zX;=TPj-r!!1^QiA3#VnLF!Rh2%({<6Bfjo-M;#{NbbD}l5^)#fhA+J073ew zJ<-UBSzGsQ>+BIThCUdLpjsi4D<~Yd&N6PnPv162Nmxmv`pLk_5@f14J?Okg_CxU6 zuY1o70Q0BH-vKq)t&T!~fmt=9j-S=~l3aeWX|^gFb&wJ(uPJPeBVHYE+j+{as&axr zONlV{oiWyFm89dWAYrM>hfgMA*x5c1GBwaKiKr{z8M`IL9d(rOr}Zq`Nx_5hx5}-W z-d)Pj6-b6mbnLRc#PYSzJ@)MX3(ZXBEUJK-V4v7sU;h1}Q7SuXa4>}C!^GaNBg1y} zVZb@Fxj(MbEE=QrPa?Q<^x$wc{`=fnFFi$y~n`J-g*6&2CQ?7ep@YFKjxF z4QIScR{=K*vBpB+!W2;!d*iT);&9y|S>e`u0~Zm2E#t>6W*Q zbEIQkUYnvsltPhdET(|@YIx6S%urSUW(wRULlN4MuwPPor6 zE#>GX%#~O;w<7MiZs0ym^v0z4vU|9gZAp^!>-r;bT9haaU6GEMS9hf>;Z=GZR564y z_io^L?k0zzi36)3ylDQCgu@`25v{EW3e=b$zd?$&*r30f%JBApvDR(xU!xJOn9YJ9 z5+_FKLJQ*Nh$Zd*tKf9B_W7H|Z~e^~Yb}_>rq}|#r0^wam8!={d+uZcxY8t4tVODH zCs(MyDiGJUzBq~F#-|_;qvJc#f4*N_+{mM2`1JCPExSlAHGo9e1RkTHboJ~tZKhg3 z{XDdlHQV;}9kr35pB&%|w_;8L{{8#>o}A65e&RC2fP9?)j{V2FpchY00a+F+mlgH! zrwZSjs!o43g){iZkM0)*lt1+CgjPOewmmAD>3n{NeCEZ<_b zzEUeOG`8q-__Z{k+VDWP1j7(`@x(#|)qqTy04nv{hTfSMA^6x4){%6P{ z;*_dyHsMIsRGI~PWJA7fB_$Na*(KBK)vf89t-p|*D=j*NkzVq{s@_fJlKvMRm_d-Gi`U#OZlMT)r;FuSF zd%8A~s~Ds`QypZu?#ErCc!CdvPTWsLXF$P!Ib+qE8${^SUZ%5k9oGIg=M{pm7B+bV zA!Ut90{a`-joEa?OewXrRINOKo#7JUOxbU%y&-*kceiP8$LR2ByLLK_oq&Ku1_ zLwywyqO!mCvqSlePbj+jrpF{HWvB>=$(!hj_w?HJu%th&9Q zu(lB%ojIyyE329Z0niV937Otc1SIR>j_V~wzP(&))#5SZyo}>+ex<+I=NOV_?ODC1 zuxOsact!yL8!8}-PUN|YASH$CeR<9o7i*0^`A}y2yL%F%YAQRLIiJcKVGy-4&Opi( z^LSt@EOl63jyy@Jsr_w1w{3`Y;%N6uj~`nI08DU^yUrc@F@4rv<&$o*CKf#p3JSZY z_3#Kx3+gT@)A%=L2@fIb>W4}0NVes+&BdTpjeZm? zZpwm`*=fask1+tpTJ({pjC!FfF1wje)wJi-u9W{xjP3~=p4qtRh*`;Ys3P7m>^zJ4 zU)Cp>;qGmapKtG2D}I<;4H_4(`~KU^`Lpic?;HehDYBK}aCfjIO#_Vz3DP5RiawW- z`QZ~6H>5EUBT}vvo)r90oAv7r$!S>THtdUy0oPV|KXXQbmKnT=K|xCR;$9QGwTayO z2XA>(o?o}v4%sf8;znc_D>4Ik+})Yq^PVE9@IEzaYPWGRGL^ItmaoV}I0~_?Y1$5Z zrA=jy(3n#!PGE@GbJm3M%4dSL(z)UGay#hIoHI)I{G!l6x{xsv$a6i5oSLQC7HH}+?S7JtnuA=cuAp9)5W7zzqt8}KL9QiWAisRrq9e;J_3fu zCLl&G#>XIWe7}xCrWAFtZhygrIK#f$Q$@wBl$NM$`pKR~<09fT%PKAn^L_elK z%$vCbAax3H2s`n*9glUYxUwy{X z2x$YQdx(Mk60CkqYV}l@i4K=-X5l2g-Ij(nneoc1EXs*L=`9V9s)Le7QszMw*ASN9@lPDq@OL z#Buxc7VPuD$iRxIEroNA2>|aavFCUH%`A^r%ZA^7eaI^MD9QB&v%d z+5Y5OBK&$M_%tFmHU~xfqX3mtY6uBpL~dNgV8Xy*DfMyN_>`#1F+)6li_=5_cX0;t zj-VnL1AP1giNxhV+3;xZid>F~pELTwBSDAK`&LRtF(@g=mdO>M;zW)y6Y%f_?C`9N0cmmJMHJ#OiGj^YZ3Cn z^|?!DS_(>6Ba#3=n74pZ(t)(l+2mhx80o--AkF;G zYg#OZp2wbxS8}0dapo7Ni|QdZi{^WUTKaQ@`()TB%21=$Rw zGgugA0W0FYzz_{?2|)zx`*1ikPYo^EKdPw2BMoB!t)sBTvt04pCYMW2!Ta_htczkL zf<#N)toU*-wi-V+_rp8*&|jZBQ>NGYtQRDQC(vUFxzd9t;4Yjz{uhqbSw^j4s_Ih2 z7o7b~WhE*CpO2%#Qxfv;$XrWstG(^Tm^U;nIkZJ>!yRyGcyTm4CbBP2ARNu&kg2j4 z>2$6m&WbzGg-fqN!S=^cDc=dz&d&Xps;*OA_H#ji9~c-PJd~)uKq?8nd;Ky-$-TTb zHH_YG^PL)7r1*;b8e{0C9#Aswl0-jI>)JK<$*W~>6S0An<)Z#y2-($+k`|a62e^X6 znzr-YYepc4s6Ds)t%@KoSC~fj0xGxqNRMt>b{($FgoY$YdpPt-P zSt{UI2}4IYxd@q1+Tn~v+39YEsGE$Z;e?HGlXXkXiY(X{3>_v~N5lq4Gul^pL5m6( z>|%YYc$37feO7>6pCBW-Ogh&*lgY5IlPG5@+1mOI!~{JvTNj~viao#IZ}g3+^X?!O z0x)(arfKE%=V$}Ly4+c1V#e%}``+(pHVQj*3}|FaeY=l*${#U>A7I$CihUt|D53a} zCPA}->14iNtz9y}Pa5KvLlu&)Gvd|n_0Fyv5mJh>u~OwLzKH2GEob8G9*CyXv}*kV zW@M1cXN$lY(?sI5mM!Uj$fgH;4jV|ADkfzG=@;3;4cgIeaolj87K8j4>(yWZ{{={( zY-n0R4UD}GX!pEN#fa-^;oIstEU2)YGj(m&2X@LDV-wWGG5;2aow^4umxP&fG7G!f zReK(IZi?l5vu^z)Eo#w}O6XSQnuDOP^US2GHRs+!wCOe!))0=$uv{IE|HEB%h8im& z-yFpRZonyGUG$mT9wRMz4YjCmWTmkbmzWpSSAM1q_$4#?Q4BIeR7)I%eVAJW<Pn+(o;jM)&Qg^nnlIcK-mr zr~pGpVkdY~RauLc!XBWw!}{nfRshAoqv~Ya>XAx{T)=tN>w5O8W*b~t>}_IsY$AA} z)|1DMr6KymG=p0IZVUO7#1Hfqu6Spx#tANy+eenr%&RHF?kn-ys^;v(vu7vcZ=O}` zK`)%B0)(HnhoSJ$r>X46_*u_zIvyF|Bt_!jVqn{>f*YjE_vKl}pvBr2t?DC1sZDZ@ z3oK?J#jTsNM1LAl$B~$HWh4z^Ay=F1F++!dlq;`Hq@_%99`~!q2&HszZ|k|H%U4<( zNB}h;odyy>D!OET>Bm6NymfzcGKuH^S7ZW&9p*Cn9IHYznW%G4Hy zU;CSc1p19<`$u>e4&vck!*5W`Sy1en3GmB9nO#unBkM z_!~Qy?vjw6b{QIifxfiTVY*s53fcIQZlRK}ARN_~120>KS6b69Ve$dgr`*?0_A38<$$~U{}KFJbJ zzfm;~bD~7Hta-9i>S4bkq#!v`qR*{g=O!WS`ZV2$Gk&aM1QR>B6jn340j{Ik{$z*( zS7McQhewd8&Z)NV>8d=aDs+f^<`&ih5njoch<>%x&?7Qux+#M+`!E(?=9kI~5mV{k z-7DW5^WzqmBD_H3pkkfRElKIV_fAw4ZMit=(0iGbbV}a`g+Q^6>m)tn(DdpxP5DMI zv>L7YgDaqQeur^@>vCv9fg*ku?6StPp9)^wGWdQTn?Jj=%j7{KarGjWBz(BHa^q*L zzR4<4=Vn6VK`&4uTO`hZcKeU*98s+R^gSXI>5^d|8w;<+Ow$rD)Lv)%4z8lL@G7VOekB}&(9y-N50Lq9ee z7f-BGgRKnP&zMI6IxCZ;?Gk;& zF5lKk*VN+Ls6jRLXM=;J;PG;QoCZd|H+HtJm$BH5RhyMxW`*gZ-Qdll{yQ=i8dCPd zIdWq7&ufqRNKyE?7-mfa@8)4}t(K`P{tq0<(!-x@V8yW(vgPM&AWT+&R80wcE4H>vR+W3N78{3%MSUuF zJi08FPnPQfF~tvKDfDSJG+*0!u8Uvn!;oWqk1W@D&QsUBJ>CMvE{q=r=K?Lkv5q6( zknE;`3w5GE3Wh%II|lWXY9WmjjN{G6ox)K-fIp->@`{t(+-&vGf>Z_V*fq_H835MN z2};uD{fpCiczYEOYvri)#k2%dPe0Y)S9=Gb@O#9!S{ZAoGFu(r@Ev zFRh8i!J;q9q7PotE_Y$3w-fZ|gkjdESE(ZYXaUW@s(wbS?VB_Hr!U|sFRDI1c@s`Y zWC^seg(P)$2ZFgffGhx6`Fl?NybnmO^22k&XJ8M$y5W_Gx%2yxo z+maQupYBH!<@fKS+<-CRw>;YN%FDOdluLgt1E=#1!sE;}w=O&qVaFyC;r202I!8sj zgYQi{(W#*|$p92+!c#u$Qp`;9293zmH8lODS*B`&zoc*HuF8^h zWxVf)HRlX{ZNc)=eG2q+iVjDl%mik+_gst=j-ydUI5Z2l?&^|_RU%An*Ni;h?;Bf- z`q{o1mof^7U$A2%(_bdZqwUAKtGK%dfFHO6;68dn2XN($quZQz{on3%gP$|T0C+b( zsuC~}`%Glk4PgTSns_ltEl<{(Xs?q(7PL5j>wTY|Czs*F)0&AoR^5j$@{a7wEBfsM zn4ilc9%HnQmdGJP=ABZKd!I+3>oCfH5|vF2Gf*yYti=Gb$y=olf7P=t!**T=DDE!D z8x1Gy{#b_~_36KfaG0o@@0YcQq=7kWMp#6hEPHNy18qiBTGC>;fXbkkHYGKu@iuGg z)|aFRu{ce*F9!Z|T>llBin9<{WNj!fC0Npm2 zxfsEG(O1+dwz^$Ac|K#p>O^Accek8x(n8J<)*b@PQ)YpRdRKc*h(YX z(yExCwoOw&&6lPjp5w6FO@K`Guc1)Aw`Dto%}IZQu(sYssYoZ}5xhK>q#Pyc) z&qFVRhxC3M&c4BK-j)OKQO+c)Hr-zt8QU(%ZB`!4VoYLy!Q7YeGUiIa&in2>62VbU)eHgVY%7Z zJ`xHmJ;JT$S%K{FiL^2}n%|D+(YCpE-R;f}lWuLi$A;_-UW(~Z7bo%<%LBUFfAXdE zY>(w_3K?3narCg2sEUgWAz^{0GfcXmoGJ}WIevNnwjnJ#@;I-`$<(f%m_ParF^g3t z6|>)e+}RydYZ|n_t8#Q?q{Mi5CNz5qe6$+Ve};JXPU;;s<5o&8oD(x7SSGIQX{!Q65Q+H@Ujbe z%A_Lk{7P$aZ2ZM-iDNipk#}#HLe=f`takdmaYK zi@GBF&9&qI>~#$VIb-K54N9B1S=a(;Z$BX3J5C){*~|j2mmY|}d<0BwHdz+uo5IfM z8H^MacZnLQ%G-8_QyUGSIQGPR3qbv|=>b6S1R6m*rdnMlZ+y(-Qr9eW=OSCX8awRj z^?ng(`^(54p6}Fa)2-?!Px{@xhw;5h0)JPDqdKPmg0NXKd>s2pM0~Y`>q&t~i*p~E zZ?%drzKN41d$Xd>F>L!Hvj_s7(L>!PYvT64h57;-WK{5ZBjGMToUy5-3N^Smf86T> z;EVaxRjIyRK9xIm!ghW4Ge{_an=4VRKa8y{yswx6eB|3@VRQi$u5>y(;$sTVA*Qma z^gAric_BGKPX(Pi$89k1A5CrkL1@*aN+50ZSA$k$fnVG2yS6y)N2kbS-89#jg(>^( z-%_dg8{hhKG7EuocXGMrv{wfR80fN+1YOqa*7~T|gEx$^H9b^zu1P?wOF=0#Q<3gd zA3SU#OTalQVMmc2w&8M}&9M^wxarAy+7sM$JV5?0zyF5o&+Z1nhLTKo#nN3Wmd*90dCH-bP5BvY$l!;UeI?wF5T5T*P0 zMz|_qt2`8>!i35Ov4A^*bJv;N7h?j>ujvzCe1C^u4d28Mb0rsK!_Fld?;TF9_+Y4G z5zB-03e~J#AFnV%JO;!HEY!eWfUhBh_S>Cq(|d8U-3ySgeWFy9$T-q+bG*z*j;W4N z;r>?Ix8cFjYp)D(^L+5aDI?tVIfr_m5%mFDr)qS*h&d-tX+D;c&vf5O(H!(%UR(Fo zk}D^^j*6@WP0?Q)%{~e{ahi2m!3)jzBcKpK(M(8%9chFjS%O0(l`RqSvfvtRLIuwJ zf0H|e=J8CrPm}la!|U5WFw%e%E1durHU)4)1>M+QXjc9m$=eV;gL*Kyzyg zJ0=`qN*bP0CG~?qcQfe#sluN*wB4vSw`<;Ns|j~*7w}jaSnO|9Thzit_oIK8nLn>b zKA-yuag)cUxBx5)5zwiUjJ|)q$?XB;knRsYQq&c1Cy)MlU#~+56C)!7icyAre&E;s zq2t%gbdlFv8Vp2iv5;zNbi6lvEk^ipq42nxZk+gZ7qmG`IB?QrdLzbqBS@DNMg4_mU3bBO7? z6~(76AbbH=dA-=^HM0{Y!SY361oX9jRn3`oo%He}xTh~zDVuC+VQ1BHx12#zy7ES< zmSFT*e9p_o_+e0F&|j>272 z{>nvY)hHw$s$NCE1 zD{C8_S)gZc)-Y8Yoi9)fEO(odFx^^k8m4nC)jYPn^K>Glm7!_fq)7J} z(V=r)GqMs*BV})(@Y_9H>sV12NK+L0vQfe^NyScaGTH}_p_J((r(~b~TLmkaI1I7A zh_j64)amLFK7DKU?{iar^ptMP+-#j&&gHgd6qsQwlC*rCH07tkf0gt#cX&n$s^mme z2uU6VK`GN=$KDH$Tn1EmNxC2bs)BQe6t9yLu+;vOw40Sbs@cs<{hoB?21}B55g(nt zQ=)pcgy-ZHFLr<*&Vs~Pz&Q49bWMAGIi=~YyJQwHOjSO)>dhcp0v;Qw_a6s4s2}!~d=3sAKOWVjB>!xmGvxrkJU^g1sO)ZihP^ zma#fo)hSliSWf@x|1RhjwZZlG)jyuKHJ=^Ir0!@qO0Q^EKum;z4D-C_7dZBGUIzqq zN6Ds;R#9-+SIeHF%A%$!s`kMPcz65Mnp!IBCE6@^BjEov>X=^UvZl0VqcEyTxuPEN zCmqa!ywfv!AG@7hBJk)*`st*P?qn@o0Og|#2KjWNFm7?nZ*{T|F1OGNXc+5wsKr~G z=iF)`>U_bpIA4GEDX@IZtzNMjv(0f? zL8-kH7Yz9oKAko>0rnK{<>oScOD`wI#rX@K4*{B}MNJ#u&CTw=&*A?@TT+-E#wKiH z;J`K#vMg@ilk2?!W(@QN3nnZqWt-cpzmmK%V0k|O2Tx||q!mcGF{Js4zVs!h(}_(y zmF-S?k$K&ZA)(t2?&%C6eo5047kX4Mx9BiR-h9b-mS?V9>AO0<9Ip;PiDutJ)B9D{ z_GLEc`)?O@E_!IF2XA`z;b9K0iHgbwD0_$k4U{riaq_TcomxYZvXrErE&hP!4BL}sZROd~r^pRMcugvo& zt&(JeCN+&3;TAnr%5mb0O#?}sxuqmD-p}*cAoz^<|A;dT-+Ka3{+QYo<-4_9aDhb{ zq8i@0DVvwwLEL%ZmrM(w9+?c|>Q<2VHr zM;4BHHb}ZD|01bpdC?^D?}^?blyGpj^Bk;SXMSaQFUn*fa$=}d9qBqOj zeEi@(H!J}Vx|r4Ep4X42yOL}><2uPpqN)48Vrys^8DhUxe>u zlE|4Ro0&bo$Iz>G_Mt?E5&I!_FNXghb}?ioc1#I+-vfV&ysCJOgMnP=_5<%skK>|p z7XaE#9sev)go9+5&0TTVu7d0M<}(25)vGYF`GNW(cUf6}Z!65TibeQ{lc<)eHgJ$p zp9(M-eIL`phYKWdLLVr|FhvorI7!lSNLqePUKmIrw7$wxF@PxKL}&85A74&={H~8i z$99e2OgJUHm{Y?VJdrj)dEtDws!o&p$?x~1-X4d=te+iSGxu~Lj zb0RCHwZGUc^<-fFgTqx@0>F+WY3Z>0b%|E6el@m9=F{X2CNI*jhI=fj_Uy?#Qa0&e zo3L`TU8diBpPnGv&@))E&$t*4(Lb6yXB`a=?7mtpsc0Kg12>2T-c}>nSDjwZBNsSr>7$h?J z8QebgL}Y%0$+cJv-QOi0x??oYY)UPqKM8UiAVEh-%3q;zdw(X|e5IjUZN$3!HVp#$ zxRAl34n0^yW$3grYIMEfLAlk<))`?h*SK0#7$Z>&9K|S3*J;cGSk7PVG@9f>^Ky(p zXUJ>e;Kt8RAi#QC)c4++!}C0u&oj08z~NS9p1nwW^r&h5a4a-Jmxd77K?;@q(~CqCkjn%lqMPL-9@$bQ24}($U(_{hl9GW9_ILcMxWoq z^C(k}EB)Yj-1HW~+!A2HtV*V6ucMc&uiuMNr6+mgrXvWvM`Qpd#@Q8>=I%q})$y)YZr{rwECJSsG)vPQwZnsz*0ub?k zGCbMnV?kqaH#Ogf))>_2wVy)yy|qWqqkzl=qK(+KWix7*AueXOv^$?KN&6m*q7SJX z>S%vU2xrhW3a6}BSRIkJmN!k!oh4T#J4>E6X{1v6A;wtv&@w`#xPw7{F8WJ`9 z4Kyo#|0eG>wa%*X&O<={#a6;(DPtv@# zO@#vB+7fQxM;+~n&?1>;qC1w~G&0wzSl4VnDec9F~xt(J}$?dlje zO~BO%=+Sac{jk4O0Y5~5pBV5re`(h;A!J@j1K_<`x{dgT?SGg|CsGmTO|W88#OCnd zY8q!tdyEW$!i7(QivGB~3#0L%`Zmo2aRqX$1Vo3*E;=B;=pbLN89=ipL3r9PlVl@N zIYsn6G70}UcvQkntuOV``8`)Ql?!RoZQKGI(%sOuU3UPl4+Q^NDC!Vk^I3qz!hN{g z@Pni8b+q$-g5Sg}XHetB7f)eUy6$~f5D{`0az5cODUubi%2 zSPv>nU{uYgnc`{>-b+qI|L)%)#O-+xk)i3&P8D=OX4ez3Pd|i(4FRxWA#+ydoP74@ zdlUbYUwno)@J9Zdv_6_*IkFBP_Z#U;^fE*@Iox8UB}~xVR}vcI_A>nrf3nOY$6`M$ zl3+6f;atzvgN*~0q63hK;hU;dY0_-(>@*&GJ5;wsl%v>q_Zb|=>XpW@1WT&aOfy0u z5vDTf{9ZHj%<%f$M~f#%^vzMQnAh4POMy~Z*FrAxVxkMYuAUZ`zFq`{y-WG-;wWTo zxAcouR1nGbh4JHwwY(7R_Gvi!^^bv`LSo`5cIhtps4}02jdyEs;1{$<8^N!CTJI+@a(%45NoESW$B-#7tTcYSorP(_A#v*9bv4ftM8f zw-E5xIqEMH+)dQzKApN~WQ8$8ipOD$y~73p3ib+Ha+1=R?IEB>mpgstgJ^5JM!apm zB7^ntxNxy%DF57Bz;FuU&|pE%R@D724EO&L8G^3Rzx>z+8eRl_9y$q0$Z+_@94s5sT^8X0{v*uviuA7-O*Z4Dd z41>L|Dym&MbEsqsV+hJ}lk)WGeyeq?*Yveii6-6qWV`ck@fQx_Bo^FfXqyR>kW>ti zzo2Tm$*3EImg`tF>f#KG#W}iNxdT~X8HFD`VWRpC6hl;>i1G<)ae%jwse48oxyLkW z&o=UVQYF>aJpYXLktm5@CE0MG57GnB8rLQ|!PC6`k71EriQDtnZ*f^5Le`lmX|bUG zs8j`M`7b;i=rBT6ADl~8Qf@SDW_0anC%qLg;7fd#4vkc0})#$3>UFkcMybA zeI!osc?-K|y$MEa!SJt!JXm{B$lC?SISRwpxDf?)%K5EqkTW z`rCh@b1fPNNLDohNLOf^>KUu-ij1z7>;EZDU#8Jn{z3id3 zp1qjkjm4)v7}z|Y=H=~Tb>UV2JbS&XZtY@A_cZYyYujKhp-?8lbd|a8;6{O4N_r_m zzE0)Nj<+%i%7)-$)m%giMf^ksDg^Bst{J$%`317k@ukI@MQ5(zHjzxIXC XrJNsHnTG=pQeg0O^>bP0l+XkK^)z{o diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values-night/themes.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values-night/themes.xml deleted file mode 100644 index 7cd5d350..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values-night/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/colors.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/colors.xml deleted file mode 100644 index f8c6127d..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/strings.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/strings.xml deleted file mode 100644 index b2556e82..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - app - app - \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/themes.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/themes.xml deleted file mode 100644 index 04239cf4..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/xml/file_paths.xml b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/xml/file_paths.xml deleted file mode 100644 index 782d63b9..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/app/src/main/res/xml/file_paths.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/build.gradle.kts b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/build.gradle.kts deleted file mode 100644 index 8c6fe584..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/build.gradle.kts +++ /dev/null @@ -1,25 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle:7.3.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10") - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -tasks.register("clean").configure { - delete("build") -} - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/build.gradle.kts b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/build.gradle.kts deleted file mode 100644 index 2713738b..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/build.gradle.kts +++ /dev/null @@ -1,23 +0,0 @@ -plugins { - `kotlin-dsl` -} - -gradlePlugin { - plugins { - create("pluginsForCoolKids") { - id = "rustPlugin" - implementationClass = "app.tauri.RustPlugin" - } - } -} - -repositories { - google() - mavenCentral() -} - -dependencies { - compileOnly(gradleApi()) - implementation("com.android.tools.build:gradle:7.3.1") -} - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/BuildTask.kt b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/BuildTask.kt deleted file mode 100644 index 2e777156..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/BuildTask.kt +++ /dev/null @@ -1,58 +0,0 @@ -package app.tauri - -import java.io.File -import org.apache.tools.ant.taskdefs.condition.Os -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.logging.LogLevel -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.api.tasks.TaskAction - -open class BuildTask : DefaultTask() { - @InputDirectory - @PathSensitive(PathSensitivity.RELATIVE) - var rootDirRel: File? = null - @Input - var target: String? = null - @Input - var release: Boolean? = null - - @TaskAction - fun build() { - val executable = """yarn"""; - try { - runTauriCli(executable) - } catch (e: Exception){ - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - runTauriCli("$executable.cmd") - } else { - throw e; - } - } - } - - fun runTauriCli(executable: String) { - val rootDirRel = rootDirRel ?: throw GradleException("rootDirRel cannot be null") - val target = target ?: throw GradleException("target cannot be null") - val release = release ?: throw GradleException("release cannot be null") - val args = listOf("tauri", "android", "android-studio-script"); - - project.exec { - workingDir(File(project.projectDir, rootDirRel.path)) - executable(executable) - args(args) - if (project.logger.isEnabled(LogLevel.DEBUG)) { - args("-vv") - } else if (project.logger.isEnabled(LogLevel.INFO)) { - args("-v") - } - if (release) { - args("--release") - } - args(listOf("--target", target)) - }.assertNormalExitValue() - } -} \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/RustPlugin.kt b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/RustPlugin.kt deleted file mode 100644 index f40ad054..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/buildSrc/src/main/java/app/tauri/app/kotlin/RustPlugin.kt +++ /dev/null @@ -1,59 +0,0 @@ -package app.tauri - -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.Plugin -import org.gradle.api.Project -import java.io.File -import java.util.* - -const val TASK_GROUP = "rust" - -open class Config { - var rootDirRel: String? = null - var targets: List? = null - var arches: List? = null -} - -open class RustPlugin : Plugin { - private lateinit var config: Config - - override fun apply(project: Project) { - config = project.extensions.create("rust", Config::class.java) - project.afterEvaluate { - if (config.targets == null) { - throw GradleException("targets cannot be null") - } - if (config.arches == null) { - throw GradleException("arches cannot be null") - } - for (profile in listOf("debug", "release")) { - val profileCapitalized = profile.capitalize(Locale.ROOT) - val buildTask = project.tasks.maybeCreate( - "rustBuild$profileCapitalized", - DefaultTask::class.java - ).apply { - group = TASK_GROUP - description = "Build dynamic library in $profile mode for all targets" - } - for (targetPair in config.targets!!.withIndex()) { - val targetName = targetPair.value - val targetArch = config.arches!![targetPair.index] - val targetArchCapitalized = targetArch.capitalize(Locale.ROOT) - val targetBuildTask = project.tasks.maybeCreate( - "rustBuild$targetArchCapitalized$profileCapitalized", - BuildTask::class.java - ).apply { - group = TASK_GROUP - description = "Build dynamic library in $profile mode for $targetArch" - rootDirRel = config.rootDirRel?.let { File(it) } - target = targetName - release = profile == "release" - } - buildTask.dependsOn(targetBuildTask) - project.tasks.findByName("preBuild")?.mustRunAfter(targetBuildTask) - } - } - } - } -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle.properties b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle.properties deleted file mode 100644 index cd0519bb..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app"s APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official -# Enables namespacing of each library's R class so that its R class includes only the -# resources declared in the library itself and none from the library's dependencies, -# thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle/wrapper/gradle-wrapper.jar b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle/wrapper/gradle-wrapper.properties b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index de8c362b..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Tue May 10 19:22:52 CST 2022 -distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip -distributionPath=wrapper/dists -zipStorePath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew deleted file mode 100755 index 4f906e0c..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew.bat b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew.bat deleted file mode 100644 index ac1b06f9..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/settings.gradle b/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/settings.gradle deleted file mode 100644 index b179eac8..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/android/app/settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -include ':app' - -include ':tauri-android' -project(':tauri-android').projectDir = new File('./.tauri/tauri-api') - -apply from: 'tauri.settings.gradle' diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/.gitignore b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/.gitignore deleted file mode 100644 index 6726e2f8..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -xcuserdata/ -build/ -Externals/ diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png deleted file mode 100644 index f8b128e3c0f8eaf9fe7842259829ba458adb636b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 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 diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png deleted file mode 100644 index c5e92f781f349240e58858d92db3ab3be0c9b8d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1419 zcmV;61$6p}P)2M+4;In-AX01*Od+&6b8-92;r=KKEd z|7V$`hBY@@qL(=jGY{ist#+>+Owi^ode|ycEHhrBv9g(JFmC_MK_)K&3uAzl0z4tG zz->U~W-#Y)`r$Xh)IPnG1a|dvu<4UvscT@?0u37G(iH>(?GR1Rfo*(}z**5j*T&QV zTnGafUja+>n~l_lt^g$SfQbxYr;V)CFKQkFyYmQ`yK+U~(xCPNNv!Zk7uezr(@l(I z!&5-jHUbV(|14ze9N6S{VA*LpKo&C83EXv@&fzOC+kb+ZiF&a28L(Ing~$id{5)9u z0rJsuBgw@$74b2xd~Ku%#!B zoIIcpwIWk>dKUr2a~2MbT}K6>Q-tv8mW{ZtI+#C{Bv_`@Xz7OVHG;+e1UBpfui9>; zhh zHUoY0cp+wcz((IS4zFkcYkb-+L%djChj?@`hpXwFN(}6*3g{w`r4uMKoguKUfeB)5 zRC%wxUdP$^fMS|ULQZ@I7CuVy(_yF{ODZJXy>8ic$C1w-=y;}t(49>cZWNB4Ala1% z8>zq2&2gOGwL-8f*Z48;%ZCYYQRl4Ke3;~aWX1cnC}mVk^{JKlL~%)O@p+K61Txe= zmlGOX=d`vKwahdG-Lt~q3Rl}};5GLb#c>&^V~-6UH*O&o5h|pqWdDB23ORGF0W>RqXz zgn0j26p#NkhMngI5Kd<_L#xC!U38xc+gUFRM(}+!i3$RHtR{#f?G5npmG6c($7XOe z5+ehW<3oP@*trS7zpw2wK$VN1=o`l%#Za+qA=7l#hj4EwfNHmk3}xYbB8?L>aSSYE z_2wHq94EK7;8vekE5RAcV_I17RnERRIEk}!DgCbcgY?74jnqk@?VT~Q%;-u349YNu%|YJmm1gW0#Xj(s-VuD>PSQm zMc;fHmr2S5td0Nx diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png deleted file mode 100644 index 1c607d5c35ea3f4d5111a1542341d7df7c9c2ba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3509 zcmV;m4NCHfP)d<{Fcu{w0#9mv?=eJ zpAeun-w4Eu9|aC?hST>tgiHc%1%D3bcxK|Qb3n^6fZmqTR`~O8hgh<~c-T+#u+Ya0 zR4q`2AwPP@Uxah`mvGXGWqlozmPwUIyivZV?D3BEr9H-p((~okFu{2QVml$?`wj3= zP1eKOU@6*Z6yEC12+g~BN?|-ZK&^GXkA4QX<2MA^YCQ%6GR@Eqxs6^n}U zrzB{9@IB!8@8O*KJA)usqHlj>zSS7pJ>^|mRst?|RyWp&N*epXWG$5HX8P9_D#=3#s_rQ%GU?>M*$=s=a zc=K3#RzFS<@{HG6v_*jI`7B)#SBX)(Uai z3y|dt4T%LMCR_)n`_GVrJ1oh`x$>wf0dkB2;O(^#UIH@G#6o|*RyTg-GPn!Ard1D0 zT704ioVeQ%jyLo^oSnDvdTvhc55a4?3C_h&ozbh)mw?JXT$?<(6{2!Eu;31$?n*Lg zyIyiA7f7K6Oq6vKmsj zDUT2S$J|SZ*(W2<_q7L<{d&ezc&eihU)JNzp+dp5!y-bJP! zB$4&N?b!ygs(+=Ynjz4=jnkIk{t(TS(PaW^Wb6rE| zN_i-E9n^u+`)4!2M*2^Kt{hQ#g*=k5EuRhxMsufmE z1@bVYYqg*312T1b7Ch=%knfL-;-=ll@Y9ZdB)FdDa0n6pUQMv-^XZXfE#32)$~JTB zKq9J_Olbgu^->PJnD}-eU@9&{!>G?Ge;w6<)Y+2Qg=15rQuv(B?w4RyY z-R0kdrkO3bqH6qCXwe@%YI>`2QEDJq4Y@JBGRYrwmoN3-= zasZ<54W3+?Jx+O)(o+QCEvDhoz%jq>90&qOUq=}r$`8-1Xqy1C0J-G(GUpRRQxChM zE!iaTQA8J;*33V?1@3rfw&zuB>oPZ+u0QQAlg?4;o1OdOW7r-W)%7tbFN$67ZLh=X z%Ce#$)%l*Ep&BzV%d3lSjw#I4uoOsdct4zu=joc-Y-lU;s=pde<@v@?CAyd5K&>zS z);~hRks6>{@E8#+in_SFt=@!00gwuyA}kf+3C}|;l{Voj1PTkg(k+@yQ#Q5#;}?CcV~PYDWY2x z4dJe~I^5h;bLPQE<`D)#vb*tjZ-ARPXr*6v!XR62fzxnRY4R!sG+4+mK^+=PX{Dp{ zTo@v{p{}xEMg$;t#1dHl;Ry_~&{n!8XgX8l_{YAJcw})B_b+TRsZo@i&1_iqzXh@X zhj2Nq$bxkBa9eT!Czd}n>4y|0f%YWR7$DfdYf2#0ha6l`5jAn2<4xU<3X_Kq9_~S0 zD*bDSN^QzmRc;86QyX7bTY)QTDvE&h*}?2FQ$VGQ9XAUSriD{-&%fw#xY6cGPXUYQ zF!MG@kSZsGwWv_7BT!Xl3XzZ6-WrNyUm~f=OUXk&Lqz6g%2=6-I7_(Y2ZREm@XgL0-VIYU8J;G{i3AQRCAj+c4?dGGiZKMi^FwONlwBb3AQ@ zL*eTxub)h&^U4=;5p~$z zL^(`6$Qr8h_OuIG_gur=TUr*<$|-D1lId*~DHan2nB1bQ%$w0Y_0oud^KbMxm*TlDBl8N@R_!6j?Ym3#wRZgpYTQ6FGCyw=DFO8x?eMvNoJ6oG@yA>LuKuOVXITMyw z{E76=(J6aOS05{pd8#(et?0Nj5Ccyh>&0Uo18AamRq0SnI**@UzjQGwLvF$1AJkK| z_0o%~#I&)y5keFlSL?cIg?e_{YmPq2;agiYf|+bi@g3$?pKGW>CB5m{Qc=c!REdZ! z-Gdo}ponKR@ep7;7pXu7lS5IEuhn@@#)Ha0+gOHfzbvULYNX*30LYMQ}xR8P?R4vv&<=i~xV;wQ|mY zW=IOAi7r$IWDem>49Gycx^oC{R)J3Ru$j1ujPl7hh`F631kM7!xdB=X{OP_t``euV j^T5XqFxbwSe+T(L?uD8#1zeE%00000NkvXXu0mjfQHZ$R diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png deleted file mode 100644 index 1c607d5c35ea3f4d5111a1542341d7df7c9c2ba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3509 zcmV;m4NCHfP)d<{Fcu{w0#9mv?=eJ zpAeun-w4Eu9|aC?hST>tgiHc%1%D3bcxK|Qb3n^6fZmqTR`~O8hgh<~c-T+#u+Ya0 zR4q`2AwPP@Uxah`mvGXGWqlozmPwUIyivZV?D3BEr9H-p((~okFu{2QVml$?`wj3= zP1eKOU@6*Z6yEC12+g~BN?|-ZK&^GXkA4QX<2MA^YCQ%6GR@Eqxs6^n}U zrzB{9@IB!8@8O*KJA)usqHlj>zSS7pJ>^|mRst?|RyWp&N*epXWG$5HX8P9_D#=3#s_rQ%GU?>M*$=s=a zc=K3#RzFS<@{HG6v_*jI`7B)#SBX)(Uai z3y|dt4T%LMCR_)n`_GVrJ1oh`x$>wf0dkB2;O(^#UIH@G#6o|*RyTg-GPn!Ard1D0 zT704ioVeQ%jyLo^oSnDvdTvhc55a4?3C_h&ozbh)mw?JXT$?<(6{2!Eu;31$?n*Lg zyIyiA7f7K6Oq6vKmsj zDUT2S$J|SZ*(W2<_q7L<{d&ezc&eihU)JNzp+dp5!y-bJP! zB$4&N?b!ygs(+=Ynjz4=jnkIk{t(TS(PaW^Wb6rE| zN_i-E9n^u+`)4!2M*2^Kt{hQ#g*=k5EuRhxMsufmE z1@bVYYqg*312T1b7Ch=%knfL-;-=ll@Y9ZdB)FdDa0n6pUQMv-^XZXfE#32)$~JTB zKq9J_Olbgu^->PJnD}-eU@9&{!>G?Ge;w6<)Y+2Qg=15rQuv(B?w4RyY z-R0kdrkO3bqH6qCXwe@%YI>`2QEDJq4Y@JBGRYrwmoN3-= zasZ<54W3+?Jx+O)(o+QCEvDhoz%jq>90&qOUq=}r$`8-1Xqy1C0J-G(GUpRRQxChM zE!iaTQA8J;*33V?1@3rfw&zuB>oPZ+u0QQAlg?4;o1OdOW7r-W)%7tbFN$67ZLh=X z%Ce#$)%l*Ep&BzV%d3lSjw#I4uoOsdct4zu=joc-Y-lU;s=pde<@v@?CAyd5K&>zS z);~hRks6>{@E8#+in_SFt=@!00gwuyA}kf+3C}|;l{Voj1PTkg(k+@yQ#Q5#;}?CcV~PYDWY2x z4dJe~I^5h;bLPQE<`D)#vb*tjZ-ARPXr*6v!XR62fzxnRY4R!sG+4+mK^+=PX{Dp{ zTo@v{p{}xEMg$;t#1dHl;Ry_~&{n!8XgX8l_{YAJcw})B_b+TRsZo@i&1_iqzXh@X zhj2Nq$bxkBa9eT!Czd}n>4y|0f%YWR7$DfdYf2#0ha6l`5jAn2<4xU<3X_Kq9_~S0 zD*bDSN^QzmRc;86QyX7bTY)QTDvE&h*}?2FQ$VGQ9XAUSriD{-&%fw#xY6cGPXUYQ zF!MG@kSZsGwWv_7BT!Xl3XzZ6-WrNyUm~f=OUXk&Lqz6g%2=6-I7_(Y2ZREm@XgL0-VIYU8J;G{i3AQRCAj+c4?dGGiZKMi^FwONlwBb3AQ@ zL*eTxub)h&^U4=;5p~$z zL^(`6$Qr8h_OuIG_gur=TUr*<$|-D1lId*~DHan2nB1bQ%$w0Y_0oud^KbMxm*TlDBl8N@R_!6j?Ym3#wRZgpYTQ6FGCyw=DFO8x?eMvNoJ6oG@yA>LuKuOVXITMyw z{E76=(J6aOS05{pd8#(et?0Nj5Ccyh>&0Uo18AamRq0SnI**@UzjQGwLvF$1AJkK| z_0o%~#I&)y5keFlSL?cIg?e_{YmPq2;agiYf|+bi@g3$?pKGW>CB5m{Qc=c!REdZ! z-Gdo}ponKR@ep7;7pXu7lS5IEuhn@@#)Ha0+gOHfzbvULYNX*30LYMQ}xR8P?R4vv&<=i~xV;wQ|mY zW=IOAi7r$IWDem>49Gycx^oC{R)J3Ru$j1ujPl7hh`F631kM7!xdB=X{OP_t``euV j^T5XqFxbwSe+T(L?uD8#1zeE%00000NkvXXu0mjfQHZ$R diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png deleted file mode 100644 index 60e93a6a1e666cc452bb8ee700f8f43bf8fff19b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5618 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 FV1g=}>J|V1 diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png deleted file mode 100644 index 819410f9ffac0496b0801c65fc3920ac8ebd56e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5143 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 FV1g=}>J|V1 diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png deleted file mode 100644 index e00ae5a6a44bd40c58d4d0dd5339a56260638c46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7879 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 diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png deleted file mode 100644 index f5301f37d539dec93a855f5330a94743f797041c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155248 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%0A(a>@^on~< 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 BiC6#t diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512x512@2x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-512x512@2x.png deleted file mode 100644 index 5e9add73161e79c11efd1e2c4e4ee64f243c99e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15001 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 diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png deleted file mode 100644 index 3546ca10cd77fb1309190807db42bb23b56bf2a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12188 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

czx#jF#6mJLj~w)_{zG8b6!^vNY{U+x}olE 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 YT4AfGt7r@P&$-+%78`+i(W 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 J)_yYy`yUONfA|0Z diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index dd3b8bcc..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images": [ - { - "size": "20x20", - "idiom": "iphone", - "filename": "AppIcon-20x20@2x.png", - "scale": "2x" - }, - { - "size": "20x20", - "idiom": "iphone", - "filename": "AppIcon-20x20@3x.png", - "scale": "3x" - }, - { - "size": "29x29", - "idiom": "iphone", - "filename": "AppIcon-29x29@2x-1.png", - "scale": "2x" - }, - { - "size": "29x29", - "idiom": "iphone", - "filename": "AppIcon-29x29@3x.png", - "scale": "3x" - }, - { - "size": "40x40", - "idiom": "iphone", - "filename": "AppIcon-40x40@2x.png", - "scale": "2x" - }, - { - "size": "40x40", - "idiom": "iphone", - "filename": "AppIcon-40x40@3x.png", - "scale": "3x" - }, - { - "size": "60x60", - "idiom": "iphone", - "filename": "AppIcon-60x60@2x.png", - "scale": "2x" - }, - { - "size": "60x60", - "idiom": "iphone", - "filename": "AppIcon-60x60@3x.png", - "scale": "3x" - }, - { - "size": "20x20", - "idiom": "ipad", - "filename": "AppIcon-20x20@1x.png", - "scale": "1x" - }, - { - "size": "20x20", - "idiom": "ipad", - "filename": "AppIcon-20x20@2x-1.png", - "scale": "2x" - }, - { - "size": "29x29", - "idiom": "ipad", - "filename": "AppIcon-29x29@1x.png", - "scale": "1x" - }, - { - "size": "29x29", - "idiom": "ipad", - "filename": "AppIcon-29x29@2x.png", - "scale": "2x" - }, - { - "size": "40x40", - "idiom": "ipad", - "filename": "AppIcon-40x40@1x.png", - "scale": "1x" - }, - { - "size": "40x40", - "idiom": "ipad", - "filename": "AppIcon-40x40@2x-1.png", - "scale": "2x" - }, - { - "size": "76x76", - "idiom": "ipad", - "filename": "AppIcon-76x76@1x.png", - "scale": "1x" - }, - { - "size": "76x76", - "idiom": "ipad", - "filename": "AppIcon-76x76@2x.png", - "scale": "2x" - }, - { - "size": "83.5x83.5", - "idiom": "ipad", - "filename": "AppIcon-83.5x83.5@2x.png", - "scale": "2x" - }, - { - "size": "1024x1024", - "idiom": "ios-marketing", - "filename": "AppIcon-512@2x.png", - "scale": "1x" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json deleted file mode 100644 index 97a8662e..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist deleted file mode 100644 index b69cf1de..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/ExportOptions.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - method - development - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Podfile b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Podfile deleted file mode 100644 index c34954cd..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Podfile +++ /dev/null @@ -1,21 +0,0 @@ -# Uncomment the next line to define a global platform for your project - -target 'app_iOS' do -platform :ios, '13.0' - # Pods for app_iOS -end - -target 'app_macOS' do -platform :osx, '11.0' - # Pods for app_macOS -end - -# Delete the deployment target for iOS and macOS, causing it to be inherited from the Podfile -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' - config.build_settings.delete 'MACOSX_DEPLOYMENT_TARGET' - end - end -end diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/bindings/bindings.h b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/bindings/bindings.h deleted file mode 100644 index 51522007..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/bindings/bindings.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -namespace ffi { - extern "C" { - void start_app(); - } -} - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/main.mm b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/main.mm deleted file mode 100644 index 7793a9d5..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/Sources/app/main.mm +++ /dev/null @@ -1,6 +0,0 @@ -#include "bindings/bindings.h" - -int main(int argc, char * argv[]) { - ffi::start_app(); - return 0; -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.pbxproj b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.pbxproj deleted file mode 100644 index 02e855a0..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.pbxproj +++ /dev/null @@ -1,442 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 51; - objects = { - -/* Begin PBXBuildFile section */ - 299814393FFBF154FAD94CA8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3673D372C5ABDD1AD6E7067 /* QuartzCore.framework */; }; - 31585529C029A01BE249A285 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E81BD6B453D87B7F7B1597B /* CoreGraphics.framework */; }; - 324A1E9A4258E7911D4DAC39 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FACFFCB6E3743955F72464C /* Security.framework */; }; - 53CDD0ACFBE8BDF1550B2E53 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 682535EEFE1DA20BE07B123C /* main.mm */; }; - 5C516481BCA83A182C2BCC94 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 3842AE2A64FB9933D0400EA4 /* assets */; }; - 618672DC8A5E0605441C9935 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E2B15F176E4B041AE33EEEA /* UIKit.framework */; }; - 836D84C5F07860664DAF79C8 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8F57162F5CC7AEDD55F173D /* WebKit.framework */; }; - 9D59FB167BB4E699DA17D1E9 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04B56F58E2E44DDE1D67E7B7 /* MetalKit.framework */; }; - C6BD59C055C986EA4A77FDA2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF1DE57E7D9CF13BB2E0E038 /* Assets.xcassets */; }; - C869023DDFE275D42F3FBF29 /* libapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 39EEC6A55698228E08917A52 /* libapp.a */; }; - E68F6CFDAED6503ABB4044A5 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE1209BFDECB28E00189B168 /* Metal.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 04B56F58E2E44DDE1D67E7B7 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; - 0E2B15F176E4B041AE33EEEA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 17B52554D60D361AFE791C3E /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = ""; }; - 1E81BD6B453D87B7F7B1597B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 306B9C1792E7B1C53FA262A6 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = ""; }; - 3842AE2A64FB9933D0400EA4 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; }; - 39EEC6A55698228E08917A52 /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = ""; }; - 682535EEFE1DA20BE07B123C /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; - 9FACFFCB6E3743955F72464C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - AF1DE57E7D9CF13BB2E0E038 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - CE1209BFDECB28E00189B168 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; - D8F57162F5CC7AEDD55F173D /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - F3673D372C5ABDD1AD6E7067 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - FBC720DFA1D01F55B0A32344 /* app_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = app_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4825CF6C55516D374210C8E1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C869023DDFE275D42F3FBF29 /* libapp.a in Frameworks */, - 31585529C029A01BE249A285 /* CoreGraphics.framework in Frameworks */, - E68F6CFDAED6503ABB4044A5 /* Metal.framework in Frameworks */, - 9D59FB167BB4E699DA17D1E9 /* MetalKit.framework in Frameworks */, - 299814393FFBF154FAD94CA8 /* QuartzCore.framework in Frameworks */, - 324A1E9A4258E7911D4DAC39 /* Security.framework in Frameworks */, - 618672DC8A5E0605441C9935 /* UIKit.framework in Frameworks */, - 836D84C5F07860664DAF79C8 /* WebKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1BBF8C620E54F8C028CA130C /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1E81BD6B453D87B7F7B1597B /* CoreGraphics.framework */, - 39EEC6A55698228E08917A52 /* libapp.a */, - CE1209BFDECB28E00189B168 /* Metal.framework */, - 04B56F58E2E44DDE1D67E7B7 /* MetalKit.framework */, - F3673D372C5ABDD1AD6E7067 /* QuartzCore.framework */, - 9FACFFCB6E3743955F72464C /* Security.framework */, - 0E2B15F176E4B041AE33EEEA /* UIKit.framework */, - D8F57162F5CC7AEDD55F173D /* WebKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 329C38BE5E8B40354375D0D0 /* bindings */ = { - isa = PBXGroup; - children = ( - 306B9C1792E7B1C53FA262A6 /* bindings.h */, - ); - path = bindings; - sourceTree = ""; - }; - 78CBE3E5873199C0066F12DF /* Sources */ = { - isa = PBXGroup; - children = ( - FB1C68C0357A1866B3D27465 /* app */, - ); - path = Sources; - sourceTree = ""; - }; - 855775165ACE55D883F89EB3 /* src */ = { - isa = PBXGroup; - children = ( - 17B52554D60D361AFE791C3E /* lib.rs */, - ); - name = src; - path = ../../src; - sourceTree = ""; - }; - 87648061424F20D5D4871E9E = { - isa = PBXGroup; - children = ( - 3842AE2A64FB9933D0400EA4 /* assets */, - AF1DE57E7D9CF13BB2E0E038 /* Assets.xcassets */, - BAFB695BB8415511FEC74542 /* Externals */, - 78CBE3E5873199C0066F12DF /* Sources */, - 855775165ACE55D883F89EB3 /* src */, - 1BBF8C620E54F8C028CA130C /* Frameworks */, - EE72B6AC647386A11F795E44 /* Products */, - ); - sourceTree = ""; - }; - BAFB695BB8415511FEC74542 /* Externals */ = { - isa = PBXGroup; - children = ( - ); - path = Externals; - sourceTree = ""; - }; - EE72B6AC647386A11F795E44 /* Products */ = { - isa = PBXGroup; - children = ( - FBC720DFA1D01F55B0A32344 /* app_iOS.app */, - ); - name = Products; - sourceTree = ""; - }; - FB1C68C0357A1866B3D27465 /* app */ = { - isa = PBXGroup; - children = ( - 682535EEFE1DA20BE07B123C /* main.mm */, - 329C38BE5E8B40354375D0D0 /* bindings */, - ); - path = app; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - E86255CB8A1836C0BF0C0E14 /* app_iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = CDCB6DFA1AEBFEE3F608BA27 /* Build configuration list for PBXNativeTarget "app_iOS" */; - buildPhases = ( - E028F843270D8815FCE2B491 /* Build Rust Code */, - 81BE6BC5B603407AF570E994 /* Sources */, - 2FBCB8C3ED193E9C4A9FDB59 /* Resources */, - 4825CF6C55516D374210C8E1 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = app_iOS; - productName = app_iOS; - productReference = FBC720DFA1D01F55B0A32344 /* app_iOS.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - A9B1B09F1872768368ACECE2 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1200; - TargetAttributes = { - E86255CB8A1836C0BF0C0E14 = { - DevelopmentTeam = Q93MBH6S2F; - }; - }; - }; - buildConfigurationList = B302E784349268C93E6F0A36 /* Build configuration list for PBXProject "app" */; - compatibilityVersion = "Xcode 11.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = 87648061424F20D5D4871E9E; - projectDirPath = ""; - projectRoot = ""; - targets = ( - E86255CB8A1836C0BF0C0E14 /* app_iOS */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 2FBCB8C3ED193E9C4A9FDB59 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C6BD59C055C986EA4A77FDA2 /* Assets.xcassets in Resources */, - 5C516481BCA83A182C2BCC94 /* assets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - E028F843270D8815FCE2B491 /* Build Rust Code */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Build Rust Code"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(SRCROOT)/target/aarch64-apple-ios/${CONFIGURATION}/deps/libapp.a", - "$(SRCROOT)/target/x86_64-apple-ios/${CONFIGURATION}/deps/libapp.a", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "yarn tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 81BE6BC5B603407AF570E994 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53CDD0ACFBE8BDF1550B2E53 /* main.mm in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 1B9D5B8D34E6E0C88D0207F2 /* release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ARCHS = ( - arm64, - "arm64-sim", - ); - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - DEVELOPMENT_TEAM = Q93MBH6S2F; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\".\"", - ); - INFOPLIST_FILE = app_iOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - "LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - PRODUCT_BUNDLE_IDENTIFIER = app.tauri.app; - PRODUCT_NAME = app; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 arm64-sim"; - }; - name = release; - }; - 3C6497CF9EADFA373F12EF5C /* release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - }; - name = release; - }; - 4AC19FD47C6011940ACEB467 /* debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ARCHS = ( - arm64, - "arm64-sim", - ); - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - DEVELOPMENT_TEAM = Q93MBH6S2F; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\".\"", - ); - INFOPLIST_FILE = app_iOS/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - "LIBRARY_SEARCH_PATHS[arch=arm64-sim]" = "$(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; - PRODUCT_BUNDLE_IDENTIFIER = app.tauri.app; - PRODUCT_NAME = app; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 arm64-sim"; - }; - name = debug; - }; - CAA806262C53A2E15E5DB0CA /* debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "DEBUG=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = debug; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - B302E784349268C93E6F0A36 /* Build configuration list for PBXProject "app" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CAA806262C53A2E15E5DB0CA /* debug */, - 3C6497CF9EADFA373F12EF5C /* release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = debug; - }; - CDCB6DFA1AEBFEE3F608BA27 /* Build configuration list for PBXNativeTarget "app_iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4AC19FD47C6011940ACEB467 /* debug */, - 1B9D5B8D34E6E0C88D0207F2 /* release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = debug; - }; -/* End XCConfigurationList section */ - }; - rootObject = A9B1B09F1872768368ACECE2 /* Project object */; -} diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index ac90d5ac..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,10 +0,0 @@ - - - - - BuildSystemType - Original - DisableBuildSystemDeprecationDiagnostic - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme deleted file mode 100644 index bd870366..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app.xcodeproj/xcshareddata/xcschemes/app_iOS.xcscheme +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app_iOS/Info.plist b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app_iOS/Info.plist deleted file mode 100644 index 9cbeec65..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/app_iOS/Info.plist +++ /dev/null @@ -1,44 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.0.0 - CFBundleVersion - 0.0.0 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - arm64 - metal - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml b/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml deleted file mode 100644 index 838c4894..00000000 --- a/plugins/dialog/examples/tauri-app/src-tauri/gen/apple/project.yml +++ /dev/null @@ -1,85 +0,0 @@ -name: app -options: - bundleIdPrefix: app.tauri - deploymentTarget: - iOS: 13.0 -fileGroups: [../../src] -configs: - debug: debug - release: release -settingGroups: - app: - base: - PRODUCT_NAME: app - PRODUCT_BUNDLE_IDENTIFIER: app.tauri.app - DEVELOPMENT_TEAM: Q93MBH6S2F -targetTemplates: - app: - type: application - sources: - - path: Sources - scheme: - environmentVariables: - RUST_BACKTRACE: full - RUST_LOG: info - settings: - groups: [app] -targets: - app_iOS: - type: application - platform: iOS - sources: - - path: Sources - - path: Assets.xcassets - - path: Externals - - path: assets - buildPhase: resources - type: folder - info: - path: app_iOS/Info.plist - properties: - LSRequiresIPhoneOS: true - UILaunchStoryboardName: LaunchScreen - UIRequiredDeviceCapabilities: [arm64, metal] - UISupportedInterfaceOrientations: - - UIInterfaceOrientationPortrait - - UIInterfaceOrientationLandscapeLeft - - UIInterfaceOrientationLandscapeRight - UISupportedInterfaceOrientations~ipad: - - UIInterfaceOrientationPortrait - - UIInterfaceOrientationPortraitUpsideDown - - UIInterfaceOrientationLandscapeLeft - - UIInterfaceOrientationLandscapeRight - CFBundleShortVersionString: 0.0.0 - CFBundleVersion: 0.0.0 - scheme: - environmentVariables: - RUST_BACKTRACE: full - RUST_LOG: info - settings: - base: - ENABLE_BITCODE: false - ARCHS: [arm64, arm64-sim] - VALID_ARCHS: arm64 arm64-sim - LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) - LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) - LIBRARY_SEARCH_PATHS[arch=arm64-sim]: $(inherited) $(PROJECT_DIR)/Externals/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME) - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: true - groups: [app] - dependencies: - - framework: libapp.a - embed: false - - sdk: CoreGraphics.framework - - sdk: Metal.framework - - sdk: MetalKit.framework - - sdk: QuartzCore.framework - - sdk: Security.framework - - sdk: UIKit.framework - - sdk: WebKit.framework - preBuildScripts: - - script: yarn tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths "${FRAMEWORK_SEARCH_PATHS:?}" --header-search-paths "${HEADER_SEARCH_PATHS:?}" --gcc-preprocessor-definitions "${GCC_PREPROCESSOR_DEFINITIONS:-}" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?} - name: Build Rust Code - basedOnDependencyAnalysis: false - outputFiles: - - $(SRCROOT)/target/aarch64-apple-ios/${CONFIGURATION}/deps/libapp.a - - $(SRCROOT)/target/x86_64-apple-ios/${CONFIGURATION}/deps/libapp.a diff --git a/plugins/dialog/examples/tauri-app/src-tauri/icons/128x128.png b/plugins/dialog/examples/tauri-app/src-tauri/icons/128x128.png deleted file mode 100644 index 77e7d2338e9d8ccffc731198dc584906627c903f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11059 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�{Kmc5tGtrHLwPd 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౉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 z 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

j#(n6`cTK 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 - import MessageDialogs from "./lib/MessageDialogs.svelte"; - import FileDialogs from "./lib/FileDialogs.svelte"; - - -
-
- -
-
- -
-
- - diff --git a/plugins/dialog/examples/tauri-app/src/lib/FileDialogs.svelte b/plugins/dialog/examples/tauri-app/src/lib/FileDialogs.svelte deleted file mode 100644 index 7473a646..00000000 --- a/plugins/dialog/examples/tauri-app/src/lib/FileDialogs.svelte +++ /dev/null @@ -1,27 +0,0 @@ - - -
-
{response}
- -
diff --git a/plugins/dialog/examples/tauri-app/src/lib/MessageDialogs.svelte b/plugins/dialog/examples/tauri-app/src/lib/MessageDialogs.svelte deleted file mode 100644 index 4189199d..00000000 --- a/plugins/dialog/examples/tauri-app/src/lib/MessageDialogs.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - -
-
{response}
- -
diff --git a/plugins/dialog/examples/tauri-app/src/main.js b/plugins/dialog/examples/tauri-app/src/main.js deleted file mode 100644 index 6b4e1a96..00000000 --- a/plugins/dialog/examples/tauri-app/src/main.js +++ /dev/null @@ -1,8 +0,0 @@ -import "./style.css"; -import App from "./App.svelte"; - -const app = new App({ - target: document.getElementById("app"), -}); - -export default app; diff --git a/plugins/dialog/examples/tauri-app/src/style.css b/plugins/dialog/examples/tauri-app/src/style.css deleted file mode 100644 index c0f9e3bc..00000000 --- a/plugins/dialog/examples/tauri-app/src/style.css +++ /dev/null @@ -1,102 +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; -} - -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; - } -} diff --git a/plugins/dialog/examples/tauri-app/src/vite-env.d.ts b/plugins/dialog/examples/tauri-app/src/vite-env.d.ts deleted file mode 100644 index 4078e747..00000000 --- a/plugins/dialog/examples/tauri-app/src/vite-env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/plugins/dialog/examples/tauri-app/vite.config.ts b/plugins/dialog/examples/tauri-app/vite.config.ts deleted file mode 100644 index 8d30f660..00000000 --- a/plugins/dialog/examples/tauri-app/vite.config.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { defineConfig } from "vite"; -import { svelte } from "@sveltejs/vite-plugin-svelte"; -import { internalIpV4 } from "internal-ip"; - -// https://vitejs.dev/config/ -export default defineConfig(async () => { - const host = - process.env.TAURI_PLATFORM === "android" || - process.env.TAURI_PLATFORM === "ios" - ? await internalIpV4() - : "localhost"; - return { - plugins: [svelte()], - - // Vite optons tailored for Tauri development and only applied in `tauri dev` or `tauri build` - // prevent vite from obscuring rust errors - clearScreen: false, - // tauri expects a fixed port, fail if that port is not available - server: { - host: "0.0.0.0", - port: 5173, - strictPort: true, - hmr: { - protocol: "ws", - host, - port: 5183, - }, - fs: { - allow: [".", "../../tooling/api/dist"], - }, - }, - // to make use of `TAURI_DEBUG` and other env variables - // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand - envPrefix: ["VITE_", "TAURI_"], - build: { - // Tauri supports es2021 - target: ["es2021", "chrome100", "safari13"], - // don't minify for debug builds - minify: !process.env.TAURI_DEBUG ? "esbuild" : false, - // produce sourcemaps for debug builds - sourcemap: !!process.env.TAURI_DEBUG, - }, - }; -}); From bcb42b73436d6fc152a26001dfb6aef3a9d48b08 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 8 May 2023 08:55:50 -0700 Subject: [PATCH 03/64] feat(app): add plugin (#345) --- Cargo.lock | 7 + examples/api/package.json | 1 + examples/api/src-tauri/Cargo.lock | 8 ++ examples/api/src-tauri/Cargo.toml | 1 + examples/api/src-tauri/src/lib.rs | 1 + examples/api/src/views/App.svelte | 16 +-- examples/api/src/views/Welcome.svelte | 2 +- plugins/app/Cargo.toml | 9 ++ plugins/app/LICENSE.spdx | 20 +++ plugins/app/LICENSE_APACHE-2.0 | 177 ++++++++++++++++++++++++++ plugins/app/LICENSE_MIT | 21 +++ plugins/app/README.md | 65 ++++++++++ plugins/app/guest-js/index.ts | 102 +++++++++++++++ plugins/app/package.json | 32 +++++ plugins/app/rollup.config.mjs | 11 ++ plugins/app/src/commands.rs | 33 +++++ plugins/app/src/lib.rs | 18 +++ plugins/app/tsconfig.json | 4 + pnpm-lock.yaml | 118 ++++------------- 19 files changed, 542 insertions(+), 104 deletions(-) create mode 100644 plugins/app/Cargo.toml create mode 100644 plugins/app/LICENSE.spdx create mode 100644 plugins/app/LICENSE_APACHE-2.0 create mode 100644 plugins/app/LICENSE_MIT create mode 100644 plugins/app/README.md create mode 100644 plugins/app/guest-js/index.ts create mode 100644 plugins/app/package.json create mode 100644 plugins/app/rollup.config.mjs create mode 100644 plugins/app/src/commands.rs create mode 100644 plugins/app/src/lib.rs create mode 100644 plugins/app/tsconfig.json diff --git a/Cargo.lock b/Cargo.lock index 4624b32c..eeff6499 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4793,6 +4793,13 @@ dependencies = [ "tauri-utils", ] +[[package]] +name = "tauri-plugin-app" +version = "0.0.0" +dependencies = [ + "tauri", +] + [[package]] name = "tauri-plugin-authenticator" version = "0.0.0" diff --git a/examples/api/package.json b/examples/api/package.json index 830146ce..23ecb5e0 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -11,6 +11,7 @@ "@tauri-apps/api": "2.0.0-alpha.3", "@tauri-apps/cli": "2.0.0-alpha.8", "@zerodevx/svelte-json-view": "0.2.1", + "tauri-plugin-app-api": "0.0.0", "tauri-plugin-cli-api": "0.0.0", "tauri-plugin-clipboard-api": "0.0.0", "tauri-plugin-dialog-api": "0.0.0", diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index d00f81ce..385a939a 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -149,6 +149,7 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-app", "tauri-plugin-cli", "tauri-plugin-clipboard", "tauri-plugin-dialog", @@ -3574,6 +3575,13 @@ dependencies = [ "tauri-utils", ] +[[package]] +name = "tauri-plugin-app" +version = "0.0.0" +dependencies = [ + "tauri", +] + [[package]] name = "tauri-plugin-cli" version = "0.0.0" diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 775067cd..bbab89f7 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -17,6 +17,7 @@ serde_json = "1.0" serde = { version = "1.0", features = [ "derive" ] } tiny_http = "0.11" log = "0.4" +tauri-plugin-app = { path = "../../../plugins/app" } tauri-plugin-log = { path = "../../../plugins/log" } tauri-plugin-fs = { path = "../../../plugins/fs" } tauri-plugin-clipboard = { path = "../../../plugins/clipboard" } diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index ba75c55e..ec763dbc 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -31,6 +31,7 @@ pub fn run() { .level(log::LevelFilter::Info) .build(), ) + .plugin(tauri_plugin_app::init()) .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_clipboard::init()) .plugin(tauri_plugin_dialog::init()) diff --git a/examples/api/src/views/App.svelte b/examples/api/src/views/App.svelte index 760590f0..d4c0f151 100644 --- a/examples/api/src/views/App.svelte +++ b/examples/api/src/views/App.svelte @@ -1,24 +1,24 @@ diff --git a/examples/api/src/views/Welcome.svelte b/examples/api/src/views/Welcome.svelte index 7906d298..b158c856 100644 --- a/examples/api/src/views/Welcome.svelte +++ b/examples/api/src/views/Welcome.svelte @@ -1,5 +1,5 @@ @@ -310,7 +313,7 @@ children:items-center children:justify-center" > @@ -328,7 +331,7 @@
@@ -340,7 +343,7 @@
@@ -371,7 +374,7 @@ bg-darkPrimaryLighter transition-colors-250 overflow-hidden grid select-none px-2" > open('https://tauri.app/')} + on:click={() => open("https://tauri.app/")} class="self-center p-7 cursor-pointer" src="tauri_logo.png" alt="Tauri logo" @@ -427,8 +430,8 @@ href="##" class="nv {selected === view ? 'nv_selected' : ''}" on:click={() => { - select(view) - isSideBarOpen = false + select(view); + isSideBarOpen = false; }} >
diff --git a/plugins/os/Cargo.toml b/plugins/os/Cargo.toml new file mode 100644 index 00000000..e43f25df --- /dev/null +++ b/plugins/os/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "tauri-plugin-os" +version = "0.0.0" +edition.workspace = true +authors.workspace = true +license.workspace = true + +[dependencies] +serde.workspace = true +serde_json.workspace = true +tauri.workspace = true +log.workspace = true +thiserror.workspace = true +os_info = "3" diff --git a/plugins/os/LICENSE.spdx b/plugins/os/LICENSE.spdx new file mode 100644 index 00000000..cdd0df5a --- /dev/null +++ b/plugins/os/LICENSE.spdx @@ -0,0 +1,20 @@ +SPDXVersion: SPDX-2.1 +DataLicense: CC0-1.0 +PackageName: tauri +DataFormat: SPDXRef-1 +PackageSupplier: Organization: The Tauri Programme in the Commons Conservancy +PackageHomePage: https://tauri.app +PackageLicenseDeclared: Apache-2.0 +PackageLicenseDeclared: MIT +PackageCopyrightText: 2019-2022, The Tauri Programme in the Commons Conservancy +PackageSummary: Tauri is a rust project that enables developers to make secure +and small desktop applications using a web frontend. + +PackageComment: The package includes the following libraries; see +Relationship information. + +Created: 2019-05-20T09:00:00Z +PackageDownloadLocation: git://github.com/tauri-apps/tauri +PackageDownloadLocation: git+https://github.com/tauri-apps/tauri.git +PackageDownloadLocation: git+ssh://github.com/tauri-apps/tauri.git +Creator: Person: Daniel Thompson-Yvetot \ No newline at end of file diff --git a/plugins/os/LICENSE_APACHE-2.0 b/plugins/os/LICENSE_APACHE-2.0 new file mode 100644 index 00000000..4947287f --- /dev/null +++ b/plugins/os/LICENSE_APACHE-2.0 @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/plugins/os/LICENSE_MIT b/plugins/os/LICENSE_MIT new file mode 100644 index 00000000..4d754725 --- /dev/null +++ b/plugins/os/LICENSE_MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 - Present Tauri Apps Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/plugins/os/README.md b/plugins/os/README.md new file mode 100644 index 00000000..eb32d944 --- /dev/null +++ b/plugins/os/README.md @@ -0,0 +1,65 @@ +# Operating system plugin + +Read information about the operating system. + +## Install + +_This plugin requires a Rust version of at least **1.64**_ + +There are three general methods of installation that we can recommend. + +1. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked) +2. Pull sources directly from Github using git tags / revision hashes (most secure) +3. Git submodule install this repo in your tauri project and then use file protocol to ingest the source (most secure, but inconvenient to use) + +Install the Core plugin by adding the following to your `Cargo.toml` file: + +`src-tauri/Cargo.toml` + +```toml +[dependencies] +tauri-plugin-os = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } +``` + +You can install the JavaScript Guest bindings using your preferred JavaScript package manager: + +> Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. + +```sh +pnpm add https://github.com/tauri-apps/tauri-plugin-os#v2 +# or +npm add https://github.com/tauri-apps/tauri-plugin-os#v2 +# or +yarn add https://github.com/tauri-apps/tauri-plugin-os#v2 +``` + +## Usage + +First you need to register the core plugin with Tauri: + +`src-tauri/src/main.rs` + +```rust +fn main() { + tauri::Builder::default() + .plugin(tauri_plugin_os::init()) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} +``` + +Afterwards all the plugin's APIs are available through the JavaScript guest bindings: + +```javascript +import * as os from "tauri-plugin-os-api"; +``` + +## Contributing + +PRs accepted. Please make sure to read the Contributing Guide before making a pull request. + +## License + +Code: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy. + +MIT or MIT/Apache 2.0 where applicable. diff --git a/plugins/os/guest-js/index.ts b/plugins/os/guest-js/index.ts new file mode 100644 index 00000000..ea600d62 --- /dev/null +++ b/plugins/os/guest-js/index.ts @@ -0,0 +1,140 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +/** + * Provides operating system-related utility methods and properties. + * + * The APIs must be added to [`tauri.allowlist.os`](https://tauri.app/v1/api/config/#allowlistconfig.os) in `tauri.conf.json`: + * ```json + * { + * "tauri": { + * "allowlist": { + * "os": { + * "all": true, // enable all Os APIs + * } + * } + * } + * } + * ``` + * It is recommended to allowlist only the APIs you use for optimal bundle size and security. + * @module + */ + +import { invoke } from "@tauri-apps/api/tauri"; + +type Platform = + | "linux" + | "darwin" + | "ios" + | "freebsd" + | "dragonfly" + | "netbsd" + | "openbsd" + | "solaris" + | "android" + | "win32"; + +type OsType = "Linux" | "Darwin" | "Windows_NT"; + +type Arch = + | "x86" + | "x86_64" + | "arm" + | "aarch64" + | "mips" + | "mips64" + | "powerpc" + | "powerpc64" + | "riscv64" + | "s390x" + | "sparc64"; + +function isWindows(): boolean { + return navigator.appVersion.includes("Win"); +} + +/** + * The operating system-specific end-of-line marker. + * - `\n` on POSIX + * - `\r\n` on Windows + * + * @since 1.0.0 + * */ +const EOL = isWindows() ? "\r\n" : "\n"; + +/** + * Returns a string identifying the operating system platform. + * The value is set at compile time. Possible values are `'linux'`, `'darwin'`, `'ios'`, `'freebsd'`, `'dragonfly'`, `'netbsd'`, `'openbsd'`, `'solaris'`, `'android'`, `'win32'` + * @example + * ```typescript + * import { platform } from 'tauri-plugin-os-api'; + * const platformName = await platform(); + * ``` + * + * @since 1.0.0 + * + */ +async function platform(): Promise { + return invoke("plugin:os|platform"); +} + +/** + * Returns a string identifying the kernel version. + * @example + * ```typescript + * import { version } from 'tauri-plugin-os-api'; + * const osVersion = await version(); + * ``` + * + * @since 1.0.0 + */ +async function version(): Promise { + return invoke("plugin:os|version"); +} + +/** + * Returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. + * @example + * ```typescript + * import { type } from 'tauri-plugin-os-api'; + * const osType = await type(); + * ``` + * + * @since 1.0.0 + */ +async function type(): Promise { + return invoke("plugin:os|kind"); +} + +/** + * Returns the operating system CPU architecture for which the tauri app was compiled. + * Possible values are `'x86'`, `'x86_64'`, `'arm'`, `'aarch64'`, `'mips'`, `'mips64'`, `'powerpc'`, `'powerpc64'`, `'riscv64'`, `'s390x'`, `'sparc64'`. + * @example + * ```typescript + * import { arch } from 'tauri-plugin-os-api'; + * const archName = await arch(); + * ``` + * + * @since 1.0.0 + */ +async function arch(): Promise { + return invoke("plugin:os|arch"); +} + +/** + * Returns the operating system's default directory for temporary files as a string. + * @example + * ```typescript + * import { tempdir } from 'tauri-plugin-os-api'; + * const tempdirPath = await tempdir(); + * ``` + * + * @since 1.0.0 + */ +async function tempdir(): Promise { + return invoke("plugin:os|tempdir"); +} + +export { EOL, platform, version, type, arch, tempdir }; +export type { Platform, OsType, Arch }; diff --git a/plugins/os/package.json b/plugins/os/package.json new file mode 100644 index 00000000..fe1c3717 --- /dev/null +++ b/plugins/os/package.json @@ -0,0 +1,32 @@ +{ + "name": "tauri-plugin-os-api", + "version": "0.0.0", + "license": "MIT or APACHE-2.0", + "authors": [ + "Tauri Programme within The Commons Conservancy" + ], + "type": "module", + "browser": "dist-js/index.min.js", + "module": "dist-js/index.mjs", + "types": "dist-js/index.d.ts", + "exports": { + "import": "./dist-js/index.mjs", + "types": "./dist-js/index.d.ts", + "browser": "./dist-js/index.min.js" + }, + "scripts": { + "build": "rollup -c" + }, + "files": [ + "dist-js", + "!dist-js/**/*.map", + "README.md", + "LICENSE" + ], + "devDependencies": { + "tslib": "^2.5.0" + }, + "dependencies": { + "@tauri-apps/api": "^1.2.0" + } +} diff --git a/plugins/os/rollup.config.mjs b/plugins/os/rollup.config.mjs new file mode 100644 index 00000000..6555e98b --- /dev/null +++ b/plugins/os/rollup.config.mjs @@ -0,0 +1,11 @@ +import { readFileSync } from "fs"; + +import { createConfig } from "../../shared/rollup.config.mjs"; + +export default createConfig({ + input: "guest-js/index.ts", + pkg: JSON.parse( + readFileSync(new URL("./package.json", import.meta.url), "utf8") + ), + external: [/^@tauri-apps\/api/], +}); diff --git a/plugins/os/src/commands.rs b/plugins/os/src/commands.rs new file mode 100644 index 00000000..348a1715 --- /dev/null +++ b/plugins/os/src/commands.rs @@ -0,0 +1,26 @@ +use std::path::PathBuf; + +#[tauri::command] +pub fn platform() -> &'static str { + crate::platform() +} + +#[tauri::command] +pub fn version() -> String { + crate::version().to_string() +} + +#[tauri::command] +pub fn kind() -> String { + crate::kind().to_string() +} + +#[tauri::command] +pub fn arch() -> &'static str { + crate::arch() +} + +#[tauri::command] +pub fn tempdir() -> PathBuf { + crate::tempdir() +} diff --git a/plugins/os/src/error.rs b/plugins/os/src/error.rs new file mode 100644 index 00000000..4ce7207a --- /dev/null +++ b/plugins/os/src/error.rs @@ -0,0 +1,13 @@ +use serde::{Serialize, Serializer}; + +#[derive(Debug, thiserror::Error)] +pub enum Error {} + +impl Serialize for Error { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} diff --git a/plugins/os/src/lib.rs b/plugins/os/src/lib.rs new file mode 100644 index 00000000..13436d2f --- /dev/null +++ b/plugins/os/src/lib.rs @@ -0,0 +1,77 @@ +use std::{fmt::Display, path::PathBuf}; + +pub use os_info::Version; +use tauri::{ + plugin::{Builder, TauriPlugin}, + Runtime, +}; + +mod commands; +mod error; + +pub use error::Error; + +pub enum Kind { + Linux, + Windows, + Darwin, + IOS, + Android, +} + +impl Display for Kind { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Linux => write!(f, "Linux"), + Self::Windows => write!(f, "Linux_NT"), + Self::Darwin => write!(f, "Darwin"), + Self::IOS => write!(f, "iOS"), + Self::Android => write!(f, "Android"), + } + } +} + +pub fn platform() -> &'static str { + match std::env::consts::OS { + "windows" => "win32", + "macos" => "darwin", + _ => std::env::consts::OS, + } +} + +pub fn version() -> Version { + os_info::get().version().clone() +} + +pub fn kind() -> Kind { + #[cfg(target_os = "linux")] + return Kind::Linux; + #[cfg(target_os = "windows")] + return Kind::Windows; + #[cfg(target_os = "macos")] + return Kind::Darwin; + #[cfg(target_os = "ios")] + return Kind::IOS; + #[cfg(target_os = "android")] + return Kind::Android; +} + +pub fn arch() -> &'static str { + std::env::consts::ARCH +} + +pub fn tempdir() -> PathBuf { + std::env::temp_dir() +} + +pub fn init() -> TauriPlugin { + Builder::new("os") + .invoke_handler(tauri::generate_handler![ + commands::platform, + commands::version, + commands::kind, + commands::arch, + commands::tempdir + ]) + .build() +} diff --git a/plugins/os/tsconfig.json b/plugins/os/tsconfig.json new file mode 100644 index 00000000..5098169a --- /dev/null +++ b/plugins/os/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["guest-js/*.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f00e586..f8fa2c08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,6 +85,9 @@ importers: tauri-plugin-notification-api: specifier: 0.0.0 version: link:../../plugins/notification + tauri-plugin-os-api: + specifier: 0.0.0 + version: link:../../plugins/os tauri-plugin-shell-api: specifier: 0.0.0 version: link:../../plugins/shell @@ -231,6 +234,16 @@ importers: specifier: ^2.4.1 version: 2.4.1 + plugins/os: + dependencies: + '@tauri-apps/api': + specifier: ^1.2.0 + version: 1.2.0 + devDependencies: + tslib: + specifier: ^2.5.0 + version: 2.5.0 + plugins/positioner: dependencies: '@tauri-apps/api': From 5e5221e0c3484397d16de3c7b47e33a4a9ae1ca0 Mon Sep 17 00:00:00 2001 From: Tai Zeming Date: Tue, 9 May 2023 00:59:56 +0800 Subject: [PATCH 05/64] fix(log): Avoid type conflict (#347) * Avoid type conflict * Prettier format * Make extras optional * Rename extras to keyValues * Remove empty initial object --- plugins/log/guest-js/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/log/guest-js/index.ts b/plugins/log/guest-js/index.ts index 4fb4b0c9..77ab7009 100644 --- a/plugins/log/guest-js/index.ts +++ b/plugins/log/guest-js/index.ts @@ -4,7 +4,8 @@ import { listen, UnlistenFn } from "@tauri-apps/api/event"; export type LogOptions = { file?: string; line?: number; -} & Record; + keyValues?: Record; +}; enum LogLevel { /** @@ -50,7 +51,7 @@ async function log( return name.length > 0 && location !== "[native code]"; }); - const { file, line, ...keyValues } = options ?? {}; + const { file, line, keyValues } = options ?? {}; let location = filtered?.[0]?.filter((v) => v.length > 0).join("@"); if (location === "Error") { From e46acc74be5681e0e1f22e9b08f9ba39140ff1b2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 May 2023 11:42:33 +0200 Subject: [PATCH 06/64] fix(deps): update rust crate iota-crypto to 0.19 (#349) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Cargo.lock | 6 +++--- plugins/stronghold/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c4d74456..dc63b5a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2003,9 +2003,9 @@ dependencies = [ [[package]] name = "iota-crypto" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a08e58104d88c45ec2c7de6112a35ea33d70f497ff89c396374e89c6dcfaf3c" +checksum = "67d2bc02591d8a0427a8650204c259d0cad04d6cde0b6a4683906dc0b6dd3887" dependencies = [ "autocfg", ] @@ -4442,7 +4442,7 @@ name = "tauri-plugin-stronghold" version = "0.0.0" dependencies = [ "hex", - "iota-crypto 0.18.0", + "iota-crypto 0.19.0", "iota_stronghold", "log", "rand 0.8.5", diff --git a/plugins/stronghold/Cargo.toml b/plugins/stronghold/Cargo.toml index 480eed5c..09b3fd59 100644 --- a/plugins/stronghold/Cargo.toml +++ b/plugins/stronghold/Cargo.toml @@ -16,7 +16,7 @@ tauri.workspace = true log.workspace = true thiserror.workspace = true iota_stronghold = "1" -iota-crypto = "0.18" +iota-crypto = "0.19" hex = "0.4" zeroize = { version = "1", features = ["zeroize_derive"] } From 012d32e8ed5c818258c0cfe760664b9be0f9f513 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 9 May 2023 08:00:44 -0700 Subject: [PATCH 07/64] feat(process): add plugin (#348) --- Cargo.lock | 7 + examples/api/package.json | 1 + examples/api/src-tauri/Cargo.lock | 8 ++ examples/api/src-tauri/Cargo.toml | 1 + examples/api/src-tauri/src/lib.rs | 1 + examples/api/src/views/Updater.svelte | 2 +- examples/api/src/views/Welcome.svelte | 2 +- plugins/process/Cargo.toml | 9 ++ plugins/process/LICENSE.spdx | 20 +++ plugins/process/LICENSE_APACHE-2.0 | 177 ++++++++++++++++++++++++++ plugins/process/LICENSE_MIT | 21 +++ plugins/process/README.md | 65 ++++++++++ plugins/process/guest-js/index.ts | 45 +++++++ plugins/process/package.json | 32 +++++ plugins/process/rollup.config.mjs | 11 ++ plugins/process/src/commands.rs | 11 ++ plugins/process/src/lib.rs | 12 ++ plugins/process/tsconfig.json | 4 + pnpm-lock.yaml | 13 ++ 19 files changed, 440 insertions(+), 2 deletions(-) create mode 100644 plugins/process/Cargo.toml create mode 100644 plugins/process/LICENSE.spdx create mode 100644 plugins/process/LICENSE_APACHE-2.0 create mode 100644 plugins/process/LICENSE_MIT create mode 100644 plugins/process/README.md create mode 100644 plugins/process/guest-js/index.ts create mode 100644 plugins/process/package.json create mode 100644 plugins/process/rollup.config.mjs create mode 100644 plugins/process/src/commands.rs create mode 100644 plugins/process/src/lib.rs create mode 100644 plugins/process/tsconfig.json diff --git a/Cargo.lock b/Cargo.lock index 411bddc6..5096fc70 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4994,6 +4994,13 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-process" +version = "0.0.0" +dependencies = [ + "tauri", +] + [[package]] name = "tauri-plugin-shell" version = "0.0.0" diff --git a/examples/api/package.json b/examples/api/package.json index 6efab778..1b129026 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -20,6 +20,7 @@ "tauri-plugin-http-api": "0.0.0", "tauri-plugin-notification-api": "0.0.0", "tauri-plugin-os-api": "0.0.0", + "tauri-plugin-process-api": "0.0.0", "tauri-plugin-shell-api": "0.0.0" }, "devDependencies": { diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index 856eed84..9871bc69 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -159,6 +159,7 @@ dependencies = [ "tauri-plugin-log", "tauri-plugin-notification", "tauri-plugin-os", + "tauri-plugin-process", "tauri-plugin-shell", "tiny_http", "window-shadows", @@ -3710,6 +3711,13 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-process" +version = "0.0.0" +dependencies = [ + "tauri", +] + [[package]] name = "tauri-plugin-shell" version = "0.0.0" diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 185adce4..771ba39b 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -25,6 +25,7 @@ tauri-plugin-dialog = { path = "../../../plugins/dialog" } tauri-plugin-http = { path = "../../../plugins/http", features = [ "http-multipart" ] } tauri-plugin-notification = { path = "../../../plugins/notification", features = [ "windows7-compat" ] } tauri-plugin-os = { path = "../../../plugins/os" } +tauri-plugin-process = { path = "../../../plugins/process" } tauri-plugin-shell = { path = "../../../plugins/shell" } [patch.crates-io] diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index dba74b62..2a8ddfb1 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -38,6 +38,7 @@ pub fn run() { .plugin(tauri_plugin_http::init()) .plugin(tauri_plugin_notification::init()) .plugin(tauri_plugin_os::init()) + .plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_shell::init()) .setup(move |app| { #[cfg(desktop)] diff --git a/examples/api/src/views/Updater.svelte b/examples/api/src/views/Updater.svelte index 3b219cfe..9536a7a2 100644 --- a/examples/api/src/views/Updater.svelte +++ b/examples/api/src/views/Updater.svelte @@ -7,7 +7,7 @@ import { checkUpdate, installUpdate } from '@tauri-apps/api/updater' import { listen } from '@tauri-apps/api/event' - import { relaunch } from '@tauri-apps/api/process' + import { relaunch } from 'tauri-plugin-process-api' export let onMessage let unlisten diff --git a/examples/api/src/views/Welcome.svelte b/examples/api/src/views/Welcome.svelte index b158c856..5ab3cced 100644 --- a/examples/api/src/views/Welcome.svelte +++ b/examples/api/src/views/Welcome.svelte @@ -1,6 +1,6 @@
{#if !isChecking && !newUpdate} - + {:else if !isInstalling && newUpdate} {:else} - +
+ {progress}% +
+
{/if}
diff --git a/package.json b/package.json index 5a0bfce4..4a3df949 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "license": "MIT or APACHE-2.0", "type": "module", "scripts": { - "build": "pnpm run -r --parallel --filter !plugins-workspace --filter !\"./plugins/*/examples/**\" build", + "build": "pnpm run -r --parallel --filter !plugins-workspace --filter !\"./plugins/*/examples/**\" --filter !\"./examples/*\" build", "lint": "eslint .", "format": "prettier --write .", "format-check": "prettier --check ." diff --git a/plugins/cli/README.md b/plugins/cli/README.md index 2d567acb..720e7147 100644 --- a/plugins/cli/README.md +++ b/plugins/cli/README.md @@ -18,7 +18,7 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] -tauri-plugin-cli = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "next" } +tauri-plugin-cli = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` You can install the JavaScript Guest bindings using your preferred JavaScript package manager: diff --git a/plugins/updater/Cargo.lock b/plugins/updater/Cargo.lock new file mode 100644 index 00000000..cf507469 --- /dev/null +++ b/plugins/updater/Cargo.lock @@ -0,0 +1,4184 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "aho-corasick" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "atk" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" +dependencies = [ + "atk-sys", + "bitflags", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "cargo_toml" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b" +dependencies = [ + "serde", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +dependencies = [ + "iana-time-zone", + "num-integer", + "num-traits", + "serde", + "winapi", +] + +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" +dependencies = [ + "bitflags", + "block", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "colored" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +dependencies = [ + "atty", + "lazy_static", + "winapi", +] + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation", + "foreign-types", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cxx" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.15", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "darling" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.15", +] + +[[package]] +name = "darling_macro" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dtoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" + +[[package]] +name = "dtoa-short" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "embed-resource" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a" +dependencies = [ + "cc", + "rustc_version", + "toml", + "vswhom", + "winreg 0.11.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", +] + +[[package]] +name = "flate2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +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", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" +dependencies = [ + "bitflags", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gio" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "glib-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +dependencies = [ + "aho-corasick 0.7.20", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "gobject-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" +dependencies = [ + "atk", + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "h2" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.6", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "hyper" +version = "0.14.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.6", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +dependencies = [ + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows 0.48.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown", + "serde", +] + +[[package]] +name = "infer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "javascriptcore-rs" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" +dependencies = [ + "bitflags", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" +dependencies = [ + "serde", + "serde_json", + "thiserror", + "treediff", +] + +[[package]] +name = "kuchiki" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" +dependencies = [ + "cssparser", + "html5ever", + "matches", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.144" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" +dependencies = [ + "log", + "phf 0.8.0", + "phf_codegen", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minisign-verify" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.45.0", +] + +[[package]] +name = "mockito" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f9fece9bd97ab74339fe19f4bcaf52b76dcc18e5364c7977c1838f76b38de9" +dependencies = [ + "assert-json-diff", + "colored", + "httparse", + "lazy_static", + "log", + "rand 0.8.5", + "regex", + "serde_json", + "serde_urlencoded", + "similar", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "openssl" +version = "0.10.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "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.15", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "111.25.3+1.1.1t" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924757a6a226bf60da5f7dd0311a34d2b52283dd82ddeb103208ddc66362f80c" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pango" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" +dependencies = [ + "bitflags", + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plist" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" +dependencies = [ + "base64 0.21.0", + "indexmap", + "line-wrap", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.9", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.9", + "redox_syscall 0.2.16", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" +dependencies = [ + "aho-corasick 1.0.1", + "memchr", + "regex-syntax 0.7.1", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" + +[[package]] +name = "reqwest" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" +dependencies = [ + "base64 0.21.0", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "winreg 0.10.1", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustls" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +dependencies = [ + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +dependencies = [ + "base64 0.21.0", +] + +[[package]] +name = "rustversion" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +dependencies = [ + "windows-sys 0.42.0", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.162" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.162" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "serde_json" +version = "1.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +dependencies = [ + "itoa 1.0.6", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "serde_spanned" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.6", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap", + "serde", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "simd-adler32" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" + +[[package]] +name = "similar" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "soup3" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" +dependencies = [ + "bitflags", + "futures-channel", + "gio", + "glib", + "libc", + "once_cell", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +dependencies = [ + "loom", +] + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "swift-rs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" +dependencies = [ + "base64 0.21.0", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "746ae5d0ca57ae275a792f109f6e992e0b41a443abdf3f5c6eff179ef5b3443a" +dependencies = [ + "bitflags", + "cairo-rs", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "gdk", + "gdk-pixbuf", + "gdk-sys", + "gdkwayland-sys", + "gdkx11-sys", + "gio", + "glib", + "glib-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "png", + "raw-window-handle", + "scopeguard", + "serde", + "tao-macros", + "unicode-segmentation", + "uuid", + "windows 0.44.0", + "windows-implement", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" + +[[package]] +name = "tauri" +version = "2.0.0-alpha.8" +dependencies = [ + "anyhow", + "bytes", + "cocoa", + "dirs-next", + "embed_plist", + "encoding_rs", + "flate2", + "futures-util", + "glib", + "glob", + "gtk", + "heck", + "http", + "ignore", + "jni", + "libc", + "log", + "objc", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "reqwest", + "semver", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "state", + "swift-rs", + "tar", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "tempfile", + "thiserror", + "time", + "tokio", + "url", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.44.0", + "zip", +] + +[[package]] +name = "tauri-build" +version = "2.0.0-alpha.4" +dependencies = [ + "anyhow", + "cargo_toml", + "filetime", + "heck", + "json-patch", + "semver", + "serde", + "serde_json", + "swift-rs", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.0.0-alpha.4" +dependencies = [ + "base64 0.21.0", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "tauri-utils", + "thiserror", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.0.0-alpha.4" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin-updater" +version = "0.0.0" +dependencies = [ + "base64 0.21.0", + "dirs-next", + "futures-util", + "http", + "minisign-verify", + "mockito", + "percent-encoding", + "reqwest", + "semver", + "serde", + "serde_json", + "tauri", + "tempfile", + "thiserror", + "time", + "tokio", + "tokio-test", + "url", +] + +[[package]] +name = "tauri-runtime" +version = "0.13.0-alpha.4" +dependencies = [ + "gtk", + "http", + "http-range", + "jni", + "rand 0.8.5", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "uuid", + "webview2-com", + "windows 0.44.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "0.13.0-alpha.4" +dependencies = [ + "cocoa", + "gtk", + "jni", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "tauri-runtime", + "tauri-utils", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.44.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.0.0-alpha.4" +dependencies = [ + "brotli", + "ctor", + "glob", + "heck", + "html5ever", + "infer", + "json-patch", + "kuchiki", + "memchr", + "phf 0.10.1", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "serde_with", + "thiserror", + "url", + "walkdir", + "windows 0.44.0", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml", +] + +[[package]] +name = "tempfile" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +dependencies = [ + "itoa 1.0.6", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +dependencies = [ + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +dependencies = [ + "autocfg", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.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.23.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +dependencies = [ + "rustls", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-test" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3" +dependencies = [ + "async-stream", + "bytes", + "futures-core", + "tokio", + "tokio-stream", +] + +[[package]] +name = "tokio-util" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "treediff" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" +dependencies = [ + "serde_json", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" +dependencies = [ + "getrandom 0.2.9", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 1.0.109", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] +name = "wasm-streams" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + +[[package]] +name = "webview2-com" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.44.0", + "windows-implement", +] + +[[package]] +name = "webview2-com-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "webview2-com-sys" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" +dependencies = [ + "regex", + "serde", + "serde_json", + "thiserror", + "windows 0.44.0", + "windows-bindgen", + "windows-metadata", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-bindgen" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" +dependencies = [ + "windows-metadata", + "windows-tokens", +] + +[[package]] +name = "windows-implement" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-interface" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-metadata" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows-tokens" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winnow" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "winreg" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "wry" +version = "0.28.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d15f9f827d537cefe6d047be3930f5d89b238dfb85e08ba6a319153217635aa" +dependencies = [ + "base64 0.13.1", + "block", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dunce", + "gdk", + "gio", + "glib", + "gtk", + "html5ever", + "http", + "javascriptcore-rs", + "kuchiki", + "libc", + "log", + "objc", + "objc_id", + "once_cell", + "serde", + "serde_json", + "sha2", + "soup3", + "tao", + "thiserror", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.44.0", + "windows-implement", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "zip" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", +] diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml new file mode 100644 index 00000000..a7da0aeb --- /dev/null +++ b/plugins/updater/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "tauri-plugin-updater" +version = "0.0.0" +edition = "2021" +#edition.workspace = true +#authors.workspace = true +#license.workspace = true + +[dependencies] +#tauri = { workspace = true, features = ["updater"] } +#serde.workspace = true +#serde_json.workspace = true +#thiserror.workspace = true +tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next", features = ["updater", "fs-extract-api"] } +serde = "1" +serde_json = "1" +thiserror = "1" + +tokio = "1" +reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } +url = "2" +http = "0.2" +dirs-next = "2" +minisign-verify = "0.2" +time = { version = "0.3", features = [ "parsing", "formatting" ] } +base64 = "0.21" +percent-encoding = "2" +semver = { version = "1", features = [ "serde" ] } +futures-util = "0.3" +tempfile = "3" + +[dev-dependencies] +mockito = "0.31" +tokio-test = "0.4.2" + +[features] +native-tls = [ "reqwest/native-tls" ] +native-tls-vendored = [ "reqwest/native-tls-vendored" ] +rustls-tls = [ "reqwest/rustls-tls" ] diff --git a/plugins/updater/LICENSE.spdx b/plugins/updater/LICENSE.spdx new file mode 100644 index 00000000..cdd0df5a --- /dev/null +++ b/plugins/updater/LICENSE.spdx @@ -0,0 +1,20 @@ +SPDXVersion: SPDX-2.1 +DataLicense: CC0-1.0 +PackageName: tauri +DataFormat: SPDXRef-1 +PackageSupplier: Organization: The Tauri Programme in the Commons Conservancy +PackageHomePage: https://tauri.app +PackageLicenseDeclared: Apache-2.0 +PackageLicenseDeclared: MIT +PackageCopyrightText: 2019-2022, The Tauri Programme in the Commons Conservancy +PackageSummary: Tauri is a rust project that enables developers to make secure +and small desktop applications using a web frontend. + +PackageComment: The package includes the following libraries; see +Relationship information. + +Created: 2019-05-20T09:00:00Z +PackageDownloadLocation: git://github.com/tauri-apps/tauri +PackageDownloadLocation: git+https://github.com/tauri-apps/tauri.git +PackageDownloadLocation: git+ssh://github.com/tauri-apps/tauri.git +Creator: Person: Daniel Thompson-Yvetot \ No newline at end of file diff --git a/plugins/updater/LICENSE_APACHE-2.0 b/plugins/updater/LICENSE_APACHE-2.0 new file mode 100644 index 00000000..4947287f --- /dev/null +++ b/plugins/updater/LICENSE_APACHE-2.0 @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/plugins/updater/LICENSE_MIT b/plugins/updater/LICENSE_MIT new file mode 100644 index 00000000..4d754725 --- /dev/null +++ b/plugins/updater/LICENSE_MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 - Present Tauri Apps Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/plugins/updater/README.md b/plugins/updater/README.md new file mode 100644 index 00000000..cb6e26fa --- /dev/null +++ b/plugins/updater/README.md @@ -0,0 +1,65 @@ +# Updater plugin + +In-app updates for Tauri applications. + +## Install + +_This plugin requires a Rust version of at least **1.64**_ + +There are three general methods of installation that we can recommend. + +1. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked) +2. Pull sources directly from Github using git tags / revision hashes (most secure) +3. Git submodule install this repo in your tauri project and then use file protocol to ingest the source (most secure, but inconvenient to use) + +Install the Core plugin by adding the following to your `Cargo.toml` file: + +`src-tauri/Cargo.toml` + +```toml +[dependencies] +tauri-plugin-updater = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } +``` + +You can install the JavaScript Guest bindings using your preferred JavaScript package manager: + +> Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. + +```sh +pnpm add https://github.com/tauri-apps/tauri-plugin-updater#v2 +# or +npm add https://github.com/tauri-apps/tauri-plugin-updater#v2 +# or +yarn add https://github.com/tauri-apps/tauri-plugin-updater#v2 +``` + +## Usage + +First you need to register the core plugin with Tauri: + +`src-tauri/src/main.rs` + +```rust +fn main() { + tauri::Builder::default() + .plugin(tauri_plugin_updater::Builder::new().build()) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} +``` + +Afterwards all the plugin's APIs are available through the JavaScript guest bindings: + +```javascript +import * as updater from "tauri-plugin-updater-api"; +``` + +## Contributing + +PRs accepted. Please make sure to read the Contributing Guide before making a pull request. + +## License + +Code: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy. + +MIT or MIT/Apache 2.0 where applicable. diff --git a/plugins/updater/build.rs b/plugins/updater/build.rs new file mode 100644 index 00000000..74bf430b --- /dev/null +++ b/plugins/updater/build.rs @@ -0,0 +1,14 @@ +fn main() { + let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); + let mobile = target_os == "ios" || target_os == "android"; + alias("desktop", !mobile); + alias("mobile", mobile); +} + +// creates a cfg alias if `has_feature` is true. +// `alias` must be a snake case string. +fn alias(alias: &str, has_feature: bool) { + if has_feature { + println!("cargo:rustc-cfg={alias}"); + } +} diff --git a/plugins/updater/guest-js/index.ts b/plugins/updater/guest-js/index.ts new file mode 100644 index 00000000..6c2363c8 --- /dev/null +++ b/plugins/updater/guest-js/index.ts @@ -0,0 +1,84 @@ +import { invoke, transformCallback } from "@tauri-apps/api/tauri"; + +interface CheckOptions { + /** + * Request headers + */ + headers?: Record; + /** + * Timeout in seconds + */ + timeout?: number; + /** + * Target identifier for the running application. This is sent to the backend. + */ + target?: string; +} + +interface UpdateResponse { + available: boolean; + currentVersion: string; + latestVersion: string; + date?: string; + body?: string; +} + +// TODO: use channel from @tauri-apps/api on v2 +class Channel { + id: number; + // @ts-expect-error field used by the IPC serializer + private readonly __TAURI_CHANNEL_MARKER__ = true; + #onmessage: (response: T) => void = () => { + // no-op + }; + + constructor() { + this.id = transformCallback((response: T) => { + this.#onmessage(response); + }); + } + + set onmessage(handler: (response: T) => void) { + this.#onmessage = handler; + } + + get onmessage(): (response: T) => void { + return this.#onmessage; + } + + toJSON(): string { + return `__CHANNEL__:${this.id}`; + } +} + +type DownloadEvent = + | { event: "Started"; data: { contentLength?: number } } + | { event: "Progress"; data: { chunkLength: number } } + | { event: "Finished" }; + +class Update { + response: UpdateResponse; + + constructor(response: UpdateResponse) { + this.response = response; + } + + async downloadAndInstall( + onEvent?: (progress: DownloadEvent) => void + ): Promise { + const channel = new Channel(); + if (onEvent != null) { + channel.onmessage = onEvent; + } + return invoke("plugin:updater|download_and_install", { onEvent: channel }); + } +} + +async function check(options?: CheckOptions): Promise { + return invoke("plugin:updater|check", { ...options }).then( + (response) => new Update(response) + ); +} + +export type { CheckOptions, UpdateResponse, DownloadEvent }; +export { check, Update }; diff --git a/plugins/updater/package.json b/plugins/updater/package.json new file mode 100644 index 00000000..5f907a64 --- /dev/null +++ b/plugins/updater/package.json @@ -0,0 +1,32 @@ +{ + "name": "tauri-plugin-updater-api", + "version": "0.0.0", + "license": "MIT or APACHE-2.0", + "authors": [ + "Tauri Programme within The Commons Conservancy" + ], + "type": "module", + "browser": "dist-js/index.min.js", + "module": "dist-js/index.mjs", + "types": "dist-js/index.d.ts", + "exports": { + "import": "./dist-js/index.mjs", + "types": "./dist-js/index.d.ts", + "browser": "./dist-js/index.min.js" + }, + "scripts": { + "build": "rollup -c" + }, + "files": [ + "dist-js", + "!dist-js/**/*.map", + "README.md", + "LICENSE" + ], + "devDependencies": { + "tslib": "^2.5.0" + }, + "dependencies": { + "@tauri-apps/api": "^1.2.0" + } +} diff --git a/plugins/updater/rollup.config.mjs b/plugins/updater/rollup.config.mjs new file mode 100644 index 00000000..6555e98b --- /dev/null +++ b/plugins/updater/rollup.config.mjs @@ -0,0 +1,11 @@ +import { readFileSync } from "fs"; + +import { createConfig } from "../../shared/rollup.config.mjs"; + +export default createConfig({ + input: "guest-js/index.ts", + pkg: JSON.parse( + readFileSync(new URL("./package.json", import.meta.url), "utf8") + ), + external: [/^@tauri-apps\/api/], +}); diff --git a/plugins/updater/src/commands.rs b/plugins/updater/src/commands.rs new file mode 100644 index 00000000..8de387dc --- /dev/null +++ b/plugins/updater/src/commands.rs @@ -0,0 +1,102 @@ +use crate::{PendingUpdate, Result, UpdaterExt}; + +use http::header; +use serde::{Deserialize, Deserializer, Serialize}; +use tauri::{api::ipc::Channel, AppHandle, Runtime, State}; + +use std::{collections::HashMap, time::Duration}; + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct Metadata { + available: bool, + current_version: String, + latest_version: String, + date: Option, + body: Option, +} + +#[derive(Debug, Default)] +pub(crate) struct HeaderMap(header::HeaderMap); + +impl<'de> Deserialize<'de> for HeaderMap { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + let map = HashMap::::deserialize(deserializer)?; + let mut headers = header::HeaderMap::default(); + for (key, value) in map { + if let (Ok(key), Ok(value)) = ( + header::HeaderName::from_bytes(key.as_bytes()), + header::HeaderValue::from_str(&value), + ) { + headers.insert(key, value); + } else { + return Err(serde::de::Error::custom(format!( + "invalid header `{key}` `{value}`" + ))); + } + } + Ok(Self(headers)) + } +} + +#[tauri::command] +pub(crate) async fn check( + app: AppHandle, + pending: State<'_, PendingUpdate>, + headers: Option, + timeout: Option, + target: Option, +) -> Result { + let mut builder = app.updater(); + if let Some(headers) = headers { + for (k, v) in headers.0.iter() { + builder = builder.header(k, v)?; + } + } + if let Some(timeout) = timeout { + builder = builder.timeout(Duration::from_secs(timeout)); + } + if let Some(target) = target { + builder = builder.target(target); + } + + let response = builder.check().await?; + + let metadata = Metadata { + available: response.is_update_available(), + current_version: response.current_version().to_string(), + latest_version: response.latest_version().to_string(), + date: response.date().map(|d| d.to_string()), + body: response.body().cloned(), + }; + + pending.0.lock().await.replace(response); + + Ok(metadata) +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +pub(crate) struct DownloadProgress { + chunk_length: usize, + content_length: Option, +} + +#[tauri::command] +pub(crate) async fn download_and_install( + _app: AppHandle, + pending: State<'_, PendingUpdate>, + on_event: Channel, +) -> Result<()> { + if let Some(pending) = &*pending.0.lock().await { + pending + .download_and_install(move |event| { + on_event.send(&event).unwrap(); + }) + .await?; + } + Ok(()) +} diff --git a/plugins/updater/src/error.rs b/plugins/updater/src/error.rs new file mode 100644 index 00000000..509c9504 --- /dev/null +++ b/plugins/updater/src/error.rs @@ -0,0 +1,90 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +use http::StatusCode; +use serde::{Serialize, Serializer}; + +/// All errors that can occur while running the updater. +#[derive(Debug, thiserror::Error)] +#[non_exhaustive] +pub enum Error { + /// IO Errors. + #[error("`{0}`")] + Io(#[from] std::io::Error), + /// Semver Errors. + #[error("Unable to compare version: {0}")] + Semver(#[from] semver::Error), + /// JSON (Serde) Errors. + #[error("JSON error: {0}")] + SerdeJson(#[from] serde_json::Error), + /// Minisign is used for signature validation. + #[error("Verify signature error: {0}")] + Minisign(#[from] minisign_verify::Error), + /// Error with Minisign base64 decoding. + #[error("Signature decoding error: {0}")] + Base64(#[from] base64::DecodeError), + /// UTF8 Errors in signature. + #[error("The signature {0} could not be decoded, please check if it is a valid base64 string. The signature must be the contents of the `.sig` file generated by the Tauri bundler, as a string.")] + SignatureUtf8(String), + /// Tauri utils, mainly extract and file move. + #[error("Tauri API error: {0}")] + TauriApi(#[from] tauri::api::Error), + /// Network error. + #[error("Download request failed with status: {0}")] + DownloadFailed(StatusCode), + /// Network error. + #[error("Network error: {0}")] + Network(#[from] reqwest::Error), + /// Failed to serialize header value as string. + #[error(transparent)] + Utf8(#[from] std::string::FromUtf8Error), + /// Could not fetch a valid response from the server. + #[error("Could not fetch a valid release JSON from the remote")] + ReleaseNotFound, + /// Error building updater. + #[error("Unable to prepare the updater: {0}")] + Builder(String), + /// Error building updater. + #[error("Unable to extract the new version: {0}")] + Extract(String), + /// Updater cannot be executed on this Linux package. Currently the updater is enabled only on AppImages. + #[error( + "Cannot run updater on this Linux package. Currently only an AppImage can be updated." + )] + UnsupportedLinuxPackage, + /// Operating system is not supported. + #[error("unsupported OS, expected one of `linux`, `darwin` or `windows`.")] + UnsupportedOs, + /// Unsupported app architecture. + #[error( + "Unsupported application architecture, expected one of `x86`, `x86_64`, `arm` or `aarch64`." + )] + UnsupportedArch, + /// The platform was not found on the updater JSON response. + #[error("the platform `{0}` was not found on the response `platforms` object")] + TargetNotFound(String), + /// Triggered when there is NO error and the two versions are equals. + /// On client side, it's important to catch this error. + #[error("No updates available")] + UpToDate, + /// The updater responded with an invalid signature type. + #[error("the updater response field `{0}` type is invalid, expected {1} but found {2}")] + InvalidResponseType(&'static str, &'static str, serde_json::Value), + /// HTTP error. + #[error(transparent)] + Http(#[from] http::Error), + /// Temp dir is not on same mount mount. This prevents our updater to rename the AppImage to a temp file. + #[cfg(target_os = "linux")] + #[error("temp directory is not on the same mount point as the AppImage")] + TempDirNotOnSameMountPoint, +} + +impl Serialize for Error { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} diff --git a/plugins/updater/src/lib.rs b/plugins/updater/src/lib.rs new file mode 100644 index 00000000..ec55cb5b --- /dev/null +++ b/plugins/updater/src/lib.rs @@ -0,0 +1,77 @@ +use tauri::{ + plugin::{Builder as PluginBuilder, TauriPlugin}, + Manager, Runtime, +}; + +use tokio::sync::Mutex; + +mod commands; +mod error; +mod updater; + +pub use error::Error; +pub use updater::*; +pub type Result = std::result::Result; + +struct UpdaterState { + target: Option, +} + +struct PendingUpdate(Mutex>>); + +#[derive(Default)] +pub struct Builder { + target: Option, +} + +/// Extension trait to use the updater on [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`]. +pub trait UpdaterExt { + /// Gets the updater builder to manually check if an update is available. + /// + /// # Examples + /// + /// ```no_run + /// use tauri_plugin_updater::UpdaterExt; + /// tauri::Builder::default() + /// .setup(|app| { + /// let handle = app.handle(); + /// tauri::async_runtime::spawn(async move { + /// let response = handle.updater().check().await; + /// }); + /// Ok(()) + /// }); + /// ``` + fn updater(&self) -> updater::UpdateBuilder; +} + +impl> UpdaterExt for T { + fn updater(&self) -> updater::UpdateBuilder { + updater::builder(self.app_handle()) + } +} + +impl Builder { + pub fn new() -> Self { + Self::default() + } + + pub fn target(mut self, target: impl Into) -> Self { + self.target.replace(target.into()); + self + } + + pub fn build(self) -> TauriPlugin { + let target = self.target; + PluginBuilder::::new("updater") + .setup(move |app, _api| { + app.manage(UpdaterState { target }); + app.manage(PendingUpdate::(Default::default())); + Ok(()) + }) + .invoke_handler(tauri::generate_handler![ + commands::check, + commands::download_and_install + ]) + .build() + } +} diff --git a/plugins/updater/src/updater/core.rs b/plugins/updater/src/updater/core.rs new file mode 100644 index 00000000..b89adc84 --- /dev/null +++ b/plugins/updater/src/updater/core.rs @@ -0,0 +1,1672 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +use crate::{Error, Result}; +use base64::Engine; +use futures_util::StreamExt; +use http::{ + header::{HeaderName, HeaderValue}, + HeaderMap, Method, StatusCode, +}; +use minisign_verify::{PublicKey, Signature}; +use reqwest::ClientBuilder; +use semver::Version; +use serde::{de::Error as DeError, Deserialize, Deserializer, Serialize}; +#[cfg(desktop)] +use tauri::api::file::{ArchiveFormat, Extract, Move}; +use tauri::utils::{platform::current_exe, Env}; +use tauri::{AppHandle, Manager, Runtime}; +use time::OffsetDateTime; +use url::Url; + +#[cfg(desktop)] +use std::io::Seek; +use std::{ + collections::HashMap, + env, + fmt::{self}, + io::{Cursor, Read}, + path::{Path, PathBuf}, + str::{from_utf8, FromStr}, + time::Duration, +}; + +#[cfg(any(target_os = "linux", windows))] +use std::ffi::OsStr; + +#[cfg(all(desktop, not(target_os = "windows")))] +use tauri::api::file::Compression; + +#[cfg(target_os = "windows")] +use std::{ + fs::read_dir, + process::{exit, Command}, +}; + +type ShouldInstall = dyn FnOnce(&Version, &RemoteRelease) -> bool + Send; + +#[derive(Debug, Deserialize, Serialize)] +#[serde(untagged)] +pub enum RemoteReleaseInner { + Dynamic(ReleaseManifestPlatform), + Static { + platforms: HashMap, + }, +} + +/// Information about a release returned by the remote update server. +/// +/// This type can have one of two shapes: Server Format (Dynamic Format) and Static Format. +#[derive(Debug)] +pub struct RemoteRelease { + /// Version to install. + version: Version, + /// Release notes. + notes: Option, + /// Release date. + pub_date: Option, + /// Release data. + data: RemoteReleaseInner, +} + +impl<'de> Deserialize<'de> for RemoteRelease { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + #[derive(Deserialize)] + struct InnerRemoteRelease { + #[serde(alias = "name", deserialize_with = "parse_version")] + version: Version, + notes: Option, + pub_date: Option, + platforms: Option>, + // dynamic platform response + url: Option, + signature: Option, + #[cfg(target_os = "windows")] + #[serde(default)] + with_elevated_task: bool, + } + + let release = InnerRemoteRelease::deserialize(deserializer)?; + + let pub_date = if let Some(date) = release.pub_date { + Some( + OffsetDateTime::parse(&date, &time::format_description::well_known::Rfc3339) + .map_err(|e| DeError::custom(format!("invalid value for `pub_date`: {e}")))?, + ) + } else { + None + }; + + Ok(RemoteRelease { + version: release.version, + notes: release.notes, + pub_date, + data: if let Some(platforms) = release.platforms { + RemoteReleaseInner::Static { platforms } + } else { + RemoteReleaseInner::Dynamic(ReleaseManifestPlatform { + url: release.url.ok_or_else(|| { + DeError::custom("the `url` field was not set on the updater response") + })?, + signature: release.signature.ok_or_else(|| { + DeError::custom("the `signature` field was not set on the updater response") + })?, + #[cfg(target_os = "windows")] + with_elevated_task: release.with_elevated_task, + }) + }, + }) + } +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ReleaseManifestPlatform { + /// Download URL for the platform + pub url: Url, + /// Signature for the platform + pub signature: String, + #[cfg(target_os = "windows")] + #[serde(default)] + /// Optional: Windows only try to use elevated task + pub with_elevated_task: bool, +} + +fn parse_version<'de, D>(deserializer: D) -> std::result::Result +where + D: serde::Deserializer<'de>, +{ + let str = String::deserialize(deserializer)?; + + Version::from_str(str.trim_start_matches('v')).map_err(serde::de::Error::custom) +} + +impl RemoteRelease { + /// The release version. + pub fn version(&self) -> &Version { + &self.version + } + + /// The release notes. + pub fn notes(&self) -> Option<&String> { + self.notes.as_ref() + } + + /// The release date. + pub fn pub_date(&self) -> Option<&OffsetDateTime> { + self.pub_date.as_ref() + } + + /// The release's download URL for the given target. + pub fn download_url(&self, target: &str) -> Result<&Url> { + match self.data { + RemoteReleaseInner::Dynamic(ref platform) => Ok(&platform.url), + RemoteReleaseInner::Static { ref platforms } => platforms + .get(target) + .map_or(Err(Error::TargetNotFound(target.to_string())), |p| { + Ok(&p.url) + }), + } + } + + /// The release's signature for the given target. + pub fn signature(&self, target: &str) -> Result<&String> { + match self.data { + RemoteReleaseInner::Dynamic(ref platform) => Ok(&platform.signature), + RemoteReleaseInner::Static { ref platforms } => platforms + .get(target) + .map_or(Err(Error::TargetNotFound(target.to_string())), |platform| { + Ok(&platform.signature) + }), + } + } + + #[cfg(target_os = "windows")] + /// Optional: Windows only try to use elevated task + pub fn with_elevated_task(&self, target: &str) -> Result { + match self.data { + RemoteReleaseInner::Dynamic(ref platform) => Ok(platform.with_elevated_task), + RemoteReleaseInner::Static { ref platforms } => platforms + .get(target) + .map_or(Err(Error::TargetNotFound(target.to_string())), |platform| { + Ok(platform.with_elevated_task) + }), + } + } +} + +pub struct UpdateBuilder { + /// Application handle. + pub app: AppHandle, + /// Current version we are running to compare with announced version + pub current_version: Version, + /// The URLs to checks updates. We suggest at least one fallback on a different domain. + pub urls: Vec, + /// The platform the updater will check and install the update. Default is from `get_updater_target` + pub target: Option, + /// The current executable path. Default is automatically extracted. + pub executable_path: Option, + should_install: Option>, + timeout: Option, + headers: HeaderMap, +} + +impl fmt::Debug for UpdateBuilder { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("UpdateBuilder") + .field("app", &self.app) + .field("current_version", &self.current_version) + .field("urls", &self.urls) + .field("target", &self.target) + .field("executable_path", &self.executable_path) + .field("timeout", &self.timeout) + .field("headers", &self.headers) + .finish() + } +} + +// Create new updater instance and return an Update +impl UpdateBuilder { + pub fn new(app: AppHandle) -> Self { + UpdateBuilder { + app, + urls: Vec::new(), + target: None, + executable_path: None, + // safe to unwrap: CARGO_PKG_VERSION is also a valid semver value + current_version: env!("CARGO_PKG_VERSION").parse().unwrap(), + should_install: None, + timeout: None, + headers: Default::default(), + } + } + + #[allow(dead_code)] + pub fn url(mut self, url: String) -> Self { + self.urls.push( + percent_encoding::percent_decode(url.as_bytes()) + .decode_utf8_lossy() + .to_string(), + ); + self + } + + /// Add multiple URLS at once inside a Vec for future reference + pub fn urls(mut self, urls: &[String]) -> Self { + let mut formatted_vec: Vec = Vec::new(); + for url in urls { + formatted_vec.push( + percent_encoding::percent_decode(url.as_bytes()) + .decode_utf8_lossy() + .to_string(), + ); + } + self.urls = formatted_vec; + self + } + + /// Set the current app version, used to compare against the latest available version. + /// The `cargo_crate_version!` macro can be used to pull the version from your `Cargo.toml` + pub fn current_version(mut self, ver: Version) -> Self { + self.current_version = ver; + self + } + + /// Set the target name. Represents the string that is looked up on the updater API or response JSON. + pub fn target(mut self, target: impl Into) -> Self { + self.target.replace(target.into()); + self + } + + /// Set the executable path + #[allow(dead_code)] + pub fn executable_path>(mut self, executable_path: A) -> Self { + self.executable_path = Some(PathBuf::from(executable_path.as_ref())); + self + } + + pub fn should_install bool + Send + 'static>( + mut self, + f: F, + ) -> Self { + self.should_install.replace(Box::new(f)); + self + } + + pub fn timeout(mut self, timeout: Duration) -> Self { + self.timeout.replace(timeout); + self + } + + /// Add a `Header` to the request. + pub fn header(mut self, key: K, value: V) -> Result + where + HeaderName: TryFrom, + >::Error: Into, + HeaderValue: TryFrom, + >::Error: Into, + { + let key: std::result::Result = key.try_into().map_err(Into::into); + let value: std::result::Result = + value.try_into().map_err(Into::into); + self.headers.insert(key?, value?); + Ok(self) + } + + pub async fn build(mut self) -> Result> { + let mut remote_release: Option = None; + + // make sure we have at least one url + if self.urls.is_empty() { + return Err(Error::Builder( + "Unable to check update, `url` is required.".into(), + )); + }; + + // If no executable path provided, we use current_exe from tauri_utils + let executable_path = self.executable_path.unwrap_or(current_exe()?); + + let arch = get_updater_arch().ok_or(Error::UnsupportedArch)?; + // `target` is the `{{target}}` variable we replace in the endpoint + // `json_target` is the value we search if the updater server returns a JSON with the `platforms` object + let (target, json_target) = if let Some(target) = self.target { + (target.clone(), target) + } else { + let target = get_updater_target().ok_or(Error::UnsupportedOs)?; + (target.to_string(), format!("{target}-{arch}")) + }; + + // Get the extract_path from the provided executable_path + let extract_path = extract_path_from_executable(&self.app.state::(), &executable_path); + + // Set SSL certs for linux if they aren't available. + // We do not require to recheck in the download_and_install as we use + // ENV variables, we can expect them to be set for the second call. + #[cfg(target_os = "linux")] + { + if env::var_os("SSL_CERT_FILE").is_none() { + env::set_var("SSL_CERT_FILE", "/etc/ssl/certs/ca-certificates.crt"); + } + if env::var_os("SSL_CERT_DIR").is_none() { + env::set_var("SSL_CERT_DIR", "/etc/ssl/certs"); + } + } + + // we want JSON only + let mut headers = self.headers; + headers.insert("Accept", HeaderValue::from_str("application/json").unwrap()); + + // Allow fallback if more than 1 urls is provided + let mut last_error: Option = None; + for url in &self.urls { + // replace {{current_version}}, {{target}} and {{arch}} in the provided URL + // this is useful if we need to query example + // https://releases.myapp.com/update/{{target}}/{{arch}}/{{current_version}} + // will be translated into -> + // https://releases.myapp.com/update/darwin/aarch64/1.0.0 + // The main objective is if the update URL is defined via the Cargo.toml + // the URL will be generated dynamically + let fixed_link = url + .replace("{{current_version}}", &self.current_version.to_string()) + .replace("{{target}}", &target) + .replace("{{arch}}", arch); + + let client = ClientBuilder::new().build()?; + let mut request = client + .request(Method::GET, &fixed_link) + .headers(headers.clone()); + if let Some(timeout) = self.timeout { + request = request.timeout(timeout); + } + + // If we got a success, we stop the loop + // and we set our remote_release variable + if let Ok(res) = request.send().await { + let status = res.status(); + // got status code 2XX + if status.is_success() { + // if we got 204 + if status == StatusCode::NO_CONTENT { + // return with `UpToDate` error + // we should catch on the client + return Err(Error::UpToDate); + }; + let data = res.bytes().await?; + // Convert the remote Result<()>to our local struct + let built_release = serde_json::from_slice(&data).map_err(Into::into); + // make sure all went well and the remote data is compatible + // with what we need locally + match built_release { + Ok(release) => { + last_error = None; + remote_release = Some(release); + break; + } + Err(err) => last_error = Some(err), + } + } // if status code is not 2XX we keep loopin' our urls + } + } + + // Last error is cleaned on success -- shouldn't be triggered if + // we have a successful call + if let Some(error) = last_error { + return Err(error); + } + + // Extracted remote metadata + let final_release = remote_release.ok_or(Error::ReleaseNotFound)?; + + // is the announced version greater than our current one? + let should_update = if let Some(comparator) = self.should_install.take() { + comparator(&self.current_version, &final_release) + } else { + final_release.version() > &self.current_version + }; + + headers.remove("Accept"); + + // create our new updater + Ok(Update { + app: self.app, + target, + extract_path, + should_update, + version: final_release.version().to_string(), + date: final_release.pub_date().cloned(), + current_version: self.current_version, + download_url: final_release.download_url(&json_target)?.to_owned(), + body: final_release.notes().cloned(), + signature: final_release.signature(&json_target)?.to_owned(), + #[cfg(target_os = "windows")] + with_elevated_task: final_release.with_elevated_task(&json_target)?, + timeout: self.timeout, + headers, + }) + } +} + +pub fn builder(app: AppHandle) -> UpdateBuilder { + UpdateBuilder::new(app) +} + +#[derive(Debug)] +pub struct Update { + /// Application handle. + pub app: AppHandle, + /// Update description + pub body: Option, + /// Should we update or not + pub should_update: bool, + /// Version announced + pub version: String, + /// Running version + pub current_version: Version, + /// Update publish date + pub date: Option, + /// Target + #[allow(dead_code)] + target: String, + /// Extract path + extract_path: PathBuf, + /// Download URL announced + download_url: Url, + /// Signature announced + signature: String, + #[cfg(target_os = "windows")] + /// Optional: Windows only try to use elevated task + /// Default to false + with_elevated_task: bool, + /// Request timeout + timeout: Option, + /// Request headers + headers: HeaderMap, +} + +impl Clone for Update { + fn clone(&self) -> Self { + Self { + app: self.app.clone(), + body: self.body.clone(), + should_update: self.should_update, + version: self.version.clone(), + current_version: self.current_version.clone(), + date: self.date, + target: self.target.clone(), + extract_path: self.extract_path.clone(), + download_url: self.download_url.clone(), + signature: self.signature.clone(), + #[cfg(target_os = "windows")] + with_elevated_task: self.with_elevated_task, + timeout: self.timeout, + headers: self.headers.clone(), + } + } +} + +#[derive(Debug, Serialize)] +#[serde(tag = "event", content = "data")] +pub enum DownloadEvent { + #[serde(rename_all = "camelCase")] + Started { + content_length: Option, + }, + #[serde(rename_all = "camelCase")] + Progress { + chunk_length: usize, + }, + Finished, +} + +impl Update { + // Download and install our update + // @todo(lemarier): Split into download and install (two step) but need to be thread safe + pub(crate) async fn download_and_install( + &self, + pub_key: String, + on_event: F, + ) -> Result<()> { + // make sure we can install the update on linux + // We fail here because later we can add more linux support + // actually if we use APPIMAGE, our extract path should already + // be set with our APPIMAGE env variable, we don't need to do + // anything with it yet + #[cfg(target_os = "linux")] + if self.app.state::().appimage.is_none() { + return Err(Error::UnsupportedLinuxPackage); + } + + // set our headers + let mut headers = self.headers.clone(); + headers.insert( + "Accept", + HeaderValue::from_str("application/octet-stream").unwrap(), + ); + headers.insert( + "User-Agent", + HeaderValue::from_str("tauri/updater").unwrap(), + ); + + let client = ClientBuilder::new().build()?; + // Create our request + let mut req = client + .request(Method::GET, self.download_url.clone()) + .headers(headers); + if let Some(timeout) = self.timeout { + req = req.timeout(timeout); + } + + let response = req.send().await?; + + // make sure it's success + if !response.status().is_success() { + return Err(Error::DownloadFailed(response.status())); + } + + let content_length: Option = response + .headers() + .get("Content-Length") + .and_then(|value| value.to_str().ok()) + .and_then(|value| value.parse().ok()); + + on_event(DownloadEvent::Started { content_length }); + + let mut buffer = Vec::new(); + + let mut stream = response.bytes_stream(); + while let Some(chunk) = stream.next().await { + let chunk = chunk?; + let bytes = chunk.as_ref().to_vec(); + on_event(DownloadEvent::Progress { + chunk_length: bytes.len(), + }); + buffer.extend(bytes); + } + + on_event(DownloadEvent::Finished); + + // create memory buffer from our archive (Seek + Read) + let mut archive_buffer = Cursor::new(buffer); + + // We need an announced signature by the server + // if there is no signature, bail out. + verify_signature(&mut archive_buffer, &self.signature, &pub_key)?; + + // TODO: implement updater in mobile + #[cfg(desktop)] + { + // we copy the files depending of the operating system + // we run the setup, appimage re-install or overwrite the + // macos .app + #[cfg(target_os = "windows")] + copy_files_and_run( + archive_buffer, + &self.extract_path, + self.with_elevated_task, + &self.app.config(), + )?; + #[cfg(not(target_os = "windows"))] + copy_files_and_run(archive_buffer, &self.extract_path)?; + } + + // We are done! + Ok(()) + } +} + +// Linux (AppImage) + +// ### Expected structure: +// ├── [AppName]_[version]_amd64.AppImage.tar.gz # GZ generated by tauri-bundler +// │ └──[AppName]_[version]_amd64.AppImage # Application AppImage +// └── ... + +// We should have an AppImage already installed to be able to copy and install +// the extract_path is the current AppImage path +// tmp_dir is where our new AppImage is found +#[cfg(target_os = "linux")] +fn copy_files_and_run(archive_buffer: R, extract_path: &Path) -> Result<()> { + use std::os::unix::fs::{MetadataExt, PermissionsExt}; + + let extract_path_metadata = extract_path.metadata()?; + + let tmp_dir_locations = vec![ + Box::new(|| Some(env::temp_dir())) as Box Option>, + Box::new(dirs_next::cache_dir), + Box::new(|| Some(extract_path.parent().unwrap().to_path_buf())), + ]; + + for tmp_dir_location in tmp_dir_locations { + if let Some(tmp_dir_location) = tmp_dir_location() { + let tmp_dir = tempfile::Builder::new() + .prefix("tauri_current_app") + .tempdir_in(tmp_dir_location)?; + let tmp_dir_metadata = tmp_dir.path().metadata()?; + + if extract_path_metadata.dev() == tmp_dir_metadata.dev() { + let mut perms = tmp_dir_metadata.permissions(); + perms.set_mode(0o700); + std::fs::set_permissions(tmp_dir.path(), perms)?; + + let tmp_app_image = &tmp_dir.path().join("current_app.AppImage"); + + // create a backup of our current app image + Move::from_source(extract_path).to_dest(tmp_app_image)?; + + // extract the buffer to the tmp_dir + // we extract our signed archive into our final directory without any temp file + let mut extractor = + Extract::from_cursor(archive_buffer, ArchiveFormat::Tar(Some(Compression::Gz))); + + return extractor + .with_files(|entry| { + let path = entry.path()?; + if path.extension() == Some(OsStr::new("AppImage")) { + // if something went wrong during the extraction, we should restore previous app + if let Err(err) = entry.extract(extract_path) { + Move::from_source(tmp_app_image).to_dest(extract_path)?; + return Err(tauri::api::Error::Extract(err.to_string())); + } + // early finish we have everything we need here + return Ok(true); + } + Ok(false) + }) + .map_err(Into::into); + } + } + } + + Err(Error::TempDirNotOnSameMountPoint) +} + +// Windows +// +// ### Expected structure: +// ├── [AppName]_[version]_x64.msi.zip # ZIP generated by tauri-bundler +// │ └──[AppName]_[version]_x64.msi # Application MSI +// ├── [AppName]_[version]_x64-setup.exe.zip # ZIP generated by tauri-bundler +// │ └──[AppName]_[version]_x64-setup.exe # NSIS installer +// └── ... +// +// ## MSI +// Update server can provide a MSI for Windows. (Generated with tauri-bundler from *Wix*) +// To replace current version of the application. In later version we'll offer +// incremental update to push specific binaries. +// +// ## EXE +// Update server can provide a custom EXE (installer) who can run any task. +#[cfg(target_os = "windows")] +#[allow(clippy::unnecessary_wraps)] +fn copy_files_and_run( + archive_buffer: R, + _extract_path: &Path, + with_elevated_task: bool, + config: &tauri::Config, +) -> Result<()> { + // FIXME: We need to create a memory buffer with the MSI and then run it. + // (instead of extracting the MSI to a temp path) + // + // The tricky part is the MSI need to be exposed and spawned so the memory allocation + // shouldn't drop but we should be able to pass the reference so we can drop it once the installation + // is done, otherwise we have a huge memory leak. + + let tmp_dir = tempfile::Builder::new().tempdir()?.into_path(); + + // extract the buffer to the tmp_dir + // we extract our signed archive into our final directory without any temp file + let mut extractor = Extract::from_cursor(archive_buffer, ArchiveFormat::Zip); + + // extract the msi + extractor.extract_into(&tmp_dir)?; + + let paths = read_dir(&tmp_dir)?; + + for path in paths { + let found_path = path?.path(); + // we support 2 type of files exe & msi for now + // If it's an `exe` we expect an installer not a runtime. + if found_path.extension() == Some(OsStr::new("exe")) { + // Run the EXE + let mut installer = Command::new(found_path); + if tauri::utils::config::WindowsUpdateInstallMode::Quiet + == config.tauri.updater.windows.install_mode + { + installer.arg("/S"); + } + installer.args(&config.tauri.updater.windows.installer_args); + + installer.spawn().expect("installer failed to start"); + + exit(0); + } else if found_path.extension() == Some(OsStr::new("msi")) { + if with_elevated_task { + if let Some(bin_name) = current_exe() + .ok() + .and_then(|pb| pb.file_name().map(|s| s.to_os_string())) + .and_then(|s| s.into_string().ok()) + { + let product_name = bin_name.replace(".exe", ""); + + // Check if there is a task that enables the updater to skip the UAC prompt + let update_task_name = format!("Update {product_name} - Skip UAC"); + if let Ok(output) = Command::new("schtasks") + .arg("/QUERY") + .arg("/TN") + .arg(update_task_name.clone()) + .output() + { + if output.status.success() { + // Rename the MSI to the match file name the Skip UAC task is expecting it to be + let temp_msi = tmp_dir.with_file_name(bin_name).with_extension("msi"); + Move::from_source(&found_path) + .to_dest(&temp_msi) + .expect("Unable to move update MSI"); + let exit_status = Command::new("schtasks") + .arg("/RUN") + .arg("/TN") + .arg(update_task_name) + .status() + .expect("failed to start updater task"); + + if exit_status.success() { + // Successfully launched task that skips the UAC prompt + exit(0); + } + } + // Failed to run update task. Following UAC Path + } + } + } + + // we need to wrap the current exe path in quotes for Start-Process + let mut current_exe_arg = std::ffi::OsString::new(); + current_exe_arg.push("\""); + current_exe_arg.push(current_exe()?); + current_exe_arg.push("\""); + + let mut msi_path_arg = std::ffi::OsString::new(); + msi_path_arg.push("\"\"\""); + msi_path_arg.push(&found_path); + msi_path_arg.push("\"\"\""); + + let mut msiexec_args = config + .tauri + .updater + .windows + .install_mode + .clone() + .msiexec_args() + .iter() + .map(|p| p.to_string()) + .collect::>(); + msiexec_args.extend(config.tauri.updater.windows.installer_args.clone()); + + // run the installer and relaunch the application + let system_root = std::env::var("SYSTEMROOT"); + let powershell_path = system_root.as_ref().map_or_else( + |_| "powershell.exe".to_string(), + |p| format!("{p}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"), + ); + let powershell_install_res = Command::new(powershell_path) + .args(["-NoProfile", "-windowstyle", "hidden"]) + .args([ + "Start-Process", + "-Wait", + "-FilePath", + "$env:SYSTEMROOT\\System32\\msiexec.exe", + "-ArgumentList", + ]) + .arg("/i,") + .arg(msi_path_arg) + .arg(format!(", {}, /promptrestart;", msiexec_args.join(", "))) + .arg("Start-Process") + .arg(current_exe_arg) + .spawn(); + if powershell_install_res.is_err() { + // fallback to running msiexec directly - relaunch won't be available + // we use this here in case powershell fails in an older machine somehow + let msiexec_path = system_root.as_ref().map_or_else( + |_| "msiexec.exe".to_string(), + |p| format!("{p}\\System32\\msiexec.exe"), + ); + let _ = Command::new(msiexec_path) + .arg("/i") + .arg(found_path) + .args(msiexec_args) + .arg("/promptrestart") + .spawn(); + } + + exit(0); + } + } + + Ok(()) +} + +// MacOS +// ### Expected structure: +// ├── [AppName]_[version]_x64.app.tar.gz # GZ generated by tauri-bundler +// │ └──[AppName].app # Main application +// │ └── Contents # Application contents... +// │ └── ... +// └── ... +#[cfg(target_os = "macos")] +fn copy_files_and_run(archive_buffer: R, extract_path: &Path) -> Result<()> { + let mut extracted_files: Vec = Vec::new(); + + // extract the buffer to the tmp_dir + // we extract our signed archive into our final directory without any temp file + let mut extractor = + Extract::from_cursor(archive_buffer, ArchiveFormat::Tar(Some(Compression::Gz))); + // the first file in the tar.gz will always be + // /Contents + let tmp_dir = tempfile::Builder::new() + .prefix("tauri_current_app") + .tempdir()?; + + // create backup of our current app + Move::from_source(extract_path).to_dest(tmp_dir.path())?; + + // extract all the files + extractor.with_files(|entry| { + let path = entry.path()?; + // skip the first folder (should be the app name) + let collected_path: PathBuf = path.iter().skip(1).collect(); + let extraction_path = extract_path.join(collected_path); + + // if something went wrong during the extraction, we should restore previous app + if let Err(err) = entry.extract(&extraction_path) { + for file in &extracted_files { + // delete all the files we extracted + if file.is_dir() { + std::fs::remove_dir(file)?; + } else { + std::fs::remove_file(file)?; + } + } + Move::from_source(tmp_dir.path()).to_dest(extract_path)?; + return Err(tauri::api::Error::Extract(err.to_string())); + } + + extracted_files.push(extraction_path); + + Ok(false) + })?; + + let _ = std::process::Command::new("touch") + .arg(extract_path) + .status(); + + Ok(()) +} + +pub(crate) fn get_updater_target() -> Option<&'static str> { + if cfg!(target_os = "linux") { + Some("linux") + } else if cfg!(target_os = "macos") { + Some("darwin") + } else if cfg!(target_os = "windows") { + Some("windows") + } else { + None + } +} + +pub(crate) fn get_updater_arch() -> Option<&'static str> { + if cfg!(target_arch = "x86") { + Some("i686") + } else if cfg!(target_arch = "x86_64") { + Some("x86_64") + } else if cfg!(target_arch = "arm") { + Some("armv7") + } else if cfg!(target_arch = "aarch64") { + Some("aarch64") + } else { + None + } +} + +/// Get the extract_path from the provided executable_path +#[allow(unused_variables)] +pub fn extract_path_from_executable(env: &Env, executable_path: &Path) -> PathBuf { + // Return the path of the current executable by default + // Example C:\Program Files\My App\ + let extract_path = executable_path + .parent() + .map(PathBuf::from) + .expect("Can't determine extract path"); + + // MacOS example binary is in /Applications/TestApp.app/Contents/MacOS/myApp + // We need to get /Applications/.app + // todo(lemarier): Need a better way here + // Maybe we could search for <*.app> to get the right path + #[cfg(target_os = "macos")] + if extract_path + .display() + .to_string() + .contains("Contents/MacOS") + { + return extract_path + .parent() + .map(PathBuf::from) + .expect("Unable to find the extract path") + .parent() + .map(PathBuf::from) + .expect("Unable to find the extract path"); + } + + // We should use APPIMAGE exposed env variable + // This is where our APPIMAGE should sit and should be replaced + #[cfg(target_os = "linux")] + if let Some(app_image_path) = &env.appimage { + return PathBuf::from(app_image_path); + } + + extract_path +} + +// Convert base64 to string and prevent failing +fn base64_to_string(base64_string: &str) -> Result { + let decoded_string = &base64::engine::general_purpose::STANDARD.decode(base64_string)?; + let result = from_utf8(decoded_string) + .map_err(|_| Error::SignatureUtf8(base64_string.into()))? + .to_string(); + Ok(result) +} + +// Validate signature +// need to be public because its been used +// by our tests in the bundler +// +// NOTE: The buffer position is not reset. +pub fn verify_signature( + archive_reader: &mut R, + release_signature: &str, + pub_key: &str, +) -> Result +where + R: Read, +{ + // we need to convert the pub key + let pub_key_decoded = base64_to_string(pub_key)?; + let public_key = PublicKey::decode(&pub_key_decoded)?; + let signature_base64_decoded = base64_to_string(release_signature)?; + let signature = Signature::decode(&signature_base64_decoded)?; + + // read all bytes until EOF in the buffer + let mut data = Vec::new(); + archive_reader.read_to_end(&mut data)?; + + // Validate signature or bail out + public_key.verify(&data, &signature, true)?; + Ok(true) +} + +/*#[cfg(test)] +mod test { + use super::*; + #[cfg(target_os = "macos")] + use std::fs::File; + + macro_rules! block { + ($e:expr) => { + tokio_test::block_on($e) + }; + } + + fn generate_sample_raw_json() -> String { + r#"{ + "version": "v2.0.0", + "notes": "Test version !", + "pub_date": "2020-06-22T19:25:57Z", + "platforms": { + "darwin-aarch64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUldUTE5QWWxkQnlZOVJZVGdpKzJmRWZ0SkRvWS9TdFpqTU9xcm1mUmJSSG5OWVlwSklrWkN1SFpWbmh4SDlBcTU3SXpjbm0xMmRjRkphbkpVeGhGcTdrdzlrWGpGVWZQSWdzPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNTkyOTE1MDU3CWZpbGU6L1VzZXJzL3J1bm5lci9ydW5uZXJzLzIuMjYzLjAvd29yay90YXVyaS90YXVyaS90YXVyaS9leGFtcGxlcy9jb21tdW5pY2F0aW9uL3NyYy10YXVyaS90YXJnZXQvZGVidWcvYnVuZGxlL29zeC9hcHAuYXBwLnRhci5negp4ZHFlUkJTVnpGUXdDdEhydTE5TGgvRlVPeVhjTnM5RHdmaGx3c0ZPWjZXWnFwVDRNWEFSbUJTZ1ZkU1IwckJGdmlwSzJPd00zZEZFN2hJOFUvL1FDZz09Cg==", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v1.0.0/app.app.tar.gz" + }, + "darwin-x86_64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUldUTE5QWWxkQnlZOVJZVGdpKzJmRWZ0SkRvWS9TdFpqTU9xcm1mUmJSSG5OWVlwSklrWkN1SFpWbmh4SDlBcTU3SXpjbm0xMmRjRkphbkpVeGhGcTdrdzlrWGpGVWZQSWdzPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNTkyOTE1MDU3CWZpbGU6L1VzZXJzL3J1bm5lci9ydW5uZXJzLzIuMjYzLjAvd29yay90YXVyaS90YXVyaS90YXVyaS9leGFtcGxlcy9jb21tdW5pY2F0aW9uL3NyYy10YXVyaS90YXJnZXQvZGVidWcvYnVuZGxlL29zeC9hcHAuYXBwLnRhci5negp4ZHFlUkJTVnpGUXdDdEhydTE5TGgvRlVPeVhjTnM5RHdmaGx3c0ZPWjZXWnFwVDRNWEFSbUJTZ1ZkU1IwckJGdmlwSzJPd00zZEZFN2hJOFUvL1FDZz09Cg==", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v1.0.0/app.app.tar.gz" + }, + "linux-x86_64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUldUTE5QWWxkQnlZOWZSM29hTFNmUEdXMHRoOC81WDFFVVFRaXdWOUdXUUdwT0NlMldqdXkyaWVieXpoUmdZeXBJaXRqSm1YVmczNXdRL1Brc0tHb1NOTzhrL1hadFcxdmdnPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNTkyOTE3MzQzCWZpbGU6L2hvbWUvcnVubmVyL3dvcmsvdGF1cmkvdGF1cmkvdGF1cmkvZXhhbXBsZXMvY29tbXVuaWNhdGlvbi9zcmMtdGF1cmkvdGFyZ2V0L2RlYnVnL2J1bmRsZS9hcHBpbWFnZS9hcHAuQXBwSW1hZ2UudGFyLmd6CmRUTUM2bWxnbEtTbUhOZGtERUtaZnpUMG5qbVo5TGhtZWE1SFNWMk5OOENaVEZHcnAvVW0zc1A2ajJEbWZUbU0yalRHT0FYYjJNVTVHOHdTQlYwQkF3PT0K", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v1.0.0/app.AppImage.tar.gz" + }, + "windows-x86_64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUldUTE5QWWxkQnlZOVJHMWlvTzRUSlQzTHJOMm5waWpic0p0VVI2R0hUNGxhQVMxdzBPRndlbGpXQXJJakpTN0toRURtVzBkcm15R0VaNTJuS1lZRWdzMzZsWlNKUVAzZGdJPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNTkyOTE1NTIzCWZpbGU6RDpcYVx0YXVyaVx0YXVyaVx0YXVyaVxleGFtcGxlc1xjb21tdW5pY2F0aW9uXHNyYy10YXVyaVx0YXJnZXRcZGVidWdcYXBwLng2NC5tc2kuemlwCitXa1lQc3A2MCs1KzEwZnVhOGxyZ2dGMlZqbjBaVUplWEltYUdyZ255eUF6eVF1dldWZzFObStaVEQ3QU1RS1lzcjhDVU4wWFovQ1p1QjJXbW1YZUJ3PT0K", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v1.0.0/app.x64.msi.zip" + } + } + }"#.into() + } + + fn generate_sample_platform_json( + version: &str, + public_signature: &str, + download_url: &str, + ) -> String { + format!( + r#" + {{ + "name": "v{version}", + "notes": "This is the latest version! Once updated you shouldn't see this prompt.", + "pub_date": "2020-06-25T14:14:19Z", + "signature": "{public_signature}", + "url": "{download_url}" + }} + "# + ) + } + + fn generate_sample_with_elevated_task_platform_json( + version: &str, + public_signature: &str, + download_url: &str, + with_elevated_task: bool, + ) -> String { + format!( + r#" + {{ + "name": "v{version}", + "notes": "This is the latest version! Once updated you shouldn't see this prompt.", + "pub_date": "2020-06-25T14:14:19Z", + "signature": "{public_signature}", + "url": "{download_url}", + "with_elevated_task": {with_elevated_task} + }} + "# + ) + } + + #[test] + fn simple_http_updater() { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_raw_json()) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("0.0.0".parse().unwrap()) + .url(mockito::server_url()) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(updater.should_update); + } + + #[test] + fn simple_http_updater_raw_json() { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_raw_json()) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("0.0.0".parse().unwrap()) + .url(mockito::server_url()) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(updater.should_update); + } + + #[test] + fn simple_http_updater_raw_json_windows_x86_64() { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_raw_json()) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("0.0.0".parse().unwrap()) + .target("windows-x86_64") + .url(mockito::server_url()) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(updater.should_update); + assert_eq!(updater.version, "2.0.0"); + assert_eq!(updater.signature, "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUldUTE5QWWxkQnlZOVJHMWlvTzRUSlQzTHJOMm5waWpic0p0VVI2R0hUNGxhQVMxdzBPRndlbGpXQXJJakpTN0toRURtVzBkcm15R0VaNTJuS1lZRWdzMzZsWlNKUVAzZGdJPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNTkyOTE1NTIzCWZpbGU6RDpcYVx0YXVyaVx0YXVyaVx0YXVyaVxleGFtcGxlc1xjb21tdW5pY2F0aW9uXHNyYy10YXVyaVx0YXJnZXRcZGVidWdcYXBwLng2NC5tc2kuemlwCitXa1lQc3A2MCs1KzEwZnVhOGxyZ2dGMlZqbjBaVUplWEltYUdyZ255eUF6eVF1dldWZzFObStaVEQ3QU1RS1lzcjhDVU4wWFovQ1p1QjJXbW1YZUJ3PT0K"); + assert_eq!( + updater.download_url.to_string(), + "https://github.com/tauri-apps/updater-test/releases/download/v1.0.0/app.x64.msi.zip" + ); + } + + #[test] + fn simple_http_updater_raw_json_uptodate() { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_raw_json()) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("10.0.0".parse().unwrap()) + .url(mockito::server_url()) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(!updater.should_update); + } + + #[test] + fn simple_http_updater_without_version() { + let _m = mockito::mock("GET", "/darwin-aarch64/1.0.0") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_platform_json( + "2.0.0", + "SampleTauriKey", + "https://tauri.app", + )) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("1.0.0".parse().unwrap()) + .url(format!( + "{}/darwin-aarch64/{{{{current_version}}}}", + mockito::server_url() + )) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(updater.should_update); + } + + #[test] + fn simple_http_updater_percent_decode() { + let _m = mockito::mock("GET", "/darwin-aarch64/1.0.0") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_platform_json( + "2.0.0", + "SampleTauriKey", + "https://tauri.app", + )) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("1.0.0".parse().unwrap()) + .url( + url::Url::parse(&format!( + "{}/darwin-aarch64/{{{{current_version}}}}", + mockito::server_url() + )) + .unwrap() + .to_string() + ) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(updater.should_update); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("1.0.0".parse().unwrap()) + .urls(&[url::Url::parse(&format!( + "{}/darwin-aarch64/{{{{current_version}}}}", + mockito::server_url() + )) + .unwrap() + .to_string()]) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(updater.should_update); + } + + #[test] + fn simple_http_updater_with_elevated_task() { + let _m = mockito::mock("GET", "/windows-x86_64/1.0.0") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_with_elevated_task_platform_json( + "2.0.0", + "SampleTauriKey", + "https://tauri.app", + true, + )) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("1.0.0".parse().unwrap()) + .url(format!( + "{}/windows-x86_64/{{{{current_version}}}}", + mockito::server_url() + )) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(updater.should_update); + } + + #[test] + fn http_updater_uptodate() { + let _m = mockito::mock("GET", "/darwin-aarch64/10.0.0") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_platform_json( + "2.0.0", + "SampleTauriKey", + "https://tauri.app", + )) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .current_version("10.0.0".parse().unwrap()) + .url(format!( + "{}/darwin-aarch64/{{{{current_version}}}}", + mockito::server_url() + )) + .build()); + + let updater = check_update.expect("Can't check update"); + + assert!(!updater.should_update); + } + + #[test] + fn http_updater_fallback_urls() { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_raw_json()) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .url("http://badurl.www.tld/1".into()) + .url(mockito::server_url()) + .current_version("0.0.1".parse().unwrap()) + .build()); + + let updater = check_update.expect("Can't check remote update"); + + assert!(updater.should_update); + } + + #[test] + fn http_updater_fallback_urls_with_array() { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_raw_json()) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .urls(&["http://badurl.www.tld/1".into(), mockito::server_url(),]) + .current_version("0.0.1".parse().unwrap()) + .build()); + + let updater = check_update.expect("Can't check remote update"); + + assert!(updater.should_update); + } + + #[test] + fn http_updater_invalid_remote_data() { + let invalid_signature = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": true + }"#; + let invalid_version = r#"{ + "version": 5, + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": "x" + }"#; + let invalid_name = r#"{ + "name": false, + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": "x" + }"#; + let invalid_date = r#"{ + "version": "1.0.0", + "notes": "Blablaa", + "pub_date": 345645646, + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": "x" + }"#; + let invalid_notes = r#"{ + "version": "v0.0.3", + "notes": ["bla", "bla"], + "pub_date": "2020-02-20T15:41:00Z", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": "x" + }"#; + let invalid_url = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "url": ["https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz"], + "signature": "x" + }"#; + let invalid_platform_signature = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "platforms": { + "test-target": { + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": { + "test-target": "x" + } + } + } + }"#; + let invalid_platform_url = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "platforms": { + "test-target": { + "url": { + "first": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz" + } + "signature": "x" + } + } + }"#; + + let test_cases = [ + ( + invalid_signature, + Box::new(|e| matches!(e, Error::InvalidResponseType("signature", "string", _))) + as Box bool>, + ), + ( + invalid_version, + Box::new(|e| matches!(e, Error::InvalidResponseType("version", "string", _))) + as Box bool>, + ), + ( + invalid_name, + Box::new(|e| matches!(e, Error::InvalidResponseType("name", "string", _))) + as Box bool>, + ), + ( + invalid_date, + Box::new(|e| matches!(e, Error::InvalidResponseType("pub_date", "string", _))) + as Box bool>, + ), + ( + invalid_notes, + Box::new(|e| matches!(e, Error::InvalidResponseType("notes", "string", _))) + as Box bool>, + ), + ( + invalid_url, + Box::new(|e| matches!(e, Error::InvalidResponseType("url", "string", _))) + as Box bool>, + ), + ( + invalid_platform_signature, + Box::new(|e| matches!(e, Error::InvalidResponseType("signature", "string", _))) + as Box bool>, + ), + ( + invalid_platform_url, + Box::new(|e| matches!(e, Error::InvalidResponseType("url", "string", _))) + as Box bool>, + ), + ]; + + for (response, validator) in test_cases { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(response) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .url(mockito::server_url()) + .current_version("0.0.1".parse().unwrap()) + .target("test-target") + .build()); + if let Err(e) = check_update { + validator(e); + } else { + panic!("unexpected Ok response"); + } + } + } + + #[test] + fn http_updater_missing_remote_data() { + let missing_signature = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz" + }"#; + let missing_version = r#"{ + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": "x" + }"#; + let missing_url = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "signature": "x" + }"#; + let missing_target = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "platforms": { + "unknown-target": { + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz", + "signature": "x" + } + } + }"#; + let missing_platform_signature = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "platforms": { + "test-target": { + "url": "https://github.com/tauri-apps/updater-test/releases/download/v0.0.1/update3.tar.gz" + } + } + }"#; + let missing_platform_url = r#"{ + "version": "v0.0.3", + "notes": "Blablaa", + "pub_date": "2020-02-20T15:41:00Z", + "platforms": { + "test-target": { + "signature": "x" + } + } + }"#; + + fn missing_field_error(field: &str) -> String { + format!("the `{field}` field was not set on the updater response") + } + + let test_cases = [ + (missing_signature, missing_field_error("signature")), + (missing_version, "missing field `version`".to_string()), + (missing_url, missing_field_error("url")), + ( + missing_target, + Error::TargetNotFound("test-target".into()).to_string(), + ), + ( + missing_platform_signature, + "missing field `signature`".to_string(), + ), + (missing_platform_url, "missing field `url`".to_string()), + ]; + + for (response, error) in test_cases { + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(response) + .create(); + + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .url(mockito::server_url()) + .current_version("0.0.1".parse().unwrap()) + .target("test-target") + .build()); + if let Err(e) = check_update { + println!("ERROR: {e}, expected: {error}"); + assert!(e.to_string().contains(&error)); + } else { + panic!("unexpected Ok response"); + } + } + } + + // run complete process on mac only for now as we don't have + // server (api) that we can use to test + #[test] + #[cfg(target_os = "macos")] + fn http_updater_complete_process() { + #[cfg(target_os = "macos")] + let archive_file = "archive.macos.tar.gz"; + #[cfg(target_os = "linux")] + let archive_file = "archive.linux.tar.gz"; + #[cfg(target_os = "windows")] + let archive_file = "archive.windows.zip"; + + let good_archive_url = format!("{}/{archive_file}", mockito::server_url()); + + let mut signature_file = File::open(format!( + "./test/updater/fixture/archives/{archive_file}.sig" + )) + .expect("Unable to open signature"); + let mut signature = String::new(); + signature_file + .read_to_string(&mut signature) + .expect("Unable to read signature as string"); + + let mut pubkey_file = File::open("./test/updater/fixture/good_signature/update.key.pub") + .expect("Unable to open pubkey"); + let mut pubkey = String::new(); + pubkey_file + .read_to_string(&mut pubkey) + .expect("Unable to read signature as string"); + + // add sample file + let _m = mockito::mock("GET", format!("/{archive_file}").as_str()) + .with_status(200) + .with_header("content-type", "application/octet-stream") + .with_body_from_file(format!("./test/updater/fixture/archives/{archive_file}")) + .create(); + + // sample mock for update file + let _m = mockito::mock("GET", "/") + .with_status(200) + .with_header("content-type", "application/json") + .with_body(generate_sample_platform_json( + "2.0.1", + signature.as_ref(), + good_archive_url.as_ref(), + )) + .create(); + + // Build a tmpdir so we can test our extraction inside + // We dont want to overwrite our current executable or the directory + // Otherwise tests are failing... + let executable_path = current_exe().expect("Can't extract executable path"); + let parent_path = executable_path + .parent() + .expect("Can't find the parent path"); + + let tmp_dir = tempfile::Builder::new() + .prefix("tauri_updater_test") + .tempdir_in(parent_path); + + assert!(tmp_dir.is_ok()); + let tmp_dir_unwrap = tmp_dir.expect("Can't find tmp_dir"); + let tmp_dir_path = tmp_dir_unwrap.path(); + + #[cfg(target_os = "linux")] + let my_executable = &tmp_dir_path.join("updater-example_0.1.0_amd64.AppImage"); + #[cfg(target_os = "macos")] + let my_executable = &tmp_dir_path.join("my_app"); + #[cfg(target_os = "windows")] + let my_executable = &tmp_dir_path.join("my_app.exe"); + + // configure the updater + let app = crate::test::mock_app(); + let check_update = block!(builder(app.handle()) + .url(mockito::server_url()) + // It should represent the executable path, that's why we add my_app.exe in our + // test path -- in production you shouldn't have to provide it + .executable_path(my_executable) + // make sure we force an update + .current_version("1.0.0".parse().unwrap()) + .build()); + + #[cfg(target_os = "linux")] + { + env::set_var("APPIMAGE", my_executable); + } + + // unwrap our results + let updater = check_update.expect("Can't check remote update"); + + // make sure we need to update + assert!(updater.should_update); + // make sure we can read announced version + assert_eq!(updater.version, "2.0.1"); + + // download, install and validate signature + let install_process = block!(updater.download_and_install(pubkey, |_, _| (), || ())); + assert!(install_process.is_ok()); + + // make sure the extraction went well (it should have skipped the main app.app folder) + // as we can't extract in /Applications directly + #[cfg(target_os = "macos")] + let bin_file = tmp_dir_path.join("Contents").join("MacOS").join("app"); + #[cfg(target_os = "linux")] + // linux should extract at same place as the executable path + let bin_file = my_executable; + #[cfg(target_os = "windows")] + let bin_file = tmp_dir_path.join("with").join("long").join("path.json"); + + assert!(bin_file.exists()); + } +} +*/ diff --git a/plugins/updater/src/updater/mod.rs b/plugins/updater/src/updater/mod.rs new file mode 100644 index 00000000..c0252205 --- /dev/null +++ b/plugins/updater/src/updater/mod.rs @@ -0,0 +1,307 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +//! The Tauri updater. +//! +//! The updater is focused on making Tauri's application updates **as safe and transparent as updates to a website**. +//! +//! For a full guide on setting up the updater, see . +//! +//! Check [`UpdateBuilder`] to see how to trigger and customize the updater at runtime. +//! ``` + +mod core; + +use std::time::Duration; + +use http::header::{HeaderName, HeaderValue}; +use semver::Version; +use time::OffsetDateTime; + +pub use self::core::{DownloadEvent, RemoteRelease}; + +use tauri::{AppHandle, Manager, Runtime}; + +use crate::Result; + +/// Gets the target string used on the updater. +pub fn target() -> Option { + if let (Some(target), Some(arch)) = (core::get_updater_target(), core::get_updater_arch()) { + Some(format!("{target}-{arch}")) + } else { + None + } +} + +#[derive(Clone, serde::Serialize)] +struct StatusEvent { + status: String, + error: Option, +} + +#[derive(Clone, serde::Serialize)] +#[serde(rename_all = "camelCase")] +struct DownloadProgressEvent { + chunk_length: usize, + content_length: Option, +} + +#[derive(Clone, serde::Serialize)] +struct UpdateManifest { + version: String, + date: Option, + body: String, +} + +/// An update check builder. +#[derive(Debug)] +pub struct UpdateBuilder { + inner: core::UpdateBuilder, +} + +impl UpdateBuilder { + /// Sets the current platform's target name for the updater. + /// + /// The target is injected in the endpoint URL by replacing `{{target}}`. + /// Note that this does not affect the `{{arch}}` variable. + /// + /// If the updater response JSON includes the `platforms` field, + /// that object must contain a value for the target key. + /// + /// By default Tauri uses `$OS_NAME` as the replacement for `{{target}}` + /// and `$OS_NAME-$ARCH` as the key in the `platforms` object, + /// where `$OS_NAME` is the current operating system name "linux", "windows" or "darwin") + /// and `$ARCH` is one of the supported architectures ("i686", "x86_64", "armv7" or "aarch64"). + /// + /// See [`Builder::updater_target`](crate::Builder#method.updater_target) for a way to set the target globally. + /// + /// # Examples + /// + /// ## Use a macOS Universal binary target name + /// + /// In this example, we set the updater target only on macOS. + /// On other platforms, we set the default target. + /// Note that `{{target}}` will be replaced with `darwin-universal`, + /// but `{{arch}}` is still the running platform's architecture. + /// + /// ```no_run + /// use tauri_plugin_updater::{target as updater_target, UpdaterExt}; + /// tauri::Builder::default() + /// .setup(|app| { + /// let handle = app.handle(); + /// tauri::async_runtime::spawn(async move { + /// let builder = handle.updater().target(if cfg!(target_os = "macos") { + /// "darwin-universal".to_string() + /// } else { + /// updater_target().unwrap() + /// }); + /// match builder.check().await { + /// Ok(update) => {} + /// Err(error) => {} + /// } + /// }); + /// Ok(()) + /// }); + /// ``` + /// + /// ## Append debug information to the target + /// + /// This allows you to provide updates for both debug and release applications. + /// + /// ```no_run + /// use tauri_plugin_updater::{UpdaterExt, target as updater_target}; + /// tauri::Builder::default() + /// .setup(|app| { + /// let handle = app.handle(); + /// tauri::async_runtime::spawn(async move { + /// let kind = if cfg!(debug_assertions) { "debug" } else { "release" }; + /// let builder = handle.updater().target(format!("{}-{kind}", updater_target().unwrap())); + /// match builder.check().await { + /// Ok(update) => {} + /// Err(error) => {} + /// } + /// }); + /// Ok(()) + /// }); + /// ``` + /// + /// ## Use the platform's target triple + /// + /// ```no_run + /// use tauri_plugin_updater::UpdaterExt; + /// tauri::Builder::default() + /// .setup(|app| { + /// let handle = app.handle(); + /// tauri::async_runtime::spawn(async move { + /// let builder = handle.updater().target(tauri::utils::platform::target_triple().unwrap()); + /// match builder.check().await { + /// Ok(update) => {} + /// Err(error) => {} + /// } + /// }); + /// Ok(()) + /// }); + /// ``` + pub fn target(mut self, target: impl Into) -> Self { + self.inner = self.inner.target(target); + self + } + + /// Sets a closure that is invoked to compare the current version and the latest version returned by the updater server. + /// The first argument is the current version, and the second one is the latest version. + /// + /// The closure must return `true` if the update should be installed. + /// + /// # Examples + /// + /// - Always install the version returned by the server: + /// + /// ```no_run + /// use tauri_plugin_updater::UpdaterExt; + /// tauri::Builder::default() + /// .setup(|app| { + /// app.handle().updater().should_install(|_current, _latest| true); + /// Ok(()) + /// }); + /// ``` + pub fn should_install bool + Send + 'static>( + mut self, + f: F, + ) -> Self { + self.inner = self.inner.should_install(f); + self + } + + /// Sets the timeout for the requests to the updater endpoints. + pub fn timeout(mut self, timeout: Duration) -> Self { + self.inner = self.inner.timeout(timeout); + self + } + + /// Add a `Header` to the request. + pub fn header(mut self, key: K, value: V) -> Result + where + HeaderName: TryFrom, + >::Error: Into, + HeaderValue: TryFrom, + >::Error: Into, + { + self.inner = self.inner.header(key, value)?; + Ok(self) + } + + /// Check if an update is available. + /// + /// # Examples + /// + /// ```no_run + /// use tauri_plugin_updater::{UpdaterExt, DownloadEvent}; + /// tauri::Builder::default() + /// .setup(|app| { + /// let handle = app.handle(); + /// tauri::async_runtime::spawn(async move { + /// match handle.updater().check().await { + /// Ok(update) => { + /// if update.is_update_available() { + /// update.download_and_install(|event| { + /// match event { + /// DownloadEvent::Started { content_length } => println!("started! size: {:?}", content_length), + /// DownloadEvent::Progress { chunk_length } => println!("Downloaded {chunk_length} bytes"), + /// DownloadEvent::Finished => println!("download finished"), + /// } + /// }).await.unwrap(); + /// } + /// } + /// Err(e) => { + /// println!("failed to get update: {}", e); + /// } + /// } + /// }); + /// Ok(()) + /// }); + /// ``` + pub async fn check(self) -> Result> { + self.inner + .build() + .await + .map(|update| UpdateResponse { update }) + } +} + +/// The response of an updater check. +pub struct UpdateResponse { + update: core::Update, +} + +impl Clone for UpdateResponse { + fn clone(&self) -> Self { + Self { + update: self.update.clone(), + } + } +} + +impl UpdateResponse { + /// Whether the updater found a newer release or not. + pub fn is_update_available(&self) -> bool { + self.update.should_update + } + + /// The current version of the application as read by the updater. + pub fn current_version(&self) -> &Version { + &self.update.current_version + } + + /// The latest version of the application found by the updater. + pub fn latest_version(&self) -> &str { + &self.update.version + } + + /// The update date. + pub fn date(&self) -> Option<&OffsetDateTime> { + self.update.date.as_ref() + } + + /// The update description. + pub fn body(&self) -> Option<&String> { + self.update.body.as_ref() + } + + /// Downloads and installs the update. + pub async fn download_and_install(&self, on_event: F) -> Result<()> { + // Launch updater download process + // macOS we display the `Ready to restart dialog` asking to restart + // Windows is closing the current App and launch the downloaded MSI when ready (the process stop here) + // Linux we replace the AppImage by launching a new install, it start a new AppImage instance, so we're closing the previous. (the process stop here) + self.update + .download_and_install( + self.update.app.config().tauri.updater.pubkey.clone(), + on_event, + ) + .await + } +} + +/// Initializes the [`UpdateBuilder`] using the app configuration. +pub fn builder(handle: AppHandle) -> UpdateBuilder { + let updater_config = &handle.config().tauri.updater; + let package_info = handle.package_info().clone(); + + // prepare our endpoints + let endpoints = updater_config + .endpoints + .as_ref() + .expect("Something wrong with endpoints") + .iter() + .map(|e| e.to_string()) + .collect::>(); + + let mut builder = self::core::builder(handle.clone()) + .urls(&endpoints[..]) + .current_version(package_info.version); + if let Some(target) = &handle.state::().target { + builder = builder.target(target); + } + UpdateBuilder { inner: builder } +} diff --git a/plugins/updater/tests/app-updater/.gitignore b/plugins/updater/tests/app-updater/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/plugins/updater/tests/app-updater/Cargo.lock b/plugins/updater/tests/app-updater/Cargo.lock new file mode 100644 index 00000000..09310805 --- /dev/null +++ b/plugins/updater/tests/app-updater/Cargo.lock @@ -0,0 +1,3852 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "aho-corasick" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" + +[[package]] +name = "app-updater" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-updater", + "time", + "tiny_http", +] + +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + +[[package]] +name = "atk" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" +dependencies = [ + "atk-sys", + "bitflags", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "cargo_toml" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b" +dependencies = [ + "serde", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +dependencies = [ + "iana-time-zone", + "num-integer", + "num-traits", + "serde", + "winapi", +] + +[[package]] +name = "chunked_transfer" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca491388666e04d7248af3f60f0c40cfb0991c72205595d7c396e3510207d1a" + +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" +dependencies = [ + "bitflags", + "block", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation", + "foreign-types", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cxx" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.15", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "darling" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.15", +] + +[[package]] +name = "darling_macro" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dtoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" + +[[package]] +name = "dtoa-short" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "embed-resource" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a" +dependencies = [ + "cc", + "rustc_version", + "toml", + "vswhom", + "winreg 0.11.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", +] + +[[package]] +name = "flate2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +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", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-executor" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" +dependencies = [ + "bitflags", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gio" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" +dependencies = [ + "bitflags", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" +dependencies = [ + "anyhow", + "heck", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "glib-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +dependencies = [ + "aho-corasick 0.7.20", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "gobject-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" +dependencies = [ + "atk", + "bitflags", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "h2" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.6", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "hyper" +version = "0.14.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.6", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows 0.48.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown", + "serde", +] + +[[package]] +name = "infer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "javascriptcore-rs" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" +dependencies = [ + "bitflags", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" +dependencies = [ + "serde", + "serde_json", + "thiserror", + "treediff", +] + +[[package]] +name = "kuchiki" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" +dependencies = [ + "cssparser", + "html5ever", + "matches", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.144" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" +dependencies = [ + "log", + "phf 0.8.0", + "phf_codegen", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minisign-verify" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.45.0", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pango" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" +dependencies = [ + "bitflags", + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "plist" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" +dependencies = [ + "base64 0.21.0", + "indexmap", + "line-wrap", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.28.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.9", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.9", + "redox_syscall 0.2.16", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" +dependencies = [ + "aho-corasick 1.0.1", + "memchr", + "regex-syntax 0.7.1", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" + +[[package]] +name = "reqwest" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" +dependencies = [ + "base64 0.21.0", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.10.1", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustversion" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.162" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.162" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "serde_json" +version = "1.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +dependencies = [ + "itoa 1.0.6", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "serde_spanned" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.6", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap", + "serde", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "simd-adler32" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "soup3" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" +dependencies = [ + "bitflags", + "futures-channel", + "gio", + "glib", + "libc", + "once_cell", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +dependencies = [ + "loom", +] + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "swift-rs" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" +dependencies = [ + "base64 0.21.0", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "746ae5d0ca57ae275a792f109f6e992e0b41a443abdf3f5c6eff179ef5b3443a" +dependencies = [ + "bitflags", + "cairo-rs", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "gdk", + "gdk-pixbuf", + "gdk-sys", + "gdkwayland-sys", + "gdkx11-sys", + "gio", + "glib", + "glib-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "png", + "raw-window-handle", + "scopeguard", + "serde", + "tao-macros", + "unicode-segmentation", + "uuid", + "windows 0.44.0", + "windows-implement", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" + +[[package]] +name = "tauri" +version = "2.0.0-alpha.8" +dependencies = [ + "anyhow", + "bytes", + "cocoa", + "dirs-next", + "embed_plist", + "encoding_rs", + "flate2", + "futures-util", + "glib", + "glob", + "gtk", + "heck", + "http", + "ignore", + "jni", + "libc", + "log", + "objc", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "reqwest", + "semver", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "state", + "swift-rs", + "tar", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "tempfile", + "thiserror", + "time", + "tokio", + "url", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.44.0", + "zip", +] + +[[package]] +name = "tauri-build" +version = "2.0.0-alpha.4" +dependencies = [ + "anyhow", + "cargo_toml", + "filetime", + "heck", + "json-patch", + "semver", + "serde", + "serde_json", + "swift-rs", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.0.0-alpha.4" +dependencies = [ + "base64 0.21.0", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "tauri-utils", + "thiserror", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.0.0-alpha.4" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin-updater" +version = "0.0.0" +dependencies = [ + "base64 0.21.0", + "dirs-next", + "futures-util", + "http", + "minisign-verify", + "percent-encoding", + "reqwest", + "semver", + "serde", + "serde_json", + "tauri", + "tauri-runtime", + "tempfile", + "thiserror", + "time", + "url", +] + +[[package]] +name = "tauri-runtime" +version = "0.13.0-alpha.4" +dependencies = [ + "gtk", + "http", + "http-range", + "jni", + "rand 0.8.5", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "uuid", + "webview2-com", + "windows 0.44.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "0.13.0-alpha.4" +dependencies = [ + "cocoa", + "gtk", + "jni", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "tauri-runtime", + "tauri-utils", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.44.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.0.0-alpha.4" +dependencies = [ + "brotli", + "ctor", + "glob", + "heck", + "html5ever", + "infer", + "json-patch", + "kuchiki", + "memchr", + "phf 0.10.1", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "serde_with", + "thiserror", + "url", + "walkdir", + "windows 0.44.0", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml", +] + +[[package]] +name = "tempfile" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" +dependencies = [ + "itoa 1.0.6", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +dependencies = [ + "time-core", +] + +[[package]] +name = "tiny_http" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0d6ef4e10d23c1efb862eecad25c5054429a71958b4eeef85eb5e7170b477ca" +dependencies = [ + "ascii", + "chunked_transfer", + "log", + "time", + "url", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +dependencies = [ + "autocfg", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-util" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "treediff" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" +dependencies = [ + "serde_json", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" +dependencies = [ + "getrandom 0.2.9", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 1.0.109", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] +name = "wasm-streams" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" +dependencies = [ + "bitflags", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" +dependencies = [ + "bitflags", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.44.0", + "windows-implement", +] + +[[package]] +name = "webview2-com-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "webview2-com-sys" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" +dependencies = [ + "regex", + "serde", + "serde_json", + "thiserror", + "windows 0.44.0", + "windows-bindgen", + "windows-metadata", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-bindgen" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" +dependencies = [ + "windows-metadata", + "windows-tokens", +] + +[[package]] +name = "windows-implement" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-interface" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-metadata" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows-tokens" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "winnow" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "winreg" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "wry" +version = "0.28.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d15f9f827d537cefe6d047be3930f5d89b238dfb85e08ba6a319153217635aa" +dependencies = [ + "base64 0.13.1", + "block", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dunce", + "gdk", + "gio", + "glib", + "gtk", + "html5ever", + "http", + "javascriptcore-rs", + "kuchiki", + "libc", + "log", + "objc", + "objc_id", + "once_cell", + "serde", + "serde_json", + "sha2", + "soup3", + "tao", + "thiserror", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.44.0", + "windows-implement", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "zip" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", +] diff --git a/plugins/updater/tests/app-updater/Cargo.toml b/plugins/updater/tests/app-updater/Cargo.toml new file mode 100644 index 00000000..72c1e1f7 --- /dev/null +++ b/plugins/updater/tests/app-updater/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "app-updater" +version = "0.1.0" +edition = "2021" +#edition.workspace = true + +[build-dependencies] +tauri-build = { path = "../../../../../tauri/core/tauri-build", features = [] } + +[dependencies] +tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } +tauri-plugin-updater = { path = "../.." } +tiny_http = "0.11" +serde = "1" +serde_json = "1" +time = { version = "0.3", features = ["formatting"] } + +[features] +default = ["custom-protocol"] +custom-protocol = ["tauri/custom-protocol"] diff --git a/plugins/updater/tests/app-updater/build.rs b/plugins/updater/tests/app-updater/build.rs new file mode 100644 index 00000000..b055ec37 --- /dev/null +++ b/plugins/updater/tests/app-updater/build.rs @@ -0,0 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +fn main() { + tauri_build::build() +} diff --git a/plugins/updater/tests/app-updater/icons/128x128.png b/plugins/updater/tests/app-updater/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..77e7d2338e9d8ccffc731198dc584906627c903f GIT binary patch literal 11059 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 z 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

j#(n6`cTK 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 { + if let Err(e) = update.download_and_install().await { + println!("{e}"); + std::process::exit(1); + } + std::process::exit(0); + } + Err(e) => { + println!("{e}"); + std::process::exit(1); + } + } + }); + Ok(()) + }) + .run(context) + .expect("error while running tauri application"); +} diff --git a/plugins/updater/tests/app-updater/tauri.conf.json b/plugins/updater/tests/app-updater/tauri.conf.json new file mode 100644 index 00000000..eac17193 --- /dev/null +++ b/plugins/updater/tests/app-updater/tauri.conf.json @@ -0,0 +1,38 @@ +{ + "$schema": "../../../../node_modules/.pnpm/@tauri-apps+cli@2.0.0-alpha.8/node_modules/@tauri-apps/cli/schema.json", + "build": { + "distDir": [], + "devPath": [] + }, + "tauri": { + "bundle": { + "active": true, + "targets": "all", + "identifier": "com.tauri.updater", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "category": "DeveloperTool", + "windows": { + "wix": { + "skipWebviewInstall": true + } + } + }, + "allowlist": { + "all": false + }, + "updater": { + "active": true, + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK", + "endpoints": ["http://localhost:3007"], + "windows": { + "installMode": "quiet" + } + } + } +} diff --git a/plugins/updater/tests/app-updater/tests/update.rs b/plugins/updater/tests/app-updater/tests/update.rs new file mode 100644 index 00000000..ac9a7dd7 --- /dev/null +++ b/plugins/updater/tests/app-updater/tests/update.rs @@ -0,0 +1,298 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +#![allow(dead_code, unused_imports)] + +use std::{ + collections::HashMap, + fs::File, + path::{Path, PathBuf}, + process::Command, +}; + +use serde::Serialize; + +const UPDATER_PRIVATE_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5YTBGV3JiTy9lRDZVd3NkL0RoQ1htZmExNDd3RmJaNmRMT1ZGVjczWTBKZ0FBQkFBQUFBQUFBQUFBQUlBQUFBQWdMekUzVkE4K0tWQ1hjeGt1Vkx2QnRUR3pzQjVuV0ZpM2czWXNkRm9hVUxrVnB6TUN3K1NheHJMREhQbUVWVFZRK3NIL1VsMDBHNW5ET1EzQno0UStSb21nRW4vZlpTaXIwZFh5ZmRlL1lSN0dKcHdyOUVPclVvdzFhVkxDVnZrbHM2T1o4Tk1NWEU9Cg=="; + +#[derive(Serialize)] +struct PackageConfig { + version: &'static str, +} + +#[derive(Serialize)] +struct Config { + package: PackageConfig, +} + +#[derive(Serialize)] +struct PlatformUpdate { + signature: String, + url: &'static str, + with_elevated_task: bool, +} + +#[derive(Serialize)] +struct Update { + version: &'static str, + date: String, + platforms: HashMap, +} + +fn get_cli_bin_path(cli_dir: &Path, debug: bool) -> Option { + let mut cli_bin_path = cli_dir.join(format!( + "target/{}/cargo-tauri", + if debug { "debug" } else { "release" } + )); + if cfg!(windows) { + cli_bin_path.set_extension("exe"); + } + if cli_bin_path.exists() { + Some(cli_bin_path) + } else { + None + } +} + +fn build_app(cwd: &Path, config: &Config, bundle_updater: bool, target: BundleTarget) { + let mut command = Command::new("cargo"); + command + .args(["tauri", "build", "--debug", "--verbose"]) + .arg("--config") + .arg(serde_json::to_string(config).unwrap()) + .current_dir(cwd); + + #[cfg(target_os = "linux")] + command.args(["--bundles", target.name()]); + #[cfg(target_os = "macos")] + command.args(["--bundles", target.name()]); + + if bundle_updater { + #[cfg(windows)] + command.args(["--bundles", "msi", "nsis"]); + + command + .env("TAURI_PRIVATE_KEY", UPDATER_PRIVATE_KEY) + .env("TAURI_KEY_PASSWORD", "") + .args(["--bundles", "updater"]); + } else { + #[cfg(windows)] + command.args(["--bundles", target.name()]); + } + + let status = command + .status() + .expect("failed to run Tauri CLI to bundle app"); + + if !status.code().map(|c| c == 0).unwrap_or(true) { + panic!("failed to bundle app {:?}", status.code()); + } +} + +#[derive(Copy, Clone)] +enum BundleTarget { + AppImage, + + App, + + Msi, + Nsis, +} + +impl BundleTarget { + fn name(self) -> &'static str { + match self { + Self::AppImage => "appimage", + Self::App => "app", + Self::Msi => "msi", + Self::Nsis => "nsis", + } + } +} + +impl Default for BundleTarget { + fn default() -> Self { + #[cfg(any(target_os = "macos", target_os = "ios"))] + return Self::App; + #[cfg(target_os = "linux")] + return Self::App; + #[cfg(windows)] + return Self::Nsis; + } +} + +#[cfg(target_os = "linux")] +fn bundle_paths(root_dir: &Path, version: &str) -> Vec<(BundleTarget, PathBuf)> { + vec![( + BundleTarget::AppImage, + root_dir.join(format!( + "target/debug/bundle/appimage/app-updater_{version}_amd64.AppImage" + )), + )] +} + +#[cfg(target_os = "macos")] +fn bundle_paths(root_dir: &Path, _version: &str) -> Vec<(BundleTarget, PathBuf)> { + vec![( + BundleTarget::App, + root_dir.join("target/debug/bundle/macos/app-updater.app"), + )] +} + +#[cfg(target_os = "ios")] +fn bundle_paths(root_dir: &Path, _version: &str) -> Vec<(BundleTarget, PathBuf)> { + vec![( + BundleTarget::App, + root_dir.join("target/debug/bundle/ios/app-updater.ipa"), + )] +} + +#[cfg(target_os = "android")] +fn bundle_path(root_dir: &Path, _version: &str) -> PathBuf { + root_dir.join("target/debug/bundle/android/app-updater.apk") +} + +#[cfg(windows)] +fn bundle_paths(root_dir: &Path, version: &str) -> Vec<(BundleTarget, PathBuf)> { + vec![ + ( + BundleTarget::Nsis, + root_dir.join(format!( + "target/debug/bundle/nsis/app-updater_{version}_x64-setup.exe" + )), + ), + ( + BundleTarget::Msi, + root_dir.join(format!( + "target/debug/bundle/msi/app-updater_{version}_x64_en-US.msi" + )), + ), + ] +} + +#[test] +#[ignore] +fn update_app() { + let target = + tauri_plugin_updater::target().expect("running updater test in an unsupported platform"); + let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + let root_dir = manifest_dir.clone(); + + let mut config = Config { + package: PackageConfig { version: "1.0.0" }, + }; + + // bundle app update + build_app(&manifest_dir, &config, true, Default::default()); + + let updater_zip_ext = if cfg!(windows) { "zip" } else { "tar.gz" }; + + for (bundle_target, out_bundle_path) in bundle_paths(&root_dir, "1.0.0") { + let bundle_updater_ext = out_bundle_path + .extension() + .unwrap() + .to_str() + .unwrap() + .replace("exe", "nsis"); + let signature_path = + out_bundle_path.with_extension(format!("{bundle_updater_ext}.{updater_zip_ext}.sig")); + let signature = std::fs::read_to_string(&signature_path).unwrap_or_else(|_| { + panic!("failed to read signature file {}", signature_path.display()) + }); + let out_updater_path = + out_bundle_path.with_extension(format!("{}.{}", bundle_updater_ext, updater_zip_ext)); + let updater_path = root_dir.join(format!( + "target/debug/{}", + out_updater_path.file_name().unwrap().to_str().unwrap() + )); + std::fs::rename(&out_updater_path, &updater_path).expect("failed to rename bundle"); + + let target = target.clone(); + std::thread::spawn(move || { + // start the updater server + let server = + tiny_http::Server::http("localhost:3007").expect("failed to start updater server"); + + loop { + if let Ok(request) = server.recv() { + match request.url() { + "/" => { + let mut platforms = HashMap::new(); + + platforms.insert( + target.clone(), + PlatformUpdate { + signature: signature.clone(), + url: "http://localhost:3007/download", + with_elevated_task: false, + }, + ); + let body = serde_json::to_vec(&Update { + version: "1.0.0", + date: time::OffsetDateTime::now_utc() + .format(&time::format_description::well_known::Rfc3339) + .unwrap(), + platforms, + }) + .unwrap(); + let len = body.len(); + let response = tiny_http::Response::new( + tiny_http::StatusCode(200), + Vec::new(), + std::io::Cursor::new(body), + Some(len), + None, + ); + let _ = request.respond(response); + } + "/download" => { + let _ = request.respond(tiny_http::Response::from_file( + File::open(&updater_path).unwrap_or_else(|_| { + panic!( + "failed to open updater bundle {}", + updater_path.display() + ) + }), + )); + // close server + return; + } + _ => (), + } + } + } + }); + + config.package.version = "0.1.0"; + + // bundle initial app version + build_app(&manifest_dir, &config, false, bundle_target); + + let mut binary_cmd = if cfg!(windows) { + Command::new(root_dir.join("target/debug/app-updater.exe")) + } else if cfg!(target_os = "macos") { + Command::new( + bundle_paths(&root_dir, "0.1.0") + .first() + .unwrap() + .1 + .join("Contents/MacOS/app-updater"), + ) + } else if std::env::var("CI").map(|v| v == "true").unwrap_or_default() { + let mut c = Command::new("xvfb-run"); + c.arg("--auto-servernum") + .arg(&bundle_paths(&root_dir, "0.1.0").first().unwrap().1); + c + } else { + Command::new(&bundle_paths(&root_dir, "0.1.0").first().unwrap().1) + }; + + binary_cmd.env("TARGET", bundle_target.name()); + + let status = binary_cmd.status().expect("failed to run app"); + + if !status.success() { + panic!("failed to run app"); + } + } +} diff --git a/plugins/updater/tsconfig.json b/plugins/updater/tsconfig.json new file mode 100644 index 00000000..5098169a --- /dev/null +++ b/plugins/updater/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["guest-js/*.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e77a403..7ac17f00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,6 +94,9 @@ importers: tauri-plugin-shell-api: specifier: 0.0.0 version: link:../../plugins/shell + tauri-plugin-updater-api: + specifier: 0.0.0 + version: link:../../plugins/updater devDependencies: '@iconify-json/codicon': specifier: ^1.1.10 @@ -313,6 +316,16 @@ importers: specifier: ^2.5.0 version: 2.5.0 + plugins/updater: + dependencies: + '@tauri-apps/api': + specifier: ^1.2.0 + version: 1.2.0 + devDependencies: + tslib: + specifier: ^2.5.0 + version: 2.5.0 + plugins/upload: dependencies: '@tauri-apps/api': From bb26f7d7107f0b8507e07851f3d1b41745ce2c16 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Fri, 12 May 2023 03:58:20 -0700 Subject: [PATCH 09/64] feat(window): add plugin (#352) --- Cargo.lock | 35 +- examples/api/package.json | 3 +- examples/api/src-tauri/Cargo.lock | 24 +- examples/api/src-tauri/Cargo.toml | 1 + examples/api/src-tauri/src/lib.rs | 1 + examples/api/src/App.svelte | 5 +- examples/api/src/views/Communication.svelte | 38 +- examples/api/src/views/Window.svelte | 262 +-- plugins/fs-watch/guest-js/index.ts | 2 +- plugins/fs-watch/package.json | 3 +- plugins/upload/guest-js/index.ts | 2 +- plugins/upload/package.json | 3 +- plugins/window-state/guest-js/index.ts | 2 +- plugins/window-state/package.json | 3 +- plugins/window/Cargo.toml | 15 + plugins/window/LICENSE.spdx | 20 + plugins/window/LICENSE_APACHE-2.0 | 177 ++ plugins/window/LICENSE_MIT | 21 + plugins/window/README.md | 65 + plugins/window/guest-js/event.ts | 98 + plugins/window/guest-js/index.ts | 1923 +++++++++++++++++++ plugins/window/package.json | 32 + plugins/window/rollup.config.mjs | 11 + plugins/window/src/commands.rs | 197 ++ plugins/window/src/lib.rs | 65 + plugins/window/tsconfig.json | 4 + pnpm-lock.yaml | 22 + 27 files changed, 2865 insertions(+), 169 deletions(-) create mode 100644 plugins/window/Cargo.toml create mode 100644 plugins/window/LICENSE.spdx create mode 100644 plugins/window/LICENSE_APACHE-2.0 create mode 100644 plugins/window/LICENSE_MIT create mode 100644 plugins/window/README.md create mode 100644 plugins/window/guest-js/event.ts create mode 100644 plugins/window/guest-js/index.ts create mode 100644 plugins/window/package.json create mode 100644 plugins/window/rollup.config.mjs create mode 100644 plugins/window/src/commands.rs create mode 100644 plugins/window/src/lib.rs create mode 100644 plugins/window/tsconfig.json diff --git a/Cargo.lock b/Cargo.lock index 5096fc70..b1f52a19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2140,6 +2140,16 @@ dependencies = [ "cxx-build", ] +[[package]] +name = "ico" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd" +dependencies = [ + "byteorder", + "png", +] + [[package]] name = "ico" version = "0.3.0" @@ -2208,6 +2218,15 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "infer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f178e61cdbfe084aa75a2f4f7a25a5bb09701a47ae1753608f194b15783c937a" +dependencies = [ + "cfb", +] + [[package]] name = "infer" version = "0.12.0" @@ -4711,13 +4730,16 @@ dependencies = [ "gtk", "heck 0.4.1", "http", + "ico 0.2.0", "ignore", + "infer 0.9.0", "jni", "libc", "log", "objc", "once_cell", "percent-encoding", + "png", "rand 0.8.5", "raw-window-handle", "reqwest", @@ -4772,7 +4794,7 @@ checksum = "818c570932ebc2ff6d498be89d93494b89ff142131937a7e56d7cfb9c8ef0ad0" dependencies = [ "base64 0.21.0", "brotli", - "ico", + "ico 0.3.0", "json-patch", "plist", "png", @@ -5104,6 +5126,15 @@ dependencies = [ "tokio-tungstenite", ] +[[package]] +name = "tauri-plugin-window" +version = "0.0.0" +dependencies = [ + "serde", + "tauri", + "thiserror", +] + [[package]] name = "tauri-plugin-window-state" version = "0.1.0" @@ -5171,7 +5202,7 @@ dependencies = [ "glob", "heck 0.4.1", "html5ever", - "infer", + "infer 0.12.0", "json-patch", "kuchiki", "memchr", diff --git a/examples/api/package.json b/examples/api/package.json index ff0a11bf..c6801ef7 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -22,7 +22,8 @@ "tauri-plugin-os-api": "0.0.0", "tauri-plugin-process-api": "0.0.0", "tauri-plugin-shell-api": "0.0.0", - "tauri-plugin-updater-api": "0.0.0" + "tauri-plugin-updater-api": "0.0.0", + "tauri-plugin-window-api": "0.0.0" }, "devDependencies": { "@iconify-json/codicon": "^1.1.10", diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index a83fefe3..d7722fc9 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -180,6 +180,7 @@ dependencies = [ "tauri-plugin-process", "tauri-plugin-shell", "tauri-plugin-updater", + "tauri-plugin-window", "tiny_http", "window-shadows", ] @@ -3603,7 +3604,7 @@ checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" [[package]] name = "tauri" version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" +source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" dependencies = [ "anyhow", "bytes", @@ -3659,7 +3660,7 @@ dependencies = [ [[package]] name = "tauri-build" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" +source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" dependencies = [ "anyhow", "cargo_toml", @@ -3680,7 +3681,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" +source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" dependencies = [ "base64 0.21.0", "brotli", @@ -3705,7 +3706,7 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" +source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -3894,10 +3895,19 @@ dependencies = [ "url", ] +[[package]] +name = "tauri-plugin-window" +version = "0.0.0" +dependencies = [ + "serde", + "tauri", + "thiserror", +] + [[package]] name = "tauri-runtime" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" +source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" dependencies = [ "gtk", "http", @@ -3918,7 +3928,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" +source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" dependencies = [ "cocoa", "gtk", @@ -3938,7 +3948,7 @@ dependencies = [ [[package]] name = "tauri-utils" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" +source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" dependencies = [ "aes-gcm", "brotli", diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 4d30e57d..fe8c70fe 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -28,6 +28,7 @@ tauri-plugin-os = { path = "../../../plugins/os" } tauri-plugin-process = { path = "../../../plugins/process" } tauri-plugin-shell = { path = "../../../plugins/shell" } tauri-plugin-updater = { path = "../../../plugins/updater" } +tauri-plugin-window = { path = "../../../plugins/window" } [patch.crates-io] tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index 9e146179..d5d77a67 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -41,6 +41,7 @@ pub fn run() { .plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_shell::init()) .plugin(tauri_plugin_updater::Builder::new().build()) + .plugin(tauri_plugin_window::init()) .setup(move |app| { #[cfg(desktop)] { diff --git a/examples/api/src/App.svelte b/examples/api/src/App.svelte index 95b2ff0f..3bd71a0d 100644 --- a/examples/api/src/App.svelte +++ b/examples/api/src/App.svelte @@ -1,7 +1,7 @@ diff --git a/examples/api/src/views/Window.svelte b/examples/api/src/views/Window.svelte index df77d9b0..5a54f942 100644 --- a/examples/api/src/views/Window.svelte +++ b/examples/api/src/views/Window.svelte @@ -5,217 +5,217 @@ LogicalSize, UserAttentionType, PhysicalSize, - PhysicalPosition - } from '@tauri-apps/api/window' - import { open as openDialog } from 'tauri-plugin-dialog-api' - import { open } from 'tauri-plugin-shell-api' + PhysicalPosition, + } from "tauri-plugin-window-api"; + import { open as openDialog } from "tauri-plugin-dialog-api"; + import { open } from "tauri-plugin-shell-api"; - let selectedWindow = appWindow.label + let selectedWindow = appWindow.label; const windowMap = { - [appWindow.label]: appWindow - } + [appWindow.label]: appWindow, + }; const cursorIconOptions = [ - 'default', - 'crosshair', - 'hand', - 'arrow', - 'move', - 'text', - 'wait', - 'help', - 'progress', + "default", + "crosshair", + "hand", + "arrow", + "move", + "text", + "wait", + "help", + "progress", // something cannot be done - 'notAllowed', - 'contextMenu', - 'cell', - 'verticalText', - 'alias', - 'copy', - 'noDrop', + "notAllowed", + "contextMenu", + "cell", + "verticalText", + "alias", + "copy", + "noDrop", // something can be grabbed - 'grab', + "grab", /// something is grabbed - 'grabbing', - 'allScroll', - 'zoomIn', - 'zoomOut', + "grabbing", + "allScroll", + "zoomIn", + "zoomOut", // edge is to be moved - 'eResize', - 'nResize', - 'neResize', - 'nwResize', - 'sResize', - 'seResize', - 'swResize', - 'wResize', - 'ewResize', - 'nsResize', - 'neswResize', - 'nwseResize', - 'colResize', - 'rowResize' - ] + "eResize", + "nResize", + "neResize", + "nwResize", + "sResize", + "seResize", + "swResize", + "wResize", + "ewResize", + "nsResize", + "neswResize", + "nwseResize", + "colResize", + "rowResize", + ]; - export let onMessage + export let onMessage; - let newWindowLabel + let newWindowLabel; - let urlValue = 'https://tauri.app' - let resizable = true - let maximized = false - let decorations = true - let alwaysOnTop = false - let contentProtected = true - let fullscreen = false - let width = null - let height = null - let minWidth = null - let minHeight = null - let maxWidth = null - let maxHeight = null - let x = null - let y = null - let scaleFactor = 1 - let innerPosition = new PhysicalPosition(x, y) - let outerPosition = new PhysicalPosition(x, y) - let innerSize = new PhysicalSize(width, height) - let outerSize = new PhysicalSize(width, height) - let resizeEventUnlisten - let moveEventUnlisten - let cursorGrab = false - let cursorVisible = true - let cursorX = null - let cursorY = null - let cursorIcon = 'default' - let cursorIgnoreEvents = false - let windowTitle = 'Awesome Tauri Example!' + let urlValue = "https://tauri.app"; + let resizable = true; + let maximized = false; + let decorations = true; + let alwaysOnTop = false; + let contentProtected = true; + let fullscreen = false; + let width = null; + let height = null; + let minWidth = null; + let minHeight = null; + let maxWidth = null; + let maxHeight = null; + let x = null; + let y = null; + let scaleFactor = 1; + let innerPosition = new PhysicalPosition(x, y); + let outerPosition = new PhysicalPosition(x, y); + let innerSize = new PhysicalSize(width, height); + let outerSize = new PhysicalSize(width, height); + let resizeEventUnlisten; + let moveEventUnlisten; + let cursorGrab = false; + let cursorVisible = true; + let cursorX = null; + let cursorY = null; + let cursorIcon = "default"; + let cursorIgnoreEvents = false; + let windowTitle = "Awesome Tauri Example!"; function openUrl() { - open(urlValue) + open(urlValue); } function setTitle_() { - windowMap[selectedWindow].setTitle(windowTitle) + windowMap[selectedWindow].setTitle(windowTitle); } function hide_() { - windowMap[selectedWindow].hide() - setTimeout(windowMap[selectedWindow].show, 2000) + windowMap[selectedWindow].hide(); + setTimeout(windowMap[selectedWindow].show, 2000); } function minimize_() { - windowMap[selectedWindow].minimize() - setTimeout(windowMap[selectedWindow].unminimize, 2000) + windowMap[selectedWindow].minimize(); + setTimeout(windowMap[selectedWindow].unminimize, 2000); } function getIcon() { openDialog({ - multiple: false + multiple: false, }).then((path) => { - if (typeof path === 'string') { - windowMap[selectedWindow].setIcon(path) + if (typeof path === "string") { + windowMap[selectedWindow].setIcon(path); } - }) + }); } function createWindow() { - if (!newWindowLabel) return + if (!newWindowLabel) return; - const webview = new WebviewWindow(newWindowLabel) - windowMap[newWindowLabel] = webview - webview.once('tauri://error', function () { - onMessage('Error creating new webview') - }) + const webview = new WebviewWindow(newWindowLabel); + windowMap[newWindowLabel] = webview; + webview.once("tauri://error", function () { + onMessage("Error creating new webview"); + }); } function loadWindowSize() { windowMap[selectedWindow].innerSize().then((response) => { - innerSize = response - width = innerSize.width - height = innerSize.height - }) + innerSize = response; + width = innerSize.width; + height = innerSize.height; + }); windowMap[selectedWindow].outerSize().then((response) => { - outerSize = response - }) + outerSize = response; + }); } function loadWindowPosition() { windowMap[selectedWindow].innerPosition().then((response) => { - innerPosition = response - }) + innerPosition = response; + }); windowMap[selectedWindow].outerPosition().then((response) => { - outerPosition = response - x = outerPosition.x - y = outerPosition.y - }) + outerPosition = response; + x = outerPosition.x; + y = outerPosition.y; + }); } async function addWindowEventListeners(window) { - if (!window) return + if (!window) return; if (resizeEventUnlisten) { - resizeEventUnlisten() + resizeEventUnlisten(); } if (moveEventUnlisten) { - moveEventUnlisten() + moveEventUnlisten(); } - moveEventUnlisten = await window.listen('tauri://move', loadWindowPosition) - resizeEventUnlisten = await window.listen('tauri://resize', loadWindowSize) + moveEventUnlisten = await window.listen("tauri://move", loadWindowPosition); + resizeEventUnlisten = await window.listen("tauri://resize", loadWindowSize); } async function requestUserAttention_() { - await windowMap[selectedWindow].minimize() + await windowMap[selectedWindow].minimize(); await windowMap[selectedWindow].requestUserAttention( UserAttentionType.Critical - ) - await new Promise((resolve) => setTimeout(resolve, 3000)) - await windowMap[selectedWindow].requestUserAttention(null) + ); + await new Promise((resolve) => setTimeout(resolve, 3000)); + await windowMap[selectedWindow].requestUserAttention(null); } $: { - windowMap[selectedWindow] - loadWindowPosition() - loadWindowSize() + windowMap[selectedWindow]; + loadWindowPosition(); + loadWindowSize(); } - $: windowMap[selectedWindow]?.setResizable(resizable) + $: windowMap[selectedWindow]?.setResizable(resizable); $: maximized ? windowMap[selectedWindow]?.maximize() - : windowMap[selectedWindow]?.unmaximize() - $: windowMap[selectedWindow]?.setDecorations(decorations) - $: windowMap[selectedWindow]?.setAlwaysOnTop(alwaysOnTop) - $: windowMap[selectedWindow]?.setContentProtected(contentProtected) - $: windowMap[selectedWindow]?.setFullscreen(fullscreen) + : windowMap[selectedWindow]?.unmaximize(); + $: windowMap[selectedWindow]?.setDecorations(decorations); + $: windowMap[selectedWindow]?.setAlwaysOnTop(alwaysOnTop); + $: windowMap[selectedWindow]?.setContentProtected(contentProtected); + $: windowMap[selectedWindow]?.setFullscreen(fullscreen); $: width && height && - windowMap[selectedWindow]?.setSize(new PhysicalSize(width, height)) + windowMap[selectedWindow]?.setSize(new PhysicalSize(width, height)); $: minWidth && minHeight ? windowMap[selectedWindow]?.setMinSize( new LogicalSize(minWidth, minHeight) ) - : windowMap[selectedWindow]?.setMinSize(null) + : windowMap[selectedWindow]?.setMinSize(null); $: maxWidth > 800 && maxHeight > 400 ? windowMap[selectedWindow]?.setMaxSize( new LogicalSize(maxWidth, maxHeight) ) - : windowMap[selectedWindow]?.setMaxSize(null) + : windowMap[selectedWindow]?.setMaxSize(null); $: x !== null && y !== null && - windowMap[selectedWindow]?.setPosition(new PhysicalPosition(x, y)) + windowMap[selectedWindow]?.setPosition(new PhysicalPosition(x, y)); $: windowMap[selectedWindow] ?.scaleFactor() - .then((factor) => (scaleFactor = factor)) - $: addWindowEventListeners(windowMap[selectedWindow]) + .then((factor) => (scaleFactor = factor)); + $: addWindowEventListeners(windowMap[selectedWindow]); - $: windowMap[selectedWindow]?.setCursorGrab(cursorGrab) - $: windowMap[selectedWindow]?.setCursorVisible(cursorVisible) - $: windowMap[selectedWindow]?.setCursorIcon(cursorIcon) + $: windowMap[selectedWindow]?.setCursorGrab(cursorGrab); + $: windowMap[selectedWindow]?.setCursorVisible(cursorVisible); + $: windowMap[selectedWindow]?.setCursorIcon(cursorIcon); $: cursorX !== null && cursorY !== null && windowMap[selectedWindow]?.setCursorPosition( new PhysicalPosition(cursorX, cursorY) - ) - $: windowMap[selectedWindow]?.setIgnoreCursorEvents(cursorIgnoreEvents) + ); + $: windowMap[selectedWindow]?.setIgnoreCursorEvents(cursorIgnoreEvents);
diff --git a/plugins/fs-watch/guest-js/index.ts b/plugins/fs-watch/guest-js/index.ts index 05ed07e5..9d25096f 100644 --- a/plugins/fs-watch/guest-js/index.ts +++ b/plugins/fs-watch/guest-js/index.ts @@ -1,6 +1,6 @@ import { invoke } from "@tauri-apps/api/tauri"; import { UnlistenFn } from "@tauri-apps/api/event"; -import { appWindow, WebviewWindow } from "@tauri-apps/api/window"; +import { appWindow, WebviewWindow } from "tauri-plugin-window-api"; const w: WebviewWindow = appWindow; diff --git a/plugins/fs-watch/package.json b/plugins/fs-watch/package.json index 4ac45241..61c5cf71 100644 --- a/plugins/fs-watch/package.json +++ b/plugins/fs-watch/package.json @@ -28,6 +28,7 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "^1.2.0", + "tauri-plugin-window-api": "0.0.0" } } diff --git a/plugins/upload/guest-js/index.ts b/plugins/upload/guest-js/index.ts index 26bc93b4..1a605633 100644 --- a/plugins/upload/guest-js/index.ts +++ b/plugins/upload/guest-js/index.ts @@ -1,5 +1,5 @@ import { invoke } from "@tauri-apps/api/tauri"; -import { appWindow } from "@tauri-apps/api/window"; +import { appWindow } from "tauri-plugin-window-api"; interface ProgressPayload { id: number; diff --git a/plugins/upload/package.json b/plugins/upload/package.json index acd01d42..e84f3b62 100644 --- a/plugins/upload/package.json +++ b/plugins/upload/package.json @@ -28,6 +28,7 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "^1.2.0", + "tauri-plugin-window-api": "0.0.0" } } diff --git a/plugins/window-state/guest-js/index.ts b/plugins/window-state/guest-js/index.ts index 11ead0f4..a40d8183 100644 --- a/plugins/window-state/guest-js/index.ts +++ b/plugins/window-state/guest-js/index.ts @@ -1,5 +1,5 @@ import { invoke } from "@tauri-apps/api/tauri"; -import { WindowLabel, getCurrent } from "@tauri-apps/api/window"; +import { WindowLabel, getCurrent } from "tauri-plugin-window-api"; export enum StateFlags { SIZE = 1 << 0, diff --git a/plugins/window-state/package.json b/plugins/window-state/package.json index f7938586..d6937f9f 100644 --- a/plugins/window-state/package.json +++ b/plugins/window-state/package.json @@ -28,6 +28,7 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "^1.2.0", + "tauri-plugin-window-api": "0.0.0" } } diff --git a/plugins/window/Cargo.toml b/plugins/window/Cargo.toml new file mode 100644 index 00000000..6fda6b38 --- /dev/null +++ b/plugins/window/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "tauri-plugin-window" +version = "0.0.0" +edition.workspace = true +authors.workspace = true +license.workspace = true + +[dependencies] +tauri.workspace = true +serde.workspace = true +thiserror.workspace = true + +[features] +icon-png = ["tauri/icon-png"] +icon-ico = ["tauri/icon-ico"] diff --git a/plugins/window/LICENSE.spdx b/plugins/window/LICENSE.spdx new file mode 100644 index 00000000..cdd0df5a --- /dev/null +++ b/plugins/window/LICENSE.spdx @@ -0,0 +1,20 @@ +SPDXVersion: SPDX-2.1 +DataLicense: CC0-1.0 +PackageName: tauri +DataFormat: SPDXRef-1 +PackageSupplier: Organization: The Tauri Programme in the Commons Conservancy +PackageHomePage: https://tauri.app +PackageLicenseDeclared: Apache-2.0 +PackageLicenseDeclared: MIT +PackageCopyrightText: 2019-2022, The Tauri Programme in the Commons Conservancy +PackageSummary: Tauri is a rust project that enables developers to make secure +and small desktop applications using a web frontend. + +PackageComment: The package includes the following libraries; see +Relationship information. + +Created: 2019-05-20T09:00:00Z +PackageDownloadLocation: git://github.com/tauri-apps/tauri +PackageDownloadLocation: git+https://github.com/tauri-apps/tauri.git +PackageDownloadLocation: git+ssh://github.com/tauri-apps/tauri.git +Creator: Person: Daniel Thompson-Yvetot \ No newline at end of file diff --git a/plugins/window/LICENSE_APACHE-2.0 b/plugins/window/LICENSE_APACHE-2.0 new file mode 100644 index 00000000..4947287f --- /dev/null +++ b/plugins/window/LICENSE_APACHE-2.0 @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/plugins/window/LICENSE_MIT b/plugins/window/LICENSE_MIT new file mode 100644 index 00000000..4d754725 --- /dev/null +++ b/plugins/window/LICENSE_MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 - Present Tauri Apps Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/plugins/window/README.md b/plugins/window/README.md new file mode 100644 index 00000000..4d6a6c8a --- /dev/null +++ b/plugins/window/README.md @@ -0,0 +1,65 @@ +# Window plugin + +Interact with the Tauri window. + +## Install + +_This plugin requires a Rust version of at least **1.64**_ + +There are three general methods of installation that we can recommend. + +1. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked) +2. Pull sources directly from Github using git tags / revision hashes (most secure) +3. Git submodule install this repo in your tauri project and then use file protocol to ingest the source (most secure, but inconvenient to use) + +Install the Core plugin by adding the following to your `Cargo.toml` file: + +`src-tauri/Cargo.toml` + +```toml +[dependencies] +tauri-plugin-window = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } +``` + +You can install the JavaScript Guest bindings using your preferred JavaScript package manager: + +> Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. + +```sh +pnpm add https://github.com/tauri-apps/tauri-plugin-window#v2 +# or +npm add https://github.com/tauri-apps/tauri-plugin-window#v2 +# or +yarn add https://github.com/tauri-apps/tauri-plugin-window#v2 +``` + +## Usage + +First you need to register the core plugin with Tauri: + +`src-tauri/src/main.rs` + +```rust +fn main() { + tauri::Builder::default() + .plugin(tauri_plugin_window::init()) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} +``` + +Afterwards all the plugin's APIs are available through the JavaScript guest bindings: + +```javascript +import * as tauriWindow from "tauri-plugin-window-api"; +``` + +## Contributing + +PRs accepted. Please make sure to read the Contributing Guide before making a pull request. + +## License + +Code: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy. + +MIT or MIT/Apache 2.0 where applicable. diff --git a/plugins/window/guest-js/event.ts b/plugins/window/guest-js/event.ts new file mode 100644 index 00000000..798b4fb4 --- /dev/null +++ b/plugins/window/guest-js/event.ts @@ -0,0 +1,98 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +import { invoke, transformCallback } from "@tauri-apps/api/tauri"; + +export interface Event { + /** Event name */ + event: string; + /** The label of the window that emitted this event. */ + windowLabel: string; + /** Event identifier used to unlisten */ + id: number; + /** Event payload */ + payload: T; +} + +export type EventCallback = (event: Event) => void; + +export type UnlistenFn = () => void; + +/** + * Unregister the event listener associated with the given name and id. + * + * @ignore + * @param event The event name + * @param eventId Event identifier + * @returns + */ +async function _unlisten(event: string, eventId: number): Promise { + await invoke("plugin:event|unlisten", { + event, + eventId, + }); +} + +/** + * Emits an event to the backend. + * + * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`. + * @param [windowLabel] The label of the window to which the event is sent, if null/undefined the event will be sent to all windows + * @param [payload] Event payload + * @returns + */ +async function emit( + event: string, + windowLabel?: string, + payload?: unknown +): Promise { + await invoke("plugin:event|emit", { + event, + windowLabel, + payload, + }); +} + +/** + * Listen to an event from the backend. + * + * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`. + * @param handler Event handler callback. + * @return A promise resolving to a function to unlisten to the event. + */ +async function listen( + event: string, + windowLabel: string | null, + handler: EventCallback +): Promise { + return invoke("plugin:event|listen", { + event, + windowLabel, + handler: transformCallback(handler), + }).then((eventId) => { + return async () => _unlisten(event, eventId); + }); +} + +/** + * Listen to an one-off event from the backend. + * + * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`. + * @param handler Event handler callback. + * @returns A promise resolving to a function to unlisten to the event. + */ +async function once( + event: string, + windowLabel: string | null, + handler: EventCallback +): Promise { + return listen(event, windowLabel, (eventData) => { + handler(eventData); + _unlisten(event, eventData.id).catch(() => { + // do nothing + }); + }); +} + +export { emit, listen, once }; diff --git a/plugins/window/guest-js/index.ts b/plugins/window/guest-js/index.ts new file mode 100644 index 00000000..59e7f77a --- /dev/null +++ b/plugins/window/guest-js/index.ts @@ -0,0 +1,1923 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +/** + * Provides APIs to create windows, communicate with other windows and manipulate the current window. + * + * The APIs must be added to [`tauri.allowlist.window`](https://tauri.app/v1/api/config/#allowlistconfig.window) in `tauri.conf.json`: + * ```json + * { + * "tauri": { + * "allowlist": { + * "window": { + * "all": true, // enable all window APIs + * "create": true, // enable window creation + * "center": true, + * "requestUserAttention": true, + * "setResizable": true, + * "setTitle": true, + * "maximize": true, + * "unmaximize": true, + * "minimize": true, + * "unminimize": true, + * "show": true, + * "hide": true, + * "close": true, + * "setDecorations": true, + * "setShadow": true, + * "setAlwaysOnTop": true, + * "setContentProtected": true, + * "setSize": true, + * "setMinSize": true, + * "setMaxSize": true, + * "setPosition": true, + * "setFullscreen": true, + * "setFocus": true, + * "setIcon": true, + * "setSkipTaskbar": true, + * "setCursorGrab": true, + * "setCursorVisible": true, + * "setCursorIcon": true, + * "setCursorPosition": true, + * "setIgnoreCursorEvents": true, + * "startDragging": true, + * "print": true + * } + * } + * } + * } + * ``` + * It is recommended to allowlist only the APIs you use for optimal bundle size and security. + * + * ## Window events + * + * Events can be listened to using `appWindow.listen`: + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * appWindow.listen("my-window-event", ({ event, payload }) => { }); + * ``` + * + * @module + */ + +import { invoke } from "@tauri-apps/api/tauri"; +import type { + Event, + EventName, + EventCallback, + UnlistenFn, +} from "@tauri-apps/api/event"; +import { TauriEvent } from "@tauri-apps/api/event"; +// TODO: use from @tauri-apps/api v2 +import { emit, listen, once } from "./event"; + +type Theme = "light" | "dark"; +type TitleBarStyle = "visible" | "transparent" | "overlay"; + +/** + * Allows you to retrieve information about a given monitor. + * + * @since 1.0.0 + */ +interface Monitor { + /** Human-readable name of the monitor */ + name: string | null; + /** The monitor's resolution. */ + size: PhysicalSize; + /** the Top-left corner position of the monitor relative to the larger full screen area. */ + position: PhysicalPosition; + /** The scale factor that can be used to map physical pixels to logical pixels. */ + scaleFactor: number; +} + +/** + * The payload for the `scaleChange` event. + * + * @since 1.0.2 + */ +interface ScaleFactorChanged { + /** The new window scale factor. */ + scaleFactor: number; + /** The new window size */ + size: PhysicalSize; +} + +/** The file drop event types. */ +type FileDropEvent = + | { type: "hover"; paths: string[] } + | { type: "drop"; paths: string[] } + | { type: "cancel" }; + +/** + * A size represented in logical pixels. + * + * @since 1.0.0 + */ +class LogicalSize { + type = "Logical"; + width: number; + height: number; + + constructor(width: number, height: number) { + this.width = width; + this.height = height; + } +} + +/** + * A size represented in physical pixels. + * + * @since 1.0.0 + */ +class PhysicalSize { + type = "Physical"; + width: number; + height: number; + + constructor(width: number, height: number) { + this.width = width; + this.height = height; + } + + /** + * Converts the physical size to a logical one. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const factor = await appWindow.scaleFactor(); + * const size = await appWindow.innerSize(); + * const logical = size.toLogical(factor); + * ``` + * */ + toLogical(scaleFactor: number): LogicalSize { + return new LogicalSize(this.width / scaleFactor, this.height / scaleFactor); + } +} + +/** + * A position represented in logical pixels. + * + * @since 1.0.0 + */ +class LogicalPosition { + type = "Logical"; + x: number; + y: number; + + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } +} + +/** + * A position represented in physical pixels. + * + * @since 1.0.0 + */ +class PhysicalPosition { + type = "Physical"; + x: number; + y: number; + + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } + + /** + * Converts the physical position to a logical one. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const factor = await appWindow.scaleFactor(); + * const position = await appWindow.innerPosition(); + * const logical = position.toLogical(factor); + * ``` + * */ + toLogical(scaleFactor: number): LogicalPosition { + return new LogicalPosition(this.x / scaleFactor, this.y / scaleFactor); + } +} + +/** @ignore */ +interface WindowDef { + label: string; +} + +/** @ignore */ +declare global { + interface Window { + __TAURI_METADATA__: { + __windows: WindowDef[]; + __currentWindow: WindowDef; + }; + } +} + +/** + * Attention type to request on a window. + * + * @since 1.0.0 + */ +enum UserAttentionType { + /** + * #### Platform-specific + * - **macOS:** Bounces the dock icon until the application is in focus. + * - **Windows:** Flashes both the window and the taskbar button until the application is in focus. + */ + Critical = 1, + /** + * #### Platform-specific + * - **macOS:** Bounces the dock icon once. + * - **Windows:** Flashes the taskbar button until the application is in focus. + */ + Informational, +} + +export type CursorIcon = + | "default" + | "crosshair" + | "hand" + | "arrow" + | "move" + | "text" + | "wait" + | "help" + | "progress" + // something cannot be done + | "notAllowed" + | "contextMenu" + | "cell" + | "verticalText" + | "alias" + | "copy" + | "noDrop" + // something can be grabbed + | "grab" + /// something is grabbed + | "grabbing" + | "allScroll" + | "zoomIn" + | "zoomOut" + // edge is to be moved + | "eResize" + | "nResize" + | "neResize" + | "nwResize" + | "sResize" + | "seResize" + | "swResize" + | "wResize" + | "ewResize" + | "nsResize" + | "neswResize" + | "nwseResize" + | "colResize" + | "rowResize"; + +/** + * Get an instance of `WebviewWindow` for the current webview window. + * + * @since 1.0.0 + */ +function getCurrent(): WebviewWindow { + return new WebviewWindow(window.__TAURI_METADATA__.__currentWindow.label, { + // @ts-expect-error `skip` is not defined in the public API but it is handled by the constructor + skip: true, + }); +} + +/** + * Gets a list of instances of `WebviewWindow` for all available webview windows. + * + * @since 1.0.0 + */ +function getAll(): WebviewWindow[] { + return window.__TAURI_METADATA__.__windows.map( + (w) => + new WebviewWindow(w.label, { + // @ts-expect-error `skip` is not defined in the public API but it is handled by the constructor + skip: true, + }) + ); +} + +/** @ignore */ +// events that are emitted right here instead of by the created webview +const localTauriEvents = ["tauri://created", "tauri://error"]; +/** @ignore */ +export type WindowLabel = string; +/** + * A webview window handle allows emitting and listening to events from the backend that are tied to the window. + * + * @ignore + * @since 1.0.0 + */ +class WebviewWindowHandle { + /** The window label. It is a unique identifier for the window, can be used to reference it later. */ + label: WindowLabel; + /** Local event listeners. */ + listeners: Record>>; + + constructor(label: WindowLabel) { + this.label = label; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + this.listeners = Object.create(null); + } + + /** + * Listen to an event emitted by the backend that is tied to the webview window. + * + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const unlisten = await appWindow.listen('state-changed', (event) => { + * console.log(`Got error: ${payload}`); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`. + * @param handler Event handler. + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + */ + async listen( + event: EventName, + handler: EventCallback + ): Promise { + if (this._handleTauriEvent(event, handler)) { + return Promise.resolve(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, security/detect-object-injection + const listeners = this.listeners[event]; + listeners.splice(listeners.indexOf(handler), 1); + }); + } + return listen(event, this.label, handler); + } + + /** + * Listen to an one-off event emitted by the backend that is tied to the webview window. + * + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const unlisten = await appWindow.once('initialized', (event) => { + * console.log(`Window initialized!`); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`. + * @param handler Event handler. + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + */ + async once(event: string, handler: EventCallback): Promise { + if (this._handleTauriEvent(event, handler)) { + return Promise.resolve(() => { + // eslint-disable-next-line security/detect-object-injection + const listeners = this.listeners[event]; + listeners.splice(listeners.indexOf(handler), 1); + }); + } + return once(event, this.label, handler); + } + + /** + * Emits an event to the backend, tied to the webview window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.emit('window-loaded', { loggedIn: true, token: 'authToken' }); + * ``` + * + * @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`. + * @param payload Event payload. + */ + async emit(event: string, payload?: unknown): Promise { + if (localTauriEvents.includes(event)) { + // eslint-disable-next-line + for (const handler of this.listeners[event] || []) { + handler({ event, id: -1, windowLabel: this.label, payload }); + } + return Promise.resolve(); + } + return emit(event, this.label, payload); + } + + /** @ignore */ + _handleTauriEvent(event: string, handler: EventCallback): boolean { + if (localTauriEvents.includes(event)) { + if (!(event in this.listeners)) { + // eslint-disable-next-line + this.listeners[event] = [handler]; + } else { + // eslint-disable-next-line + this.listeners[event].push(handler); + } + return true; + } + return false; + } +} + +/** + * Manage the current window object. + * + * @ignore + * @since 1.0.0 + */ +class WindowManager extends WebviewWindowHandle { + // Getters + /** + * The scale factor that can be used to map physical pixels to logical pixels. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const factor = await appWindow.scaleFactor(); + * ``` + * + * @returns The window's monitor scale factor. + * */ + async scaleFactor(): Promise { + return invoke("plugin:window|scale_factor", { + label: this.label, + }); + } + + /** + * The position of the top-left hand corner of the window's client area relative to the top-left hand corner of the desktop. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const position = await appWindow.innerPosition(); + * ``` + * + * @returns The window's inner position. + * */ + async innerPosition(): Promise { + return invoke<{ x: number; y: number }>("plugin:window|inner_position", { + label: this.label, + }).then(({ x, y }) => new PhysicalPosition(x, y)); + } + + /** + * The position of the top-left hand corner of the window relative to the top-left hand corner of the desktop. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const position = await appWindow.outerPosition(); + * ``` + * + * @returns The window's outer position. + * */ + async outerPosition(): Promise { + return invoke<{ x: number; y: number }>("plugin:window|outer_position", { + label: this.label, + }).then(({ x, y }) => new PhysicalPosition(x, y)); + } + + /** + * The physical size of the window's client area. + * The client area is the content of the window, excluding the title bar and borders. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const size = await appWindow.innerSize(); + * ``` + * + * @returns The window's inner size. + */ + async innerSize(): Promise { + return invoke<{ width: number; height: number }>( + "plugin:window|inner_size", + { + label: this.label, + } + ).then(({ width, height }) => new PhysicalSize(width, height)); + } + + /** + * The physical size of the entire window. + * These dimensions include the title bar and borders. If you don't want that (and you usually don't), use inner_size instead. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const size = await appWindow.outerSize(); + * ``` + * + * @returns The window's outer size. + */ + async outerSize(): Promise { + return invoke<{ width: number; height: number }>( + "plugin:window|outer_size", + { + label: this.label, + } + ).then(({ width, height }) => new PhysicalSize(width, height)); + } + + /** + * Gets the window's current fullscreen state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const fullscreen = await appWindow.isFullscreen(); + * ``` + * + * @returns Whether the window is in fullscreen mode or not. + * */ + async isFullscreen(): Promise { + return invoke("plugin:window|is_fullscreen", { + label: this.label, + }); + } + + /** + * Gets the window's current minimized state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const minimized = await appWindow.isMinimized(); + * ``` + * + * @since 1.3.0 + * */ + async isMinimized(): Promise { + return invoke("plugin:window|is_minimized", { + label: this.label, + }); + } + + /** + * Gets the window's current maximized state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const maximized = await appWindow.isMaximized(); + * ``` + * + * @returns Whether the window is maximized or not. + * */ + async isMaximized(): Promise { + return invoke("plugin:window|is_maximized", { + label: this.label, + }); + } + + /** + * Gets the window's current decorated state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const decorated = await appWindow.isDecorated(); + * ``` + * + * @returns Whether the window is decorated or not. + * */ + async isDecorated(): Promise { + return invoke("plugin:window|is_decorated", { + label: this.label, + }); + } + + /** + * Gets the window's current resizable state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const resizable = await appWindow.isResizable(); + * ``` + * + * @returns Whether the window is resizable or not. + * */ + async isResizable(): Promise { + return invoke("plugin:window|is_resizable", { + label: this.label, + }); + } + + /** + * Gets the window's current visible state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const visible = await appWindow.isVisible(); + * ``` + * + * @returns Whether the window is visible or not. + * */ + async isVisible(): Promise { + return invoke("plugin:window|is_visible", { + label: this.label, + }); + } + + /** + * Gets the window's current title. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const title = await appWindow.title(); + * ``` + * + * @since 1.3.0 + * */ + async title(): Promise { + return invoke("plugin:window|title", { + label: this.label, + }); + } + + /** + * Gets the window's current theme. + * + * #### Platform-specific + * + * - **macOS:** Theme was introduced on macOS 10.14. Returns `light` on macOS 10.13 and below. + * + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * const theme = await appWindow.theme(); + * ``` + * + * @returns The window theme. + * */ + async theme(): Promise { + return invoke("plugin:window|theme", { + label: this.label, + }); + } + + // Setters + + /** + * Centers the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.center(); + * ``` + * + * @param resizable + * @returns A promise indicating the success or failure of the operation. + */ + async center(): Promise { + return invoke("plugin:window|center", { + label: this.label, + }); + } + + /** + * Requests user attention to the window, this has no effect if the application + * is already focused. How requesting for user attention manifests is platform dependent, + * see `UserAttentionType` for details. + * + * Providing `null` will unset the request for user attention. Unsetting the request for + * user attention might not be done automatically by the WM when the window receives input. + * + * #### Platform-specific + * + * - **macOS:** `null` has no effect. + * - **Linux:** Urgency levels have the same effect. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.requestUserAttention(); + * ``` + * + * @param resizable + * @returns A promise indicating the success or failure of the operation. + */ + async requestUserAttention( + requestType: UserAttentionType | null + ): Promise { + let requestType_ = null; + if (requestType) { + if (requestType === UserAttentionType.Critical) { + requestType_ = { type: "Critical" }; + } else { + requestType_ = { type: "Informational" }; + } + } + + return invoke("plugin:window|request_user_attention", { + label: this.label, + value: requestType_, + }); + } + + /** + * Updates the window resizable flag. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setResizable(false); + * ``` + * + * @param resizable + * @returns A promise indicating the success or failure of the operation. + */ + async setResizable(resizable: boolean): Promise { + return invoke("plugin:window|set_resizable", { + label: this.label, + value: resizable, + }); + } + + /** + * Sets the window title. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setTitle('Tauri'); + * ``` + * + * @param title The new title + * @returns A promise indicating the success or failure of the operation. + */ + async setTitle(title: string): Promise { + return invoke("plugin:window|set_title", { + label: this.label, + value: title, + }); + } + + /** + * Maximizes the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.maximize(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async maximize(): Promise { + return invoke("plugin:window|maximize", { + label: this.label, + }); + } + + /** + * Unmaximizes the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.unmaximize(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async unmaximize(): Promise { + return invoke("plugin:window|unmaximize", { + label: this.label, + }); + } + + /** + * Toggles the window maximized state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.toggleMaximize(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async toggleMaximize(): Promise { + return invoke("plugin:window|toggle_maximize", { + label: this.label, + }); + } + + /** + * Minimizes the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.minimize(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async minimize(): Promise { + return invoke("plugin:window|minimize", { + label: this.label, + }); + } + + /** + * Unminimizes the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.unminimize(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async unminimize(): Promise { + return invoke("plugin:window|unminimize", { + label: this.label, + }); + } + + /** + * Sets the window visibility to true. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.show(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async show(): Promise { + return invoke("plugin:window|show", { + label: this.label, + }); + } + + /** + * Sets the window visibility to false. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.hide(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async hide(): Promise { + return invoke("plugin:window|hide", { + label: this.label, + }); + } + + /** + * Closes the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.close(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async close(): Promise { + return invoke("plugin:window|close", { + label: this.label, + }); + } + + /** + * Whether the window should have borders and bars. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setDecorations(false); + * ``` + * + * @param decorations Whether the window should have borders and bars. + * @returns A promise indicating the success or failure of the operation. + */ + async setDecorations(decorations: boolean): Promise { + return invoke("plugin:window|set_decorations", { + label: this.label, + value: decorations, + }); + } + + /** + * Whether or not the window should have shadow. + * + * #### Platform-specific + * + * - **Windows:** + * - `false` has no effect on decorated window, shadows are always ON. + * - `true` will make ndecorated window have a 1px white border, + * and on Windows 11, it will have a rounded corners. + * - **Linux:** Unsupported. + * + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setShadow(false); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0 + */ + async setShadow(enable: boolean): Promise { + return invoke("plugin:window|set_shadow", { + label: this.label, + value: enable, + }); + } + + /** + * Whether the window should always be on top of other windows. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setAlwaysOnTop(true); + * ``` + * + * @param alwaysOnTop Whether the window should always be on top of other windows or not. + * @returns A promise indicating the success or failure of the operation. + */ + async setAlwaysOnTop(alwaysOnTop: boolean): Promise { + return invoke("plugin:window|set_always_on_top", { + label: this.label, + value: alwaysOnTop, + }); + } + + /** + * Prevents the window contents from being captured by other apps. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setContentProtected(true); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + * + * @since 1.2.0 + */ + async setContentProtected(protected_: boolean): Promise { + return invoke("plugin:window|set_content_protected", { + label: this.label, + value: protected_, + }); + } + + /** + * Resizes the window with a new inner size. + * @example + * ```typescript + * import { appWindow, LogicalSize } from 'tauri-plugin-window-api'; + * await appWindow.setSize(new LogicalSize(600, 500)); + * ``` + * + * @param size The logical or physical inner size. + * @returns A promise indicating the success or failure of the operation. + */ + async setSize(size: LogicalSize | PhysicalSize): Promise { + if (!size || (size.type !== "Logical" && size.type !== "Physical")) { + throw new Error( + "the `size` argument must be either a LogicalSize or a PhysicalSize instance" + ); + } + + return invoke("plugin:window|set_size", { + label: this.label, + value: { + type: size.type, + data: { + width: size.width, + height: size.height, + }, + }, + }); + } + + /** + * Sets the window minimum inner size. If the `size` argument is not provided, the constraint is unset. + * @example + * ```typescript + * import { appWindow, PhysicalSize } from 'tauri-plugin-window-api'; + * await appWindow.setMinSize(new PhysicalSize(600, 500)); + * ``` + * + * @param size The logical or physical inner size, or `null` to unset the constraint. + * @returns A promise indicating the success or failure of the operation. + */ + async setMinSize( + size: LogicalSize | PhysicalSize | null | undefined + ): Promise { + if (size && size.type !== "Logical" && size.type !== "Physical") { + throw new Error( + "the `size` argument must be either a LogicalSize or a PhysicalSize instance" + ); + } + + return invoke("plugin:window|set_min_size", { + label: this.label, + value: size + ? { + type: size.type, + data: { + width: size.width, + height: size.height, + }, + } + : null, + }); + } + + /** + * Sets the window maximum inner size. If the `size` argument is undefined, the constraint is unset. + * @example + * ```typescript + * import { appWindow, LogicalSize } from 'tauri-plugin-window-api'; + * await appWindow.setMaxSize(new LogicalSize(600, 500)); + * ``` + * + * @param size The logical or physical inner size, or `null` to unset the constraint. + * @returns A promise indicating the success or failure of the operation. + */ + async setMaxSize( + size: LogicalSize | PhysicalSize | null | undefined + ): Promise { + if (size && size.type !== "Logical" && size.type !== "Physical") { + throw new Error( + "the `size` argument must be either a LogicalSize or a PhysicalSize instance" + ); + } + + return invoke("plugin:window|set_max_size", { + label: this.label, + value: size + ? { + type: size.type, + data: { + width: size.width, + height: size.height, + }, + } + : null, + }); + } + + /** + * Sets the window outer position. + * @example + * ```typescript + * import { appWindow, LogicalPosition } from 'tauri-plugin-window-api'; + * await appWindow.setPosition(new LogicalPosition(600, 500)); + * ``` + * + * @param position The new position, in logical or physical pixels. + * @returns A promise indicating the success or failure of the operation. + */ + async setPosition( + position: LogicalPosition | PhysicalPosition + ): Promise { + if ( + !position || + (position.type !== "Logical" && position.type !== "Physical") + ) { + throw new Error( + "the `position` argument must be either a LogicalPosition or a PhysicalPosition instance" + ); + } + + return invoke("plugin:window|set_position", { + label: this.label, + value: { + type: position.type, + data: { + x: position.x, + y: position.y, + }, + }, + }); + } + + /** + * Sets the window fullscreen state. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setFullscreen(true); + * ``` + * + * @param fullscreen Whether the window should go to fullscreen or not. + * @returns A promise indicating the success or failure of the operation. + */ + async setFullscreen(fullscreen: boolean): Promise { + return invoke("plugin:window|set_fullscreen", { + label: this.label, + value: fullscreen, + }); + } + + /** + * Bring the window to front and focus. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setFocus(); + * ``` + * + * @returns A promise indicating the success or failure of the operation. + */ + async setFocus(): Promise { + return invoke("plugin:window|set_focus", { + label: this.label, + }); + } + + /** + * Sets the window icon. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setIcon('/tauri/awesome.png'); + * ``` + * + * Note that you need the `icon-ico` or `icon-png` Cargo features to use this API. + * To enable it, change your Cargo.toml file: + * ```toml + * [dependencies] + * tauri = { version = "...", features = ["...", "icon-png"] } + * ``` + * + * @param icon Icon bytes or path to the icon file. + * @returns A promise indicating the success or failure of the operation. + */ + async setIcon(icon: string | Uint8Array): Promise { + return invoke("plugin:window|set_icon", { + label: this.label, + value: typeof icon === "string" ? icon : Array.from(icon), + }); + } + + /** + * Whether the window icon should be hidden from the taskbar or not. + * + * #### Platform-specific + * + * - **macOS:** Unsupported. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setSkipTaskbar(true); + * ``` + * + * @param skip true to hide window icon, false to show it. + * @returns A promise indicating the success or failure of the operation. + */ + async setSkipTaskbar(skip: boolean): Promise { + return invoke("plugin:window|set_skip_taskbar", { + label: this.label, + value: skip, + }); + } + + /** + * Grabs the cursor, preventing it from leaving the window. + * + * There's no guarantee that the cursor will be hidden. You should + * hide it by yourself if you want so. + * + * #### Platform-specific + * + * - **Linux:** Unsupported. + * - **macOS:** This locks the cursor in a fixed location, which looks visually awkward. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setCursorGrab(true); + * ``` + * + * @param grab `true` to grab the cursor icon, `false` to release it. + * @returns A promise indicating the success or failure of the operation. + */ + async setCursorGrab(grab: boolean): Promise { + return invoke("plugin:window|set_cursor_grab", { + label: this.label, + value: grab, + }); + } + + /** + * Modifies the cursor's visibility. + * + * #### Platform-specific + * + * - **Windows:** The cursor is only hidden within the confines of the window. + * - **macOS:** The cursor is hidden as long as the window has input focus, even if the cursor is + * outside of the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setCursorVisible(false); + * ``` + * + * @param visible If `false`, this will hide the cursor. If `true`, this will show the cursor. + * @returns A promise indicating the success or failure of the operation. + */ + async setCursorVisible(visible: boolean): Promise { + return invoke("plugin:window|set_cursor_visible", { + label: this.label, + value: visible, + }); + } + + /** + * Modifies the cursor icon of the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setCursorIcon('help'); + * ``` + * + * @param icon The new cursor icon. + * @returns A promise indicating the success or failure of the operation. + */ + async setCursorIcon(icon: CursorIcon): Promise { + return invoke("plugin:window|set_cursor_icon", { + label: this.label, + value: icon, + }); + } + + /** + * Changes the position of the cursor in window coordinates. + * @example + * ```typescript + * import { appWindow, LogicalPosition } from 'tauri-plugin-window-api'; + * await appWindow.setCursorPosition(new LogicalPosition(600, 300)); + * ``` + * + * @param position The new cursor position. + * @returns A promise indicating the success or failure of the operation. + */ + async setCursorPosition( + position: LogicalPosition | PhysicalPosition + ): Promise { + if ( + !position || + (position.type !== "Logical" && position.type !== "Physical") + ) { + throw new Error( + "the `position` argument must be either a LogicalPosition or a PhysicalPosition instance" + ); + } + + return invoke("plugin:window|set_cursor_position", { + label: this.label, + value: { + type: position.type, + data: { + x: position.x, + y: position.y, + }, + }, + }); + } + + /** + * Changes the cursor events behavior. + * + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.setIgnoreCursorEvents(true); + * ``` + * + * @param ignore `true` to ignore the cursor events; `false` to process them as usual. + * @returns A promise indicating the success or failure of the operation. + */ + async setIgnoreCursorEvents(ignore: boolean): Promise { + return invoke("plugin:window|set_ignore_cursor_events", { + label: this.label, + value: ignore, + }); + } + + /** + * Starts dragging the window. + * @example + * ```typescript + * import { appWindow } from 'tauri-plugin-window-api'; + * await appWindow.startDragging(); + * ``` + * + * @return A promise indicating the success or failure of the operation. + */ + async startDragging(): Promise { + return invoke("plugin:window|start_dragging", { + label: this.label, + }); + } + + // Listeners + + /** + * Listen to window resize. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * const unlisten = await appWindow.onResized(({ payload: size }) => { + * console.log('Window resized', size); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + async onResized(handler: EventCallback): Promise { + return this.listen(TauriEvent.WINDOW_RESIZED, (e) => { + e.payload = mapPhysicalSize(e.payload); + handler(e); + }); + } + + /** + * Listen to window move. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * const unlisten = await appWindow.onMoved(({ payload: position }) => { + * console.log('Window moved', position); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + async onMoved(handler: EventCallback): Promise { + return this.listen(TauriEvent.WINDOW_MOVED, (e) => { + e.payload = mapPhysicalPosition(e.payload); + handler(e); + }); + } + + /** + * Listen to window close requested. Emitted when the user requests to closes the window. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * import { confirm } from '@tauri-apps/api/dialog'; + * const unlisten = await appWindow.onCloseRequested(async (event) => { + * const confirmed = await confirm('Are you sure?'); + * if (!confirmed) { + * // user did not confirm closing the window; let's prevent it + * event.preventDefault(); + * } + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + /* eslint-disable @typescript-eslint/promise-function-async */ + async onCloseRequested( + handler: (event: CloseRequestedEvent) => void | Promise + ): Promise { + return this.listen(TauriEvent.WINDOW_CLOSE_REQUESTED, (event) => { + const evt = new CloseRequestedEvent(event); + void Promise.resolve(handler(evt)).then(() => { + if (!evt.isPreventDefault()) { + return this.close(); + } + }); + }); + } + /* eslint-enable */ + + /** + * Listen to window focus change. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * const unlisten = await appWindow.onFocusChanged(({ payload: focused }) => { + * console.log('Focus changed, window is focused? ' + focused); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + async onFocusChanged(handler: EventCallback): Promise { + const unlistenFocus = await this.listen( + TauriEvent.WINDOW_FOCUS, + (event) => { + handler({ ...event, payload: true }); + } + ); + const unlistenBlur = await this.listen( + TauriEvent.WINDOW_BLUR, + (event) => { + handler({ ...event, payload: false }); + } + ); + return () => { + unlistenFocus(); + unlistenBlur(); + }; + } + + /** + * Listen to window scale change. Emitted when the window's scale factor has changed. + * The following user actions can cause DPI changes: + * - Changing the display's resolution. + * - Changing the display's scale factor (e.g. in Control Panel on Windows). + * - Moving the window to a display with a different scale factor. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * const unlisten = await appWindow.onScaleChanged(({ payload }) => { + * console.log('Scale changed', payload.scaleFactor, payload.size); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + async onScaleChanged( + handler: EventCallback + ): Promise { + return this.listen( + TauriEvent.WINDOW_SCALE_FACTOR_CHANGED, + handler + ); + } + + /** + * Listen to the window menu item click. The payload is the item id. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * const unlisten = await appWindow.onMenuClicked(({ payload: menuId }) => { + * console.log('Menu clicked: ' + menuId); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + async onMenuClicked(handler: EventCallback): Promise { + return this.listen(TauriEvent.MENU, handler); + } + + /** + * Listen to a file drop event. + * The listener is triggered when the user hovers the selected files on the window, + * drops the files or cancels the operation. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * const unlisten = await appWindow.onFileDropEvent((event) => { + * if (event.payload.type === 'hover') { + * console.log('User hovering', event.payload.paths); + * } else if (event.payload.type === 'drop') { + * console.log('User dropped', event.payload.paths); + * } else { + * console.log('File drop cancelled'); + * } + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + async onFileDropEvent( + handler: EventCallback + ): Promise { + const unlistenFileDrop = await this.listen( + TauriEvent.WINDOW_FILE_DROP, + (event) => { + handler({ ...event, payload: { type: "drop", paths: event.payload } }); + } + ); + + const unlistenFileHover = await this.listen( + TauriEvent.WINDOW_FILE_DROP_HOVER, + (event) => { + handler({ ...event, payload: { type: "hover", paths: event.payload } }); + } + ); + + const unlistenCancel = await this.listen( + TauriEvent.WINDOW_FILE_DROP_CANCELLED, + (event) => { + handler({ ...event, payload: { type: "cancel" } }); + } + ); + + return () => { + unlistenFileDrop(); + unlistenFileHover(); + unlistenCancel(); + }; + } + + /** + * Listen to the system theme change. + * + * @example + * ```typescript + * import { appWindow } from "tauri-plugin-window-api"; + * const unlisten = await appWindow.onThemeChanged(({ payload: theme }) => { + * console.log('New theme: ' + theme); + * }); + * + * // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted + * unlisten(); + * ``` + * + * @returns A promise resolving to a function to unlisten to the event. + * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 1.0.2 + */ + async onThemeChanged(handler: EventCallback): Promise { + return this.listen(TauriEvent.WINDOW_THEME_CHANGED, handler); + } +} + +/** + * @since 1.0.2 + */ +class CloseRequestedEvent { + /** Event name */ + event: EventName; + /** The label of the window that emitted this event. */ + windowLabel: string; + /** Event identifier used to unlisten */ + id: number; + private _preventDefault = false; + + constructor(event: Event) { + this.event = event.event; + this.windowLabel = event.windowLabel; + this.id = event.id; + } + + preventDefault(): void { + this._preventDefault = true; + } + + isPreventDefault(): boolean { + return this._preventDefault; + } +} + +/** + * Create new webview windows and get a handle to existing ones. + * + * Windows are identified by a *label* a unique identifier that can be used to reference it later. + * It may only contain alphanumeric characters `a-zA-Z` plus the following special characters `-`, `/`, `:` and `_`. + * + * @example + * ```typescript + * // loading embedded asset: + * const webview = new WebviewWindow('theUniqueLabel', { + * url: 'path/to/page.html' + * }); + * // alternatively, load a remote URL: + * const webview = new WebviewWindow('theUniqueLabel', { + * url: 'https://github.com/tauri-apps/tauri' + * }); + * + * webview.once('tauri://created', function () { + * // webview window successfully created + * }); + * webview.once('tauri://error', function (e) { + * // an error happened creating the webview window + * }); + * + * // emit an event to the backend + * await webview.emit("some event", "data"); + * // listen to an event from the backend + * const unlisten = await webview.listen("event name", e => {}); + * unlisten(); + * ``` + * + * @since 1.0.2 + */ +class WebviewWindow extends WindowManager { + /** + * Creates a new WebviewWindow. + * @example + * ```typescript + * import { WebviewWindow } from 'tauri-plugin-window-api'; + * const webview = new WebviewWindow('my-label', { + * url: 'https://github.com/tauri-apps/tauri' + * }); + * webview.once('tauri://created', function () { + * // webview window successfully created + * }); + * webview.once('tauri://error', function (e) { + * // an error happened creating the webview window + * }); + * ``` + * + * * @param label The unique webview window label. Must be alphanumeric: `a-zA-Z-/:_`. + * @returns The WebviewWindow instance to communicate with the webview. + */ + constructor(label: WindowLabel, options: WindowOptions = {}) { + super(label); + // @ts-expect-error `skip` is not a public API so it is not defined in WindowOptions + if (!options?.skip) { + invoke("plugin:window|create", { + options: { + ...options, + label, + }, + }) + .then(async () => this.emit("tauri://created")) + .catch(async (e: string) => this.emit("tauri://error", e)); + } + } + + /** + * Gets the WebviewWindow for the webview associated with the given label. + * @example + * ```typescript + * import { WebviewWindow } from 'tauri-plugin-window-api'; + * const mainWindow = WebviewWindow.getByLabel('main'); + * ``` + * + * @param label The webview window label. + * @returns The WebviewWindow instance to communicate with the webview or null if the webview doesn't exist. + */ + static getByLabel(label: string): WebviewWindow | null { + if (getAll().some((w) => w.label === label)) { + // @ts-expect-error `skip` is not defined in the public API but it is handled by the constructor + return new WebviewWindow(label, { skip: true }); + } + return null; + } +} + +/** The WebviewWindow for the current window. */ +let appWindow: WebviewWindow; +if ("__TAURI_METADATA__" in window) { + appWindow = new WebviewWindow( + window.__TAURI_METADATA__.__currentWindow.label, + { + // @ts-expect-error `skip` is not defined in the public API but it is handled by the constructor + skip: true, + } + ); +} else { + console.warn( + `Could not find "window.__TAURI_METADATA__". The "appWindow" value will reference the "main" window label.\nNote that this is not an issue if running this frontend on a browser instead of a Tauri window.` + ); + appWindow = new WebviewWindow("main", { + // @ts-expect-error `skip` is not defined in the public API but it is handled by the constructor + skip: true, + }); +} + +/** + * Configuration for the window to create. + * + * @since 1.0.0 + */ +interface WindowOptions { + /** + * Remote URL or local file path to open. + * + * - URL such as `https://github.com/tauri-apps` is opened directly on a Tauri window. + * - data: URL such as `data:text/html,...` is only supported with the `window-data-url` Cargo feature for the `tauri` dependency. + * - local file path or route such as `/path/to/page.html` or `/users` is appended to the application URL (the devServer URL on development, or `tauri://localhost/` and `https://tauri.localhost/` on production). + */ + url?: string; + /** Show window in the center of the screen.. */ + center?: boolean; + /** The initial vertical position. Only applies if `y` is also set. */ + x?: number; + /** The initial horizontal position. Only applies if `x` is also set. */ + y?: number; + /** The initial width. */ + width?: number; + /** The initial height. */ + height?: number; + /** The minimum width. Only applies if `minHeight` is also set. */ + minWidth?: number; + /** The minimum height. Only applies if `minWidth` is also set. */ + minHeight?: number; + /** The maximum width. Only applies if `maxHeight` is also set. */ + maxWidth?: number; + /** The maximum height. Only applies if `maxWidth` is also set. */ + maxHeight?: number; + /** Whether the window is resizable or not. */ + resizable?: boolean; + /** Window title. */ + title?: string; + /** Whether the window is in fullscreen mode or not. */ + fullscreen?: boolean; + /** Whether the window will be initially focused or not. */ + focus?: boolean; + /** + * Whether the window is transparent or not. + * Note that on `macOS` this requires the `macos-private-api` feature flag, enabled under `tauri.conf.json > tauri > macOSPrivateApi`. + * WARNING: Using private APIs on `macOS` prevents your application from being accepted to the `App Store`. + */ + transparent?: boolean; + /** Whether the window should be maximized upon creation or not. */ + maximized?: boolean; + /** Whether the window should be immediately visible upon creation or not. */ + visible?: boolean; + /** Whether the window should have borders and bars or not. */ + decorations?: boolean; + /** Whether the window should always be on top of other windows or not. */ + alwaysOnTop?: boolean; + /** Prevents the window contents from being captured by other apps. */ + contentProtected?: boolean; + /** Whether or not the window icon should be added to the taskbar. */ + skipTaskbar?: boolean; + /** + * Whether or not the window has shadow. + * + * #### Platform-specific + * + * - **Windows:** + * - `false` has no effect on decorated window, shadows are always ON. + * - `true` will make ndecorated window have a 1px white border, + * and on Windows 11, it will have a rounded corners. + * - **Linux:** Unsupported. + * + * @since 2.0 + */ + shadow?: boolean; + /** + * Whether the file drop is enabled or not on the webview. By default it is enabled. + * + * Disabling it is required to use drag and drop on the frontend on Windows. + */ + fileDropEnabled?: boolean; + /** + * The initial window theme. Defaults to the system theme. + * + * Only implemented on Windows and macOS 10.14+. + */ + theme?: Theme; + /** + * The style of the macOS title bar. + */ + titleBarStyle?: TitleBarStyle; + /** + * If `true`, sets the window title to be hidden on macOS. + */ + hiddenTitle?: boolean; + /** + * Whether clicking an inactive window also clicks through to the webview on macOS. + */ + acceptFirstMouse?: boolean; + /** + * Defines the window [tabbing identifier](https://developer.apple.com/documentation/appkit/nswindow/1644704-tabbingidentifier) on macOS. + * + * Windows with the same tabbing identifier will be grouped together. + * If the tabbing identifier is not set, automatic tabbing will be disabled. + */ + tabbingIdentifier?: string; + /** + * The user agent for the webview. + */ + userAgent?: string; +} + +function mapMonitor(m: Monitor | null): Monitor | null { + return m === null + ? null + : { + name: m.name, + scaleFactor: m.scaleFactor, + position: mapPhysicalPosition(m.position), + size: mapPhysicalSize(m.size), + }; +} + +function mapPhysicalPosition(m: PhysicalPosition): PhysicalPosition { + return new PhysicalPosition(m.x, m.y); +} + +function mapPhysicalSize(m: PhysicalSize): PhysicalSize { + return new PhysicalSize(m.width, m.height); +} + +/** + * Returns the monitor on which the window currently resides. + * Returns `null` if current monitor can't be detected. + * @example + * ```typescript + * import { currentMonitor } from 'tauri-plugin-window-api'; + * const monitor = currentMonitor(); + * ``` + * + * @since 1.0.0 + */ +async function currentMonitor(): Promise { + return invoke("plugin:window|current_monitor").then( + mapMonitor + ); +} + +/** + * Returns the primary monitor of the system. + * Returns `null` if it can't identify any monitor as a primary one. + * @example + * ```typescript + * import { primaryMonitor } from 'tauri-plugin-window-api'; + * const monitor = primaryMonitor(); + * ``` + * + * @since 1.0.0 + */ +async function primaryMonitor(): Promise { + return invoke("plugin:window|primary_monitor").then( + mapMonitor + ); +} + +/** + * Returns the list of all the monitors available on the system. + * @example + * ```typescript + * import { availableMonitors } from 'tauri-plugin-window-api'; + * const monitors = availableMonitors(); + * ``` + * + * @since 1.0.0 + */ +async function availableMonitors(): Promise { + return invoke("plugin:window|available_monitors").then( + (ms) => ms.map(mapMonitor) as Monitor[] + ); +} + +export { + WebviewWindow, + WebviewWindowHandle, + WindowManager, + CloseRequestedEvent, + getCurrent, + getAll, + appWindow, + LogicalSize, + PhysicalSize, + LogicalPosition, + PhysicalPosition, + UserAttentionType, + currentMonitor, + primaryMonitor, + availableMonitors, +}; + +export type { + Theme, + TitleBarStyle, + Monitor, + ScaleFactorChanged, + FileDropEvent, + WindowOptions, +}; diff --git a/plugins/window/package.json b/plugins/window/package.json new file mode 100644 index 00000000..6e564693 --- /dev/null +++ b/plugins/window/package.json @@ -0,0 +1,32 @@ +{ + "name": "tauri-plugin-window-api", + "version": "0.0.0", + "license": "MIT or APACHE-2.0", + "authors": [ + "Tauri Programme within The Commons Conservancy" + ], + "type": "module", + "browser": "dist-js/index.min.js", + "module": "dist-js/index.mjs", + "types": "dist-js/index.d.ts", + "exports": { + "import": "./dist-js/index.mjs", + "types": "./dist-js/index.d.ts", + "browser": "./dist-js/index.min.js" + }, + "scripts": { + "build": "rollup -c" + }, + "files": [ + "dist-js", + "!dist-js/**/*.map", + "README.md", + "LICENSE" + ], + "devDependencies": { + "tslib": "^2.5.0" + }, + "dependencies": { + "@tauri-apps/api": "^1.2.0" + } +} diff --git a/plugins/window/rollup.config.mjs b/plugins/window/rollup.config.mjs new file mode 100644 index 00000000..6555e98b --- /dev/null +++ b/plugins/window/rollup.config.mjs @@ -0,0 +1,11 @@ +import { readFileSync } from "fs"; + +import { createConfig } from "../../shared/rollup.config.mjs"; + +export default createConfig({ + input: "guest-js/index.ts", + pkg: JSON.parse( + readFileSync(new URL("./package.json", import.meta.url), "utf8") + ), + external: [/^@tauri-apps\/api/], +}); diff --git a/plugins/window/src/commands.rs b/plugins/window/src/commands.rs new file mode 100644 index 00000000..453c1f98 --- /dev/null +++ b/plugins/window/src/commands.rs @@ -0,0 +1,197 @@ +use serde::{Deserialize, Serialize, Serializer}; +use tauri::{ + utils::config::WindowConfig, AppHandle, CursorIcon, Icon, Manager, Monitor, PhysicalPosition, + PhysicalSize, Position, Runtime, Size, Theme, UserAttentionType, Window, +}; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("window not found")] + WindowNotFound, + #[error(transparent)] + Tauri(#[from] tauri::Error), +} + +impl Serialize for Error { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} + +type Result = std::result::Result; + +#[derive(Deserialize)] +#[serde(untagged)] +pub enum IconDto { + #[cfg(any(feature = "icon-png", feature = "icon-ico"))] + File(std::path::PathBuf), + #[cfg(any(feature = "icon-png", feature = "icon-ico"))] + Raw(Vec), + Rgba { + rgba: Vec, + width: u32, + height: u32, + }, +} + +impl From for Icon { + fn from(icon: IconDto) -> Self { + match icon { + #[cfg(any(feature = "icon-png", feature = "icon-ico"))] + IconDto::File(path) => Self::File(path), + #[cfg(any(feature = "icon-png", feature = "icon-ico"))] + IconDto::Raw(raw) => Self::Raw(raw), + IconDto::Rgba { + rgba, + width, + height, + } => Self::Rgba { + rgba, + width, + height, + }, + } + } +} + +#[tauri::command] +pub fn create(app: AppHandle, options: WindowConfig) -> Result<()> { + tauri::window::WindowBuilder::from_config(&app, options).build()?; + Ok(()) +} + +fn get_window(window: Window, label: Option) -> Result> { + match label { + Some(l) if !l.is_empty() => window.get_window(&l).ok_or(Error::WindowNotFound), + _ => Ok(window), + } +} + +macro_rules! getter { + ($cmd: ident, $ret: ty) => { + #[tauri::command] + pub fn $cmd(window: Window, label: Option) -> Result<$ret> { + get_window(window, label)?.$cmd().map_err(Into::into) + } + }; +} + +macro_rules! setter { + ($cmd: ident) => { + #[tauri::command] + pub fn $cmd(window: Window, label: Option) -> Result<()> { + get_window(window, label)?.$cmd().map_err(Into::into) + } + }; + + ($cmd: ident, $input: ty) => { + #[tauri::command] + pub fn $cmd( + window: Window, + label: Option, + value: $input, + ) -> Result<()> { + get_window(window, label)?.$cmd(value).map_err(Into::into) + } + }; +} + +getter!(scale_factor, f64); +getter!(inner_position, PhysicalPosition); +getter!(outer_position, PhysicalPosition); +getter!(inner_size, PhysicalSize); +getter!(outer_size, PhysicalSize); +getter!(is_fullscreen, bool); +getter!(is_minimized, bool); +getter!(is_maximized, bool); +getter!(is_decorated, bool); +getter!(is_resizable, bool); +getter!(is_visible, bool); +getter!(title, String); +getter!(current_monitor, Option); +getter!(primary_monitor, Option); +getter!(available_monitors, Vec); +getter!(theme, Theme); + +setter!(center); +setter!(request_user_attention, Option); +setter!(set_resizable, bool); +setter!(set_title, &str); +setter!(maximize); +setter!(unmaximize); +setter!(minimize); +setter!(unminimize); +setter!(show); +setter!(hide); +setter!(close); +setter!(set_decorations, bool); +setter!(set_shadow, bool); +setter!(set_always_on_top, bool); +setter!(set_content_protected, bool); +setter!(set_size, Size); +setter!(set_min_size, Option); +setter!(set_max_size, Option); +setter!(set_position, Position); +setter!(set_fullscreen, bool); +setter!(set_focus); +setter!(set_skip_taskbar, bool); +setter!(set_cursor_grab, bool); +setter!(set_cursor_visible, bool); +setter!(set_cursor_icon, CursorIcon); +setter!(set_cursor_position, Position); +setter!(set_ignore_cursor_events, bool); +setter!(start_dragging); +setter!(print); + +#[tauri::command] +pub fn set_icon( + window: Window, + label: Option, + value: IconDto, +) -> Result<()> { + get_window(window, label)? + .set_icon(value.into()) + .map_err(Into::into) +} + +#[tauri::command] +pub fn toggle_maximize(window: Window, label: Option) -> Result<()> { + let window = get_window(window, label)?; + match window.is_maximized()? { + true => window.unmaximize()?, + false => window.maximize()?, + }; + Ok(()) +} + +#[tauri::command] +pub fn internal_toggle_maximize( + window: Window, + label: Option, +) -> Result<()> { + let window = get_window(window, label)?; + if window.is_resizable()? { + match window.is_maximized()? { + true => window.unmaximize()?, + false => window.maximize()?, + }; + } + Ok(()) +} + +#[tauri::command] +pub fn internal_toggle_devtools( + window: Window, + label: Option, +) -> Result<()> { + let window = get_window(window, label)?; + if window.is_devtools_open() { + window.close_devtools(); + } else { + window.open_devtools(); + } + Ok(()) +} diff --git a/plugins/window/src/lib.rs b/plugins/window/src/lib.rs new file mode 100644 index 00000000..513a5d32 --- /dev/null +++ b/plugins/window/src/lib.rs @@ -0,0 +1,65 @@ +use tauri::{ + plugin::{Builder, TauriPlugin}, + Runtime, +}; + +mod commands; + +pub fn init() -> TauriPlugin { + Builder::new("window") + .invoke_handler(tauri::generate_handler![ + commands::create, + // getters + commands::scale_factor, + commands::inner_position, + commands::outer_position, + commands::inner_size, + commands::outer_size, + commands::is_fullscreen, + commands::is_minimized, + commands::is_maximized, + commands::is_decorated, + commands::is_resizable, + commands::is_visible, + commands::title, + commands::current_monitor, + commands::primary_monitor, + commands::available_monitors, + commands::theme, + // setters + commands::center, + commands::request_user_attention, + commands::set_resizable, + commands::set_title, + commands::maximize, + commands::unmaximize, + commands::minimize, + commands::unminimize, + commands::show, + commands::hide, + commands::close, + commands::set_decorations, + commands::set_shadow, + commands::set_always_on_top, + commands::set_content_protected, + commands::set_size, + commands::set_min_size, + commands::set_max_size, + commands::set_position, + commands::set_fullscreen, + commands::set_focus, + commands::set_skip_taskbar, + commands::set_cursor_grab, + commands::set_cursor_visible, + commands::set_cursor_icon, + commands::set_cursor_position, + commands::set_ignore_cursor_events, + commands::start_dragging, + commands::print, + commands::set_icon, + commands::toggle_maximize, + commands::internal_toggle_maximize, + commands::internal_toggle_devtools, + ]) + .build() +} diff --git a/plugins/window/tsconfig.json b/plugins/window/tsconfig.json new file mode 100644 index 00000000..5098169a --- /dev/null +++ b/plugins/window/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["guest-js/*.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ac17f00..c43adf01 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,6 +97,9 @@ importers: tauri-plugin-updater-api: specifier: 0.0.0 version: link:../../plugins/updater + tauri-plugin-window-api: + specifier: 0.0.0 + version: link:../../plugins/window devDependencies: '@iconify-json/codicon': specifier: ^1.1.10 @@ -195,6 +198,9 @@ importers: '@tauri-apps/api': specifier: ^1.2.0 version: 1.2.0 + tauri-plugin-window-api: + specifier: 0.0.0 + version: link:../window devDependencies: tslib: specifier: ^2.5.0 @@ -331,6 +337,9 @@ importers: '@tauri-apps/api': specifier: ^1.2.0 version: 1.2.0 + tauri-plugin-window-api: + specifier: 0.0.0 + version: link:../window devDependencies: tslib: specifier: ^2.5.0 @@ -377,11 +386,24 @@ importers: specifier: ^4.2.1 version: 4.3.3 + plugins/window: + dependencies: + '@tauri-apps/api': + specifier: ^1.2.0 + version: 1.2.0 + devDependencies: + tslib: + specifier: ^2.5.0 + version: 2.5.0 + plugins/window-state: dependencies: '@tauri-apps/api': specifier: ^1.2.0 version: 1.2.0 + tauri-plugin-window-api: + specifier: 0.0.0 + version: link:../window devDependencies: tslib: specifier: ^2.5.0 From e0e7b4fc71ad9f77a4f961e333671e3c903666a2 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Fri, 12 May 2023 05:30:55 -0700 Subject: [PATCH 10/64] fix(global-shortcut): update to 0.2.1 to fix macos build (#353) --- Cargo.lock | 4 ++-- examples/api/src-tauri/Cargo.lock | 4 ++-- plugins/global-shortcut/Cargo.toml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b1f52a19..7abf65a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1831,9 +1831,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "global-hotkey" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92007db5c632751655a4c0ef122832fd283e6651621d34613b17fd1edfbfd2ed" +checksum = "273daa5db9a79be95b2b04c9955651c301a08b5dc1d7656e692e3801634aa873" dependencies = [ "crossbeam-channel", "keyboard-types", diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index d7722fc9..7eb6a42c 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -1513,9 +1513,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "global-hotkey" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92007db5c632751655a4c0ef122832fd283e6651621d34613b17fd1edfbfd2ed" +checksum = "273daa5db9a79be95b2b04c9955651c301a08b5dc1d7656e692e3801634aa873" dependencies = [ "crossbeam-channel", "keyboard-types", diff --git a/plugins/global-shortcut/Cargo.toml b/plugins/global-shortcut/Cargo.toml index 84269574..19cd3c92 100644 --- a/plugins/global-shortcut/Cargo.toml +++ b/plugins/global-shortcut/Cargo.toml @@ -11,4 +11,4 @@ serde_json.workspace = true tauri.workspace = true log.workspace = true thiserror.workspace = true -global-hotkey = "0.2" +global-hotkey = "0.2.1" From 937e6a5be61f6d8d2e3a3e6c3eeb3d4d84e3454d Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Fri, 12 May 2023 13:16:50 -0700 Subject: [PATCH 11/64] feat: use tauri `next` branch, fix tests, MSRV 1.65 (#354) --- .github/workflows/lint-rust.yml | 4 + .github/workflows/msrv-check.yml | 6 +- .prettierignore | 3 +- Cargo.lock | 466 ++++++++++++++++-- Cargo.toml | 17 +- README.md | 2 +- examples/api/src-tauri/Cargo.toml | 24 +- examples/api/src-tauri/build.rs | 12 +- plugins/app/README.md | 2 +- plugins/authenticator/README.md | 2 +- plugins/autostart/README.md | 2 +- plugins/autostart/src/lib.rs | 2 +- plugins/cli/README.md | 2 +- plugins/cli/src/parser.rs | 4 +- plugins/clipboard/README.md | 2 +- plugins/dialog/README.md | 2 +- plugins/dialog/src/lib.rs | 70 +-- plugins/dialog/test/tauri.conf.json | 22 + plugins/fs-watch/README.md | 2 +- plugins/fs-watch/guest-js/index.ts | 62 ++- plugins/fs-watch/package.json | 3 +- plugins/fs-watch/src/lib.rs | 19 +- plugins/fs/Cargo.toml | 20 +- plugins/fs/README.md | 2 +- plugins/global-shortcut/README.md | 2 +- plugins/http/Cargo.toml | 21 +- plugins/http/README.md | 2 +- plugins/http/src/commands/mod.rs | 5 +- plugins/http/src/scope.rs | 24 +- plugins/localhost/README.md | 2 +- plugins/log/README.md | 2 +- plugins/notification/README.md | 2 +- plugins/notification/src/desktop.rs | 40 +- plugins/notification/test/tauri.conf.json | 22 + plugins/os/README.md | 2 +- plugins/persisted-scope/README.md | 2 +- plugins/positioner/README.md | 2 +- plugins/process/README.md | 2 +- plugins/shell/README.md | 2 +- plugins/shell/src/process/mod.rs | 77 +-- plugins/shell/test/test.txt | 1 + plugins/single-instance/README.md | 2 +- plugins/sql/README.md | 2 +- plugins/store/README.md | 2 +- plugins/store/src/lib.rs | 63 ++- plugins/store/src/store.rs | 39 +- plugins/stronghold/README.md | 2 +- plugins/updater/Cargo.toml | 19 +- plugins/updater/README.md | 2 +- plugins/updater/tests/app-updater/Cargo.toml | 11 +- plugins/updater/tests/app-updater/build.rs | 2 +- plugins/updater/tests/app-updater/src/main.rs | 78 +-- .../updater/tests/app-updater/tests/update.rs | 2 +- plugins/upload/README.md | 2 +- plugins/upload/guest-js/index.ts | 58 ++- plugins/upload/package.json | 3 +- plugins/upload/src/lib.rs | 43 +- plugins/websocket/README.md | 2 +- plugins/window-state/README.md | 2 +- plugins/window-state/guest-js/index.ts | 18 +- plugins/window-state/package.json | 3 +- plugins/window/README.md | 2 +- pnpm-lock.yaml | 9 - shared/template/README.md | 2 +- 64 files changed, 867 insertions(+), 463 deletions(-) create mode 100644 plugins/dialog/test/tauri.conf.json create mode 100644 plugins/notification/test/tauri.conf.json create mode 100644 plugins/shell/test/test.txt diff --git a/.github/workflows/lint-rust.yml b/.github/workflows/lint-rust.yml index f724e838..af0863e7 100644 --- a/.github/workflows/lint-rust.yml +++ b/.github/workflows/lint-rust.yml @@ -43,6 +43,10 @@ jobs: - uses: Swatinem/rust-cache@v2 + - name: create dummy dist + working-directory: examples/api + run: mkdir dist + - name: clippy run: cargo clippy --workspace --exclude 'tauri-plugin-sql' --all-targets --all-features -- -D warnings diff --git a/.github/workflows/msrv-check.yml b/.github/workflows/msrv-check.yml index 807bbcad..ef8fd15c 100644 --- a/.github/workflows/msrv-check.yml +++ b/.github/workflows/msrv-check.yml @@ -38,10 +38,14 @@ jobs: sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev - - uses: dtolnay/rust-toolchain@1.64.0 + - uses: dtolnay/rust-toolchain@1.65.0 - uses: Swatinem/rust-cache@v2 + - name: create dummy dist + working-directory: examples/api + run: mkdir dist + - name: build run: cargo build --workspace --exclude 'tauri-plugin-sql' --all-targets --all-features diff --git a/.prettierignore b/.prettierignore index 13134b1f..7435af0c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,5 @@ target node_modules dist pnpm-lock.yaml -Cargo.lock \ No newline at end of file +Cargo.lock +.build \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 7abf65a6..cfda4c2c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + [[package]] name = "aes" version = "0.7.5" @@ -24,22 +34,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "opaque-debug", ] +[[package]] +name = "aes" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures", +] + [[package]] name = "aes-gcm" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", + "aead 0.4.3", + "aes 0.7.5", + "cipher 0.3.0", + "ctr 0.8.0", + "ghash 0.4.4", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" +dependencies = [ + "aead 0.5.2", + "aes 0.8.2", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.0", "subtle", ] @@ -169,6 +204,46 @@ version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +[[package]] +name = "api" +version = "0.1.0" +dependencies = [ + "log", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-app", + "tauri-plugin-cli", + "tauri-plugin-clipboard", + "tauri-plugin-dialog", + "tauri-plugin-fs", + "tauri-plugin-global-shortcut", + "tauri-plugin-http", + "tauri-plugin-log", + "tauri-plugin-notification", + "tauri-plugin-os", + "tauri-plugin-process", + "tauri-plugin-shell", + "tauri-plugin-updater", + "tauri-plugin-window", + "tiny_http 0.11.0", + "window-shadows", +] + +[[package]] +name = "app-updater" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-updater", + "time 0.3.20", + "tiny_http 0.11.0", +] + [[package]] name = "arboard" version = "3.2.0" @@ -207,6 +282,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "async-broadcast" version = "0.5.1" @@ -294,6 +379,28 @@ dependencies = [ "syn 2.0.13", ] +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.13", +] + [[package]] name = "async-task" version = "4.4.0" @@ -604,12 +711,12 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.14.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfbc36312494041e2cdd5f06697b7e89d4b76f42773a0b5556ac290ff22acc2" +checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b" dependencies = [ "serde", - "toml 0.5.11", + "toml 0.7.3", ] [[package]] @@ -657,7 +764,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ "cfg-if", - "cipher", + "cipher 0.3.0", "cpufeatures", "zeroize", ] @@ -668,9 +775,9 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" dependencies = [ - "aead", + "aead 0.4.3", "chacha20", - "cipher", + "cipher 0.3.0", "poly1305", "zeroize", ] @@ -685,6 +792,7 @@ dependencies = [ "js-sys", "num-integer", "num-traits", + "serde", "time 0.1.45", "wasm-bindgen", "winapi", @@ -705,6 +813,16 @@ dependencies = [ "generic-array", ] +[[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 = "clap" version = "4.2.2" @@ -808,6 +926,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "colored" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +dependencies = [ + "atty", + "lazy_static", + "winapi", +] + [[package]] name = "combine" version = "4.6.6" @@ -971,6 +1100,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", + "rand_core 0.6.4", "typenum", ] @@ -1017,7 +1147,16 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" dependencies = [ - "cipher", + "cipher 0.3.0", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", ] [[package]] @@ -1079,9 +1218,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.13.4" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", @@ -1089,9 +1228,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.4" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", @@ -1103,9 +1242,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.13.4" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", @@ -1369,7 +1508,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" dependencies = [ - "colored", + "colored 1.9.3", "log", ] @@ -1740,7 +1879,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ "opaque-debug", - "polyval", + "polyval 0.5.3", +] + +[[package]] +name = "ghash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +dependencies = [ + "opaque-debug", + "polyval 0.6.0", ] [[package]] @@ -2103,6 +2252,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +dependencies = [ + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -2216,6 +2378,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", + "serde", ] [[package]] @@ -2256,6 +2419,15 @@ dependencies = [ "libc", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" version = "0.1.12" @@ -2282,9 +2454,9 @@ version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e04d492224bff6e97142f033d0a4383bcbc05918be1ff7b3abd2c1cc85205a2" dependencies = [ - "aead", - "aes", - "aes-gcm", + "aead 0.4.3", + "aes 0.7.5", + "aes-gcm 0.9.4", "autocfg", "blake2", "chacha20poly1305", @@ -2456,9 +2628,9 @@ dependencies = [ [[package]] name = "json-patch" -version = "0.3.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e712e62827c382a77b87f590532febb1f8b2fdbc3eefa1ee37fe7281687075ef" +checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" dependencies = [ "serde", "serde_json", @@ -2771,12 +2943,28 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "minisign-verify" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" + [[package]] name = "miniz_oxide" version = "0.6.2" @@ -2798,6 +2986,24 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "mockito" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80f9fece9bd97ab74339fe19f4bcaf52b76dcc18e5364c7977c1838f76b38de9" +dependencies = [ + "assert-json-diff", + "colored 2.0.0", + "httparse", + "lazy_static", + "log", + "rand 0.8.5", + "regex", + "serde_json", + "serde_urlencoded", + "similar", +] + [[package]] name = "native-tls" version = "0.2.11" @@ -3148,6 +3354,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-src" +version = "111.25.3+1.1.1t" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924757a6a226bf60da5f7dd0311a34d2b52283dd82ddeb103208ddc66362f80c" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" version = "0.9.84" @@ -3156,6 +3371,7 @@ checksum = "3a20eace9dc2d82904039cb76dcf50fb1a0bba071cfd1629720b5d6f1ddba0fa" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -3521,7 +3737,7 @@ checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ "cpufeatures", "opaque-debug", - "universal-hash", + "universal-hash 0.4.1", ] [[package]] @@ -3533,7 +3749,19 @@ dependencies = [ "cfg-if", "cpufeatures", "opaque-debug", - "universal-hash", + "universal-hash 0.4.1", +] + +[[package]] +name = "polyval" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash 0.5.0", ] [[package]] @@ -3798,20 +4026,25 @@ dependencies = [ "http", "http-body", "hyper", + "hyper-rustls", "hyper-tls", "ipnet", "js-sys", "log", "mime", + "mime_guess", "native-tls", "once_cell", "percent-encoding", "pin-project-lite", + "rustls", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", + "tokio-rustls", "tokio-util", "tower-service", "url", @@ -3819,6 +4052,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", + "webpki-roots", "winreg", ] @@ -4137,19 +4371,25 @@ dependencies = [ [[package]] name = "serde_with" -version = "1.14.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "331bb8c3bf9b92457ab7abecf07078c13f7d270ba490103e84e8b014490cd0b0" dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap", "serde", + "serde_json", "serde_with_macros", + "time 0.3.20", ] [[package]] name = "serde_with_macros" -version = "1.5.2" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +checksum = "859011bddcc11f289f07f467cc1fe01c7a941daa4d8f6c40d4d1c92eb6d9319c" dependencies = [ "darling", "proc-macro2", @@ -4243,6 +4483,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "similar" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" + [[package]] name = "siphasher" version = "0.3.10" @@ -4642,9 +4888,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.18.3" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f2340617d383561b0ea25358b97ec2c2ba04db48c458ce71dd1b38d7fd09ac5" +checksum = "746ae5d0ca57ae275a792f109f6e992e0b41a443abdf3f5c6eff179ef5b3443a" dependencies = [ "bitflags 1.3.2", "cairo-rs", @@ -4714,8 +4960,7 @@ dependencies = [ [[package]] name = "tauri" version = "2.0.0-alpha.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25eefe4ca0a396a73fd0309f778eeb22a19953a3169bf316b893abadc2118fb" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" dependencies = [ "anyhow", "bytes 1.4.0", @@ -4758,29 +5003,32 @@ dependencies = [ "tauri-utils", "tempfile", "thiserror", + "time 0.3.20", "tokio", "url", "uuid", "webkit2gtk", "webview2-com", "windows 0.44.0", + "zip", ] [[package]] name = "tauri-build" version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c492211c72b95f8866e5c1fbc0a915080a5ebb9f03f9b250a1c936534b680a76" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" dependencies = [ "anyhow", "cargo_toml", "filetime", "heck 0.4.1", "json-patch", + "quote", "semver", "serde", "serde_json", "swift-rs", + "tauri-codegen", "tauri-utils", "tauri-winres", "walkdir", @@ -4789,8 +5037,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "818c570932ebc2ff6d498be89d93494b89ff142131937a7e56d7cfb9c8ef0ad0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" dependencies = [ "base64 0.21.0", "brotli", @@ -4815,8 +5062,7 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b596485d89003d2d7869469b2830e9a846de9ac2eecd69bc7c24890234aefc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -4904,6 +5150,16 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-fs" +version = "0.0.0" +dependencies = [ + "anyhow", + "serde", + "tauri", + "thiserror", +] + [[package]] name = "tauri-plugin-fs-watch" version = "0.0.0" @@ -4929,6 +5185,22 @@ dependencies = [ "thiserror", ] +[[package]] +name = "tauri-plugin-http" +version = "0.0.0" +dependencies = [ + "bytes 1.4.0", + "glob", + "http", + "rand 0.8.5", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "tauri", + "thiserror", +] + [[package]] name = "tauri-plugin-localhost" version = "0.1.0" @@ -4939,7 +5211,7 @@ dependencies = [ "serde_json", "tauri", "thiserror", - "tiny_http", + "tiny_http 0.12.0", ] [[package]] @@ -5095,6 +5367,30 @@ dependencies = [ "zeroize", ] +[[package]] +name = "tauri-plugin-updater" +version = "0.0.0" +dependencies = [ + "base64 0.21.0", + "dirs-next", + "futures-util", + "http", + "minisign-verify", + "mockito", + "percent-encoding", + "reqwest", + "semver", + "serde", + "serde_json", + "tauri", + "tempfile", + "thiserror", + "time 0.3.20", + "tokio", + "tokio-test", + "url", +] + [[package]] name = "tauri-plugin-upload" version = "0.0.0" @@ -5151,8 +5447,7 @@ dependencies = [ [[package]] name = "tauri-runtime" version = "0.13.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "404367cd32a5a8d33368448aab7da54bb2187b6a632526f1019de3fd13591cc2" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" dependencies = [ "gtk", "http", @@ -5173,8 +5468,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" version = "0.13.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "203764d673b440877dea87b972772be4091ee0ab25141748008646ca774a20dc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" dependencies = [ "cocoa", "gtk", @@ -5194,11 +5488,12 @@ dependencies = [ [[package]] name = "tauri-utils" version = "2.0.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fa79bc56f04ece491268a64273de945f65627bcda30d9e8ecc8708b89bca26" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" dependencies = [ + "aes-gcm 0.10.1", "brotli", "ctor", + "getrandom 0.2.9", "glob", "heck 0.4.1", "html5ever", @@ -5213,6 +5508,7 @@ dependencies = [ "serde", "serde_json", "serde_with", + "serialize-to-javascript", "thiserror", "url", "walkdir", @@ -5360,6 +5656,19 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny_http" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0d6ef4e10d23c1efb862eecad25c5054429a71958b4eeef85eb5e7170b477ca" +dependencies = [ + "ascii", + "chunked_transfer", + "log", + "time 0.3.20", + "url", +] + [[package]] name = "tiny_http" version = "0.12.0" @@ -5435,6 +5744,19 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-test" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3" +dependencies = [ + "async-stream", + "bytes 1.4.0", + "futures-core", + "tokio", + "tokio-stream", +] + [[package]] name = "tokio-tungstenite" version = "0.18.0" @@ -5642,6 +5964,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.13" @@ -5691,6 +6022,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "universal-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "untrusted" version = "0.7.1" @@ -6079,6 +6420,18 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "window-shadows" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29d30320647cfc3dc45554c8ad825b84831def81f967a2f7589931328ff9b16d" +dependencies = [ + "cocoa", + "objc", + "raw-window-handle", + "windows-sys 0.42.0", +] + [[package]] name = "windows" version = "0.36.1" @@ -6409,9 +6762,9 @@ dependencies = [ [[package]] name = "wry" -version = "0.27.3" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf0dbfa7ccbd2e3832a3098b19d4b552360ea00a40b244a99caef46bffd84f" +checksum = "7d15f9f827d537cefe6d047be3930f5d89b238dfb85e08ba6a319153217635aa" dependencies = [ "base64 0.13.1", "block", @@ -6593,6 +6946,17 @@ dependencies = [ "syn 2.0.13", ] +[[package]] +name = "zip" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", +] + [[package]] name = "zvariant" version = "3.12.0" diff --git a/Cargo.toml b/Cargo.toml index acfc6598..c70e53f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,12 @@ [workspace] -members = ["plugins/*", "examples/*/src-tauri"] -exclude = ["plugins/fs", "plugins/http", "plugins/updater", "examples/api/src-tauri"] +members = ["plugins/*", "plugins/*/tests/*", "examples/*/src-tauri"] resolver = "2" [workspace.dependencies] serde = { version = "1", features = ["derive"] } log = "0.4" -tauri = "2.0.0-alpha.8" -tauri-build = "2.0.0-alpha.4" +tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } +tauri-build = { git = "https://github.com/tauri-apps/tauri", branch = "next" } serde_json = "1" thiserror = "1" @@ -15,4 +14,12 @@ thiserror = "1" edition = "2021" authors = [ "Tauri Programme within The Commons Conservancy" ] license = "Apache-2.0 OR MIT" -rust-version = "1.64" +rust-version = "1.65" + +# default to small, optimized release binaries +[profile.release] +panic = "abort" +codegen-units = 1 +lto = true +incremental = false +opt-level = "s" diff --git a/README.md b/README.md index cc7541ae..edeb0ac5 100644 --- a/README.md +++ b/README.md @@ -18,4 +18,4 @@ | [websocket](plugins/websocket) | Open a WebSocket connection using a Rust client in JS. | ✅ | ✅ | ✅ | ? | ? | | [window-state](plugins/window-state) | Persist window sizes and positions. | ✅ | ✅ | ✅ | ? | ? | -_This repo and all plugins require a Rust version of at least **1.64**_ +_This repo and all plugins require a Rust version of at least **1.65**_ diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index fe8c70fe..e64d84b8 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -3,20 +3,20 @@ name = "api" version = "0.1.0" description = "An example Tauri Application showcasing the api" edition = "2021" -rust-version = "1.64" +rust-version = "1.65" license = "Apache-2.0 OR MIT" [lib] crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] -tauri-build = { version = "2.0.0-alpha.4", features = ["codegen", "isolation"] } +tauri-build = { workspace = true, features = ["codegen", "isolation"] } [dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = [ "derive" ] } +serde_json.workspace = true +serde.workspace = true tiny_http = "0.11" -log = "0.4" +log.workspace = true tauri-plugin-app = { path = "../../../plugins/app" } tauri-plugin-log = { path = "../../../plugins/log" } tauri-plugin-fs = { path = "../../../plugins/fs" } @@ -30,12 +30,8 @@ tauri-plugin-shell = { path = "../../../plugins/shell" } tauri-plugin-updater = { path = "../../../plugins/updater" } tauri-plugin-window = { path = "../../../plugins/window" } -[patch.crates-io] -tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } -tauri-build = { git = "https://github.com/tauri-apps/tauri", branch = "next" } - [dependencies.tauri] -version = "2.0.0-alpha.8" +workspace = true features = [ "api-all", "icon-ico", @@ -55,11 +51,3 @@ window-shadows = "0.2" [features] custom-protocol = [ "tauri/custom-protocol" ] - -# default to small, optimized release binaries -[profile.release] -panic = "abort" -codegen-units = 1 -lto = true -incremental = false -opt-level = "s" diff --git a/examples/api/src-tauri/build.rs b/examples/api/src-tauri/build.rs index 2154ff35..e9f99b29 100644 --- a/examples/api/src-tauri/build.rs +++ b/examples/api/src-tauri/build.rs @@ -3,10 +3,10 @@ // SPDX-License-Identifier: MIT fn main() { - let mut codegen = tauri_build::CodegenContext::new(); - if !cfg!(feature = "custom-protocol") { - codegen = codegen.dev(); - } - codegen.build(); - tauri_build::build(); + let mut codegen = tauri_build::CodegenContext::new(); + if !cfg!(feature = "custom-protocol") { + codegen = codegen.dev(); + } + codegen.build(); + tauri_build::build(); } diff --git a/plugins/app/README.md b/plugins/app/README.md index fe981bc1..9c07789a 100644 --- a/plugins/app/README.md +++ b/plugins/app/README.md @@ -4,7 +4,7 @@ This plugin provides APIs to read application metadata and macOS app visibility ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/authenticator/README.md b/plugins/authenticator/README.md index c64fecdf..490d6255 100644 --- a/plugins/authenticator/README.md +++ b/plugins/authenticator/README.md @@ -4,7 +4,7 @@ Use hardware security-keys in your Tauri App. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/autostart/README.md b/plugins/autostart/README.md index fa787275..f07bd5c6 100644 --- a/plugins/autostart/README.md +++ b/plugins/autostart/README.md @@ -4,7 +4,7 @@ Automatically launch your application at startup. Supports Windows, Mac (via App ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/autostart/src/lib.rs b/plugins/autostart/src/lib.rs index dc9f38bb..3a927782 100644 --- a/plugins/autostart/src/lib.rs +++ b/plugins/autostart/src/lib.rs @@ -120,7 +120,7 @@ pub fn init( let exe_path = current_exe.canonicalize()?.display().to_string(); let parts: Vec<&str> = exe_path.split(".app/").collect(); let app_path = if parts.len() == 2 { - format!("{}.app", parts.get(0).unwrap().to_string()) + format!("{}.app", parts.first().unwrap()) } else { exe_path }; diff --git a/plugins/cli/README.md b/plugins/cli/README.md index 720e7147..983cf803 100644 --- a/plugins/cli/README.md +++ b/plugins/cli/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/cli/src/parser.rs b/plugins/cli/src/parser.rs index d68fd10a..69a926c1 100644 --- a/plugins/cli/src/parser.rs +++ b/plugins/cli/src/parser.rs @@ -72,10 +72,10 @@ impl Matches { /// # Examples /// /// ```rust,no_run -/// use tauri_plugin_cli::get_matches; +/// use tauri_plugin_cli::CliExt; /// tauri::Builder::default() /// .setup(|app| { -/// let matches = get_matches(app.config().tauri.cli.as_ref().unwrap(), app.package_info())?; +/// let matches = app.cli().matches()?; /// Ok(()) /// }); /// ``` diff --git a/plugins/clipboard/README.md b/plugins/clipboard/README.md index 2879c77b..2b5df3e4 100644 --- a/plugins/clipboard/README.md +++ b/plugins/clipboard/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/dialog/README.md b/plugins/dialog/README.md index 24a5b214..de31bcb8 100644 --- a/plugins/dialog/README.md +++ b/plugins/dialog/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/dialog/src/lib.rs b/plugins/dialog/src/lib.rs index 93969d71..85518fef 100644 --- a/plugins/dialog/src/lib.rs +++ b/plugins/dialog/src/lib.rs @@ -324,12 +324,12 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// tauri::Builder::default() - /// .build(tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json")) + /// .build(tauri::generate_context!("test/tauri.conf.json")) /// .expect("failed to build tauri app") - /// .run(|_app, _event| { - /// FileDialogBuilder::new().pick_file(|file_path| { + /// .run(|app, _event| { + /// app.dialog().file().pick_file(|file_path| { /// // do something with the optional file path here /// // the file path is `None` if the user closed the dialog /// }) @@ -348,12 +348,12 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// tauri::Builder::default() - /// .build(tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json")) + /// .build(tauri::generate_context!("test/tauri.conf.json")) /// .expect("failed to build tauri app") - /// .run(|_app, _event| { - /// FileDialogBuilder::new().pick_files(|file_paths| { + /// .run(|app, _event| { + /// app.dialog().file().pick_files(|file_paths| { /// // do something with the optional file paths here /// // the file paths value is `None` if the user closed the dialog /// }) @@ -378,12 +378,12 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// tauri::Builder::default() - /// .build(tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json")) + /// .build(tauri::generate_context!("test/tauri.conf.json")) /// .expect("failed to build tauri app") - /// .run(|_app, _event| { - /// FileDialogBuilder::new().pick_folder(|folder_path| { + /// .run(|app, _event| { + /// app.dialog().file().pick_folder(|folder_path| { /// // do something with the optional folder path here /// // the folder path is `None` if the user closed the dialog /// }) @@ -401,12 +401,12 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// tauri::Builder::default() - /// .build(tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json")) + /// .build(tauri::generate_context!("test/tauri.conf.json")) /// .expect("failed to build tauri app") - /// .run(|_app, _event| { - /// FileDialogBuilder::new().pick_folders(|file_paths| { + /// .run(|app, _event| { + /// app.dialog().file().pick_folders(|file_paths| { /// // do something with the optional folder paths here /// // the folder paths value is `None` if the user closed the dialog /// }) @@ -425,12 +425,12 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// tauri::Builder::default() - /// .build(tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json")) + /// .build(tauri::generate_context!("test/tauri.conf.json")) /// .expect("failed to build tauri app") - /// .run(|_app, _event| { - /// FileDialogBuilder::new().save_file(|file_path| { + /// .run(|app, _event| { + /// app.dialog().file().save_file(|file_path| { /// // do something with the optional file path here /// // the file path is `None` if the user closed the dialog /// }) @@ -451,10 +451,10 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::blocking::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// #[tauri::command] - /// async fn my_command() { - /// let file_path = FileDialogBuilder::new().pick_file(); + /// async fn my_command(app: tauri::AppHandle) { + /// let file_path = app.dialog().file().blocking_pick_file(); /// // do something with the optional file path here /// // the file path is `None` if the user closed the dialog /// } @@ -470,10 +470,10 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::blocking::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// #[tauri::command] - /// async fn my_command() { - /// let file_path = FileDialogBuilder::new().pick_files(); + /// async fn my_command(app: tauri::AppHandle) { + /// let file_path = app.dialog().file().blocking_pick_files(); /// // do something with the optional file paths here /// // the file paths value is `None` if the user closed the dialog /// } @@ -489,10 +489,10 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::blocking::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// #[tauri::command] - /// async fn my_command() { - /// let folder_path = FileDialogBuilder::new().pick_folder(); + /// async fn my_command(app: tauri::AppHandle) { + /// let folder_path = app.dialog().file().blocking_pick_folder(); /// // do something with the optional folder path here /// // the folder path is `None` if the user closed the dialog /// } @@ -509,10 +509,10 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::blocking::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// #[tauri::command] - /// async fn my_command() { - /// let folder_paths = FileDialogBuilder::new().pick_folders(); + /// async fn my_command(app: tauri::AppHandle) { + /// let folder_paths = app.dialog().file().blocking_pick_folders(); /// // do something with the optional folder paths here /// // the folder paths value is `None` if the user closed the dialog /// } @@ -529,10 +529,10 @@ impl FileDialogBuilder { /// # Examples /// /// ```rust,no_run - /// use tauri::api::dialog::blocking::FileDialogBuilder; + /// use tauri_plugin_dialog::DialogExt; /// #[tauri::command] - /// async fn my_command() { - /// let file_path = FileDialogBuilder::new().save_file(); + /// async fn my_command(app: tauri::AppHandle) { + /// let file_path = app.dialog().file().blocking_save_file(); /// // do something with the optional file path here /// // the file path is `None` if the user closed the dialog /// } diff --git a/plugins/dialog/test/tauri.conf.json b/plugins/dialog/test/tauri.conf.json new file mode 100644 index 00000000..8a9c0108 --- /dev/null +++ b/plugins/dialog/test/tauri.conf.json @@ -0,0 +1,22 @@ +{ + "$schema": "../../../node_modules/.pnpm/@tauri-apps+cli@2.0.0-alpha.8/node_modules/@tauri-apps/cli/schema.json", + "build": { + "distDir": ".", + "devPath": "http://localhost:4000" + }, + "tauri": { + "bundle": { + "identifier": "studio.tauri.example", + "active": true, + "icon": ["../../../examples/api/src-tauri/icons/icon.png"] + }, + "windows": [ + { + "title": "Tauri App" + } + ], + "security": { + "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self'" + } + } +} diff --git a/plugins/fs-watch/README.md b/plugins/fs-watch/README.md index c410cf12..12cb0d1c 100644 --- a/plugins/fs-watch/README.md +++ b/plugins/fs-watch/README.md @@ -4,7 +4,7 @@ Watch files and directories for changes using [notify](https://github.com/notify ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/fs-watch/guest-js/index.ts b/plugins/fs-watch/guest-js/index.ts index 9d25096f..2aa58b0c 100644 --- a/plugins/fs-watch/guest-js/index.ts +++ b/plugins/fs-watch/guest-js/index.ts @@ -1,8 +1,4 @@ -import { invoke } from "@tauri-apps/api/tauri"; -import { UnlistenFn } from "@tauri-apps/api/event"; -import { appWindow, WebviewWindow } from "tauri-plugin-window-api"; - -const w: WebviewWindow = appWindow; +import { invoke, transformCallback } from "@tauri-apps/api/tauri"; export interface WatchOptions { recursive?: boolean; @@ -42,11 +38,39 @@ async function unwatch(id: number): Promise { await invoke("plugin:fs-watch|unwatch", { id }); } +// TODO: use channel from @tauri-apps/api on v2 +class Channel { + id: number; + // @ts-expect-error field used by the IPC serializer + private readonly __TAURI_CHANNEL_MARKER__ = true; + #onmessage: (response: T) => void = () => { + // no-op + }; + + constructor() { + this.id = transformCallback((response: T) => { + this.#onmessage(response); + }); + } + + set onmessage(handler: (response: T) => void) { + this.#onmessage = handler; + } + + get onmessage(): (response: T) => void { + return this.#onmessage; + } + + toJSON(): string { + return `__CHANNEL__:${this.id}`; + } +} + export async function watch( paths: string | string[], cb: (event: DebouncedEvent) => void, options: DebouncedWatchOptions = {} -): Promise { +): Promise<() => void> { const opts = { recursive: false, delayMs: 2000, @@ -61,22 +85,18 @@ export async function watch( const id = window.crypto.getRandomValues(new Uint32Array(1))[0]; + const onEvent = new Channel(); + onEvent.onmessage = cb; + await invoke("plugin:fs-watch|watch", { id, paths: watchPaths, options: opts, + onEvent, }); - const unlisten = await w.listen( - `watcher://debounced-event/${id}`, - (event) => { - cb(event.payload); - } - ); - return () => { void unwatch(id); - unlisten(); }; } @@ -84,7 +104,7 @@ export async function watchImmediate( paths: string | string[], cb: (event: RawEvent) => void, options: WatchOptions = {} -): Promise { +): Promise<() => void> { const opts = { recursive: false, ...options, @@ -99,21 +119,17 @@ export async function watchImmediate( const id = window.crypto.getRandomValues(new Uint32Array(1))[0]; + const onEvent = new Channel(); + onEvent.onmessage = cb; + await invoke("plugin:fs-watch|watch", { id, paths: watchPaths, options: opts, + onEvent, }); - const unlisten = await w.listen( - `watcher://raw-event/${id}`, - (event) => { - cb(event.payload); - } - ); - return () => { void unwatch(id); - unlisten(); }; } diff --git a/plugins/fs-watch/package.json b/plugins/fs-watch/package.json index 61c5cf71..4ac45241 100644 --- a/plugins/fs-watch/package.json +++ b/plugins/fs-watch/package.json @@ -28,7 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0", - "tauri-plugin-window-api": "0.0.0" + "@tauri-apps/api": "^1.2.0" } } diff --git a/plugins/fs-watch/src/lib.rs b/plugins/fs-watch/src/lib.rs index 3185d148..d0a9f783 100644 --- a/plugins/fs-watch/src/lib.rs +++ b/plugins/fs-watch/src/lib.rs @@ -2,9 +2,10 @@ use notify::{Config, Event, RecommendedWatcher, RecursiveMode, Watcher}; use notify_debouncer_mini::{new_debouncer, DebounceEventResult, Debouncer}; use serde::{ser::Serializer, Deserialize, Serialize}; use tauri::{ + api::ipc::Channel, command, plugin::{Builder as PluginBuilder, TauriPlugin}, - Manager, Runtime, State, Window, + Manager, Runtime, State, }; use std::{ @@ -44,25 +45,23 @@ enum WatcherKind { Watcher(RecommendedWatcher), } -fn watch_raw(window: Window, rx: Receiver>, id: Id) { +fn watch_raw(on_event: Channel, rx: Receiver>) { spawn(move || { - let event_name = format!("watcher://raw-event/{id}"); while let Ok(event) = rx.recv() { if let Ok(event) = event { // TODO: Should errors be emitted too? - let _ = window.emit(&event_name, event); + let _ = on_event.send(&event); } } }); } -fn watch_debounced(window: Window, rx: Receiver, id: Id) { +fn watch_debounced(on_event: Channel, rx: Receiver) { spawn(move || { - let event_name = format!("watcher://debounced-event/{id}"); while let Ok(event) = rx.recv() { if let Ok(event) = event { // TODO: Should errors be emitted too? - let _ = window.emit(&event_name, event); + let _ = on_event.send(&event); } } }); @@ -77,11 +76,11 @@ struct WatchOptions { #[command] async fn watch( - window: Window, watchers: State<'_, WatcherCollection>, id: Id, paths: Vec, options: WatchOptions, + on_event: Channel, ) -> Result<()> { let mode = if options.recursive { RecursiveMode::Recursive @@ -96,7 +95,7 @@ async fn watch( for path in &paths { watcher.watch(path, mode)?; } - watch_debounced(window, rx, id); + watch_debounced(on_event, rx); WatcherKind::Debouncer(debouncer) } else { let (tx, rx) = channel(); @@ -104,7 +103,7 @@ async fn watch( for path in &paths { watcher.watch(path, mode)?; } - watch_raw(window, rx, id); + watch_raw(on_event, rx); WatcherKind::Watcher(watcher) }; diff --git a/plugins/fs/Cargo.toml b/plugins/fs/Cargo.toml index 6e2add71..a9549994 100644 --- a/plugins/fs/Cargo.toml +++ b/plugins/fs/Cargo.toml @@ -2,21 +2,15 @@ name = "tauri-plugin-fs" version = "0.0.0" description = "Access the file system." -edition = "2021" -#authors.workspace = true -#license.workspace = true -#edition.workspace = true -#rust-version.workspace = true +authors.workspace = true +license.workspace = true +edition.workspace = true +rust-version.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -#serde.workspace = true -#serde_json.workspace = true -#tauri.workspace = true -#log.workspace = true -#thiserror.workspace = true -serde = "1" -thiserror = "1" -tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } +serde.workspace = true +tauri.workspace = true +thiserror.workspace = true anyhow = "1" diff --git a/plugins/fs/README.md b/plugins/fs/README.md index 55756f5b..c59990d8 100644 --- a/plugins/fs/README.md +++ b/plugins/fs/README.md @@ -4,7 +4,7 @@ Access the file system. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/global-shortcut/README.md b/plugins/global-shortcut/README.md index f1611804..c2362ae4 100644 --- a/plugins/global-shortcut/README.md +++ b/plugins/global-shortcut/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index ef5741c6..3272ad39 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -1,22 +1,15 @@ [package] name = "tauri-plugin-http" version = "0.0.0" -edition = "2021" -#edition.workspace = true -#authors.workspace = true -#license.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true [dependencies] -#serde.workspace = true -#serde_json.workspace = true -#tauri.workspace = true -#log.workspace = true -#thiserror.workspace = true -tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } -serde = "1" -serde_json = "1" -thiserror = "1" - +serde.workspace = true +serde_json.workspace = true +tauri.workspace = true +thiserror.workspace = true glob = "0.3" rand = "0.8" bytes = { version = "1", features = [ "serde" ] } diff --git a/plugins/http/README.md b/plugins/http/README.md index 0bace1a5..de55e8dd 100644 --- a/plugins/http/README.md +++ b/plugins/http/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/http/src/commands/mod.rs b/plugins/http/src/commands/mod.rs index 24acf09e..f38d6eac 100644 --- a/plugins/http/src/commands/mod.rs +++ b/plugins/http/src/commands/mod.rs @@ -1,9 +1,6 @@ use tauri::{path::SafePathBuf, AppHandle, Runtime, State}; -use crate::{ - - ClientId, Http, -}; +use crate::{ClientId, Http}; mod client; use client::{Body, ClientBuilder, FilePart, FormPart, HttpRequestBuilder, ResponseData}; diff --git a/plugins/http/src/scope.rs b/plugins/http/src/scope.rs index 115ba78a..241c2816 100644 --- a/plugins/http/src/scope.rs +++ b/plugins/http/src/scope.rs @@ -38,12 +38,12 @@ impl Scope { #[cfg(test)] mod tests { - use tauri_utils::config::HttpAllowlistScope; + use tauri::utils::config::HttpAllowlistScope; #[test] fn is_allowed() { // plain URL - let scope = super::Scope::for_http_api(&HttpAllowlistScope(vec!["http://localhost:8080" + let scope = super::Scope::new(&HttpAllowlistScope(vec!["http://localhost:8080" .parse() .unwrap()])); assert!(scope.is_allowed(&"http://localhost:8080".parse().unwrap())); @@ -56,10 +56,9 @@ mod tests { assert!(!scope.is_allowed(&"http://local:8080".parse().unwrap())); // URL with fixed path - let scope = - super::Scope::for_http_api(&HttpAllowlistScope(vec!["http://localhost:8080/file.png" - .parse() - .unwrap()])); + let scope = super::Scope::new(&HttpAllowlistScope(vec!["http://localhost:8080/file.png" + .parse() + .unwrap()])); assert!(scope.is_allowed(&"http://localhost:8080/file.png".parse().unwrap())); @@ -68,25 +67,22 @@ mod tests { assert!(!scope.is_allowed(&"http://localhost:8080/file.png/other.jpg".parse().unwrap())); // URL with glob pattern - let scope = - super::Scope::for_http_api(&HttpAllowlistScope(vec!["http://localhost:8080/*.png" - .parse() - .unwrap()])); + let scope = super::Scope::new(&HttpAllowlistScope(vec!["http://localhost:8080/*.png" + .parse() + .unwrap()])); assert!(scope.is_allowed(&"http://localhost:8080/file.png".parse().unwrap())); assert!(scope.is_allowed(&"http://localhost:8080/assets/file.png".parse().unwrap())); assert!(!scope.is_allowed(&"http://localhost:8080/file.jpeg".parse().unwrap())); - let scope = - super::Scope::for_http_api(&HttpAllowlistScope(vec!["http://*".parse().unwrap()])); + let scope = super::Scope::new(&HttpAllowlistScope(vec!["http://*".parse().unwrap()])); assert!(scope.is_allowed(&"http://something.else".parse().unwrap())); assert!(!scope.is_allowed(&"http://something.else/path/to/file".parse().unwrap())); assert!(!scope.is_allowed(&"https://something.else".parse().unwrap())); - let scope = - super::Scope::for_http_api(&HttpAllowlistScope(vec!["http://**".parse().unwrap()])); + let scope = super::Scope::new(&HttpAllowlistScope(vec!["http://**".parse().unwrap()])); assert!(scope.is_allowed(&"http://something.else".parse().unwrap())); assert!(scope.is_allowed(&"http://something.else/path/to/file".parse().unwrap())); diff --git a/plugins/localhost/README.md b/plugins/localhost/README.md index 2a0e9fc3..87919843 100644 --- a/plugins/localhost/README.md +++ b/plugins/localhost/README.md @@ -6,7 +6,7 @@ Expose your apps assets through a localhost server instead of the default custom ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/log/README.md b/plugins/log/README.md index 779f9056..7785ae66 100644 --- a/plugins/log/README.md +++ b/plugins/log/README.md @@ -4,7 +4,7 @@ Configurable logging for your Tauri app. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/notification/README.md b/plugins/notification/README.md index ed5545a2..1387df60 100644 --- a/plugins/notification/README.md +++ b/plugins/notification/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/notification/src/desktop.rs b/plugins/notification/src/desktop.rs index 47be71b5..81473489 100644 --- a/plugins/notification/src/desktop.rs +++ b/plugins/notification/src/desktop.rs @@ -72,15 +72,16 @@ mod imp { /// /// # Examples /// ```rust,no_run - /// use tauri::api::notification::Notification; + /// use tauri_plugin_notification::NotificationExt; /// // first we build the application to access the Tauri configuration /// let app = tauri::Builder::default() /// // on an actual app, remove the string argument - /// .build(tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json")) + /// .build(tauri::generate_context!("test/tauri.conf.json")) /// .expect("error while building tauri application"); /// /// // shows a notification with the given title and body - /// Notification::new(&app.config().tauri.bundle.identifier) + /// app.notification() + /// .builder() /// .title("New message") /// .body("You've got a new message.") /// .show(); @@ -136,15 +137,20 @@ mod imp { /// # Examples /// /// ```no_run - /// use tauri::api::notification::Notification; + /// use tauri_plugin_notification::NotificationExt; /// - /// // on an actual app, remove the string argument - /// let context = tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json"); - /// Notification::new(&context.config().tauri.bundle.identifier) - /// .title("Tauri") - /// .body("Tauri is awesome!") - /// .show() - /// .unwrap(); + /// tauri::Builder::default() + /// .setup(|app| { + /// app.notification() + /// .builder() + /// .title("Tauri") + /// .body("Tauri is awesome!") + /// .show() + /// .unwrap(); + /// Ok(()) + /// }) + /// .run(tauri::generate_context!("test/tauri.conf.json")) + /// .expect("error while running tauri application"); /// ``` /// /// ## Platform-specific @@ -200,22 +206,18 @@ mod imp { /// # Examples /// /// ```no_run - /// use tauri::api::notification::Notification; - /// - /// // on an actual app, remove the string argument - /// let context = tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json"); - /// let identifier = context.config().tauri.bundle.identifier.clone(); + /// use tauri_plugin_notification::NotificationExt; /// /// tauri::Builder::default() /// .setup(move |app| { - /// Notification::new(&identifier) + /// app.notification().builder() /// .title("Tauri") /// .body("Tauri is awesome!") - /// .notify(&app.handle()) + /// .show() /// .unwrap(); /// Ok(()) /// }) - /// .run(context) + /// .run(tauri::generate_context!("test/tauri.conf.json")) /// .expect("error while running tauri application"); /// ``` #[cfg(feature = "windows7-compat")] diff --git a/plugins/notification/test/tauri.conf.json b/plugins/notification/test/tauri.conf.json new file mode 100644 index 00000000..8a9c0108 --- /dev/null +++ b/plugins/notification/test/tauri.conf.json @@ -0,0 +1,22 @@ +{ + "$schema": "../../../node_modules/.pnpm/@tauri-apps+cli@2.0.0-alpha.8/node_modules/@tauri-apps/cli/schema.json", + "build": { + "distDir": ".", + "devPath": "http://localhost:4000" + }, + "tauri": { + "bundle": { + "identifier": "studio.tauri.example", + "active": true, + "icon": ["../../../examples/api/src-tauri/icons/icon.png"] + }, + "windows": [ + { + "title": "Tauri App" + } + ], + "security": { + "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self'" + } + } +} diff --git a/plugins/os/README.md b/plugins/os/README.md index eb32d944..124a1f30 100644 --- a/plugins/os/README.md +++ b/plugins/os/README.md @@ -4,7 +4,7 @@ Read information about the operating system. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/persisted-scope/README.md b/plugins/persisted-scope/README.md index 2dd60751..01ac82b4 100644 --- a/plugins/persisted-scope/README.md +++ b/plugins/persisted-scope/README.md @@ -4,7 +4,7 @@ Save filesystem and asset scopes and restore them when the app is reopened. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/positioner/README.md b/plugins/positioner/README.md index ac2a152f..26787b0e 100644 --- a/plugins/positioner/README.md +++ b/plugins/positioner/README.md @@ -6,7 +6,7 @@ This plugin is a port of [electron-positioner](https://github.com/jenslind/elect ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/process/README.md b/plugins/process/README.md index 790af6f2..55b83071 100644 --- a/plugins/process/README.md +++ b/plugins/process/README.md @@ -4,7 +4,7 @@ This plugin provides APIs to access the current process. To spawn child processe ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/shell/README.md b/plugins/shell/README.md index 36385bf4..80400eaa 100644 --- a/plugins/shell/README.md +++ b/plugins/shell/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/shell/src/process/mod.rs b/plugins/shell/src/process/mod.rs index 1b3befd7..d677d636 100644 --- a/plugins/shell/src/process/mod.rs +++ b/plugins/shell/src/process/mod.rs @@ -200,24 +200,29 @@ impl Command { /// # Examples /// /// ```rust,no_run - /// use tauri::api::process::{Command, CommandEvent}; - /// tauri::async_runtime::spawn(async move { - /// let (mut rx, mut child) = Command::new("cargo") - /// .args(["tauri", "dev"]) - /// .spawn() - /// .expect("Failed to spawn cargo"); + /// use tauri_plugin_shell::{process::CommandEvent, ShellExt}; + /// tauri::Builder::default() + /// .setup(|app| { + /// let handle = app.handle(); + /// tauri::async_runtime::spawn(async move { + /// let (mut rx, mut child) = handle.shell().command("cargo") + /// .args(["tauri", "dev"]) + /// .spawn() + /// .expect("Failed to spawn cargo"); /// - /// let mut i = 0; - /// while let Some(event) = rx.recv().await { - /// if let CommandEvent::Stdout(line) = event { - /// println!("got: {}", String::from_utf8(line).unwrap()); - /// i += 1; - /// if i == 4 { - /// child.write("message from Rust\n".as_bytes()).unwrap(); - /// i = 0; + /// let mut i = 0; + /// while let Some(event) = rx.recv().await { + /// if let CommandEvent::Stdout(line) = event { + /// println!("got: {}", String::from_utf8(line).unwrap()); + /// i += 1; + /// if i == 4 { + /// child.write("message from Rust\n".as_bytes()).unwrap(); + /// i = 0; + /// } + /// } /// } - /// } - /// } + /// }); + /// Ok(()) /// }); /// ``` pub fn spawn(self) -> crate::Result<(Receiver, CommandChild)> { @@ -288,9 +293,13 @@ impl Command { /// /// # Examples /// ```rust,no_run - /// use tauri::api::process::Command; - /// let status = Command::new("which").args(["ls"]).status().unwrap(); - /// println!("`which` finished with status: {:?}", status.code()); + /// use tauri_plugin_shell::ShellExt; + /// tauri::Builder::default() + /// .setup(|app| { + /// let status = tauri::async_runtime::block_on(async move { app.shell().command("which").args(["ls"]).status().await.unwrap() }); + /// println!("`which` finished with status: {:?}", status.code()); + /// Ok(()) + /// }); /// ``` pub async fn status(self) -> crate::Result { let (mut rx, _child) = self.spawn()?; @@ -310,10 +319,14 @@ impl Command { /// # Examples /// /// ```rust,no_run - /// use tauri::api::process::Command; - /// let output = Command::new("echo").args(["TAURI"]).output().unwrap(); - /// assert!(output.status.success()); - /// assert_eq!(String::from_utf8(output.stdout).unwrap(), "TAURI"); + /// use tauri_plugin_shell::ShellExt; + /// tauri::Builder::default() + /// .setup(|app| { + /// let output = tauri::async_runtime::block_on(async move { app.shell().command("echo").args(["TAURI"]).output().await.unwrap() }); + /// assert!(output.status.success()); + /// assert_eq!(String::from_utf8(output.stdout).unwrap(), "TAURI"); + /// Ok(()) + /// }); /// ``` pub async fn output(self) -> crate::Result { let (mut rx, _child) = self.spawn()?; @@ -387,7 +400,7 @@ mod tests { #[cfg(not(windows))] #[test] fn test_cmd_spawn_output() { - let cmd = Command::new("cat").args(["test/api/test.txt"]); + let cmd = Command::new("cat").args(["test/test.txt"]); let (mut rx, _) = cmd.spawn().unwrap(); tauri::async_runtime::block_on(async move { @@ -408,7 +421,7 @@ mod tests { #[cfg(not(windows))] #[test] fn test_cmd_spawn_raw_output() { - let cmd = Command::new("cat").args(["test/api/test.txt"]); + let cmd = Command::new("cat").args(["test/test.txt"]); let (mut rx, _) = cmd.spawn().unwrap(); tauri::async_runtime::block_on(async move { @@ -430,7 +443,7 @@ mod tests { #[test] // test the failure case fn test_cmd_spawn_fail() { - let cmd = Command::new("cat").args(["test/api/"]); + let cmd = Command::new("cat").args(["test/"]); let (mut rx, _) = cmd.spawn().unwrap(); tauri::async_runtime::block_on(async move { @@ -442,7 +455,7 @@ mod tests { CommandEvent::Stderr(line) => { assert_eq!( String::from_utf8(line).unwrap(), - "cat: test/api/: Is a directory" + "cat: test/: Is a directory" ); } _ => {} @@ -455,7 +468,7 @@ mod tests { #[test] // test the failure case (raw encoding) fn test_cmd_spawn_raw_fail() { - let cmd = Command::new("cat").args(["test/api/"]); + let cmd = Command::new("cat").args(["test/"]); let (mut rx, _) = cmd.spawn().unwrap(); tauri::async_runtime::block_on(async move { @@ -467,7 +480,7 @@ mod tests { CommandEvent::Stderr(line) => { assert_eq!( String::from_utf8(line).unwrap(), - "cat: test/api/: Is a directory" + "cat: test/: Is a directory" ); } _ => {} @@ -479,7 +492,7 @@ mod tests { #[cfg(not(windows))] #[test] fn test_cmd_output_output() { - let cmd = Command::new("cat").args(["test/api/test.txt"]); + let cmd = Command::new("cat").args(["test/test.txt"]); let output = tauri::async_runtime::block_on(cmd.output()).unwrap(); assert_eq!(String::from_utf8(output.stderr).unwrap(), ""); @@ -492,13 +505,13 @@ mod tests { #[cfg(not(windows))] #[test] fn test_cmd_output_output_fail() { - let cmd = Command::new("cat").args(["test/api/"]); + let cmd = Command::new("cat").args(["test/"]); let output = tauri::async_runtime::block_on(cmd.output()).unwrap(); assert_eq!(String::from_utf8(output.stdout).unwrap(), ""); assert_eq!( String::from_utf8(output.stderr).unwrap(), - "cat: test/api/: Is a directory\n" + "cat: test/: Is a directory\n" ); } } diff --git a/plugins/shell/test/test.txt b/plugins/shell/test/test.txt new file mode 100644 index 00000000..ec77307a --- /dev/null +++ b/plugins/shell/test/test.txt @@ -0,0 +1 @@ +This is a test doc! \ No newline at end of file diff --git a/plugins/single-instance/README.md b/plugins/single-instance/README.md index 18ad3f6f..6c72dc4e 100644 --- a/plugins/single-instance/README.md +++ b/plugins/single-instance/README.md @@ -4,7 +4,7 @@ Ensure a single instance of your tauri app is running. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/sql/README.md b/plugins/sql/README.md index 387c5db1..153d23dd 100644 --- a/plugins/sql/README.md +++ b/plugins/sql/README.md @@ -4,7 +4,7 @@ Interface with SQL databases through [sqlx](https://github.com/launchbadge/sqlx) ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/store/README.md b/plugins/store/README.md index 4f6d1fa0..cc63ab7e 100644 --- a/plugins/store/README.md +++ b/plugins/store/README.md @@ -4,7 +4,7 @@ Simple, persistent key-value store. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/store/src/lib.rs b/plugins/store/src/lib.rs index a7b66b2e..7c7918f4 100644 --- a/plugins/store/src/lib.rs +++ b/plugins/store/src/lib.rs @@ -46,7 +46,7 @@ pub fn with_store) -> Result>( if collection.frozen { return Err(Error::NotFound(path.to_path_buf())); } - let mut store = StoreBuilder::new(app, path.to_path_buf()).build(); + let mut store = StoreBuilder::new(path).build(app); // ignore loading errors, just use the default if let Err(err) = store.load() { warn!( @@ -205,15 +205,14 @@ impl Builder { /// # Examples /// /// ``` - /// # fn main() -> Result<(), Box> { - /// use tauri_plugin_store::{StoreBuilder,PluginBuilder}; + /// use tauri_plugin_store::{StoreBuilder, Builder}; /// - /// let store = StoreBuilder::new("store.bin".parse()?).build(); - /// - /// let builder = PluginBuilder::default().store(store); - /// - /// # Ok(()) - /// # } + /// tauri::Builder::default() + /// .setup(|app| { + /// let store = StoreBuilder::new("store.bin").build(app.handle()); + /// let builder = Builder::default().store(store); + /// Ok(()) + /// }); /// ``` pub fn store(mut self, store: Store) -> Self { self.stores.insert(store.path.clone(), store); @@ -225,15 +224,14 @@ impl Builder { /// # Examples /// /// ``` - /// # fn main() -> Result<(), Box> { - /// use tauri_plugin_store::{StoreBuilder,PluginBuilder}; - /// - /// let store = StoreBuilder::new("store.bin".parse()?).build(); - /// - /// let builder = PluginBuilder::default().stores([store]); + /// use tauri_plugin_store::{StoreBuilder, Builder}; /// - /// # Ok(()) - /// # } + /// tauri::Builder::default() + /// .setup(|app| { + /// let store = StoreBuilder::new("store.bin").build(app.handle()); + /// let builder = Builder::default().stores([store]); + /// Ok(()) + /// }); /// ``` pub fn stores>>(mut self, stores: T) -> Self { self.stores = stores @@ -250,15 +248,14 @@ impl Builder { /// # Examples /// /// ``` - /// # fn main() -> Result<(), Box> { - /// use tauri_plugin_store::{StoreBuilder,PluginBuilder}; + /// use tauri_plugin_store::{StoreBuilder, Builder}; /// - /// let store = StoreBuilder::new("store.bin".parse()?).build(); - /// - /// let builder = PluginBuilder::default().freeze(); - /// - /// # Ok(()) - /// # } + /// tauri::Builder::default() + /// .setup(|app| { + /// let store = StoreBuilder::new("store.bin").build(app.handle()); + /// app.handle().plugin(Builder::default().freeze().build()); + /// Ok(()) + /// }); /// ``` pub fn freeze(mut self) -> Self { self.frozen = true; @@ -270,16 +267,14 @@ impl Builder { /// # Examples /// /// ``` - /// # fn main() -> Result<(), Box> { - /// use tauri_plugin_store::{StoreBuilder,PluginBuilder}; - /// use tauri::Wry; - /// - /// let store = StoreBuilder::new("store.bin".parse()?).build(); - /// - /// let plugin = PluginBuilder::default().build::(); + /// use tauri_plugin_store::{StoreBuilder, Builder}; /// - /// # Ok(()) - /// # } + /// tauri::Builder::default() + /// .setup(|app| { + /// let store = StoreBuilder::new("store.bin").build(app.handle()); + /// app.handle().plugin(Builder::default().build()); + /// Ok(()) + /// }); /// ``` pub fn build(mut self) -> TauriPlugin { plugin::Builder::new("store") diff --git a/plugins/store/src/store.rs b/plugins/store/src/store.rs index 004b05b9..f8cba4e0 100644 --- a/plugins/store/src/store.rs +++ b/plugins/store/src/store.rs @@ -8,7 +8,7 @@ use std::{ collections::HashMap, fs::{create_dir_all, read, File}, io::Write, - path::PathBuf, + path::{Path, PathBuf}, }; use tauri::{AppHandle, Manager, Runtime}; @@ -30,8 +30,7 @@ fn default_deserialize( } /// Builds a [`Store`] -pub struct StoreBuilder { - app: AppHandle, +pub struct StoreBuilder { path: PathBuf, defaults: Option>, cache: HashMap, @@ -39,7 +38,7 @@ pub struct StoreBuilder { deserialize: DeserializeFn, } -impl StoreBuilder { +impl StoreBuilder { /// Creates a new [`StoreBuilder`]. /// /// # Examples @@ -47,15 +46,14 @@ impl StoreBuilder { /// # fn main() -> Result<(), Box> { /// use tauri_plugin_store::StoreBuilder; /// - /// let builder = StoreBuilder::new("store.bin".parse()?); + /// let builder = StoreBuilder::new("store.bin"); /// /// # Ok(()) /// # } /// ``` - pub fn new(app: AppHandle, path: PathBuf) -> Self { + pub fn new>(path: P) -> Self { Self { - app, - path, + path: path.as_ref().to_path_buf(), defaults: None, cache: Default::default(), serialize: default_serialize, @@ -75,7 +73,7 @@ impl StoreBuilder { /// /// defaults.insert("foo".to_string(), "bar".into()); /// - /// let builder = StoreBuilder::new("store.bin".parse()?) + /// let builder = StoreBuilder::new("store.bin") /// .defaults(defaults); /// /// # Ok(()) @@ -93,7 +91,7 @@ impl StoreBuilder { /// # fn main() -> Result<(), Box> { /// use tauri_plugin_store::StoreBuilder; /// - /// let builder = StoreBuilder::new("store.bin".parse()?) + /// let builder = StoreBuilder::new("store.bin") /// .default("foo".to_string(), "bar".into()); /// /// # Ok(()) @@ -113,7 +111,7 @@ impl StoreBuilder { /// # fn main() -> Result<(), Box> { /// use tauri_plugin_store::StoreBuilder; /// - /// let builder = StoreBuilder::new("store.json".parse()?) + /// let builder = StoreBuilder::new("store.json") /// .serialize(|cache| serde_json::to_vec(&cache).map_err(Into::into)); /// /// # Ok(()) @@ -130,7 +128,7 @@ impl StoreBuilder { /// # fn main() -> Result<(), Box> { /// use tauri_plugin_store::StoreBuilder; /// - /// let builder = StoreBuilder::new("store.json".parse()?) + /// let builder = StoreBuilder::new("store.json") /// .deserialize(|bytes| serde_json::from_slice(&bytes).map_err(Into::into)); /// /// # Ok(()) @@ -144,16 +142,15 @@ impl StoreBuilder { /// /// # Examples /// ``` - /// # fn main() -> Result<(), Box> { - /// use tauri_plugin_store::StoreBuilder; - /// - /// let store = StoreBuilder::new("store.bin".parse()?).build(); - /// - /// # Ok(()) - /// # } - pub fn build(self) -> Store { + /// tauri::Builder::default() + /// .setup(|app| { + /// let store = tauri_plugin_store::StoreBuilder::new("store.json").build(app.handle()); + /// Ok(()) + /// }); + /// ``` + pub fn build(self, app: AppHandle) -> Store { Store { - app: self.app, + app, path: self.path, defaults: self.defaults, cache: self.cache, diff --git a/plugins/stronghold/README.md b/plugins/stronghold/README.md index da84b0d7..b57bd2d9 100644 --- a/plugins/stronghold/README.md +++ b/plugins/stronghold/README.md @@ -4,7 +4,7 @@ Store secrets and keys using the [IOTA Stronghold](https://github.com/iotaledger ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index a7da0aeb..ab74fd5d 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -1,20 +1,15 @@ [package] name = "tauri-plugin-updater" version = "0.0.0" -edition = "2021" -#edition.workspace = true -#authors.workspace = true -#license.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true [dependencies] -#tauri = { workspace = true, features = ["updater"] } -#serde.workspace = true -#serde_json.workspace = true -#thiserror.workspace = true -tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next", features = ["updater", "fs-extract-api"] } -serde = "1" -serde_json = "1" -thiserror = "1" +tauri = { workspace = true, features = ["updater", "fs-extract-api"] } +serde.workspace = true +serde_json.workspace = true +thiserror.workspace = true tokio = "1" reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } diff --git a/plugins/updater/README.md b/plugins/updater/README.md index cb6e26fa..d618b606 100644 --- a/plugins/updater/README.md +++ b/plugins/updater/README.md @@ -4,7 +4,7 @@ In-app updates for Tauri applications. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/updater/tests/app-updater/Cargo.toml b/plugins/updater/tests/app-updater/Cargo.toml index 72c1e1f7..0d09ee9e 100644 --- a/plugins/updater/tests/app-updater/Cargo.toml +++ b/plugins/updater/tests/app-updater/Cargo.toml @@ -1,18 +1,17 @@ [package] name = "app-updater" version = "0.1.0" -edition = "2021" -#edition.workspace = true +edition.workspace = true [build-dependencies] -tauri-build = { path = "../../../../../tauri/core/tauri-build", features = [] } +tauri-build.workspace = true [dependencies] -tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } +tauri.workspace = true +serde.workspace = true +serde_json.workspace = true tauri-plugin-updater = { path = "../.." } tiny_http = "0.11" -serde = "1" -serde_json = "1" time = { version = "0.3", features = ["formatting"] } [features] diff --git a/plugins/updater/tests/app-updater/build.rs b/plugins/updater/tests/app-updater/build.rs index b055ec37..5ebf8d2f 100644 --- a/plugins/updater/tests/app-updater/build.rs +++ b/plugins/updater/tests/app-updater/build.rs @@ -3,5 +3,5 @@ // SPDX-License-Identifier: MIT fn main() { - tauri_build::build() + tauri_build::build() } diff --git a/plugins/updater/tests/app-updater/src/main.rs b/plugins/updater/tests/app-updater/src/main.rs index 272da058..12678e78 100644 --- a/plugins/updater/tests/app-updater/src/main.rs +++ b/plugins/updater/tests/app-updater/src/main.rs @@ -7,43 +7,43 @@ use tauri_plugin_updater::UpdaterExt; fn main() { - let mut context = tauri::generate_context!(); - if std::env::var("TARGET").unwrap_or_default() == "nsis" { - // /D sets the default installation directory ($INSTDIR), - // overriding InstallDir and InstallDirRegKey. - // It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. - // Only absolute paths are supported. - // NOTE: we only need this because this is an integration test and we don't want to install the app in the programs folder - context.config_mut().tauri.updater.windows.installer_args = vec![format!( - "/D={}", - tauri::utils::platform::current_exe() - .unwrap() - .parent() - .unwrap() - .display() - )]; - } - tauri::Builder::default() - .plugin(tauri_plugin_updater::Builder::new().build()) - .setup(|app| { - let handle = app.handle(); - tauri::async_runtime::spawn(async move { - match handle.updater().check().await { - Ok(update) => { - if let Err(e) = update.download_and_install().await { - println!("{e}"); - std::process::exit(1); - } - std::process::exit(0); - } - Err(e) => { - println!("{e}"); - std::process::exit(1); - } - } - }); - Ok(()) - }) - .run(context) - .expect("error while running tauri application"); + let mut context = tauri::generate_context!(); + if std::env::var("TARGET").unwrap_or_default() == "nsis" { + // /D sets the default installation directory ($INSTDIR), + // overriding InstallDir and InstallDirRegKey. + // It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. + // Only absolute paths are supported. + // NOTE: we only need this because this is an integration test and we don't want to install the app in the programs folder + context.config_mut().tauri.updater.windows.installer_args = vec![format!( + "/D={}", + tauri::utils::platform::current_exe() + .unwrap() + .parent() + .unwrap() + .display() + )]; + } + tauri::Builder::default() + .plugin(tauri_plugin_updater::Builder::new().build()) + .setup(|app| { + let handle = app.handle(); + tauri::async_runtime::spawn(async move { + match handle.updater().check().await { + Ok(update) => { + if let Err(e) = update.download_and_install(|_event| {}).await { + println!("{e}"); + std::process::exit(1); + } + std::process::exit(0); + } + Err(e) => { + println!("{e}"); + std::process::exit(1); + } + } + }); + Ok(()) + }) + .run(context) + .expect("error while running tauri application"); } diff --git a/plugins/updater/tests/app-updater/tests/update.rs b/plugins/updater/tests/app-updater/tests/update.rs index ac9a7dd7..6cc2033b 100644 --- a/plugins/updater/tests/app-updater/tests/update.rs +++ b/plugins/updater/tests/app-updater/tests/update.rs @@ -176,7 +176,7 @@ fn update_app() { let target = tauri_plugin_updater::target().expect("running updater test in an unsupported platform"); let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - let root_dir = manifest_dir.clone(); + let root_dir = manifest_dir.join("../../../.."); let mut config = Config { package: PackageConfig { version: "1.0.0" }, diff --git a/plugins/upload/README.md b/plugins/upload/README.md index 08401560..a7e387ee 100644 --- a/plugins/upload/README.md +++ b/plugins/upload/README.md @@ -4,7 +4,7 @@ Upload files from disk to a remote server over HTTP. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/upload/guest-js/index.ts b/plugins/upload/guest-js/index.ts index 1a605633..f13a1627 100644 --- a/plugins/upload/guest-js/index.ts +++ b/plugins/upload/guest-js/index.ts @@ -1,30 +1,38 @@ -import { invoke } from "@tauri-apps/api/tauri"; -import { appWindow } from "tauri-plugin-window-api"; +import { invoke, transformCallback } from "@tauri-apps/api/tauri"; interface ProgressPayload { - id: number; progress: number; total: number; } -type ProgressHandler = (progress: number, total: number) => void; -const handlers: Map = new Map(); -let listening = false; +type ProgressHandler = (progress: ProgressPayload) => void; -async function listenToEventIfNeeded(event: string): Promise { - if (listening) { - return await Promise.resolve(); - } - return await appWindow - .listen(event, ({ payload }) => { - const handler = handlers.get(payload.id); - if (handler != null) { - handler(payload.progress, payload.total); - } - }) - .then(() => { - listening = true; +// TODO: use channel from @tauri-apps/api on v2 +class Channel { + id: number; + // @ts-expect-error field used by the IPC serializer + private readonly __TAURI_CHANNEL_MARKER__ = true; + #onmessage: (response: T) => void = () => { + // no-op + }; + + constructor() { + this.id = transformCallback((response: T) => { + this.#onmessage(response); }); + } + + set onmessage(handler: (response: T) => void) { + this.#onmessage = handler; + } + + get onmessage(): (response: T) => void { + return this.#onmessage; + } + + toJSON(): string { + return `__CHANNEL__:${this.id}`; + } } async function upload( @@ -37,17 +45,17 @@ async function upload( window.crypto.getRandomValues(ids); const id = ids[0]; + const onProgress = new Channel(); if (progressHandler != null) { - handlers.set(id, progressHandler); + onProgress.onmessage = progressHandler; } - await listenToEventIfNeeded("upload://progress"); - await invoke("plugin:upload|upload", { id, url, filePath, headers: headers ?? {}, + onProgress, }); } @@ -65,17 +73,17 @@ async function download( window.crypto.getRandomValues(ids); const id = ids[0]; + const onProgress = new Channel(); if (progressHandler != null) { - handlers.set(id, progressHandler); + onProgress.onmessage = progressHandler; } - await listenToEventIfNeeded("download://progress"); - await invoke("plugin:upload|download", { id, url, filePath, headers: headers ?? {}, + onProgress, }); } diff --git a/plugins/upload/package.json b/plugins/upload/package.json index e84f3b62..acd01d42 100644 --- a/plugins/upload/package.json +++ b/plugins/upload/package.json @@ -28,7 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0", - "tauri-plugin-window-api": "0.0.0" + "@tauri-apps/api": "^1.2.0" } } diff --git a/plugins/upload/src/lib.rs b/plugins/upload/src/lib.rs index c4a0d8c7..714fd1ca 100644 --- a/plugins/upload/src/lib.rs +++ b/plugins/upload/src/lib.rs @@ -5,16 +5,17 @@ use futures_util::TryStreamExt; use serde::{ser::Serializer, Serialize}; use tauri::{ + api::ipc::Channel, command, plugin::{Builder as PluginBuilder, TauriPlugin}, - Runtime, Window, + Runtime, }; use tokio::{fs::File, io::AsyncWriteExt}; use tokio_util::codec::{BytesCodec, FramedRead}; use read_progress_stream::ReadProgressStream; -use std::{collections::HashMap, sync::Mutex}; +use std::collections::HashMap; type Result = std::result::Result; @@ -39,19 +40,17 @@ impl Serialize for Error { #[derive(Clone, Serialize)] struct ProgressPayload { - id: u32, progress: u64, total: u64, } #[command] async fn download( - window: Window, - id: u32, url: &str, file_path: &str, headers: HashMap, -) -> Result { + on_progress: Channel, +) -> Result<()> { let client = reqwest::Client::new(); let mut request = client.get(url); @@ -69,33 +68,28 @@ async fn download( while let Some(chunk) = stream.try_next().await? { file.write_all(&chunk).await?; - let _ = window.emit( - "download://progress", - ProgressPayload { - id, - progress: chunk.len() as u64, - total, - }, - ); + let _ = on_progress.send(&ProgressPayload { + progress: chunk.len() as u64, + total, + }); } - Ok(id) + Ok(()) } #[command] async fn upload( - window: Window, - id: u32, url: &str, file_path: &str, headers: HashMap, + on_progress: Channel, ) -> Result { // Read the file let file = File::open(file_path).await?; // Create the request and attach the file to the body let client = reqwest::Client::new(); - let mut request = client.post(url).body(file_to_body(id, window, file)); + let mut request = client.post(url).body(file_to_body(on_progress, file)); // Loop trought the headers keys and values // and add them to the request object. @@ -108,20 +102,13 @@ async fn upload( response.json().await.map_err(Into::into) } -fn file_to_body(id: u32, window: Window, file: File) -> reqwest::Body { +fn file_to_body(channel: Channel, file: File) -> reqwest::Body { let stream = FramedRead::new(file, BytesCodec::new()).map_ok(|r| r.freeze()); - let window = Mutex::new(window); + reqwest::Body::wrap_stream(ReadProgressStream::new( stream, Box::new(move |progress, total| { - let _ = window.lock().unwrap().emit( - "upload://progress", - ProgressPayload { - id, - progress, - total, - }, - ); + let _ = channel.send(&ProgressPayload { progress, total }); }), )) } diff --git a/plugins/websocket/README.md b/plugins/websocket/README.md index 4557b851..1e2aa98e 100644 --- a/plugins/websocket/README.md +++ b/plugins/websocket/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/window-state/README.md b/plugins/window-state/README.md index 710270a3..ef99f245 100644 --- a/plugins/window-state/README.md +++ b/plugins/window-state/README.md @@ -4,7 +4,7 @@ Save window positions and sizes and restore them when the app is reopened. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/plugins/window-state/guest-js/index.ts b/plugins/window-state/guest-js/index.ts index a40d8183..2d303112 100644 --- a/plugins/window-state/guest-js/index.ts +++ b/plugins/window-state/guest-js/index.ts @@ -1,5 +1,17 @@ import { invoke } from "@tauri-apps/api/tauri"; -import { WindowLabel, getCurrent } from "tauri-plugin-window-api"; + +interface WindowDef { + label: string; +} + +declare global { + interface Window { + __TAURI_METADATA__: { + __windows: WindowDef[]; + __currentWindow: WindowDef; + }; + } +} export enum StateFlags { SIZE = 1 << 0, @@ -21,7 +33,7 @@ async function saveWindowState(flags: StateFlags) { /** * Restore the state for the specified window from disk. */ -async function restoreState(label: WindowLabel, flags: StateFlags) { +async function restoreState(label: string, flags: StateFlags) { invoke("plugin:window-state|restore_state", { label, flags }); } @@ -29,7 +41,7 @@ async function restoreState(label: WindowLabel, flags: StateFlags) { * Restore the state for the current window from disk. */ async function restoreStateCurrent(flags: StateFlags) { - restoreState(getCurrent().label, flags); + restoreState(window.__TAURI_METADATA__.__currentWindow.label, flags); } export { restoreState, restoreStateCurrent, saveWindowState }; diff --git a/plugins/window-state/package.json b/plugins/window-state/package.json index d6937f9f..f7938586 100644 --- a/plugins/window-state/package.json +++ b/plugins/window-state/package.json @@ -28,7 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0", - "tauri-plugin-window-api": "0.0.0" + "@tauri-apps/api": "^1.2.0" } } diff --git a/plugins/window/README.md b/plugins/window/README.md index 4d6a6c8a..00257ccc 100644 --- a/plugins/window/README.md +++ b/plugins/window/README.md @@ -4,7 +4,7 @@ Interact with the Tauri window. ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c43adf01..2305976a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -198,9 +198,6 @@ importers: '@tauri-apps/api': specifier: ^1.2.0 version: 1.2.0 - tauri-plugin-window-api: - specifier: 0.0.0 - version: link:../window devDependencies: tslib: specifier: ^2.5.0 @@ -337,9 +334,6 @@ importers: '@tauri-apps/api': specifier: ^1.2.0 version: 1.2.0 - tauri-plugin-window-api: - specifier: 0.0.0 - version: link:../window devDependencies: tslib: specifier: ^2.5.0 @@ -401,9 +395,6 @@ importers: '@tauri-apps/api': specifier: ^1.2.0 version: 1.2.0 - tauri-plugin-window-api: - specifier: 0.0.0 - version: link:../window devDependencies: tslib: specifier: ^2.5.0 diff --git a/shared/template/README.md b/shared/template/README.md index 9ef4ffe0..f1641d84 100644 --- a/shared/template/README.md +++ b/shared/template/README.md @@ -4,7 +4,7 @@ ## Install -_This plugin requires a Rust version of at least **1.64**_ +_This plugin requires a Rust version of at least **1.65**_ There are three general methods of installation that we can recommend. From 702b7b36bda9100b0da7b156a565c9fae3feeabd Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sat, 13 May 2023 08:32:30 -0700 Subject: [PATCH 12/64] refactor: move deleted tauri APIs, prepare for next release (#355) --- .changes/config.json | 9 +- Cargo.lock | 31 +- examples/api/src-tauri/Cargo.lock | 5252 ----------------- examples/api/src-tauri/Cargo.toml | 3 +- examples/api/src-tauri/tauri.conf.json | 95 +- plugins/app/src/commands.rs | 3 +- plugins/cli/src/lib.rs | 7 +- plugins/clipboard/Cargo.lock | 3584 ----------- plugins/dialog/Cargo.toml | 1 + plugins/dialog/src/commands.rs | 30 +- plugins/dialog/src/desktop.rs | 17 +- plugins/dialog/src/error.rs | 2 + plugins/fs/Cargo.lock | 3591 ----------- plugins/fs/Cargo.toml | 2 + plugins/fs/src/commands.rs | 9 +- plugins/fs/src/config.rs | 57 + plugins/fs/src/error.rs | 3 + plugins/fs/src/lib.rs | 54 +- plugins/fs/src/scope.rs | 368 ++ plugins/http/Cargo.lock | 3874 ------------ plugins/http/Cargo.toml | 1 + plugins/http/src/commands/mod.rs | 9 +- plugins/http/src/config.rs | 19 + plugins/http/src/lib.rs | 16 +- plugins/http/src/scope.rs | 4 +- plugins/persisted-scope/Cargo.toml | 4 +- plugins/persisted-scope/src/lib.rs | 85 +- plugins/shell/src/config.rs | 148 + plugins/shell/src/lib.rs | 22 +- .../examples/vanilla/src-tauri/Cargo.lock | 4064 ------------- .../vanilla/src-tauri/tauri.conf.json | 6 - plugins/updater/Cargo.lock | 4184 ------------- plugins/updater/Cargo.toml | 6 +- plugins/updater/src/config.rs | 42 + plugins/updater/src/error.rs | 6 + plugins/updater/src/lib.rs | 27 +- plugins/updater/src/updater/core.rs | 25 +- plugins/updater/src/updater/extract.rs | 336 ++ plugins/updater/src/updater/mod.rs | 13 +- plugins/updater/src/updater/move_file.rs | 118 + plugins/updater/tests/app-updater/Cargo.lock | 3852 ------------ plugins/updater/tests/app-updater/src/main.rs | 11 +- .../updater/tests/app-updater/tauri.conf.json | 21 +- .../examples/svelte-app/src-tauri/Cargo.lock | 3363 ----------- .../svelte-app/src-tauri/tauri.conf.json | 3 - 45 files changed, 1413 insertions(+), 31964 deletions(-) delete mode 100644 examples/api/src-tauri/Cargo.lock delete mode 100644 plugins/clipboard/Cargo.lock delete mode 100644 plugins/fs/Cargo.lock create mode 100644 plugins/fs/src/config.rs create mode 100644 plugins/fs/src/scope.rs delete mode 100644 plugins/http/Cargo.lock create mode 100644 plugins/http/src/config.rs create mode 100644 plugins/shell/src/config.rs delete mode 100644 plugins/single-instance/examples/vanilla/src-tauri/Cargo.lock delete mode 100644 plugins/updater/Cargo.lock create mode 100644 plugins/updater/src/config.rs create mode 100644 plugins/updater/src/updater/extract.rs create mode 100644 plugins/updater/src/updater/move_file.rs delete mode 100644 plugins/updater/tests/app-updater/Cargo.lock delete mode 100644 plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock diff --git a/.changes/config.json b/.changes/config.json index 19006ae4..5792535f 100644 --- a/.changes/config.json +++ b/.changes/config.json @@ -71,7 +71,8 @@ "dialog": { "path": "./plugins/dialog", - "manager": "rust-disabled" + "manager": "rust-disabled", + "dependencies": ["fs"] }, "dialog-js": { "path": "./plugins/dialog", @@ -107,7 +108,8 @@ "http": { "path": "./plugins/http", - "manager": "rust-disabled" + "manager": "rust-disabled", + "dependencies": ["fs"] }, "http-js": { "path": "./plugins/http", @@ -139,7 +141,8 @@ "persisted-scope": { "path": "./plugins/persisted-scope", - "manager": "rust" + "manager": "rust", + "dependencies": ["fs"] }, "positioner": { diff --git a/Cargo.lock b/Cargo.lock index cfda4c2c..80d7bb36 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4960,15 +4960,13 @@ dependencies = [ [[package]] name = "tauri" version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" +source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" dependencies = [ "anyhow", "bytes 1.4.0", "cocoa", "dirs-next", "embed_plist", - "encoding_rs", - "flate2", "futures-util", "glib", "glob", @@ -4976,7 +4974,6 @@ dependencies = [ "heck 0.4.1", "http", "ico 0.2.0", - "ignore", "infer 0.9.0", "jni", "libc", @@ -4995,7 +4992,6 @@ dependencies = [ "serialize-to-javascript", "state", "swift-rs", - "tar", "tauri-build", "tauri-macros", "tauri-runtime", @@ -5003,24 +4999,21 @@ dependencies = [ "tauri-utils", "tempfile", "thiserror", - "time 0.3.20", "tokio", "url", "uuid", "webkit2gtk", "webview2-com", "windows 0.44.0", - "zip", ] [[package]] name = "tauri-build" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" +source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" dependencies = [ "anyhow", "cargo_toml", - "filetime", "heck 0.4.1", "json-patch", "quote", @@ -5037,7 +5030,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" +source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" dependencies = [ "base64 0.21.0", "brotli", @@ -5062,7 +5055,7 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" +source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -5147,6 +5140,7 @@ dependencies = [ "serde_json", "tauri", "tauri-build", + "tauri-plugin-fs", "thiserror", ] @@ -5155,9 +5149,11 @@ name = "tauri-plugin-fs" version = "0.0.0" dependencies = [ "anyhow", + "glob", "serde", "tauri", "thiserror", + "uuid", ] [[package]] @@ -5198,6 +5194,7 @@ dependencies = [ "serde_json", "serde_repr", "tauri", + "tauri-plugin-fs", "thiserror", ] @@ -5273,6 +5270,7 @@ dependencies = [ "serde", "serde_json", "tauri", + "tauri-plugin-fs", "thiserror", ] @@ -5373,8 +5371,10 @@ version = "0.0.0" dependencies = [ "base64 0.21.0", "dirs-next", + "flate2", "futures-util", "http", + "ignore", "minisign-verify", "mockito", "percent-encoding", @@ -5382,6 +5382,7 @@ dependencies = [ "semver", "serde", "serde_json", + "tar", "tauri", "tempfile", "thiserror", @@ -5389,6 +5390,7 @@ dependencies = [ "tokio", "tokio-test", "url", + "zip", ] [[package]] @@ -5447,7 +5449,7 @@ dependencies = [ [[package]] name = "tauri-runtime" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" +source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" dependencies = [ "gtk", "http", @@ -5461,14 +5463,13 @@ dependencies = [ "thiserror", "url", "uuid", - "webview2-com", "windows 0.44.0", ] [[package]] name = "tauri-runtime-wry" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" +source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" dependencies = [ "cocoa", "gtk", @@ -5488,7 +5489,7 @@ dependencies = [ [[package]] name = "tauri-utils" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#9a79dc085870e0c1a5df13481ff271b8c6cc3b78" +source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" dependencies = [ "aes-gcm 0.10.1", "brotli", diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock deleted file mode 100644 index 7eb6a42c..00000000 --- a/examples/api/src-tauri/Cargo.lock +++ /dev/null @@ -1,5252 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "aho-corasick" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "android_log-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" - -[[package]] -name = "android_logger" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8619b80c242aa7bd638b5c7ddd952addeecb71f69c75e33f1d47b2804f8f883a" -dependencies = [ - "android_log-sys", - "env_logger", - "log", - "once_cell", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is-terminal", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" - -[[package]] -name = "anstyle-parse" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" -dependencies = [ - "windows-sys 0.48.0", -] - -[[package]] -name = "anstyle-wincon" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" -dependencies = [ - "anstyle", - "windows-sys 0.48.0", -] - -[[package]] -name = "anyhow" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" - -[[package]] -name = "api" -version = "0.1.0" -dependencies = [ - "log", - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-app", - "tauri-plugin-cli", - "tauri-plugin-clipboard", - "tauri-plugin-dialog", - "tauri-plugin-fs", - "tauri-plugin-global-shortcut", - "tauri-plugin-http", - "tauri-plugin-log", - "tauri-plugin-notification", - "tauri-plugin-os", - "tauri-plugin-process", - "tauri-plugin-shell", - "tauri-plugin-updater", - "tauri-plugin-window", - "tiny_http", - "window-shadows", -] - -[[package]] -name = "arboard" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854" -dependencies = [ - "clipboard-win", - "core-graphics", - "image", - "log", - "objc", - "objc-foundation", - "objc_id", - "once_cell", - "parking_lot", - "thiserror", - "winapi", - "x11rb", -] - -[[package]] -name = "ascii" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" - -[[package]] -name = "async-broadcast" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" -dependencies = [ - "event-listener", - "futures-core", -] - -[[package]] -name = "async-channel" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-executor" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" -dependencies = [ - "async-lock", - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock", - "autocfg", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite", - "log", - "parking", - "polling", - "rustix", - "slab", - "socket2", - "waker-fn", -] - -[[package]] -name = "async-lock" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-recursion" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "async-task" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" - -[[package]] -name = "async-trait" -version = "0.1.68" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "atk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "atomic-waker" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "blocking" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" -dependencies = [ - "async-channel", - "async-lock", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "log", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" - -[[package]] -name = "byte-unit" -version = "4.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c" -dependencies = [ - "serde", - "utf8-width", -] - -[[package]] -name = "bytemuck" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "cargo_toml" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b" -dependencies = [ - "serde", - "toml", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" -dependencies = [ - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" -dependencies = [ - "iana-time-zone", - "num-integer", - "num-traits", - "serde", - "winapi", -] - -[[package]] -name = "chunked_transfer" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca491388666e04d7248af3f60f0c40cfb0991c72205595d7c396e3510207d1a" - -[[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 = "clap" -version = "4.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" -dependencies = [ - "clap_builder", -] - -[[package]] -name = "clap_builder" -version = "4.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" -dependencies = [ - "anstream", - "anstyle", - "bitflags", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_lex" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" - -[[package]] -name = "clipboard-win" -version = "4.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" -dependencies = [ - "error-code", - "str-buf", - "winapi", -] - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "combine" -version = "4.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "concurrent-queue" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "cxx" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.15", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "darling" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.15", -] - -[[package]] -name = "darling_macro" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "embed-resource" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a" -dependencies = [ - "cc", - "rustc_version", - "toml", - "vswhom", - "winreg 0.11.0", -] - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enumflags2" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "env_logger" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "error-code" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" -dependencies = [ - "libc", - "str-buf", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fdeflate" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "fern" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" -dependencies = [ - "log", -] - -[[package]] -name = "field-offset" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" -dependencies = [ - "memoffset 0.8.0", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", -] - -[[package]] -name = "flate2" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.48.0", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "gethostname" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "ghash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" -dependencies = [ - "opaque-debug", - "polyval", -] - -[[package]] -name = "gio" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" -dependencies = [ - "anyhow", - "heck 0.4.1", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "global-hotkey" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "273daa5db9a79be95b2b04c9955651c301a08b5dc1d7656e692e3801634aa873" -dependencies = [ - "crossbeam-channel", - "keyboard-types", - "once_cell", - "thiserror", - "windows-sys 0.48.0", - "x11-dl", -] - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick 0.7.20", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.6", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.6", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows 0.48.0", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "ico" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" -dependencies = [ - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", - "png", - "tiff", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown", - "serde", -] - -[[package]] -name = "infer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f178e61cdbfe084aa75a2f4f7a25a5bb09701a47ae1753608f194b15783c937a" -dependencies = [ - "cfb", -] - -[[package]] -name = "infer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" -dependencies = [ - "cfb", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "is-docker" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" -dependencies = [ - "once_cell", -] - -[[package]] -name = "is-terminal" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix", - "windows-sys 0.48.0", -] - -[[package]] -name = "is-wsl" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" -dependencies = [ - "is-docker", - "once_cell", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "javascriptcore-rs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jpeg-decoder" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" - -[[package]] -name = "js-sys" -version = "0.3.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "keyboard-types" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68" -dependencies = [ - "bitflags", - "serde", - "unicode-segmentation", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libappindicator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e1edfdc9b0853358306c6dfb4b77c79c779174256fe93d80c0b5ebca451a2f" -dependencies = [ - "glib", - "gtk", - "gtk-sys", - "libappindicator-sys", - "log", -] - -[[package]] -name = "libappindicator-sys" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fcb2bea89cee9613982501ec83eaa2d09256b24540ae463c52a28906163918" -dependencies = [ - "gtk-sys", - "libloading", - "once_cell", -] - -[[package]] -name = "libc" -version = "0.2.144" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" - -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", - "value-bag", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "mac-notification-sys" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" -dependencies = [ - "cc", - "dirs-next", - "objc-foundation", - "objc_id", - "time", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minisign-verify" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset 0.7.1", - "static_assertions", -] - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "notify-rust" -version = "4.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfa211d18e360f08e36c364308f394b5eb23a6629150690e109a916dc6f610e" -dependencies = [ - "log", - "mac-notification-sys", - "serde", - "tauri-winrt-notification", - "zbus", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "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_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "open" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16814a067484415fda653868c9be0ac5f2abd2ef5d951082a5f2fe1b3662944" -dependencies = [ - "is-wsl", - "pathdiff", -] - -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "os_info" -version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" -dependencies = [ - "log", - "serde", - "winapi", -] - -[[package]] -name = "os_pipe" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "plist" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" -dependencies = [ - "base64 0.21.0", - "indexmap", - "line-wrap", - "quick-xml 0.28.2", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" -dependencies = [ - "bitflags", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - -[[package]] -name = "polyval" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" -dependencies = [ - "memchr", -] - -[[package]] -name = "quick-xml" -version = "0.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" -dependencies = [ - "aho-corasick 1.0.1", - "memchr", - "regex-syntax 0.7.1", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" - -[[package]] -name = "reqwest" -version = "0.11.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "ipnet", - "js-sys", - "log", - "mime", - "mime_guess", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "winreg 0.10.1", -] - -[[package]] -name = "rfd" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb2988ec50c9bcdb0c012b89643a6094a35a785a37897211ee62e1639342f7b" -dependencies = [ - "async-io", - "block", - "dispatch", - "futures-util", - "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 0.44.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.162" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.162" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_spanned" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shared_child" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "simd-adler32" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup3" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" -dependencies = [ - "bitflags", - "futures-channel", - "gio", - "glib", - "libc", - "once_cell", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "str-buf" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" -dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "swift-rs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" -dependencies = [ - "base64 0.21.0", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2" -dependencies = [ - "cfg-expr", - "heck 0.4.1", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "746ae5d0ca57ae275a792f109f6e992e0b41a443abdf3f5c6eff179ef5b3443a" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dirs-next", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libappindicator", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid", - "windows 0.44.0", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "target-lexicon" -version = "0.12.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" - -[[package]] -name = "tauri" -version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" -dependencies = [ - "anyhow", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck 0.4.1", - "http", - "ico 0.2.0", - "ignore", - "infer 0.9.0", - "jni", - "libc", - "log", - "objc", - "once_cell", - "percent-encoding", - "png", - "rand 0.8.5", - "raw-window-handle", - "reqwest", - "semver", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "swift-rs", - "tar", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "time", - "tokio", - "url", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", - "zip", -] - -[[package]] -name = "tauri-build" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" -dependencies = [ - "anyhow", - "cargo_toml", - "filetime", - "heck 0.4.1", - "json-patch", - "quote", - "semver", - "serde", - "serde_json", - "swift-rs", - "tauri-codegen", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" -dependencies = [ - "base64 0.21.0", - "brotli", - "ico 0.3.0", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-app" -version = "0.0.0" -dependencies = [ - "tauri", -] - -[[package]] -name = "tauri-plugin-cli" -version = "0.0.0" -dependencies = [ - "clap", - "log", - "serde", - "serde_json", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-plugin-clipboard" -version = "0.0.0" -dependencies = [ - "arboard", - "log", - "serde", - "serde_json", - "tauri", - "tauri-build", - "thiserror", -] - -[[package]] -name = "tauri-plugin-dialog" -version = "0.0.0" -dependencies = [ - "glib", - "log", - "raw-window-handle", - "rfd", - "serde", - "serde_json", - "tauri", - "tauri-build", - "thiserror", -] - -[[package]] -name = "tauri-plugin-fs" -version = "0.0.0" -dependencies = [ - "anyhow", - "serde", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-plugin-global-shortcut" -version = "0.0.0" -dependencies = [ - "global-hotkey", - "log", - "serde", - "serde_json", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-plugin-http" -version = "0.0.0" -dependencies = [ - "bytes", - "glob", - "http", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "serde_repr", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-plugin-log" -version = "0.0.0" -dependencies = [ - "android_logger", - "byte-unit", - "cocoa", - "fern", - "log", - "objc", - "serde", - "serde_json", - "serde_repr", - "swift-rs", - "tauri", - "tauri-build", - "time", -] - -[[package]] -name = "tauri-plugin-notification" -version = "0.1.0" -dependencies = [ - "log", - "notify-rust", - "rand 0.8.5", - "serde", - "serde_json", - "serde_repr", - "tauri", - "tauri-build", - "thiserror", - "time", - "url", - "win7-notifications", -] - -[[package]] -name = "tauri-plugin-os" -version = "0.0.0" -dependencies = [ - "log", - "os_info", - "serde", - "serde_json", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-plugin-process" -version = "0.0.0" -dependencies = [ - "tauri", -] - -[[package]] -name = "tauri-plugin-shell" -version = "0.0.0" -dependencies = [ - "encoding_rs", - "log", - "open", - "os_pipe", - "regex", - "serde", - "serde_json", - "shared_child", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-plugin-updater" -version = "0.0.0" -dependencies = [ - "base64 0.21.0", - "dirs-next", - "futures-util", - "http", - "minisign-verify", - "percent-encoding", - "reqwest", - "semver", - "serde", - "serde_json", - "tauri", - "tempfile", - "thiserror", - "time", - "tokio", - "url", -] - -[[package]] -name = "tauri-plugin-window" -version = "0.0.0" -dependencies = [ - "serde", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-runtime" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" -dependencies = [ - "gtk", - "http", - "http-range", - "jni", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid", - "webview2-com", - "windows 0.44.0", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" -dependencies = [ - "cocoa", - "gtk", - "jni", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#0ab5f40d3a4207f20e4440587b41c4e78f91d233" -dependencies = [ - "aes-gcm", - "brotli", - "ctor", - "getrandom 0.2.9", - "glob", - "heck 0.4.1", - "html5ever", - "infer 0.12.0", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "serde_with", - "serialize-to-javascript", - "thiserror", - "url", - "walkdir", - "windows 0.44.0", -] - -[[package]] -name = "tauri-winres" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" -dependencies = [ - "embed-resource", - "toml", -] - -[[package]] -name = "tauri-winrt-notification" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" -dependencies = [ - "quick-xml 0.23.1", - "strum", - "windows 0.39.0", -] - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "tiff" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - -[[package]] -name = "time" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" -dependencies = [ - "itoa 1.0.6", - "libc", - "num_threads", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" -dependencies = [ - "time-core", -] - -[[package]] -name = "tiny_http" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d6ef4e10d23c1efb862eecad25c5054429a71958b4eeef85eb5e7170b477ca" -dependencies = [ - "ascii", - "chunked_transfer", - "log", - "time", - "url", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "uds_windows" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" -dependencies = [ - "tempfile", - "winapi", -] - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "universal-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" -dependencies = [ - "crypto-common", - "subtle", -] - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "utf8-width" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "uuid" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "value-bag" -version = "1.0.0-alpha.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" -dependencies = [ - "ctor", - "version_check", -] - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "vswhom" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" -dependencies = [ - "libc", - "vswhom-sys", -] - -[[package]] -name = "vswhom-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.15", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb" - -[[package]] -name = "wasm-streams" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys" -version = "0.3.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - -[[package]] -name = "webview2-com" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "webview2-com-sys" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.44.0", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "weezl" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" - -[[package]] -name = "win7-notifications" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "210952d7163b9ed83a6fd9754ab2a101d14480f8491b5f1d6292771d88dbee70" -dependencies = [ - "once_cell", - "windows-sys 0.36.1", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-wsapoll" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "window-shadows" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d30320647cfc3dc45554c8ad825b84831def81f967a2f7589931328ff9b16d" -dependencies = [ - "cocoa", - "objc", - "raw-window-handle", - "windows-sys 0.42.0", -] - -[[package]] -name = "windows" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" -dependencies = [ - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", -] - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.42.2", -] - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-bindgen" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-interface" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-metadata" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" - -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-tokens" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winnow" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "winreg" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "wry" -version = "0.28.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d15f9f827d537cefe6d047be3930f5d89b238dfb85e08ba6a319153217635aa" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "soup3", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" -dependencies = [ - "gethostname", - "nix 0.24.3", - "winapi", - "winapi-wsapoll", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" -dependencies = [ - "nix 0.24.3", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] - -[[package]] -name = "xdg-home" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" -dependencies = [ - "nix 0.26.2", - "winapi", -] - -[[package]] -name = "zbus" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29242fa5ec5693629ae74d6eb1f69622a9511f600986d6d9779bccf36ac316e3" -dependencies = [ - "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-recursion", - "async-task", - "async-trait", - "byteorder", - "derivative", - "enumflags2", - "event-listener", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix 0.26.2", - "once_cell", - "ordered-stream", - "rand 0.8.5", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tracing", - "uds_windows", - "winapi", - "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537793e26e9af85f774801dc52c6f6292352b2b517c5cf0449ffd3735732a53a" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "syn 1.0.109", - "zvariant_utils", -] - -[[package]] -name = "zbus_names" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3" -dependencies = [ - "serde", - "static_assertions", - "zvariant", -] - -[[package]] -name = "zip" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", -] - -[[package]] -name = "zvariant" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8" -dependencies = [ - "byteorder", - "enumflags2", - "libc", - "serde", - "static_assertions", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", - "zvariant_utils", -] - -[[package]] -name = "zvariant_utils" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index e64d84b8..4bd7ce49 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -33,13 +33,12 @@ tauri-plugin-window = { path = "../../../plugins/window" } [dependencies.tauri] workspace = true features = [ - "api-all", "icon-ico", "icon-png", "isolation", "macos-private-api", "system-tray", - "updater" + "protocol-asset" ] [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] diff --git a/examples/api/src-tauri/tauri.conf.json b/examples/api/src-tauri/tauri.conf.json index 741a7e1f..8fd3fee4 100644 --- a/examples/api/src-tauri/tauri.conf.json +++ b/examples/api/src-tauri/tauri.conf.json @@ -46,47 +46,8 @@ ] } } - } - }, - "tauri": { - "pattern": { - "use": "isolation", - "options": { - "dir": "../isolation-dist/" - } }, - "macOSPrivateApi": true, - "bundle": { - "active": true, - "identifier": "com.tauri.api", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "windows": { - "wix": { - "language": { - "en-US": {}, - "pt-BR": { - "localePath": "locales/pt-BR.wxl" - } - } - } - } - }, - "updater": { - "active": true, - "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK", - "endpoints": [ - "https://tauri-update-server.vercel.app/update/{{target}}/{{current_version}}" - ] - }, - "allowlist": { - "all": true, - "fs": { + "fs": { "scope": { "allow": ["$APPDATA/db/**", "$DOWNLOAD/**", "$RESOURCE/**"], "deny": ["$APPDATA/db/*.stronghold"] @@ -117,15 +78,46 @@ } ] }, - "protocol": { - "asset": true, - "assetScope": { - "allow": ["$APPDATA/db/**", "$RESOURCE/**"], - "deny": ["$APPDATA/db/*.stronghold"] - } - }, "http": { "scope": ["http://localhost:3003"] + }, + "updater": { + "endpoints": [ + "https://tauri-update-server.vercel.app/update/{{target}}/{{current_version}}" + ] + } + }, + "tauri": { + "pattern": { + "use": "isolation", + "options": { + "dir": "../isolation-dist/" + } + }, + "macOSPrivateApi": true, + "bundle": { + "active": true, + "identifier": "com.tauri.api", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "windows": { + "wix": { + "language": { + "en-US": {}, + "pt-BR": { + "localePath": "locales/pt-BR.wxl" + } + } + } + }, + "updater": { + "active": true, + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK" } }, "windows": [], @@ -136,7 +128,14 @@ "img-src": "'self' asset: https://asset.localhost blob: data:", "style-src": "'unsafe-inline' 'self' https://fonts.googleapis.com" }, - "freezePrototype": true + "freezePrototype": true, + "assetProtocol": { + "enable": true, + "scope": { + "allow": ["$APPDATA/db/**", "$RESOURCE/**"], + "deny": ["$APPDATA/db/*.stronghold"] + } + } }, "systemTray": { "iconPath": "icons/tray_icon_with_transparency.png", diff --git a/plugins/app/src/commands.rs b/plugins/app/src/commands.rs index 1ef048ff..1871473b 100644 --- a/plugins/app/src/commands.rs +++ b/plugins/app/src/commands.rs @@ -12,8 +12,7 @@ pub fn name(app: AppHandle) -> String { #[tauri::command] pub fn tauri_version() -> &'static str { - // TODO: return actual tauri version with `tauri::VERSION` - env!("CARGO_PKG_VERSION") + tauri::VERSION } #[tauri::command] diff --git a/plugins/cli/src/lib.rs b/plugins/cli/src/lib.rs index aaa13498..25795c01 100644 --- a/plugins/cli/src/lib.rs +++ b/plugins/cli/src/lib.rs @@ -11,12 +11,11 @@ use config::{Arg, Config}; pub use error::Error; type Result = std::result::Result; -// TODO: use PluginApi#app when 2.0.0-alpha.9 is released -pub struct Cli(PluginApi, AppHandle); +pub struct Cli(PluginApi); impl Cli { pub fn matches(&self) -> Result { - parser::get_matches(self.0.config(), self.1.package_info()) + parser::get_matches(self.0.config(), self.0.app().package_info()) } } @@ -39,7 +38,7 @@ pub fn init() -> TauriPlugin { Builder::new("cli") .invoke_handler(tauri::generate_handler![cli_matches]) .setup(|app, api| { - app.manage(Cli(api, app.clone())); + app.manage(Cli(api)); Ok(()) }) .build() diff --git a/plugins/clipboard/Cargo.lock b/plugins/clipboard/Cargo.lock deleted file mode 100644 index f81b2058..00000000 --- a/plugins/clipboard/Cargo.lock +++ /dev/null @@ -1,3584 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "anyhow" -version = "1.0.70" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" - -[[package]] -name = "atk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "bytemuck" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "cargo_toml" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfbc36312494041e2cdd5f06697b7e89d4b76f42773a0b5556ac290ff22acc2" -dependencies = [ - "serde", - "toml 0.5.11", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35b255461940a32985c627ce82900867c61db1659764d3675ea81963f72a4c6" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fdeflate" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "field-offset" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" -dependencies = [ - "memoffset", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", -] - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide 0.6.2", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" -dependencies = [ - "anyhow", - "heck", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.6", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.6", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" -dependencies = [ - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "infer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" -dependencies = [ - "cfb", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "javascriptcore-rs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e712e62827c382a77b87f590532febb1f8b2fdbc3eefa1ee37fe7281687075ef" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.141" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" - -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "plist" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" -dependencies = [ - "base64 0.21.0", - "indexmap", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" -dependencies = [ - "bitflags", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide 0.7.1", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "reqwest" -version = "0.11.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "winreg", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_spanned" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "simd-adler32" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup3" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" -dependencies = [ - "bitflags", - "futures-channel", - "gio", - "glib", - "libc", - "once_cell", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "swift-rs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" -dependencies = [ - "base64 0.21.0", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "6.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555fc8147af6256f3931a36bb83ad0023240ce9cf2b319dec8236fd1f220b05f" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml 0.7.3", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f2340617d383561b0ea25358b97ec2c2ba04db48c458ce71dd1b38d7fd09ac5" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid", - "windows", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tauri" -version = "2.0.0-alpha.8" -dependencies = [ - "anyhow", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck", - "http", - "ignore", - "jni", - "libc", - "log", - "objc", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "reqwest", - "semver", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "swift-rs", - "tar", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "tokio", - "url", - "uuid", - "webkit2gtk", - "webview2-com", - "windows", -] - -[[package]] -name = "tauri-build" -version = "2.0.0-alpha.4" -dependencies = [ - "anyhow", - "cargo_toml", - "filetime", - "heck", - "json-patch", - "semver", - "serde", - "serde_json", - "swift-rs", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.0.0-alpha.4" -dependencies = [ - "base64 0.21.0", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.0.0-alpha.4" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 1.0.109", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-clipboard" -version = "0.1.0" -dependencies = [ - "serde", - "tauri", - "tauri-build", - "thiserror", -] - -[[package]] -name = "tauri-runtime" -version = "0.13.0-alpha.4" -dependencies = [ - "gtk", - "http", - "http-range", - "jni", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid", - "webview2-com", - "windows", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -dependencies = [ - "cocoa", - "gtk", - "jni", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid", - "webkit2gtk", - "webview2-com", - "windows", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.0.0-alpha.4" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck", - "html5ever", - "infer", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows", -] - -[[package]] -name = "tauri-winres" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7a78dc04f75fb5ab815e66ac561c81e92a968a40f29e7c21afd152d694fad8" -dependencies = [ - "toml 0.5.11", - "version_check", -] - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" -dependencies = [ - "itoa 1.0.6", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.45.0", -] - -[[package]] -name = "tokio-util" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-streams" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - -[[package]] -name = "webview2-com" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "webview2-com-sys" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-bindgen" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-interface" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-metadata" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-tokens" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winnow" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "wry" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf0dbfa7ccbd2e3832a3098b19d4b552360ea00a40b244a99caef46bffd84f" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "soup3", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] diff --git a/plugins/dialog/Cargo.toml b/plugins/dialog/Cargo.toml index 905de823..1882da38 100644 --- a/plugins/dialog/Cargo.toml +++ b/plugins/dialog/Cargo.toml @@ -13,6 +13,7 @@ serde_json.workspace = true tauri.workspace = true log.workspace = true thiserror.workspace = true +tauri-plugin-fs = { path = "../fs", version = "0.0.0" } [target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] glib = "0.16" diff --git a/plugins/dialog/src/commands.rs b/plugins/dialog/src/commands.rs index bc68f39e..905c01ca 100644 --- a/plugins/dialog/src/commands.rs +++ b/plugins/dialog/src/commands.rs @@ -6,6 +6,7 @@ use std::path::PathBuf; use serde::{Deserialize, Serialize}; use tauri::{command, Manager, Runtime, State, Window}; +use tauri_plugin_fs::FsExt; use crate::{Dialog, FileDialogBuilder, FileResponse, MessageDialogKind, Result}; @@ -114,16 +115,18 @@ pub(crate) async fn open( let folders = dialog_builder.blocking_pick_folders(); if let Some(folders) = &folders { for folder in folders { - window - .fs_scope() - .allow_directory(folder, options.recursive)?; + if let Some(s) = window.try_fs_scope() { + s.allow_directory(folder, options.recursive)?; + } } } OpenResponse::Folders(folders) } else { let folder = dialog_builder.blocking_pick_folder(); if let Some(path) = &folder { - window.fs_scope().allow_directory(path, options.recursive)?; + if let Some(s) = window.try_fs_scope() { + s.allow_directory(path, options.recursive)?; + } } OpenResponse::Folder(folder) } @@ -134,14 +137,24 @@ pub(crate) async fn open( let files = dialog_builder.blocking_pick_files(); if let Some(files) = &files { for file in files { - window.fs_scope().allow_file(&file.path)?; + if let Some(s) = window.try_fs_scope() { + s.allow_file(&file.path)?; + } + window + .state::() + .allow_file(&file.path)?; } } OpenResponse::Files(files) } else { let file = dialog_builder.blocking_pick_file(); if let Some(file) = &file { - window.fs_scope().allow_file(&file.path)?; + if let Some(s) = window.try_fs_scope() { + s.allow_file(&file.path)?; + } + window + .state::() + .allow_file(&file.path)?; } OpenResponse::File(file) }; @@ -177,7 +190,10 @@ pub(crate) async fn save( let path = dialog_builder.blocking_save_file(); if let Some(p) = &path { - window.fs_scope().allow_file(p)?; + if let Some(s) = window.try_fs_scope() { + s.allow_file(p)?; + } + window.state::().allow_file(p)?; } Ok(path) diff --git a/plugins/dialog/src/desktop.rs b/plugins/dialog/src/desktop.rs index caba5892..25222f91 100644 --- a/plugins/dialog/src/desktop.rs +++ b/plugins/dialog/src/desktop.rs @@ -10,6 +10,7 @@ use std::path::PathBuf; +use raw_window_handle::{HasRawWindowHandle, RawWindowHandle}; use serde::de::DeserializeOwned; use tauri::{plugin::PluginApi, AppHandle, Runtime}; @@ -101,6 +102,14 @@ impl From for rfd::MessageLevel { } } +struct WindowHandle(RawWindowHandle); + +unsafe impl HasRawWindowHandle for WindowHandle { + fn raw_window_handle(&self) -> RawWindowHandle { + self.0 + } +} + impl From> for FileDialog { fn from(d: FileDialogBuilder) -> Self { let mut builder = FileDialog::new(); @@ -119,8 +128,8 @@ impl From> for FileDialog { builder = builder.add_filter(&filter.name, &v); } #[cfg(desktop)] - if let Some(_parent) = d.parent { - // TODO builder = builder.set_parent(&parent); + if let Some(parent) = d.parent { + builder = builder.set_parent(&WindowHandle(parent)); } builder @@ -144,8 +153,8 @@ impl From> for rfd::MessageDialog { dialog = dialog.set_buttons(buttons); } - if let Some(_parent) = d.parent { - // TODO dialog.set_parent(parent); + if let Some(parent) = d.parent { + dialog = dialog.set_parent(&WindowHandle(parent)); } dialog diff --git a/plugins/dialog/src/error.rs b/plugins/dialog/src/error.rs index 7aa9804b..069cd55c 100644 --- a/plugins/dialog/src/error.rs +++ b/plugins/dialog/src/error.rs @@ -21,6 +21,8 @@ pub enum Error { #[cfg(mobile)] #[error("File save dialog is not implemented on mobile")] FileSaveDialogNotImplemented, + #[error(transparent)] + Fs(#[from] tauri_plugin_fs::Error), } impl Serialize for Error { diff --git a/plugins/fs/Cargo.lock b/plugins/fs/Cargo.lock deleted file mode 100644 index 64ff9543..00000000 --- a/plugins/fs/Cargo.lock +++ /dev/null @@ -1,3591 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "anyhow" -version = "1.0.70" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" - -[[package]] -name = "atk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "bytemuck" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "cargo_toml" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfbc36312494041e2cdd5f06697b7e89d4b76f42773a0b5556ac290ff22acc2" -dependencies = [ - "serde", - "toml 0.5.11", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35b255461940a32985c627ce82900867c61db1659764d3675ea81963f72a4c6" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fdeflate" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "field-offset" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" -dependencies = [ - "memoffset", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", -] - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide 0.6.2", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" -dependencies = [ - "anyhow", - "heck", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.6", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.6", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" -dependencies = [ - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "infer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" -dependencies = [ - "cfb", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "javascriptcore-rs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e712e62827c382a77b87f590532febb1f8b2fdbc3eefa1ee37fe7281687075ef" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.141" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" - -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "plist" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" -dependencies = [ - "base64 0.21.0", - "indexmap", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" -dependencies = [ - "bitflags", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide 0.7.1", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "reqwest" -version = "0.11.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "winreg", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_spanned" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "simd-adler32" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup3" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" -dependencies = [ - "bitflags", - "futures-channel", - "gio", - "glib", - "libc", - "once_cell", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "swift-rs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" -dependencies = [ - "base64 0.21.0", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "6.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555fc8147af6256f3931a36bb83ad0023240ce9cf2b319dec8236fd1f220b05f" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml 0.7.3", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f2340617d383561b0ea25358b97ec2c2ba04db48c458ce71dd1b38d7fd09ac5" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid", - "windows", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tauri" -version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#22a763381622407d58ae72aa24c0afff00b40e04" -dependencies = [ - "anyhow", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck", - "http", - "ignore", - "jni", - "libc", - "log", - "objc", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "reqwest", - "semver", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "swift-rs", - "tar", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "tokio", - "url", - "uuid", - "webkit2gtk", - "webview2-com", - "windows", -] - -[[package]] -name = "tauri-build" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#22a763381622407d58ae72aa24c0afff00b40e04" -dependencies = [ - "anyhow", - "cargo_toml", - "filetime", - "heck", - "json-patch", - "semver", - "serde", - "serde_json", - "swift-rs", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#22a763381622407d58ae72aa24c0afff00b40e04" -dependencies = [ - "base64 0.21.0", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#22a763381622407d58ae72aa24c0afff00b40e04" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 1.0.109", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-fs" -version = "0.1.0" -dependencies = [ - "anyhow", - "serde", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-runtime" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#22a763381622407d58ae72aa24c0afff00b40e04" -dependencies = [ - "gtk", - "http", - "http-range", - "jni", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid", - "webview2-com", - "windows", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#22a763381622407d58ae72aa24c0afff00b40e04" -dependencies = [ - "cocoa", - "gtk", - "jni", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid", - "webkit2gtk", - "webview2-com", - "windows", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#22a763381622407d58ae72aa24c0afff00b40e04" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck", - "html5ever", - "infer", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows", -] - -[[package]] -name = "tauri-winres" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7a78dc04f75fb5ab815e66ac561c81e92a968a40f29e7c21afd152d694fad8" -dependencies = [ - "toml 0.5.11", - "version_check", -] - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" -dependencies = [ - "itoa 1.0.6", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.45.0", -] - -[[package]] -name = "tokio-util" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-streams" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - -[[package]] -name = "webview2-com" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "webview2-com-sys" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-bindgen" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-interface" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-metadata" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-tokens" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winnow" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "wry" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf0dbfa7ccbd2e3832a3098b19d4b552360ea00a40b244a99caef46bffd84f" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "soup3", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] diff --git a/plugins/fs/Cargo.toml b/plugins/fs/Cargo.toml index a9549994..bb3980b6 100644 --- a/plugins/fs/Cargo.toml +++ b/plugins/fs/Cargo.toml @@ -14,3 +14,5 @@ serde.workspace = true tauri.workspace = true thiserror.workspace = true anyhow = "1" +uuid = { version = "1", features = ["v4"] } +glob = "0.3" diff --git a/plugins/fs/src/commands.rs b/plugins/fs/src/commands.rs index cd1fc4e0..168f9629 100644 --- a/plugins/fs/src/commands.rs +++ b/plugins/fs/src/commands.rs @@ -1,8 +1,9 @@ +use crate::Scope; use anyhow::Context; use serde::{Deserialize, Serialize, Serializer}; use tauri::{ path::{BaseDirectory, SafePathBuf}, - FsScope, Manager, Runtime, Window, + Manager, Runtime, Window, }; #[cfg(unix)] @@ -16,7 +17,7 @@ use std::{ time::{SystemTime, UNIX_EPOCH}, }; -use crate::{Error, Result}; +use crate::{Error, FsExt, Result}; #[derive(Debug, thiserror::Error)] pub enum CommandError { @@ -120,7 +121,7 @@ pub fn write_file( #[derive(Clone, Copy)] struct ReadDirOptions<'a> { - pub scope: Option<&'a FsScope>, + pub scope: Option<&'a Scope>, } #[derive(Debug, Serialize)] @@ -189,7 +190,7 @@ pub fn read_dir( &resolved_path, recursive, ReadDirOptions { - scope: Some(&window.fs_scope()), + scope: Some(window.fs_scope()), }, ) .with_context(|| format!("path: {}", resolved_path.display())) diff --git a/plugins/fs/src/config.rs b/plugins/fs/src/config.rs new file mode 100644 index 00000000..837e3a40 --- /dev/null +++ b/plugins/fs/src/config.rs @@ -0,0 +1,57 @@ +use std::path::PathBuf; + +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +pub struct Config { + pub scope: FsScope, +} + +/// Protocol scope definition. +/// It is a list of glob patterns that restrict the API access from the webview. +/// +/// Each pattern 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`. +#[derive(Debug, PartialEq, Eq, Clone, Deserialize)] +#[serde(untagged)] +pub enum FsScope { + /// A list of paths that are allowed by this scope. + AllowedPaths(Vec), + /// A complete scope configuration. + Scope { + /// A list of paths that are allowed by this scope. + #[serde(default)] + allow: Vec, + /// A list of paths that are not allowed by this scope. + /// This gets precedence over the [`Self::Scope::allow`] list. + #[serde(default)] + deny: Vec, + }, +} + +impl Default for FsScope { + fn default() -> Self { + Self::AllowedPaths(Vec::new()) + } +} + +impl FsScope { + /// The list of allowed paths. + pub fn allowed_paths(&self) -> &Vec { + match self { + Self::AllowedPaths(p) => p, + Self::Scope { allow, .. } => allow, + } + } + + /// The list of forbidden paths. + pub fn forbidden_paths(&self) -> Option<&Vec> { + match self { + Self::AllowedPaths(_) => None, + Self::Scope { deny, .. } => Some(deny), + } + } +} diff --git a/plugins/fs/src/error.rs b/plugins/fs/src/error.rs index df109d43..9af56db3 100644 --- a/plugins/fs/src/error.rs +++ b/plugins/fs/src/error.rs @@ -10,6 +10,9 @@ pub enum Error { PathForbidden(PathBuf), #[error("failed to resolve path: {0}")] CannotResolvePath(tauri::path::Error), + /// Invalid glob pattern. + #[error("invalid glob pattern: {0}")] + GlobPattern(#[from] glob::PatternError), } impl Serialize for Error { diff --git a/plugins/fs/src/lib.rs b/plugins/fs/src/lib.rs index 5c1b2658..737189d5 100644 --- a/plugins/fs/src/lib.rs +++ b/plugins/fs/src/lib.rs @@ -2,20 +2,40 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +use config::FsScope; use tauri::{ plugin::{Builder as PluginBuilder, TauriPlugin}, - Runtime, + FileDropEvent, Manager, RunEvent, Runtime, WindowEvent, }; mod commands; +mod config; mod error; +mod scope; +pub use config::Config; pub use error::Error; +pub use scope::{Event as ScopeEvent, Scope}; type Result = std::result::Result; -pub fn init() -> TauriPlugin { - PluginBuilder::new("fs") +pub trait FsExt { + fn fs_scope(&self) -> &Scope; + fn try_fs_scope(&self) -> Option<&Scope>; +} + +impl> FsExt for T { + fn fs_scope(&self) -> &Scope { + self.state::().inner() + } + + fn try_fs_scope(&self) -> Option<&Scope> { + self.try_state::().map(|s| s.inner()) + } +} + +pub fn init() -> TauriPlugin> { + PluginBuilder::>::new("fs") .invoke_handler(tauri::generate_handler![ commands::read_file, commands::read_text_file, @@ -29,5 +49,33 @@ pub fn init() -> TauriPlugin { commands::exists, commands::metadata ]) + .setup(|app: &tauri::AppHandle, api| { + let default_scope = FsScope::default(); + app.manage(Scope::new( + app, + api.config() + .as_ref() + .map(|c| &c.scope) + .unwrap_or(&default_scope), + )?); + Ok(()) + }) + .on_event(|app, event| { + if let RunEvent::WindowEvent { + label: _, + event: WindowEvent::FileDrop(FileDropEvent::Dropped(paths)), + .. + } = event + { + let scope = app.fs_scope(); + for path in paths { + if path.is_file() { + let _ = scope.allow_file(path); + } else { + let _ = scope.allow_directory(path, false); + } + } + } + }) .build() } diff --git a/plugins/fs/src/scope.rs b/plugins/fs/src/scope.rs new file mode 100644 index 00000000..c8958f2e --- /dev/null +++ b/plugins/fs/src/scope.rs @@ -0,0 +1,368 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +use std::{ + collections::{HashMap, HashSet}, + fmt, + path::{Path, PathBuf, MAIN_SEPARATOR}, + sync::{Arc, Mutex}, +}; + +use crate::config::FsScope; +pub use glob::Pattern; +use uuid::Uuid; + +use crate::{Manager, Runtime}; + +/// Scope change event. +#[derive(Debug, Clone)] +pub enum Event { + /// A path has been allowed. + PathAllowed(PathBuf), + /// A path has been forbidden. + PathForbidden(PathBuf), +} + +type EventListener = Box; + +/// Scope for filesystem access. +#[derive(Clone)] +pub struct Scope { + allowed_patterns: Arc>>, + forbidden_patterns: Arc>>, + event_listeners: Arc>>, +} + +impl fmt::Debug for Scope { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Scope") + .field( + "allowed_patterns", + &self + .allowed_patterns + .lock() + .unwrap() + .iter() + .map(|p| p.as_str()) + .collect::>(), + ) + .field( + "forbidden_patterns", + &self + .forbidden_patterns + .lock() + .unwrap() + .iter() + .map(|p| p.as_str()) + .collect::>(), + ) + .finish() + } +} + +fn push_pattern, F: Fn(&str) -> Result>( + list: &mut HashSet, + pattern: P, + f: F, +) -> crate::Result<()> { + let path: PathBuf = pattern.as_ref().components().collect(); + list.insert(f(&path.to_string_lossy())?); + #[cfg(windows)] + { + if let Ok(p) = std::fs::canonicalize(&path) { + list.insert(f(&p.to_string_lossy())?); + } else { + list.insert(f(&format!("\\\\?\\{}", path.display()))?); + } + } + Ok(()) +} + +impl Scope { + /// Creates a new scope from a `FsAllowlistScope` configuration. + pub(crate) fn new>( + manager: &M, + scope: &FsScope, + ) -> crate::Result { + let mut allowed_patterns = HashSet::new(); + for path in scope.allowed_paths() { + if let Ok(path) = manager.path().parse(path) { + push_pattern(&mut allowed_patterns, path, Pattern::new)?; + } + } + + let mut forbidden_patterns = HashSet::new(); + if let Some(forbidden_paths) = scope.forbidden_paths() { + for path in forbidden_paths { + if let Ok(path) = manager.path().parse(path) { + push_pattern(&mut forbidden_patterns, path, Pattern::new)?; + } + } + } + + Ok(Self { + allowed_patterns: Arc::new(Mutex::new(allowed_patterns)), + forbidden_patterns: Arc::new(Mutex::new(forbidden_patterns)), + event_listeners: Default::default(), + }) + } + + /// The list of allowed patterns. + pub fn allowed_patterns(&self) -> HashSet { + self.allowed_patterns.lock().unwrap().clone() + } + + /// The list of forbidden patterns. + pub fn forbidden_patterns(&self) -> HashSet { + self.forbidden_patterns.lock().unwrap().clone() + } + + /// Listen to an event on this scope. + pub fn listen(&self, f: F) -> Uuid { + let id = Uuid::new_v4(); + self.event_listeners.lock().unwrap().insert(id, Box::new(f)); + id + } + + fn trigger(&self, event: Event) { + let listeners = self.event_listeners.lock().unwrap(); + let handlers = listeners.values(); + for listener in handlers { + listener(&event); + } + } + + /// Extend the allowed patterns with the given directory. + /// + /// After this function has been called, the frontend will be able to use the Tauri API to read + /// the directory and all of its files. If `recursive` is `true`, subdirectories will be accessible too. + pub fn allow_directory>(&self, path: P, recursive: bool) -> crate::Result<()> { + let path = path.as_ref(); + { + let mut list = self.allowed_patterns.lock().unwrap(); + + // allow the directory to be read + push_pattern(&mut list, path, escaped_pattern)?; + // allow its files and subdirectories to be read + push_pattern(&mut list, path, |p| { + escaped_pattern_with(p, if recursive { "**" } else { "*" }) + })?; + } + self.trigger(Event::PathAllowed(path.to_path_buf())); + Ok(()) + } + + /// Extend the allowed patterns with the given file path. + /// + /// After this function has been called, the frontend will be able to use the Tauri API to read the contents of this file. + pub fn allow_file>(&self, path: P) -> crate::Result<()> { + let path = path.as_ref(); + push_pattern( + &mut self.allowed_patterns.lock().unwrap(), + path, + escaped_pattern, + )?; + self.trigger(Event::PathAllowed(path.to_path_buf())); + Ok(()) + } + + /// Set the given directory path to be forbidden by this scope. + /// + /// **Note:** this takes precedence over allowed paths, so its access gets denied **always**. + pub fn forbid_directory>(&self, path: P, recursive: bool) -> crate::Result<()> { + let path = path.as_ref(); + { + let mut list = self.forbidden_patterns.lock().unwrap(); + + // allow the directory to be read + push_pattern(&mut list, path, escaped_pattern)?; + // allow its files and subdirectories to be read + push_pattern(&mut list, path, |p| { + escaped_pattern_with(p, if recursive { "**" } else { "*" }) + })?; + } + self.trigger(Event::PathForbidden(path.to_path_buf())); + Ok(()) + } + + /// Set the given file path to be forbidden by this scope. + /// + /// **Note:** this takes precedence over allowed paths, so its access gets denied **always**. + pub fn forbid_file>(&self, path: P) -> crate::Result<()> { + let path = path.as_ref(); + push_pattern( + &mut self.forbidden_patterns.lock().unwrap(), + path, + escaped_pattern, + )?; + self.trigger(Event::PathForbidden(path.to_path_buf())); + Ok(()) + } + + /// Determines if the given path is allowed on this scope. + pub fn is_allowed>(&self, path: P) -> bool { + let path = path.as_ref(); + let path = if !path.exists() { + crate::Result::Ok(path.to_path_buf()) + } else { + std::fs::canonicalize(path).map_err(Into::into) + }; + + if let Ok(path) = path { + let path: PathBuf = path.components().collect(); + let options = glob::MatchOptions { + // this is needed so `/dir/*` doesn't match files within subdirectories such as `/dir/subdir/file.txt` + // see: https://github.com/tauri-apps/tauri/security/advisories/GHSA-6mv3-wm7j-h4w5 + require_literal_separator: true, + // dotfiles are not supposed to be exposed by default + #[cfg(unix)] + require_literal_leading_dot: true, + ..Default::default() + }; + + let forbidden = self + .forbidden_patterns + .lock() + .unwrap() + .iter() + .any(|p| p.matches_path_with(&path, options)); + + if forbidden { + false + } else { + let allowed = self + .allowed_patterns + .lock() + .unwrap() + .iter() + .any(|p| p.matches_path_with(&path, options)); + allowed + } + } else { + false + } + } +} + +fn escaped_pattern(p: &str) -> Result { + Pattern::new(&glob::Pattern::escape(p)) +} + +fn escaped_pattern_with(p: &str, append: &str) -> Result { + Pattern::new(&format!( + "{}{}{append}", + glob::Pattern::escape(p), + MAIN_SEPARATOR + )) +} + +#[cfg(test)] +mod tests { + use super::Scope; + + fn new_scope() -> Scope { + Scope { + allowed_patterns: Default::default(), + forbidden_patterns: Default::default(), + event_listeners: Default::default(), + } + } + + #[test] + fn path_is_escaped() { + let scope = new_scope(); + #[cfg(unix)] + { + scope.allow_directory("/home/tauri/**", false).unwrap(); + assert!(scope.is_allowed("/home/tauri/**")); + assert!(scope.is_allowed("/home/tauri/**/file")); + assert!(!scope.is_allowed("/home/tauri/anyfile")); + } + #[cfg(windows)] + { + scope.allow_directory("C:\\home\\tauri\\**", false).unwrap(); + assert!(scope.is_allowed("C:\\home\\tauri\\**")); + assert!(scope.is_allowed("C:\\home\\tauri\\**\\file")); + assert!(!scope.is_allowed("C:\\home\\tauri\\anyfile")); + } + + let scope = new_scope(); + #[cfg(unix)] + { + scope.allow_file("/home/tauri/**").unwrap(); + assert!(scope.is_allowed("/home/tauri/**")); + assert!(!scope.is_allowed("/home/tauri/**/file")); + assert!(!scope.is_allowed("/home/tauri/anyfile")); + } + #[cfg(windows)] + { + scope.allow_file("C:\\home\\tauri\\**").unwrap(); + assert!(scope.is_allowed("C:\\home\\tauri\\**")); + assert!(!scope.is_allowed("C:\\home\\tauri\\**\\file")); + assert!(!scope.is_allowed("C:\\home\\tauri\\anyfile")); + } + + let scope = new_scope(); + #[cfg(unix)] + { + scope.allow_directory("/home/tauri", true).unwrap(); + scope.forbid_directory("/home/tauri/**", false).unwrap(); + assert!(!scope.is_allowed("/home/tauri/**")); + assert!(!scope.is_allowed("/home/tauri/**/file")); + assert!(scope.is_allowed("/home/tauri/**/inner/file")); + assert!(scope.is_allowed("/home/tauri/inner/folder/anyfile")); + assert!(scope.is_allowed("/home/tauri/anyfile")); + } + #[cfg(windows)] + { + scope.allow_directory("C:\\home\\tauri", true).unwrap(); + scope + .forbid_directory("C:\\home\\tauri\\**", false) + .unwrap(); + assert!(!scope.is_allowed("C:\\home\\tauri\\**")); + assert!(!scope.is_allowed("C:\\home\\tauri\\**\\file")); + assert!(scope.is_allowed("C:\\home\\tauri\\**\\inner\\file")); + assert!(scope.is_allowed("C:\\home\\tauri\\inner\\folder\\anyfile")); + assert!(scope.is_allowed("C:\\home\\tauri\\anyfile")); + } + + let scope = new_scope(); + #[cfg(unix)] + { + scope.allow_directory("/home/tauri", true).unwrap(); + scope.forbid_file("/home/tauri/**").unwrap(); + assert!(!scope.is_allowed("/home/tauri/**")); + assert!(scope.is_allowed("/home/tauri/**/file")); + assert!(scope.is_allowed("/home/tauri/**/inner/file")); + assert!(scope.is_allowed("/home/tauri/anyfile")); + } + #[cfg(windows)] + { + scope.allow_directory("C:\\home\\tauri", true).unwrap(); + scope.forbid_file("C:\\home\\tauri\\**").unwrap(); + assert!(!scope.is_allowed("C:\\home\\tauri\\**")); + assert!(scope.is_allowed("C:\\home\\tauri\\**\\file")); + assert!(scope.is_allowed("C:\\home\\tauri\\**\\inner\\file")); + assert!(scope.is_allowed("C:\\home\\tauri\\anyfile")); + } + + let scope = new_scope(); + #[cfg(unix)] + { + scope.allow_directory("/home/tauri", false).unwrap(); + assert!(scope.is_allowed("/home/tauri/**")); + assert!(!scope.is_allowed("/home/tauri/**/file")); + assert!(!scope.is_allowed("/home/tauri/**/inner/file")); + assert!(scope.is_allowed("/home/tauri/anyfile")); + } + #[cfg(windows)] + { + scope.allow_directory("C:\\home\\tauri", false).unwrap(); + assert!(scope.is_allowed("C:\\home\\tauri\\**")); + assert!(!scope.is_allowed("C:\\home\\tauri\\**\\file")); + assert!(!scope.is_allowed("C:\\home\\tauri\\**\\inner\\file")); + assert!(scope.is_allowed("C:\\home\\tauri\\anyfile")); + } + } +} diff --git a/plugins/http/Cargo.lock b/plugins/http/Cargo.lock deleted file mode 100644 index 21d5e94e..00000000 --- a/plugins/http/Cargo.lock +++ /dev/null @@ -1,3874 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "anyhow" -version = "1.0.70" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" - -[[package]] -name = "atk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "bytemuck" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "cargo_toml" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfbc36312494041e2cdd5f06697b7e89d4b76f42773a0b5556ac290ff22acc2" -dependencies = [ - "serde", - "toml 0.5.11", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35b255461940a32985c627ce82900867c61db1659764d3675ea81963f72a4c6" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fdeflate" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "field-offset" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" -dependencies = [ - "memoffset", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", -] - -[[package]] -name = "flate2" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" -dependencies = [ - "crc32fast", - "miniz_oxide 0.6.2", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" -dependencies = [ - "anyhow", - "heck", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.6", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.6", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" -dependencies = [ - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" -dependencies = [ - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "infer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" -dependencies = [ - "cfb", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "javascriptcore-rs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e712e62827c382a77b87f590532febb1f8b2fdbc3eefa1ee37fe7281687075ef" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.141" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" - -[[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.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f508063cc7bb32987c71511216bd5a32be15bccb6a80b52df8b9d7f01fc3aa2" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "openssl" -version = "0.10.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e30d8bc91859781f0a943411186324d580f2bbeb71b452fe91ae344806af3f1" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "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.15", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-src" -version = "111.25.2+1.1.1t" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320708a054ad9b3bf314688b5db87cf4d6683d64cfc835e2337924ae62bf4431" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3d193fb1488ad46ffe3aaabc912cc931d02ee8518fe2959aea8ef52718b0c0" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "plist" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" -dependencies = [ - "base64 0.21.0", - "indexmap", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" -dependencies = [ - "bitflags", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide 0.7.1", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "reqwest" -version = "0.11.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "mime_guess", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "tokio-rustls", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots", - "winreg", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722529a737f5a942fdbac3a46cee213053196737c5eaa3386d52e85b786f2659" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustls" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" -dependencies = [ - "base64 0.21.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" -dependencies = [ - "windows-sys 0.42.0", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "security-framework" -version = "2.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.160" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_spanned" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "simd-adler32" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup3" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" -dependencies = [ - "bitflags", - "futures-channel", - "gio", - "glib", - "libc", - "once_cell", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "swift-rs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" -dependencies = [ - "base64 0.21.0", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "6.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555fc8147af6256f3931a36bb83ad0023240ce9cf2b319dec8236fd1f220b05f" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml 0.7.3", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f2340617d383561b0ea25358b97ec2c2ba04db48c458ce71dd1b38d7fd09ac5" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid", - "windows", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tauri" -version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#2d5378bfc1ba817ee2f331b41738a90e5997e5e8" -dependencies = [ - "anyhow", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck", - "http", - "ignore", - "jni", - "libc", - "log", - "objc", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "reqwest", - "semver", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "swift-rs", - "tar", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "tokio", - "url", - "uuid", - "webkit2gtk", - "webview2-com", - "windows", -] - -[[package]] -name = "tauri-build" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#2d5378bfc1ba817ee2f331b41738a90e5997e5e8" -dependencies = [ - "anyhow", - "cargo_toml", - "filetime", - "heck", - "json-patch", - "semver", - "serde", - "serde_json", - "swift-rs", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#2d5378bfc1ba817ee2f331b41738a90e5997e5e8" -dependencies = [ - "base64 0.21.0", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#2d5378bfc1ba817ee2f331b41738a90e5997e5e8" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 1.0.109", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-http" -version = "0.1.0" -dependencies = [ - "bytes", - "glob", - "http", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "serde_repr", - "tauri", - "thiserror", -] - -[[package]] -name = "tauri-runtime" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#2d5378bfc1ba817ee2f331b41738a90e5997e5e8" -dependencies = [ - "gtk", - "http", - "http-range", - "jni", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid", - "webview2-com", - "windows", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#2d5378bfc1ba817ee2f331b41738a90e5997e5e8" -dependencies = [ - "cocoa", - "gtk", - "jni", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid", - "webkit2gtk", - "webview2-com", - "windows", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#2d5378bfc1ba817ee2f331b41738a90e5997e5e8" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck", - "html5ever", - "infer", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows", -] - -[[package]] -name = "tauri-winres" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7a78dc04f75fb5ab815e66ac561c81e92a968a40f29e7c21afd152d694fad8" -dependencies = [ - "toml 0.5.11", - "version_check", -] - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" -dependencies = [ - "itoa 1.0.6", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.45.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.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-util" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "toml" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b55a3fef2a1e3b3a00ce878640918820d3c51081576ac657d23af9fc7928fdb" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-streams" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] - -[[package]] -name = "webview2-com" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "webview2-com-sys" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-bindgen" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-interface" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-metadata" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-tokens" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winnow" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "wry" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf0dbfa7ccbd2e3832a3098b19d4b552360ea00a40b244a99caef46bffd84f" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "soup3", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index 3272ad39..b0e6ab32 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -10,6 +10,7 @@ serde.workspace = true serde_json.workspace = true tauri.workspace = true thiserror.workspace = true +tauri-plugin-fs = { path = "../fs", version = "0.0.0" } glob = "0.3" rand = "0.8" bytes = { version = "1", features = [ "serde" ] } diff --git a/plugins/http/src/commands/mod.rs b/plugins/http/src/commands/mod.rs index f38d6eac..5e9d4c58 100644 --- a/plugins/http/src/commands/mod.rs +++ b/plugins/http/src/commands/mod.rs @@ -1,4 +1,5 @@ use tauri::{path::SafePathBuf, AppHandle, Runtime, State}; +use tauri_plugin_fs::FsExt; use crate::{ClientId, Http}; @@ -38,7 +39,6 @@ pub async fn request( client_id: ClientId, options: Box, ) -> super::Result { - use crate::Manager; if http.scope.is_allowed(&options.url) { let client = http .clients @@ -55,7 +55,12 @@ pub async fn request( .. } = value { - if SafePathBuf::new(path.clone()).is_err() || !app.fs_scope().is_allowed(path) { + if SafePathBuf::new(path.clone()).is_err() + || !app + .try_fs_scope() + .map(|s| s.is_allowed(path)) + .unwrap_or_default() + { return Err(crate::Error::PathNotAllowed(path.clone())); } } diff --git a/plugins/http/src/config.rs b/plugins/http/src/config.rs new file mode 100644 index 00000000..d6b5eba0 --- /dev/null +++ b/plugins/http/src/config.rs @@ -0,0 +1,19 @@ +use reqwest::Url; +use serde::Deserialize; + +#[derive(Deserialize)] +pub struct Config { + pub scope: HttpAllowlistScope, +} + +/// HTTP API scope definition. +/// It is a list of URLs that can be accessed by the webview when using the HTTP APIs. +/// The scoped URL is matched against the request URL using a glob pattern. +/// +/// Examples: +/// - "https://**": allows all HTTPS urls +/// - "https://*.github.com/tauri-apps/tauri": allows any subdomain of "github.com" with the "tauri-apps/api" path +/// - "https://myapi.service.com/users/*": allows access to any URLs that begins with "https://myapi.service.com/users/" +#[allow(rustdoc::bare_urls)] +#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize)] +pub struct HttpAllowlistScope(pub Vec); diff --git a/plugins/http/src/lib.rs b/plugins/http/src/lib.rs index 5f905c54..348d26a2 100644 --- a/plugins/http/src/lib.rs +++ b/plugins/http/src/lib.rs @@ -1,3 +1,4 @@ +use config::{Config, HttpAllowlistScope}; pub use reqwest as client; use tauri::{ plugin::{Builder, TauriPlugin}, @@ -7,6 +8,7 @@ use tauri::{ use std::{collections::HashMap, sync::Mutex}; mod commands; +mod config; mod error; mod scope; @@ -33,18 +35,24 @@ impl> HttpExt for T { } } -pub fn init() -> TauriPlugin { - Builder::new("http") +pub fn init() -> TauriPlugin> { + Builder::>::new("http") .invoke_handler(tauri::generate_handler![ commands::create_client, commands::drop_client, commands::request ]) - .setup(|app, _api| { + .setup(|app, api| { + let default_scope = HttpAllowlistScope::default(); app.manage(Http { app: app.clone(), clients: Default::default(), - scope: scope::Scope::new(&app.config().tauri.allowlist.http.scope), + scope: scope::Scope::new( + api.config() + .as_ref() + .map(|c| &c.scope) + .unwrap_or(&default_scope), + ), }); Ok(()) }) diff --git a/plugins/http/src/scope.rs b/plugins/http/src/scope.rs index 241c2816..0c620a9b 100644 --- a/plugins/http/src/scope.rs +++ b/plugins/http/src/scope.rs @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +use crate::config::HttpAllowlistScope; use glob::Pattern; use reqwest::Url; -use tauri::utils::config::HttpAllowlistScope; /// Scope for filesystem access. #[derive(Debug, Clone)] @@ -38,7 +38,7 @@ impl Scope { #[cfg(test)] mod tests { - use tauri::utils::config::HttpAllowlistScope; + use crate::config::HttpAllowlistScope; #[test] fn is_allowed() { diff --git a/plugins/persisted-scope/Cargo.toml b/plugins/persisted-scope/Cargo.toml index 4e1f24d0..841fc5c1 100644 --- a/plugins/persisted-scope/Cargo.toml +++ b/plugins/persisted-scope/Cargo.toml @@ -17,6 +17,4 @@ log.workspace = true thiserror.workspace = true aho-corasick = "1.0" bincode = "1" - -[features] -protocol-asset = [ "tauri/protocol-asset" ] \ No newline at end of file +tauri-plugin-fs = { path = "../fs", version = "0.0.0" } diff --git a/plugins/persisted-scope/src/lib.rs b/plugins/persisted-scope/src/lib.rs index 1473056c..6fb9d0f9 100644 --- a/plugins/persisted-scope/src/lib.rs +++ b/plugins/persisted-scope/src/lib.rs @@ -6,8 +6,9 @@ use aho_corasick::AhoCorasick; use serde::{Deserialize, Serialize}; use tauri::{ plugin::{Builder, TauriPlugin}, - AppHandle, FsScopeEvent, Manager, Runtime, + AppHandle, Manager, Runtime, }; +use tauri_plugin_fs::{FsExt, ScopeEvent as FsScopeEvent}; use std::{ fs::{create_dir_all, File}, @@ -59,45 +60,45 @@ fn fix_pattern(ac: &AhoCorasick, s: &str) -> String { } fn save_scopes(app: &AppHandle, app_dir: &Path, scope_state_path: &Path) { - let fs_scope = app.fs_scope(); - - let scope = Scope { - allowed_paths: fs_scope - .allowed_patterns() - .into_iter() - .map(|p| p.to_string()) - .collect(), - forbidden_patterns: fs_scope - .forbidden_patterns() - .into_iter() - .map(|p| p.to_string()) - .collect(), - }; - - let _ = create_dir_all(app_dir) - .and_then(|_| File::create(scope_state_path)) - .map_err(Error::Io) - .and_then(|mut f| { - f.write_all(&bincode::serialize(&scope).map_err(Error::from)?) - .map_err(Into::into) - }); + if let Some(fs_scope) = app.try_fs_scope() { + let scope = Scope { + allowed_paths: fs_scope + .allowed_patterns() + .into_iter() + .map(|p| p.to_string()) + .collect(), + forbidden_patterns: fs_scope + .forbidden_patterns() + .into_iter() + .map(|p| p.to_string()) + .collect(), + }; + + let _ = create_dir_all(app_dir) + .and_then(|_| File::create(scope_state_path)) + .map_err(Error::Io) + .and_then(|mut f| { + f.write_all(&bincode::serialize(&scope).map_err(Error::from)?) + .map_err(Into::into) + }); + } } pub fn init() -> TauriPlugin { Builder::new("persisted-scope") .setup(|app, _api| { - let fs_scope = app.fs_scope(); - #[cfg(feature = "protocol-asset")] - let asset_protocol_scope = app.asset_protocol_scope(); + let fs_scope = app.try_fs_scope(); + let core_scopes = app.state::(); let app = app.clone(); let app_dir = app.path().app_data_dir(); if let Ok(app_dir) = app_dir { let scope_state_path = app_dir.join(SCOPE_STATE_FILENAME); - let _ = fs_scope.forbid_file(&scope_state_path); - #[cfg(feature = "protocol-asset")] - let _ = asset_protocol_scope.forbid_file(&scope_state_path); + if let Some(s) = fs_scope { + let _ = s.forbid_file(&scope_state_path); + } + let _ = core_scopes.forbid_file(&scope_state_path); // We're trying to fix broken .persisted-scope files seamlessly, so we'll be running this on the values read on the saved file. // We will still save some semi-broken values because the scope events are quite spammy and we don't want to reduce runtime performance any further. @@ -111,16 +112,18 @@ pub fn init() -> TauriPlugin { for allowed in &scope.allowed_paths { let allowed = fix_pattern(&ac, allowed); - let _ = fs_scope.allow_file(&allowed); - #[cfg(feature = "protocol-asset")] - let _ = asset_protocol_scope.allow_file(&allowed); + if let Some(s) = fs_scope { + let _ = s.allow_file(&allowed); + } + let _ = core_scopes.allow_file(&allowed); } for forbidden in &scope.forbidden_patterns { let forbidden = fix_pattern(&ac, forbidden); - let _ = fs_scope.forbid_file(&forbidden); - #[cfg(feature = "protocol-asset")] - let _ = asset_protocol_scope.forbid_file(&forbidden); + if let Some(s) = fs_scope { + let _ = s.forbid_file(&forbidden); + } + let _ = core_scopes.forbid_file(&forbidden); } // Manually save the fixed scopes to disk once. @@ -128,11 +131,13 @@ pub fn init() -> TauriPlugin { save_scopes(&app, &app_dir, &scope_state_path); } - fs_scope.listen(move |event| { - if let FsScopeEvent::PathAllowed(_) = event { - save_scopes(&app, &app_dir, &scope_state_path); - } - }); + if let Some(s) = fs_scope { + s.listen(move |event| { + if let FsScopeEvent::PathAllowed(_) = event { + save_scopes(&app, &app_dir, &scope_state_path); + } + }); + } } Ok(()) }) diff --git a/plugins/shell/src/config.rs b/plugins/shell/src/config.rs new file mode 100644 index 00000000..1a35df4e --- /dev/null +++ b/plugins/shell/src/config.rs @@ -0,0 +1,148 @@ +use std::path::PathBuf; + +use serde::{de::Error as DeError, Deserialize, Deserializer}; + +/// Allowlist for the shell APIs. +/// +/// See more: https://tauri.app/v1/api/config#shellallowlistconfig +#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize)] +#[serde(rename_all = "camelCase", deny_unknown_fields)] +pub struct Config { + /// Access scope for the binary execution APIs. + /// Sidecars are automatically enabled. + #[serde(default)] + pub scope: ShellAllowlistScope, + /// Open URL with the user's default application. + #[serde(default)] + pub open: ShellAllowlistOpen, +} + +/// A command allowed to be executed by the webview API. +#[derive(Debug, PartialEq, Eq, Clone)] +pub struct ShellAllowedCommand { + /// The name for this allowed shell command configuration. + /// + /// This name will be used inside of the webview API to call this command along with + /// any specified arguments. + pub name: String, + + /// 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`. + // use default just so the schema doesn't flag it as required + pub command: PathBuf, + + /// The allowed arguments for the command execution. + pub args: ShellAllowedArgs, + + /// If this command is a sidecar command. + pub sidecar: bool, +} + +impl<'de> Deserialize<'de> for ShellAllowedCommand { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + #[derive(Deserialize)] + struct InnerShellAllowedCommand { + name: String, + #[serde(rename = "cmd")] + command: Option, + #[serde(default)] + args: ShellAllowedArgs, + #[serde(default)] + sidecar: bool, + } + + let config = InnerShellAllowedCommand::deserialize(deserializer)?; + + if !config.sidecar && config.command.is_none() { + return Err(DeError::custom( + "The shell scope `command` value is required.", + )); + } + + Ok(ShellAllowedCommand { + name: config.name, + command: config.command.unwrap_or_default(), + args: config.args, + sidecar: config.sidecar, + }) + } +} + +/// A set of command arguments allowed to be executed by the webview API. +/// +/// A 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. +#[derive(Debug, PartialEq, Eq, Clone, Deserialize)] +#[serde(untagged, deny_unknown_fields)] +#[non_exhaustive] +pub enum ShellAllowedArgs { + /// Use a simple boolean to allow all or disable all arguments to this command configuration. + Flag(bool), + + /// A specific set of [`ShellAllowedArg`] that are valid to call for the command configuration. + List(Vec), +} + +impl Default for ShellAllowedArgs { + fn default() -> Self { + Self::Flag(false) + } +} + +/// A command argument allowed to be executed by the webview API. +#[derive(Debug, PartialEq, Eq, Clone, Deserialize)] +#[serde(untagged, deny_unknown_fields)] +#[non_exhaustive] +pub enum ShellAllowedArg { + /// A non-configurable argument that is passed to the command in the order it was specified. + Fixed(String), + + /// A variable that is set while calling the command from the webview API. + /// + Var { + /// [regex] validator to require passed values to conform to an expected input. + /// + /// This will require the argument value passed to this variable to match the `validator` regex + /// before it will be executed. + /// + /// [regex]: https://docs.rs/regex/latest/regex/#syntax + validator: String, + }, +} + +/// Shell scope definition. +/// It is a list of command names and associated CLI arguments that restrict the API access from the webview. +#[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize)] + +pub struct ShellAllowlistScope(pub Vec); + +/// Defines the `shell > open` api scope. +#[derive(Debug, PartialEq, Eq, Clone, Deserialize)] +#[serde(untagged, deny_unknown_fields)] +#[non_exhaustive] +pub enum ShellAllowlistOpen { + /// If the shell open API should be enabled. + /// + /// If enabled, the default validation regex (`^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+`) is used. + Flag(bool), + + /// Enable the shell open API, with a custom regex that the opened path must match against. + /// + /// If using a custom regex to support a non-http(s) schema, care should be used to prevent values + /// that allow flag-like strings to pass validation. e.g. `--enable-debugging`, `-i`, `/R`. + Validate(String), +} + +impl Default for ShellAllowlistOpen { + fn default() -> Self { + Self::Flag(false) + } +} diff --git a/plugins/shell/src/lib.rs b/plugins/shell/src/lib.rs index 70c98dd9..f9ffd1e7 100644 --- a/plugins/shell/src/lib.rs +++ b/plugins/shell/src/lib.rs @@ -8,16 +8,17 @@ use regex::Regex; use scope::{Scope, ScopeAllowedCommand, ScopeConfig}; use tauri::{ plugin::{Builder, TauriPlugin}, - utils::config::{ShellAllowedArg, ShellAllowedArgs, ShellAllowlistOpen, ShellAllowlistScope}, AppHandle, Manager, RunEvent, Runtime, }; mod commands; +mod config; mod error; mod open; pub mod process; mod scope; +use config::{Config, ShellAllowedArg, ShellAllowedArgs, ShellAllowlistOpen, ShellAllowlistScope}; pub use error::Error; type Result = std::result::Result; type ChildStore = Arc>>; @@ -61,25 +62,21 @@ impl> ShellExt for T { } } -pub fn init() -> TauriPlugin { - Builder::new("shell") +pub fn init() -> TauriPlugin> { + Builder::>::new("shell") .invoke_handler(tauri::generate_handler![ commands::execute, commands::stdin_write, commands::kill, commands::open ]) - .setup(|app, _api| { + .setup(|app, api| { + let default_config = Config::default(); + let config = api.config().as_ref().unwrap_or(&default_config); app.manage(Shell { app: app.clone(), children: Default::default(), - scope: Scope::new( - app, - shell_scope( - app.config().tauri.allowlist.shell.scope.clone(), - &app.config().tauri.allowlist.shell.open, - ), - ), + scope: Scope::new(app, shell_scope(config.scope.clone(), &config.open)), }); Ok(()) }) @@ -111,7 +108,6 @@ fn shell_scope(scope: ShellAllowlistScope, open: &ShellAllowlistOpen) -> ScopeCo Regex::new(validator).unwrap_or_else(|e| panic!("invalid regex {validator}: {e}")); Some(validator) } - _ => panic!("unknown shell open format, unable to prepare"), }; ScopeConfig { @@ -136,11 +132,9 @@ fn get_allowed_clis(scope: ShellAllowlistScope) -> HashMap panic!("unknown shell scope arg, unable to prepare"), }); Some(list.collect()) } - _ => panic!("unknown shell scope command, unable to prepare"), }; ( diff --git a/plugins/single-instance/examples/vanilla/src-tauri/Cargo.lock b/plugins/single-instance/examples/vanilla/src-tauri/Cargo.lock deleted file mode 100644 index 588ea9a6..00000000 --- a/plugins/single-instance/examples/vanilla/src-tauri/Cargo.lock +++ /dev/null @@ -1,4064 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - -[[package]] -name = "aho-corasick" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anyhow" -version = "1.0.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" - -[[package]] -name = "app" -version = "0.1.0" -dependencies = [ - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-single-instance", -] - -[[package]] -name = "async-broadcast" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61" -dependencies = [ - "event-listener", - "futures-core", - "parking_lot", -] - -[[package]] -name = "async-channel" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-executor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "once_cell", - "slab", -] - -[[package]] -name = "async-io" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7" -dependencies = [ - "autocfg", - "concurrent-queue", - "futures-lite", - "libc", - "log", - "once_cell", - "parking", - "polling", - "slab", - "socket2", - "waker-fn", - "winapi", -] - -[[package]] -name = "async-lock" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" -dependencies = [ - "event-listener", - "futures-lite", -] - -[[package]] -name = "async-recursion" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cda8f4bcc10624c4e85bc66b3f452cca98cfa5ca002dc83a16aad2367641bea" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-task" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" - -[[package]] -name = "async-trait" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atk" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "attohttpc" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcf00bc6d5abb29b5f97e3c61a90b6d3caa12f3faf897d4a3e3607c050a35a7" -dependencies = [ - "flate2", - "http", - "log", - "native-tls", - "serde", - "serde_json", - "serde_urlencoded", - "url", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "memchr", -] - -[[package]] -name = "bumpalo" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" - -[[package]] -name = "bytemuck" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" - -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - -[[package]] -name = "cairo-rs" -version = "0.15.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" -dependencies = [ - "glib-sys", - "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "cargo_toml" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e72c3ff59e3b7d24630206bb63a73af65da4ed5df1f76ee84dfafb9fee2ba60e" -dependencies = [ - "serde", - "serde_derive", - "toml", -] - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c" -dependencies = [ - "byteorder", - "uuid 0.8.2", -] - -[[package]] -name = "cfg-expr" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-expr" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "concurrent-queue" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" -dependencies = [ - "cache-padded", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "ctor" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "dbus" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8bcdd56d2e5c4ed26a529c5a9029f5db8290d433497506f958eae3be148eb6" -dependencies = [ - "libc", - "libdbus-sys", - "winapi", -] - -[[package]] -name = "deflate" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" -dependencies = [ - "adler32", - "byteorder", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn", -] - -[[package]] -name = "digest" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enumflags2" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "field-offset" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" -dependencies = [ - "memoffset", - "rustc_version 0.3.3", -] - -[[package]] -name = "filetime" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "windows-sys 0.36.1", -] - -[[package]] -name = "flate2" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" - -[[package]] -name = "futures-executor" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - -[[package]] -name = "futures-task" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" - -[[package]] -name = "futures-util" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" -dependencies = [ - "futures-core", - "futures-macro", - "futures-sink", - "futures-task", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "gdk-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps 6.0.2", -] - -[[package]] -name = "gdkx11-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps 6.0.2", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc184cace1cea8335047a471cc1da80f18acf8a76f3bab2028d499e328948ec7" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.32.0", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.15.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "gio-sys", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.2", - "winapi", -] - -[[package]] -name = "glib" -version = "0.15.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.15.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" -dependencies = [ - "anyhow", - "heck 0.4.0", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "glib-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" -dependencies = [ - "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - -[[package]] -name = "globset" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" -dependencies = [ - "glib-sys", - "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "gtk" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps 6.0.2", -] - -[[package]] -name = "gtk3-macros" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.3", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "ico" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a4b3331534254a9b64095ae60d3dc2a8225a7a70229cd5888be127cdc1f6804" -dependencies = [ - "byteorder", - "png 0.11.0", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd8e4fb07cf672b1642304e731ef8a6a4c7891d67bb4fd4f5ce58cd6ed86803c" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "infer" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b" -dependencies = [ - "cfb", -] - -[[package]] -name = "inflate" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f9f47468e9a76a6452271efadc88fe865a82be91fe75e6c0c57b87ccea59d4" -dependencies = [ - "adler32", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" - -[[package]] -name = "javascriptcore-rs" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 5.0.0", -] - -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f995a3c8f2bc3dd52a18a583e90f9ec109c047fa1603a853e46bcda14d2e279d" -dependencies = [ - "serde", - "serde_json", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.137" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" - -[[package]] -name = "libdbus-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c185b5b7ad900923ef3a8ff594083d4d9b5aea80bb4f32b8342363138c0d456b" -dependencies = [ - "pkg-config", -] - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "mac-notification-sys" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" -dependencies = [ - "cc", - "dirs-next", - "objc-foundation", - "objc_id", - "time", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "miniz_oxide" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" -dependencies = [ - "adler", -] - -[[package]] -name = "native-tls" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nix" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" -dependencies = [ - "autocfg", - "bitflags", - "cfg-if", - "libc", - "memoffset", - "pin-utils", -] - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "notify-rust" -version = "4.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0" -dependencies = [ - "dbus", - "mac-notification-sys", - "tauri-winrt-notification", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "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_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" - -[[package]] -name = "open" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a3100141f1733ea40b53381b0ae3117330735ef22309a190ac57b9576ea716" -dependencies = [ - "pathdiff", - "windows-sys 0.36.1", -] - -[[package]] -name = "openssl" -version = "0.10.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[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.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" -dependencies = [ - "autocfg", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "ordered-stream" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034ce384018b245e8d8424bbe90577fbd91a533be74107e465e3474eb2285eef" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "os_info" -version = "3.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4750134fb6a5d49afc80777394ad5d95b04bc12068c6abb92fae8f43817270f" -dependencies = [ - "log", - "serde", - "winapi", -] - -[[package]] -name = "os_pipe" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c92f2b54f081d635c77e7120862d48db8e91f7f21cef23ab1b4fe9971c59f55" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "pango" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" -dependencies = [ - "bitflags", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.15.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.2", -] - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.36.1", -] - -[[package]] -name = "paste" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" - -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pest" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb779fcf4bb850fbbb0edc96ff6cf34fd90c4b1a112ce042653280d9a7364048" -dependencies = [ - "thiserror", - "ucd-trie", -] - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" - -[[package]] -name = "plist" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" -dependencies = [ - "base64", - "indexmap", - "line-wrap", - "serde", - "time", - "xml-rs", -] - -[[package]] -name = "png" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925" -dependencies = [ - "bitflags", - "deflate", - "inflate", - "num-iter", -] - -[[package]] -name = "png" -version = "0.17.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0e7f4c94ec26ff209cee506314212639d6c91b80afb82984819fafce9df01c" -dependencies = [ - "bitflags", - "crc32fast", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "polling" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011" -dependencies = [ - "autocfg", - "cfg-if", - "libc", - "log", - "wepoll-ffi", - "winapi", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" -dependencies = [ - "once_cell", - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro2" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a" -dependencies = [ - "cty", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.7", - "redox_syscall", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "rfd" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" -dependencies = [ - "block", - "dispatch", - "glib-sys", - "gobject-sys", - "gtk-sys", - "js-sys", - "lazy_static", - "log", - "objc", - "objc-foundation", - "objc_id", - "raw-window-handle", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows 0.37.0", -] - -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.14", -] - -[[package]] -name = "rustversion" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" - -[[package]] -name = "ryu" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" -dependencies = [ - "lazy_static", - "windows-sys 0.36.1", -] - -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "security-framework" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "serde" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.85" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" -dependencies = [ - "itoa 1.0.3", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.3", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shared_child" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" - -[[package]] -name = "socket2" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup2" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "soup2-sys", -] - -[[package]] -name = "soup2-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" -dependencies = [ - "bitflags", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps 5.0.0", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "string_cache" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb" -dependencies = [ - "heck 0.3.3", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "syn" -version = "1.0.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" -dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml", - "version-compare 0.0.11", -] - -[[package]] -name = "system-deps" -version = "6.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709" -dependencies = [ - "cfg-expr 0.10.3", - "heck 0.4.0", - "pkg-config", - "toml", - "version-compare 0.1.0", -] - -[[package]] -name = "tao" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43336f5d1793543ba96e2a1e75f3a5c7dcd592743be06a0ab3a190f4fcb4b934" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "paste", - "png 0.17.6", - "raw-window-handle", - "scopeguard", - "serde", - "unicode-segmentation", - "uuid 1.1.2", - "windows 0.39.0", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tauri" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2643e2769a6bf922c274a0e6828a7dd20f9fa6d0fe4e04775d0a7eae81f82d37" -dependencies = [ - "anyhow", - "attohttpc", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck 0.4.0", - "http", - "ignore", - "notify-rust", - "objc", - "once_cell", - "open", - "os_info", - "os_pipe", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "regex", - "rfd", - "semver 1.0.14", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "shared_child", - "state", - "tar", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "tokio", - "url", - "uuid 1.1.2", - "webkit2gtk", - "webview2-com", - "windows 0.39.0", -] - -[[package]] -name = "tauri-build" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0991fb306849897439dbd4a72e4cbed2413e2eb26cb4b3ba220b94edba8b4b88" -dependencies = [ - "anyhow", - "cargo_toml", - "heck 0.4.0", - "json-patch", - "semver 1.0.14", - "serde_json", - "tauri-utils", - "winres", -] - -[[package]] -name = "tauri-codegen" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356fa253e40ae4d6ff02075011f2f2bb4066f5c9d8c1e16ca6912d7b75903ba6" -dependencies = [ - "base64", - "brotli", - "ico", - "json-patch", - "plist", - "png 0.17.6", - "proc-macro2", - "quote", - "regex", - "semver 1.0.14", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "uuid 1.1.2", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6051fd6940ddb22af452340d03c66a3e2f5d72e0788d4081d91e31528ccdc4d" -dependencies = [ - "heck 0.4.0", - "proc-macro2", - "quote", - "syn", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-single-instance" -version = "0.0.0" -dependencies = [ - "tauri", - "windows-sys 0.42.0", - "zbus", -] - -[[package]] -name = "tauri-runtime" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d49439a5ea47f474572b854972f42eda2e02a470be5ca9609cc83bb66945abe2" -dependencies = [ - "gtk", - "http", - "http-range", - "infer", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "uuid 1.1.2", - "webview2-com", - "windows 0.39.0", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dce920995fd49907aa9bea7249ed1771454f11f7611924c920a1f75fb614d4" -dependencies = [ - "cocoa", - "gtk", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid 1.1.2", - "webkit2gtk", - "webview2-com", - "windows 0.39.0", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8fdae6f29cef959809a3c3afef510c5b715a446a597ab8b791497585363f39" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck 0.4.0", - "html5ever", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver 1.0.14", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows 0.39.0", -] - -[[package]] -name = "tauri-winrt-notification" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b" -dependencies = [ - "quick-xml", - "strum", - "windows 0.39.0", -] - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a99cb8c4b9a8ef0e7907cd3b617cc8dc04d571c4e73c8ae403d80ac160bb122" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a891860d3c8d66fec8e73ddb3765f90082374dbaaa833407b904a94f1a7eb43" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -dependencies = [ - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" -dependencies = [ - "itoa 1.0.3", - "libc", - "num_threads", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0020c875007ad96677dcc890298f4b942882c5d4eb7cc8f439fc3bf813dc9c95" -dependencies = [ - "autocfg", - "bytes", - "memchr", - "num_cpus", - "once_cell", - "pin-project-lite", -] - -[[package]] -name = "toml" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" -dependencies = [ - "serde", -] - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" -dependencies = [ - "ansi_term", - "matchers", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" -dependencies = [ - "serde_json", -] - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "ucd-trie" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" - -[[package]] -name = "uds_windows" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" -dependencies = [ - "tempfile", - "winapi", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" - -[[package]] -name = "unicode-ident" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" - -[[package]] -name = "uuid" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" -dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version-compare" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" - -[[package]] -name = "version-compare" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29952969fb5e10fe834a52eb29ad0814ccdfd8387159b0933edf1344a1c9cdcc" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup2", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" -dependencies = [ - "atk-sys", - "bitflags", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pango-sys", - "pkg-config", - "soup2-sys", - "system-deps 6.0.2", -] - -[[package]] -name = "webview2-com" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.39.0", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "webview2-com-sys" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.39.0", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec" -dependencies = [ - "windows_aarch64_msvc 0.32.0", - "windows_i686_gnu 0.32.0", - "windows_i686_msvc 0.32.0", - "windows_x86_64_gnu 0.32.0", - "windows_x86_64_msvc 0.32.0", -] - -[[package]] -name = "windows" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" -dependencies = [ - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", -] - -[[package]] -name = "windows" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" -dependencies = [ - "windows-implement", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", -] - -[[package]] -name = "windows-bindgen" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" -dependencies = [ - "syn", - "windows-tokens", -] - -[[package]] -name = "windows-metadata" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" - -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", -] - -[[package]] -name = "windows-tokens" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" - -[[package]] -name = "windows_i686_gnu" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" - -[[package]] -name = "windows_i686_msvc" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - -[[package]] -name = "windows_i686_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" - -[[package]] -name = "winres" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" -dependencies = [ - "toml", -] - -[[package]] -name = "wry" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff5c1352b4266fdf92c63479d2f58ab4cd29dc4e78fbc1b62011ed1227926945" -dependencies = [ - "base64", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.39.0", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ae97874a928d821b061fce3d1fc52f08071dd53c89a6102bc06efcac3b2908" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6" -dependencies = [ - "lazy_static", - "libc", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] - -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" - -[[package]] -name = "zbus" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25ae891bd547674b368906552115143031c16c23a0f2f4b2f5f5436ab2e6a9f" -dependencies = [ - "async-broadcast", - "async-channel", - "async-executor", - "async-io", - "async-lock", - "async-recursion", - "async-task", - "async-trait", - "byteorder", - "derivative", - "dirs", - "enumflags2", - "event-listener", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix", - "once_cell", - "ordered-stream", - "rand 0.8.5", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tracing", - "uds_windows", - "winapi", - "zbus_macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aa37701ce7b3a43632d2b0ad9d4aef602b46be6bdd7fba3b7c5007f9f6eb2c2" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "syn", -] - -[[package]] -name = "zbus_names" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41a408fd8a352695690f53906dc7fd036be924ec51ea5e05666ff42685ed0af5" -dependencies = [ - "serde", - "static_assertions", - "zvariant", -] - -[[package]] -name = "zvariant" -version = "3.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c817f416f05fcbc833902f1e6064b72b1778573978cfeac54731451ccc9e207" -dependencies = [ - "byteorder", - "enumflags2", - "libc", - "serde", - "static_assertions", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "3.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd24fffd02794a76eb10109de463444064c88f5adb9e9d1a78488adc332bfef" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] diff --git a/plugins/single-instance/examples/vanilla/src-tauri/tauri.conf.json b/plugins/single-instance/examples/vanilla/src-tauri/tauri.conf.json index de4bdb81..a0593744 100644 --- a/plugins/single-instance/examples/vanilla/src-tauri/tauri.conf.json +++ b/plugins/single-instance/examples/vanilla/src-tauri/tauri.conf.json @@ -40,12 +40,6 @@ "timestampUrl": "" } }, - "updater": { - "active": false - }, - "allowlist": { - "all": true - }, "windows": [ { "title": "app", diff --git a/plugins/updater/Cargo.lock b/plugins/updater/Cargo.lock deleted file mode 100644 index cf507469..00000000 --- a/plugins/updater/Cargo.lock +++ /dev/null @@ -1,4184 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "aho-corasick" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" - -[[package]] -name = "assert-json-diff" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "atk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" - -[[package]] -name = "bytemuck" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "cargo_toml" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b" -dependencies = [ - "serde", - "toml", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" -dependencies = [ - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" -dependencies = [ - "iana-time-zone", - "num-integer", - "num-traits", - "serde", - "winapi", -] - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colored" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" -dependencies = [ - "atty", - "lazy_static", - "winapi", -] - -[[package]] -name = "combine" -version = "4.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cxx" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.15", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "darling" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.15", -] - -[[package]] -name = "darling_macro" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "embed-resource" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a" -dependencies = [ - "cc", - "rustc_version", - "toml", - "vswhom", - "winreg 0.11.0", -] - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fdeflate" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "field-offset" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" -dependencies = [ - "memoffset", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", -] - -[[package]] -name = "flate2" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.48.0", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" -dependencies = [ - "anyhow", - "heck", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick 0.7.20", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.6", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.6", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" -dependencies = [ - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows 0.48.0", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" -dependencies = [ - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown", - "serde", -] - -[[package]] -name = "infer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" -dependencies = [ - "cfb", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "javascriptcore-rs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.144" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "minisign-verify" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "mockito" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f9fece9bd97ab74339fe19f4bcaf52b76dcc18e5364c7977c1838f76b38de9" -dependencies = [ - "assert-json-diff", - "colored", - "httparse", - "lazy_static", - "log", - "rand 0.8.5", - "regex", - "serde_json", - "serde_urlencoded", - "similar", -] - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "openssl" -version = "0.10.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "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.15", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-src" -version = "111.25.3+1.1.1t" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924757a6a226bf60da5f7dd0311a34d2b52283dd82ddeb103208ddc66362f80c" -dependencies = [ - "cc", -] - -[[package]] -name = "openssl-sys" -version = "0.9.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e" -dependencies = [ - "cc", - "libc", - "openssl-src", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "plist" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" -dependencies = [ - "base64 0.21.0", - "indexmap", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" -dependencies = [ - "bitflags", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" -dependencies = [ - "aho-corasick 1.0.1", - "memchr", - "regex-syntax 0.7.1", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" - -[[package]] -name = "reqwest" -version = "0.11.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "hyper-tls", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-native-tls", - "tokio-rustls", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots", - "winreg 0.10.1", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustls" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" -dependencies = [ - "base64 0.21.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" -dependencies = [ - "windows-sys 0.42.0", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "security-framework" -version = "2.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.162" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.162" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_spanned" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "simd-adler32" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" - -[[package]] -name = "similar" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup3" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" -dependencies = [ - "bitflags", - "futures-channel", - "gio", - "glib", - "libc", - "once_cell", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "swift-rs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" -dependencies = [ - "base64 0.21.0", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "746ae5d0ca57ae275a792f109f6e992e0b41a443abdf3f5c6eff179ef5b3443a" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid", - "windows 0.44.0", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "target-lexicon" -version = "0.12.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" - -[[package]] -name = "tauri" -version = "2.0.0-alpha.8" -dependencies = [ - "anyhow", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck", - "http", - "ignore", - "jni", - "libc", - "log", - "objc", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "reqwest", - "semver", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "swift-rs", - "tar", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "time", - "tokio", - "url", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", - "zip", -] - -[[package]] -name = "tauri-build" -version = "2.0.0-alpha.4" -dependencies = [ - "anyhow", - "cargo_toml", - "filetime", - "heck", - "json-patch", - "semver", - "serde", - "serde_json", - "swift-rs", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.0.0-alpha.4" -dependencies = [ - "base64 0.21.0", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.0.0-alpha.4" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 1.0.109", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-updater" -version = "0.0.0" -dependencies = [ - "base64 0.21.0", - "dirs-next", - "futures-util", - "http", - "minisign-verify", - "mockito", - "percent-encoding", - "reqwest", - "semver", - "serde", - "serde_json", - "tauri", - "tempfile", - "thiserror", - "time", - "tokio", - "tokio-test", - "url", -] - -[[package]] -name = "tauri-runtime" -version = "0.13.0-alpha.4" -dependencies = [ - "gtk", - "http", - "http-range", - "jni", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid", - "webview2-com", - "windows 0.44.0", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -dependencies = [ - "cocoa", - "gtk", - "jni", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.0.0-alpha.4" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck", - "html5ever", - "infer", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows 0.44.0", -] - -[[package]] -name = "tauri-winres" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" -dependencies = [ - "embed-resource", - "toml", -] - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" -dependencies = [ - "itoa 1.0.6", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.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.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-stream" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-test" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3" -dependencies = [ - "async-stream", - "bytes", - "futures-core", - "tokio", - "tokio-stream", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "vswhom" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" -dependencies = [ - "libc", - "vswhom-sys", -] - -[[package]] -name = "vswhom-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-streams" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] - -[[package]] -name = "webview2-com" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "webview2-com-sys" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.44.0", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.42.2", -] - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-bindgen" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-interface" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-metadata" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-tokens" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winnow" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "winreg" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "wry" -version = "0.28.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d15f9f827d537cefe6d047be3930f5d89b238dfb85e08ba6a319153217635aa" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "soup3", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] - -[[package]] -name = "zip" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", -] diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index ab74fd5d..33e726ac 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -6,7 +6,7 @@ authors.workspace = true license.workspace = true [dependencies] -tauri = { workspace = true, features = ["updater", "fs-extract-api"] } +tauri.workspace = true serde.workspace = true serde_json.workspace = true thiserror.workspace = true @@ -23,6 +23,10 @@ percent-encoding = "2" semver = { version = "1", features = [ "serde" ] } futures-util = "0.3" tempfile = "3" +flate2 = "1" +tar = "0.4" +ignore = "0.4" +zip = { version = "0.6", default-features = false } [dev-dependencies] mockito = "0.31" diff --git a/plugins/updater/src/config.rs b/plugins/updater/src/config.rs new file mode 100644 index 00000000..458cc58d --- /dev/null +++ b/plugins/updater/src/config.rs @@ -0,0 +1,42 @@ +use serde::{Deserialize, Deserializer}; +use url::Url; + +/// Updater configuration. +#[derive(Debug, Clone, Deserialize)] +pub struct Config { + #[serde(default)] + pub endpoints: Vec, + /// Additional arguments given to the NSIS or WiX installer. + #[serde(default, alias = "installer-args")] + pub installer_args: Vec, +} + +/// A URL to an updater server. +/// +/// The URL must use the `https` scheme on production. +#[derive(Debug, PartialEq, Eq, Clone)] +pub struct UpdaterEndpoint(pub Url); + +impl std::fmt::Display for UpdaterEndpoint { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + +impl<'de> Deserialize<'de> for UpdaterEndpoint { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let url = Url::deserialize(deserializer)?; + #[cfg(all(not(debug_assertions), not(feature = "schema")))] + { + if url.scheme() != "https" { + return Err(serde::de::Error::custom( + "The configured updater endpoint must use the `https` protocol.", + )); + } + } + Ok(Self(url)) + } +} diff --git a/plugins/updater/src/error.rs b/plugins/updater/src/error.rs index 509c9504..8f0b9c74 100644 --- a/plugins/updater/src/error.rs +++ b/plugins/updater/src/error.rs @@ -78,6 +78,12 @@ pub enum Error { #[cfg(target_os = "linux")] #[error("temp directory is not on the same mount point as the AppImage")] TempDirNotOnSameMountPoint, + /// The path StripPrefixError error. + #[error("Path Error: {0}")] + PathPrefix(#[from] std::path::StripPrefixError), + /// Ignore error. + #[error("failed to walkdir: {0}")] + Ignore(#[from] ignore::Error), } impl Serialize for Error { diff --git a/plugins/updater/src/lib.rs b/plugins/updater/src/lib.rs index ec55cb5b..7d4818b3 100644 --- a/plugins/updater/src/lib.rs +++ b/plugins/updater/src/lib.rs @@ -6,15 +6,18 @@ use tauri::{ use tokio::sync::Mutex; mod commands; +mod config; mod error; mod updater; +pub use config::Config; pub use error::Error; pub use updater::*; pub type Result = std::result::Result; struct UpdaterState { target: Option, + config: Config, } struct PendingUpdate(Mutex>>); @@ -22,6 +25,7 @@ struct PendingUpdate(Mutex>>); #[derive(Default)] pub struct Builder { target: Option, + installer_args: Option>, } /// Extension trait to use the updater on [`tauri::App`], [`tauri::AppHandle`] and [`tauri::Window`]. @@ -60,11 +64,26 @@ impl Builder { self } - pub fn build(self) -> TauriPlugin { + pub fn installer_args(mut self, args: I) -> Self + where + I: IntoIterator, + S: Into, + { + self.installer_args + .replace(args.into_iter().map(Into::into).collect()); + self + } + + pub fn build(self) -> TauriPlugin { let target = self.target; - PluginBuilder::::new("updater") - .setup(move |app, _api| { - app.manage(UpdaterState { target }); + let installer_args = self.installer_args; + PluginBuilder::::new("updater") + .setup(move |app, api| { + let mut config = api.config().clone(); + if let Some(installer_args) = installer_args { + config.installer_args = installer_args; + } + app.manage(UpdaterState { target, config }); app.manage(PendingUpdate::(Default::default())); Ok(()) }) diff --git a/plugins/updater/src/updater/core.rs b/plugins/updater/src/updater/core.rs index b89adc84..bdc4d745 100644 --- a/plugins/updater/src/updater/core.rs +++ b/plugins/updater/src/updater/core.rs @@ -2,6 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +#[cfg(desktop)] +use super::{ + extract::{ArchiveFormat, Extract}, + move_file::Move, +}; use crate::{Error, Result}; use base64::Engine; use futures_util::StreamExt; @@ -13,8 +18,6 @@ use minisign_verify::{PublicKey, Signature}; use reqwest::ClientBuilder; use semver::Version; use serde::{de::Error as DeError, Deserialize, Deserializer, Serialize}; -#[cfg(desktop)] -use tauri::api::file::{ArchiveFormat, Extract, Move}; use tauri::utils::{platform::current_exe, Env}; use tauri::{AppHandle, Manager, Runtime}; use time::OffsetDateTime; @@ -36,7 +39,7 @@ use std::{ use std::ffi::OsStr; #[cfg(all(desktop, not(target_os = "windows")))] -use tauri::api::file::Compression; +use super::extract::Compression; #[cfg(target_os = "windows")] use std::{ @@ -607,6 +610,7 @@ impl Update { &self.extract_path, self.with_elevated_task, &self.app.config(), + &self.app.state::().config, )?; #[cfg(not(target_os = "windows"))] copy_files_and_run(archive_buffer, &self.extract_path)?; @@ -668,7 +672,7 @@ fn copy_files_and_run(archive_buffer: R, extract_path: &Path) -> // if something went wrong during the extraction, we should restore previous app if let Err(err) = entry.extract(extract_path) { Move::from_source(tmp_app_image).to_dest(extract_path)?; - return Err(tauri::api::Error::Extract(err.to_string())); + return Err(err); } // early finish we have everything we need here return Ok(true); @@ -706,6 +710,7 @@ fn copy_files_and_run( _extract_path: &Path, with_elevated_task: bool, config: &tauri::Config, + updater_config: &crate::Config, ) -> Result<()> { // FIXME: We need to create a memory buffer with the MSI and then run it. // (instead of extracting the MSI to a temp path) @@ -733,11 +738,11 @@ fn copy_files_and_run( // Run the EXE let mut installer = Command::new(found_path); if tauri::utils::config::WindowsUpdateInstallMode::Quiet - == config.tauri.updater.windows.install_mode + == config.tauri.bundle.updater.install_mode { installer.arg("/S"); } - installer.args(&config.tauri.updater.windows.installer_args); + installer.args(&updater_config.installer_args); installer.spawn().expect("installer failed to start"); @@ -793,17 +798,17 @@ fn copy_files_and_run( msi_path_arg.push(&found_path); msi_path_arg.push("\"\"\""); - let mut msiexec_args = config + let mut msiexec_args = updater_config .tauri + .bundle .updater - .windows .install_mode .clone() .msiexec_args() .iter() .map(|p| p.to_string()) .collect::>(); - msiexec_args.extend(config.tauri.updater.windows.installer_args.clone()); + msiexec_args.extend(updater_config.installer_args.clone()); // run the installer and relaunch the application let system_root = std::env::var("SYSTEMROOT"); @@ -890,7 +895,7 @@ fn copy_files_and_run(archive_buffer: R, extract_path: &Path) -> } } Move::from_source(tmp_dir.path()).to_dest(extract_path)?; - return Err(tauri::api::Error::Extract(err.to_string())); + return Err(err); } extracted_files.push(extraction_path); diff --git a/plugins/updater/src/updater/extract.rs b/plugins/updater/src/updater/extract.rs new file mode 100644 index 00000000..143c4d3f --- /dev/null +++ b/plugins/updater/src/updater/extract.rs @@ -0,0 +1,336 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +use std::{ + borrow::Cow, + fs, + io::{self, Cursor, Read, Seek}, + path::{self, Path, PathBuf}, +}; + +use crate::{Error, Result}; + +/// The archive reader. +#[derive(Debug)] +pub enum ArchiveReader { + /// A plain reader. + Plain(R), + /// A GZ- compressed reader (decoder). + GzCompressed(Box>), +} + +impl Read for ArchiveReader { + fn read(&mut self, buf: &mut [u8]) -> std::io::Result { + match self { + Self::Plain(r) => r.read(buf), + Self::GzCompressed(decoder) => decoder.read(buf), + } + } +} + +impl ArchiveReader { + #[allow(dead_code)] + fn get_mut(&mut self) -> &mut R { + match self { + Self::Plain(r) => r, + Self::GzCompressed(decoder) => decoder.get_mut(), + } + } +} + +/// The supported archive formats. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[non_exhaustive] +pub enum ArchiveFormat { + /// Tar archive. + Tar(Option), + /// Zip archive. + #[allow(dead_code)] + Zip, +} + +/// The supported compression types. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[non_exhaustive] +pub enum Compression { + /// Gz compression (e.g. `.tar.gz` archives) + Gz, +} + +/// The zip entry. +pub struct ZipEntry { + path: PathBuf, + is_dir: bool, + file_contents: Vec, +} + +/// A read-only view into an entry of an archive. +#[non_exhaustive] +pub enum Entry<'a, R: Read> { + /// An entry of a tar archive. + #[non_exhaustive] + Tar(Box>), + /// An entry of a zip archive. + #[non_exhaustive] + #[allow(dead_code)] + Zip(ZipEntry), +} + +impl<'a, R: Read> Entry<'a, R> { + /// The entry path. + pub fn path(&self) -> Result> { + match self { + Self::Tar(e) => e.path().map_err(Into::into), + Self::Zip(e) => Ok(Cow::Borrowed(&e.path)), + } + } + + /// Extract this entry into `into_path`. + /// If it's a directory, the target will be created, if it's a file, it'll be extracted at this location. + /// Note: You need to include the complete path, with file name and extension. + pub fn extract(self, into_path: &path::Path) -> Result<()> { + match self { + Self::Tar(mut entry) => { + // determine if it's a file or a directory + if entry.header().entry_type() == tar::EntryType::Directory { + // this is a directory, lets create it + match fs::create_dir_all(into_path) { + Ok(_) => (), + Err(e) => { + if e.kind() != io::ErrorKind::AlreadyExists { + return Err(e.into()); + } + } + } + } else { + let mut out_file = fs::File::create(into_path)?; + io::copy(&mut entry, &mut out_file)?; + + // make sure we set permissions + if let Ok(mode) = entry.header().mode() { + set_perms(into_path, Some(&mut out_file), mode, true)?; + } + } + } + Self::Zip(entry) => { + if entry.is_dir { + // this is a directory, lets create it + match fs::create_dir_all(into_path) { + Ok(_) => (), + Err(e) => { + if e.kind() != io::ErrorKind::AlreadyExists { + return Err(e.into()); + } + } + } + } else { + let mut out_file = fs::File::create(into_path)?; + io::copy(&mut Cursor::new(entry.file_contents), &mut out_file)?; + } + } + } + + Ok(()) + } +} + +/// The extract manager to retrieve files from archives. +pub struct Extract<'a, R: Read + Seek> { + reader: ArchiveReader, + archive_format: ArchiveFormat, + tar_archive: Option>>, +} + +impl<'a, R: std::fmt::Debug + Read + Seek> std::fmt::Debug for Extract<'a, R> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Extract") + .field("reader", &self.reader) + .field("archive_format", &self.archive_format) + .finish() + } +} + +impl<'a, R: Read + Seek> Extract<'a, R> { + /// Create archive from reader. + pub fn from_cursor(mut reader: R, archive_format: ArchiveFormat) -> Extract<'a, R> { + if reader.rewind().is_err() { + #[cfg(debug_assertions)] + eprintln!("Could not seek to start of the file"); + } + let compression = if let ArchiveFormat::Tar(compression) = archive_format { + compression + } else { + None + }; + Extract { + reader: match compression { + Some(Compression::Gz) => { + ArchiveReader::GzCompressed(Box::new(flate2::read::GzDecoder::new(reader))) + } + _ => ArchiveReader::Plain(reader), + }, + archive_format, + tar_archive: None, + } + } + + /// Reads the archive content. + pub fn with_files< + E: Into, + F: FnMut(Entry<'_, &mut ArchiveReader>) -> std::result::Result, + >( + &'a mut self, + mut f: F, + ) -> Result<()> { + match self.archive_format { + ArchiveFormat::Tar(_) => { + let archive = tar::Archive::new(&mut self.reader); + self.tar_archive.replace(archive); + for entry in self.tar_archive.as_mut().unwrap().entries()? { + let entry = entry?; + if entry.path().is_ok() { + let stop = f(Entry::Tar(Box::new(entry))).map_err(Into::into)?; + if stop { + break; + } + } + } + } + + ArchiveFormat::Zip => { + #[cfg(feature = "fs-extract-api")] + { + let mut archive = zip::ZipArchive::new(self.reader.get_mut())?; + let file_names = archive + .file_names() + .map(|f| f.to_string()) + .collect::>(); + for path in file_names { + let mut zip_file = archive.by_name(&path)?; + let is_dir = zip_file.is_dir(); + let mut file_contents = Vec::new(); + zip_file.read_to_end(&mut file_contents)?; + let stop = f(Entry::Zip(ZipEntry { + path: path.into(), + is_dir, + file_contents, + })) + .map_err(Into::into)?; + if stop { + break; + } + } + } + } + } + + Ok(()) + } + + /// Extract an entire source archive into a specified path. If the source is a single compressed + /// file and not an archive, it will be extracted into a file with the same name inside of + /// `into_dir`. + #[allow(dead_code)] + pub fn extract_into(&mut self, into_dir: &path::Path) -> Result<()> { + match self.archive_format { + ArchiveFormat::Tar(_) => { + let mut archive = tar::Archive::new(&mut self.reader); + archive.unpack(into_dir)?; + } + + ArchiveFormat::Zip => { + #[cfg(feature = "fs-extract-api")] + { + let mut archive = zip::ZipArchive::new(self.reader.get_mut())?; + for i in 0..archive.len() { + let mut file = archive.by_index(i)?; + // Decode the file name from raw bytes instead of using file.name() directly. + // file.name() uses String::from_utf8_lossy() which may return messy characters + // such as: τê▒Σ║ñµÿô.app/, that does not work as expected. + // Here we require the file name must be a valid UTF-8. + let file_name = String::from_utf8(file.name_raw().to_vec())?; + let out_path = into_dir.join(file_name); + if file.is_dir() { + fs::create_dir_all(&out_path)?; + } else { + if let Some(out_path_parent) = out_path.parent() { + fs::create_dir_all(out_path_parent)?; + } + let mut out_file = fs::File::create(&out_path)?; + io::copy(&mut file, &mut out_file)?; + } + // Get and Set permissions + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + if let Some(mode) = file.unix_mode() { + fs::set_permissions(&out_path, fs::Permissions::from_mode(mode))?; + } + } + } + } + } + } + Ok(()) + } +} + +fn set_perms( + dst: &Path, + f: Option<&mut std::fs::File>, + mode: u32, + preserve: bool, +) -> io::Result<()> { + _set_perms(dst, f, mode, preserve).map_err(|_| { + io::Error::new( + io::ErrorKind::Other, + format!( + "failed to set permissions to {mode:o} \ + for `{}`", + dst.display() + ), + ) + }) +} + +#[cfg(unix)] +fn _set_perms( + dst: &Path, + f: Option<&mut std::fs::File>, + mode: u32, + preserve: bool, +) -> io::Result<()> { + use std::os::unix::prelude::*; + + let mode = if preserve { mode } else { mode & 0o777 }; + let perm = fs::Permissions::from_mode(mode as _); + match f { + Some(f) => f.set_permissions(perm), + None => fs::set_permissions(dst, perm), + } +} + +#[cfg(windows)] +fn _set_perms( + dst: &Path, + f: Option<&mut std::fs::File>, + mode: u32, + _preserve: bool, +) -> io::Result<()> { + if mode & 0o200 == 0o200 { + return Ok(()); + } + match f { + Some(f) => { + let mut perm = f.metadata()?.permissions(); + perm.set_readonly(true); + f.set_permissions(perm) + } + None => { + let mut perm = fs::metadata(dst)?.permissions(); + perm.set_readonly(true); + fs::set_permissions(dst, perm) + } + } +} diff --git a/plugins/updater/src/updater/mod.rs b/plugins/updater/src/updater/mod.rs index c0252205..913148c9 100644 --- a/plugins/updater/src/updater/mod.rs +++ b/plugins/updater/src/updater/mod.rs @@ -12,6 +12,8 @@ //! ``` mod core; +mod extract; +mod move_file; use std::time::Duration; @@ -23,7 +25,7 @@ pub use self::core::{DownloadEvent, RemoteRelease}; use tauri::{AppHandle, Manager, Runtime}; -use crate::Result; +use crate::{Result, UpdaterState}; /// Gets the target string used on the updater. pub fn target() -> Option { @@ -276,7 +278,7 @@ impl UpdateResponse { // Linux we replace the AppImage by launching a new install, it start a new AppImage instance, so we're closing the previous. (the process stop here) self.update .download_and_install( - self.update.app.config().tauri.updater.pubkey.clone(), + self.update.app.config().tauri.bundle.updater.pubkey.clone(), on_event, ) .await @@ -285,14 +287,13 @@ impl UpdateResponse { /// Initializes the [`UpdateBuilder`] using the app configuration. pub fn builder(handle: AppHandle) -> UpdateBuilder { - let updater_config = &handle.config().tauri.updater; let package_info = handle.package_info().clone(); // prepare our endpoints - let endpoints = updater_config + let endpoints = handle + .state::() + .config .endpoints - .as_ref() - .expect("Something wrong with endpoints") .iter() .map(|e| e.to_string()) .collect::>(); diff --git a/plugins/updater/src/updater/move_file.rs b/plugins/updater/src/updater/move_file.rs new file mode 100644 index 00000000..a6ec158e --- /dev/null +++ b/plugins/updater/src/updater/move_file.rs @@ -0,0 +1,118 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +use ignore::WalkBuilder; +use std::{fs, path}; + +use crate::Result; + +/// Moves a file from the given path to the specified destination. +/// +/// `source` and `dest` must be on the same filesystem. +/// If `replace_using_temp` is specified, the destination file will be +/// replaced using the given temporary path. +/// +/// * Errors: +/// * Io - copying / renaming +#[derive(Debug)] +pub struct Move<'a> { + source: &'a path::Path, + temp: Option<&'a path::Path>, +} +impl<'a> Move<'a> { + /// Specify source file + pub fn from_source(source: &'a path::Path) -> Move<'a> { + Self { source, temp: None } + } + + /// If specified and the destination file already exists, the "destination" + /// file will be moved to the given temporary location before the "source" + /// file is moved to the "destination" file. + /// + /// In the event of an `io` error while renaming "source" to "destination", + /// the temporary file will be moved back to "destination". + /// + /// The `temp` dir must be explicitly provided since `rename` operations require + /// files to live on the same filesystem. + #[allow(dead_code)] + pub fn replace_using_temp(&mut self, temp: &'a path::Path) -> &mut Self { + self.temp = Some(temp); + self + } + + /// Move source file to specified destination (replace whole directory) + pub fn to_dest(&self, dest: &path::Path) -> Result<()> { + match self.temp { + None => { + fs::rename(self.source, dest)?; + } + Some(temp) => { + if dest.exists() { + fs::rename(dest, temp)?; + if let Err(e) = fs::rename(self.source, dest) { + fs::rename(temp, dest)?; + return Err(e.into()); + } + } else { + fs::rename(self.source, dest)?; + } + } + }; + Ok(()) + } + + /// Walk in the source and copy all files and create directories if needed by + /// replacing existing elements. (equivalent to a cp -R) + #[allow(dead_code)] + pub fn walk_to_dest(&self, dest: &path::Path) -> Result<()> { + match self.temp { + None => { + // got no temp -- no need to backup + walkdir_and_copy(self.source, dest)?; + } + Some(temp) => { + if dest.exists() { + // we got temp and our dest exist, lets make a backup + // of current files + walkdir_and_copy(dest, temp)?; + + if let Err(e) = walkdir_and_copy(self.source, dest) { + // if we got something wrong we reset the dest with our backup + fs::rename(temp, dest)?; + return Err(e); + } + } else { + // got temp but dest didnt exist + walkdir_and_copy(self.source, dest)?; + } + } + }; + Ok(()) + } +} +// Walk into the source and create directories, and copy files +// Overwriting existing items but keeping untouched the files in the dest +// not provided in the source. +fn walkdir_and_copy(source: &path::Path, dest: &path::Path) -> Result<()> { + let walkdir = WalkBuilder::new(source).hidden(false).build(); + + for entry in walkdir { + // Check if it's a file + + let element = entry?; + let metadata = element.metadata()?; + let destination = dest.join(element.path().strip_prefix(source)?); + + // we make sure it's a directory and destination doesnt exist + if metadata.is_dir() && !&destination.exists() { + fs::create_dir_all(&destination)?; + } + + // we make sure it's a file + if metadata.is_file() { + fs::copy(element.path(), destination)?; + } + } + Ok(()) +} diff --git a/plugins/updater/tests/app-updater/Cargo.lock b/plugins/updater/tests/app-updater/Cargo.lock deleted file mode 100644 index 09310805..00000000 --- a/plugins/updater/tests/app-updater/Cargo.lock +++ /dev/null @@ -1,3852 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - -[[package]] -name = "aho-corasick" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anyhow" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" - -[[package]] -name = "app-updater" -version = "0.1.0" -dependencies = [ - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-updater", - "time", - "tiny_http", -] - -[[package]] -name = "ascii" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" - -[[package]] -name = "atk" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" - -[[package]] -name = "bytemuck" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" -dependencies = [ - "serde", -] - -[[package]] -name = "cairo-rs" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "cargo_toml" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b" -dependencies = [ - "serde", - "toml", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" -dependencies = [ - "byteorder", - "fnv", - "uuid", -] - -[[package]] -name = "cfg-expr" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" -dependencies = [ - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" -dependencies = [ - "iana-time-zone", - "num-integer", - "num-traits", - "serde", - "winapi", -] - -[[package]] -name = "chunked_transfer" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca491388666e04d7248af3f60f0c40cfb0991c72205595d7c396e3510207d1a" - -[[package]] -name = "cocoa" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.8", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn 1.0.109", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ctor" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "cxx" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.15", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "darling" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.15", -] - -[[package]] -name = "darling_macro" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" -dependencies = [ - "darling_core", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn 1.0.109", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" - -[[package]] -name = "embed-resource" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a" -dependencies = [ - "cc", - "rustc_version", - "toml", - "vswhom", - "winreg 0.11.0", -] - -[[package]] -name = "embed_plist" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" - -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "errno" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fdeflate" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "field-offset" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" -dependencies = [ - "memoffset", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", -] - -[[package]] -name = "flate2" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures-channel" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" - -[[package]] -name = "futures-executor" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" - -[[package]] -name = "futures-macro" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "futures-sink" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" - -[[package]] -name = "futures-task" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" - -[[package]] -name = "futures-util" -version = "0.3.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" -dependencies = [ - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gdk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkwayland-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba" -dependencies = [ - "gdk-sys", - "glib-sys", - "gobject-sys", - "libc", - "pkg-config", - "system-deps", -] - -[[package]] -name = "gdkx11-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows 0.48.0", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys", - "glib", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", - "winapi", -] - -[[package]] -name = "glib" -version = "0.16.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" -dependencies = [ - "anyhow", - "heck", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "glib-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" -dependencies = [ - "libc", - "system-deps", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" -dependencies = [ - "aho-corasick 0.7.20", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" -dependencies = [ - "glib-sys", - "libc", - "system-deps", -] - -[[package]] -name = "gtk" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps", -] - -[[package]] -name = "gtk3-macros" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "html5ever" -version = "0.25.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.6", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa 1.0.6", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows 0.48.0", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "ico" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" -dependencies = [ - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown", - "serde", -] - -[[package]] -name = "infer" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" -dependencies = [ - "cfb", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "ipnet" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" - -[[package]] -name = "javascriptcore-rs" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110b9902c80c12bf113c432d0b71c7a94490b294a8234f326fd0abca2fac0b00" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a216519a52cd941a733a0ad3f1023cfdb1cd47f3955e8e863ed56f558f916c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "jni" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "json-patch" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" -dependencies = [ - "serde", - "serde_json", - "thiserror", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.144" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linux-raw-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "minisign-verify" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" - -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", - "simd-adler32", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "pango" -version = "0.16.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.5", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" - -[[package]] -name = "plist" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" -dependencies = [ - "base64 0.21.0", - "indexmap", - "line-wrap", - "quick-xml", - "serde", - "time", -] - -[[package]] -name = "png" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" -dependencies = [ - "bitflags", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - -[[package]] -name = "proc-macro2" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-xml" -version = "0.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" -dependencies = [ - "memchr", -] - -[[package]] -name = "quote" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.9", - "redox_syscall 0.2.16", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" -dependencies = [ - "aho-corasick 1.0.1", - "memchr", - "regex-syntax 0.7.1", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" - -[[package]] -name = "reqwest" -version = "0.11.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" -dependencies = [ - "base64 0.21.0", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "ipnet", - "js-sys", - "log", - "mime", - "once_cell", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "winreg 0.10.1", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "0.37.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - -[[package]] -name = "ryu" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -dependencies = [ - "serde", -] - -[[package]] -name = "serde" -version = "1.0.162" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.162" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_json" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" -dependencies = [ - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serde_spanned" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa 1.0.6", - "ryu", - "serde", -] - -[[package]] -name = "serde_with" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" -dependencies = [ - "base64 0.13.1", - "chrono", - "hex", - "indexmap", - "serde", - "serde_json", - "serde_with_macros", - "time", -] - -[[package]] -name = "serde_with_macros" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "simd-adler32" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" - -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup3" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc46048125fefd69d30b32b9d263d6556c9ffe82a7a7df181a86d912da5616" -dependencies = [ - "bitflags", - "futures-channel", - "gio", - "glib", - "libc", - "once_cell", - "soup3-sys", -] - -[[package]] -name = "soup3-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014bbeb1c4cdb30739dc181e8d98b7908f124d9555843afa89b5570aaf4ec62b" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" -dependencies = [ - "loom", -] - -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "swift-rs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" -dependencies = [ - "base64 0.21.0", - "serde", - "serde_json", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "tao" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "746ae5d0ca57ae275a792f109f6e992e0b41a443abdf3f5c6eff179ef5b3443a" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkwayland-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "tao-macros", - "unicode-segmentation", - "uuid", - "windows 0.44.0", - "windows-implement", - "x11-dl", -] - -[[package]] -name = "tao-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "target-lexicon" -version = "0.12.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" - -[[package]] -name = "tauri" -version = "2.0.0-alpha.8" -dependencies = [ - "anyhow", - "bytes", - "cocoa", - "dirs-next", - "embed_plist", - "encoding_rs", - "flate2", - "futures-util", - "glib", - "glob", - "gtk", - "heck", - "http", - "ignore", - "jni", - "libc", - "log", - "objc", - "once_cell", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "reqwest", - "semver", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "swift-rs", - "tar", - "tauri-build", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "time", - "tokio", - "url", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", - "zip", -] - -[[package]] -name = "tauri-build" -version = "2.0.0-alpha.4" -dependencies = [ - "anyhow", - "cargo_toml", - "filetime", - "heck", - "json-patch", - "semver", - "serde", - "serde_json", - "swift-rs", - "tauri-utils", - "tauri-winres", - "walkdir", -] - -[[package]] -name = "tauri-codegen" -version = "2.0.0-alpha.4" -dependencies = [ - "base64 0.21.0", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "url", - "uuid", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "2.0.0-alpha.4" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 1.0.109", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-updater" -version = "0.0.0" -dependencies = [ - "base64 0.21.0", - "dirs-next", - "futures-util", - "http", - "minisign-verify", - "percent-encoding", - "reqwest", - "semver", - "serde", - "serde_json", - "tauri", - "tauri-runtime", - "tempfile", - "thiserror", - "time", - "url", -] - -[[package]] -name = "tauri-runtime" -version = "0.13.0-alpha.4" -dependencies = [ - "gtk", - "http", - "http-range", - "jni", - "rand 0.8.5", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "url", - "uuid", - "webview2-com", - "windows 0.44.0", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -dependencies = [ - "cocoa", - "gtk", - "jni", - "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid", - "webkit2gtk", - "webview2-com", - "windows 0.44.0", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "2.0.0-alpha.4" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck", - "html5ever", - "infer", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.1", - "proc-macro2", - "quote", - "semver", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows 0.44.0", -] - -[[package]] -name = "tauri-winres" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" -dependencies = [ - "embed-resource", - "toml", -] - -[[package]] -name = "tempfile" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", -] - -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" -dependencies = [ - "itoa 1.0.6", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" -dependencies = [ - "time-core", -] - -[[package]] -name = "tiny_http" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d6ef4e10d23c1efb862eecad25c5054429a71958b4eeef85eb5e7170b477ca" -dependencies = [ - "ascii", - "chunked_transfer", - "log", - "time", - "url", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", -] - -[[package]] -name = "toml" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - -[[package]] -name = "unicode-ident" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" -dependencies = [ - "getrandom 0.2.9", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version-compare" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "vswhom" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" -dependencies = [ - "libc", - "vswhom-sys", -] - -[[package]] -name = "vswhom-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" -dependencies = [ - "cfg-if", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "wasm-streams" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webkit2gtk" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8eea819afe15eb8dcdff4f19d8bfda540bae84d874c10e6f4b8faf2d6704bd1" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup3", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ac7a95ddd3fdfcaf83d8e513b4b1ad101b95b413b6aa6662ed95f284fc3d5b" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pkg-config", - "soup3-sys", - "system-deps", -] - -[[package]] -name = "webview2-com" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "webview2-com-sys" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.44.0", - "windows-bindgen", - "windows-metadata", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-targets 0.42.2", -] - -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-bindgen" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222204ecf46521382a4d88b4a1bbefca9f8855697b4ab7d20803901425e061a3" -dependencies = [ - "windows-metadata", - "windows-tokens", -] - -[[package]] -name = "windows-implement" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-interface" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "windows-metadata" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee78911e3f4ce32c1ad9d3c7b0bd95389662ad8d8f1a3155688fed70bd96e2b6" - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" -dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-tokens" -version = "0.44.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winnow" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "winreg" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "wry" -version = "0.28.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d15f9f827d537cefe6d047be3930f5d89b238dfb85e08ba6a319153217635aa" -dependencies = [ - "base64 0.13.1", - "block", - "cocoa", - "core-graphics", - "crossbeam-channel", - "dunce", - "gdk", - "gio", - "glib", - "gtk", - "html5ever", - "http", - "javascriptcore-rs", - "kuchiki", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "sha2", - "soup3", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.44.0", - "windows-implement", -] - -[[package]] -name = "x11" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" -dependencies = [ - "libc", -] - -[[package]] -name = "zip" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" -dependencies = [ - "byteorder", - "crc32fast", - "crossbeam-utils", -] diff --git a/plugins/updater/tests/app-updater/src/main.rs b/plugins/updater/tests/app-updater/src/main.rs index 12678e78..9efc9b0b 100644 --- a/plugins/updater/tests/app-updater/src/main.rs +++ b/plugins/updater/tests/app-updater/src/main.rs @@ -7,24 +7,29 @@ use tauri_plugin_updater::UpdaterExt; fn main() { + #[allow(unused_mut)] let mut context = tauri::generate_context!(); + + let mut updater = tauri_plugin_updater::Builder::new(); if std::env::var("TARGET").unwrap_or_default() == "nsis" { // /D sets the default installation directory ($INSTDIR), // overriding InstallDir and InstallDirRegKey. // It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. // Only absolute paths are supported. // NOTE: we only need this because this is an integration test and we don't want to install the app in the programs folder - context.config_mut().tauri.updater.windows.installer_args = vec![format!( + // TODO mutate plugin config + updater = updater.installer_args(vec![format!( "/D={}", tauri::utils::platform::current_exe() .unwrap() .parent() .unwrap() .display() - )]; + )]); } + tauri::Builder::default() - .plugin(tauri_plugin_updater::Builder::new().build()) + .plugin(updater.build()) .setup(|app| { let handle = app.handle(); tauri::async_runtime::spawn(async move { diff --git a/plugins/updater/tests/app-updater/tauri.conf.json b/plugins/updater/tests/app-updater/tauri.conf.json index eac17193..27442c2d 100644 --- a/plugins/updater/tests/app-updater/tauri.conf.json +++ b/plugins/updater/tests/app-updater/tauri.conf.json @@ -21,18 +21,19 @@ "wix": { "skipWebviewInstall": true } + }, + "updater": { + "active": true, + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK", + "windows": { + "installMode": "quiet" + } } - }, - "allowlist": { - "all": false - }, + } + }, + "plugins": { "updater": { - "active": true, - "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK", - "endpoints": ["http://localhost:3007"], - "windows": { - "installMode": "quiet" - } + "endpoints": ["http://localhost:3007"] } } } diff --git a/plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock b/plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock deleted file mode 100644 index efab7176..00000000 --- a/plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock +++ /dev/null @@ -1,3363 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "anyhow" -version = "1.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595d3cfa7a60d4555cb5067b99f07142a08ea778de5cf993f7b75c7d8fabc486" - -[[package]] -name = "app" -version = "0.1.0" -dependencies = [ - "futures-util", - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-websocket", - "tokio", - "tokio-tungstenite", -] - -[[package]] -name = "atk" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" -dependencies = [ - "atk-sys", - "bitflags", - "glib", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.1", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block-buffer" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" -dependencies = [ - "generic-array", -] - -[[package]] -name = "brotli" -version = "3.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "bstr" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" -dependencies = [ - "memchr", -] - -[[package]] -name = "bytemuck" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" - -[[package]] -name = "cairo-rs" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b869e97a87170f96762f9f178eae8c461147e722ba21dd8814105bf5716bf14a" -dependencies = [ - "bitflags", - "cairo-sys-rs", - "glib", - "libc", - "thiserror", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" -dependencies = [ - "glib-sys", - "libc", - "system-deps 6.0.1", -] - -[[package]] -name = "cargo_toml" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497049e9477329f8f6a559972ee42e117487d01d1e8c2cc9f836ea6fa23a9e1a" -dependencies = [ - "serde", - "toml", -] - -[[package]] -name = "cc" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" - -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - -[[package]] -name = "cfb" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f89d248799e3f15f91b70917f65381062a01bb8e222700ea0e5a7ff9785f9c" -dependencies = [ - "byteorder", - "uuid 0.8.2", -] - -[[package]] -name = "cfg-expr" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" -dependencies = [ - "smallvec", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cocoa" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation", - "core-graphics-types", - "foreign-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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" -dependencies = [ - "bytes", - "memchr", -] - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "core-foundation" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" - -[[package]] -name = "core-graphics" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" -dependencies = [ - "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation", - "foreign-types", - "libc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" -dependencies = [ - "cfg-if", - "lazy_static", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "cssparser" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa 0.4.7", - "matches", - "phf 0.8.0", - "proc-macro2", - "quote", - "smallvec", - "syn", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "ctor" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "darling" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_more" -version = "0.99.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - -[[package]] -name = "dtoa-short" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6" -dependencies = [ - "dtoa", -] - -[[package]] -name = "embed_plist" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53dd2e43a7d32952a6054141ee0d75183958620e84e5eab045de362dff13dc99" - -[[package]] -name = "fastrand" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e" -dependencies = [ - "instant", -] - -[[package]] -name = "field-offset" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" -dependencies = [ - "memoffset", - "rustc_version", -] - -[[package]] -name = "filetime" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d34cfa13a63ae058bfa601fe9e313bbdb3746427c1459185464ce0fcf62e1e8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "winapi", -] - -[[package]] -name = "flate2" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3aec53de10fe96d7d8c565eb17f2c687bb5518a2ec453b5b1252964526abe0" -dependencies = [ - "cfg-if", - "crc32fast", - "libc", - "miniz_oxide 0.4.4", -] - -[[package]] -name = "fnv" -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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - -[[package]] -name = "futf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" -dependencies = [ - "mac", - "new_debug_unreachable", -] - -[[package]] -name = "futures" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adc00f486adfc9ce99f77d717836f0c5aa84965eb0b4f051f4e83f7cab53f8b" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99" - -[[package]] -name = "futures-executor" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d0d535a57b87e1ae31437b892713aee90cd2d7b0ee48727cd11fc72ef54761c" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57" -dependencies = [ - "autocfg", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53" - -[[package]] -name = "futures-task" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2" - -[[package]] -name = "futures-util" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78" -dependencies = [ - "autocfg", - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "proc-macro-hack", - "proc-macro-nested", - "slab", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "gdk" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614258e81ec35ed8770e64a0838f3a47f95b398bc51e724d3b3fa09c1ee0f8d5" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio", - "glib", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73aa2f5de1b45710da90a55863276667dc3a3264aaf6a2aeace62bb015244d49" -dependencies = [ - "bitflags", - "gdk-pixbuf-sys", - "gio", - "glib", - "libc", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171" -dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.1", -] - -[[package]] -name = "gdk-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "pkg-config", - "system-deps 6.0.1", -] - -[[package]] -name = "gdkx11-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" -dependencies = [ - "gdk-sys", - "glib-sys", - "libc", - "system-deps 6.0.1", - "x11", -] - -[[package]] -name = "generator" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1d9279ca822891c1a4dae06d185612cf8fc6acfe5dff37781b41297811b12ee" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "winapi", -] - -[[package]] -name = "generic-array" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.10.2+wasi-snapshot-preview1", -] - -[[package]] -name = "gio" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59105fa464928adf56b159c8d980cc11fbfbe414befb904caac5163d383049bf" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-io", - "gio-sys", - "glib", - "libc", - "once_cell", - "thiserror", -] - -[[package]] -name = "gio-sys" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f0bc4cfc9ebcdd05cc5057bc51b99c32f8f9bf246274f6a556ffd27279f8fe3" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.1", - "winapi", -] - -[[package]] -name = "glib" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dcfbdb6cc6c02aee163339465d8a40d6f3f64c3a43f729a4195f0e153338b7" -dependencies = [ - "bitflags", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "glib-macros", - "glib-sys", - "gobject-sys", - "libc", - "once_cell", - "smallvec", - "thiserror", -] - -[[package]] -name = "glib-macros" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e58b262ff65ef771003873cea8c10e0fe854f1c508d48d62a4111a1ff163f7d1" -dependencies = [ - "anyhow", - "heck 0.4.0", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "glib-sys" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa1d4e1a63d8574541e5b92931e4e669ddc87ffa85d58e84e631dba13ad2e10c" -dependencies = [ - "libc", - "system-deps 6.0.1", -] - -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - -[[package]] -name = "globset" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "gobject-sys" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6859463843c20cf3837e3a9069b6ab2051aeeadf4c899d33344f4aea83189a" -dependencies = [ - "glib-sys", - "libc", - "system-deps 6.0.1", -] - -[[package]] -name = "gtk" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7978eaec05bea63947c801d29a21372f2ed39aec0bf56bf7725d3599094675e" -dependencies = [ - "atk", - "bitflags", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio", - "glib", - "gtk-sys", - "gtk3-macros", - "libc", - "once_cell", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "pango-sys", - "system-deps 6.0.1", -] - -[[package]] -name = "gtk3-macros" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c891188af69e77a1e8a0b1746fbd03b9b396e7d34d518c5331b15950259f541" -dependencies = [ - "anyhow", - "proc-macro-crate", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "html5ever" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes", - "fnv", - "itoa 1.0.1", -] - -[[package]] -name = "http-range" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee9694f83d9b7c09682fdb32213682939507884e5bcf227be9aff5d644b90dc" - -[[package]] -name = "httparse" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" - -[[package]] -name = "ico" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd" -dependencies = [ - "byteorder", - "png", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "infer" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b2b533137b9cad970793453d4f921c2e91312a6d88b1085c07bc15fc51bb3b" -dependencies = [ - "cfb", -] - -[[package]] -name = "instant" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "itoa" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" - -[[package]] -name = "itoa" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" - -[[package]] -name = "javascriptcore-rs" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" -dependencies = [ - "bitflags", - "glib", - "javascriptcore-rs-sys", -] - -[[package]] -name = "javascriptcore-rs-sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 5.0.0", -] - -[[package]] -name = "jni" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24967112a1e4301ca5342ea339763613a37592b8a6ce6cf2e4494537c7a42faf" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "json-patch" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f995a3c8f2bc3dd52a18a583e90f9ec109c047fa1603a853e46bcda14d2e279d" -dependencies = [ - "serde", - "serde_json", - "treediff", -] - -[[package]] -name = "kuchiki" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" -dependencies = [ - "cssparser", - "html5ever", - "matches", - "selectors", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.139" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "lock_api" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "loom" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2111607c723d7857e0d8299d5ce7a0bf4b844d3e44f8de136b13da513eaf8fc4" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "serde", - "serde_json", -] - -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "markup5ever" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" -dependencies = [ - "log", - "phf 0.8.0", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" - -[[package]] -name = "memchr" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" - -[[package]] -name = "memoffset" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" -dependencies = [ - "autocfg", -] - -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", -] - -[[package]] -name = "native-tls" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2c8fd66061a707503d515639b8af10fd3807a5b5ee6959f7ff1bd303634bd5" -dependencies = [ - "derivative", - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "474fd1d096da3ad17084694eebed40ba09c4a36c5255cd772bd8b98859cc562e" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", - "objc_exception", -] - -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "objc_id" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" -dependencies = [ - "objc", -] - -[[package]] -name = "once_cell" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" - -[[package]] -name = "openssl" -version = "0.10.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549430950c79ae24e6d02e0b7404534ecf311d94cc9f861e9e4020187d13d885" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-sys", -] - -[[package]] -name = "openssl-probe" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" - -[[package]] -name = "openssl-sys" -version = "0.9.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a7907e3bfa08bb85105209cdfcb6c63d109f8f6c1ed6ca318fff5c1853fbc1d" -dependencies = [ - "autocfg", - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "pango" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79211eff430c29cc38c69e0ab54bc78fa1568121ca9737707eee7f92a8417a94" -dependencies = [ - "bitflags", - "glib", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2" -dependencies = [ - "glib-sys", - "gobject-sys", - "libc", - "system-deps 6.0.1", -] - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1ef8814b5c993410bb3adfad7a5ed269563e4a2f90c41f5d85be7fb47133bf" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.42.0", -] - -[[package]] -name = "paste" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pest" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -dependencies = [ - "ucd-trie", -] - -[[package]] -name = "phf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" -dependencies = [ - "phf_macros 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", -] - -[[package]] -name = "phf" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fc3db1018c4b59d7d582a739436478b6035138b6aecbce989fc91c3e98409f" -dependencies = [ - "phf_macros 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", -] - -[[package]] -name = "phf_codegen" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -] - -[[package]] -name = "phf_generator" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" -dependencies = [ - "phf_shared 0.8.0", - "rand 0.7.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand 0.8.4", -] - -[[package]] -name = "phf_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "phf_macros" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "phf_shared" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" - -[[package]] -name = "plist" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd39bc6cdc9355ad1dc5eeedefee696bb35c34caf21768741e81826c0bbd7225" -dependencies = [ - "base64", - "indexmap", - "line-wrap", - "serde", - "time", - "xml-rs", -] - -[[package]] -name = "png" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" -dependencies = [ - "bitflags", - "crc32fast", - "flate2", - "miniz_oxide 0.6.2", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - -[[package]] -name = "proc-macro-crate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - -[[package]] -name = "proc-macro2" -version = "1.0.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", - "rand_pcg", -] - -[[package]] -name = "rand" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", - "rand_hc 0.3.1", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] - -[[package]] -name = "rand_core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom 0.2.3", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core 0.6.3", -] - -[[package]] -name = "rand_pcg" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "raw-window-handle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] - -[[package]] -name = "redox_syscall" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" -dependencies = [ - "getrandom 0.2.3", - "redox_syscall", -] - -[[package]] -name = "regex" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - -[[package]] -name = "rustversion" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088" - -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "schannel" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" -dependencies = [ - "lazy_static", - "winapi", -] - -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "security-framework" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4effb91b4b8b6fb7732e670b6cee160278ff8e6bf485c7805d9e319d76e284" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "selectors" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" -dependencies = [ - "bitflags", - "cssparser", - "derive_more", - "fxhash", - "log", - "matches", - "phf 0.8.0", - "phf_codegen", - "precomputed-hash", - "servo_arc", - "smallvec", - "thin-slice", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "serde" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" -dependencies = [ - "itoa 0.4.7", - "ryu", - "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_with" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1e6ec4d8950e5b1e894eac0d360742f3b1407a6078a604a731c4b3f49cefbc" -dependencies = [ - "rustversion", - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12e47be9471c72889ebafb5e14d5ff930d89ae7a67bbdb5f8abb564f845a927e" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serialize-to-javascript" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" -dependencies = [ - "serde", - "serde_json", - "serialize-to-javascript-impl", -] - -[[package]] -name = "serialize-to-javascript-impl" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "servo_arc" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" -dependencies = [ - "nodrop", - "stable_deref_trait", -] - -[[package]] -name = "sha1" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99c3bd8169c58782adad9290a9af5939994036b76187f7b4f0e6de91dbbfc0ec" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "siphasher" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729a25c17d72b06c68cb47955d44fda88ad2d3e7d77e025663fdd69b93dd71a1" - -[[package]] -name = "slab" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" - -[[package]] -name = "smallvec" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" - -[[package]] -name = "socket2" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "soup2" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" -dependencies = [ - "bitflags", - "gio", - "glib", - "libc", - "once_cell", - "soup2-sys", -] - -[[package]] -name = "soup2-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" -dependencies = [ - "bitflags", - "gio-sys", - "glib-sys", - "gobject-sys", - "libc", - "system-deps 5.0.0", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "state" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf4f5369e6d3044b5e365c9690f451516ac8f0954084622b49ea3fde2f6de5" -dependencies = [ - "loom", -] - -[[package]] -name = "string_cache" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ddb1139b5353f96e429e1a5e19fbaf663bddedaa06d1dbd49f82e352601209a" -dependencies = [ - "lazy_static", - "new_debug_unreachable", - "phf_shared 0.8.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" -dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", - "proc-macro2", - "quote", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "syn" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "system-deps" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" -dependencies = [ - "cfg-expr", - "heck 0.3.3", - "pkg-config", - "toml", - "version-compare 0.0.11", -] - -[[package]] -name = "system-deps" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad3a97fdef3daf935d929b3e97e5a6a680cd4622e40c2941ca0875d6566416f8" -dependencies = [ - "cfg-expr", - "heck 0.4.0", - "pkg-config", - "toml", - "version-compare 0.1.0", -] - -[[package]] -name = "tao" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6fd7725dc1e593e9ecabd9fe49c112a204c8c8694db4182e78b2a5af490b1ae" -dependencies = [ - "bitflags", - "cairo-rs", - "cc", - "cocoa", - "core-foundation", - "core-graphics", - "crossbeam-channel", - "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", - "gdkx11-sys", - "gio", - "glib", - "glib-sys", - "gtk", - "image", - "instant", - "jni 0.19.0", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "objc", - "once_cell", - "parking_lot", - "paste", - "png", - "raw-window-handle", - "scopeguard", - "serde", - "unicode-segmentation", - "uuid 1.2.2", - "windows 0.37.0", - "windows-implement 0.37.0", - "x11-dl", -] - -[[package]] -name = "tar" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tauri" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63a5d3a76d114e252eeebda97e2affba0943b6e1fa7e49a88ebb520aefcb21b" -dependencies = [ - "anyhow", - "cocoa", - "dirs-next", - "embed_plist", - "flate2", - "futures", - "futures-lite", - "glib", - "glob", - "gtk", - "heck 0.4.0", - "http", - "ignore", - "objc", - "once_cell", - "percent-encoding", - "rand 0.8.4", - "raw-window-handle", - "semver 1.0.4", - "serde", - "serde_json", - "serde_repr", - "serialize-to-javascript", - "state", - "tar", - "tauri-macros", - "tauri-runtime", - "tauri-runtime-wry", - "tauri-utils", - "tempfile", - "thiserror", - "tokio", - "url", - "uuid 1.2.2", - "webkit2gtk", - "webview2-com", - "windows 0.37.0", -] - -[[package]] -name = "tauri-build" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8807c85d656b2b93927c19fe5a5f1f1f348f96c2de8b90763b3c2d561511f9b4" -dependencies = [ - "anyhow", - "cargo_toml", - "heck 0.4.0", - "json-patch", - "semver 1.0.4", - "serde_json", - "tauri-utils", - "winres", -] - -[[package]] -name = "tauri-codegen" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251" -dependencies = [ - "base64", - "brotli", - "ico", - "json-patch", - "plist", - "png", - "proc-macro2", - "quote", - "semver 1.0.4", - "serde", - "serde_json", - "sha2", - "tauri-utils", - "thiserror", - "time", - "uuid 1.2.2", - "walkdir", -] - -[[package]] -name = "tauri-macros" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075" -dependencies = [ - "heck 0.4.0", - "proc-macro2", - "quote", - "syn", - "tauri-codegen", - "tauri-utils", -] - -[[package]] -name = "tauri-plugin-websocket" -version = "0.1.0" -dependencies = [ - "futures-util", - "log", - "rand 0.8.4", - "serde", - "serde_json", - "tauri", - "thiserror", - "tokio", - "tokio-tungstenite", -] - -[[package]] -name = "tauri-runtime" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4cff3b4d9469727fa2107c4b3d2eda110df1ba45103fb420178e536362fae4" -dependencies = [ - "gtk", - "http", - "http-range", - "infer", - "raw-window-handle", - "serde", - "serde_json", - "tauri-utils", - "thiserror", - "uuid 1.2.2", - "webview2-com", - "windows 0.37.0", -] - -[[package]] -name = "tauri-runtime-wry" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa8c4edaf01d8b556e7172c844b1b4dd3399adcd1a606bd520fc3e65f698546" -dependencies = [ - "cocoa", - "gtk", - "percent-encoding", - "rand 0.8.4", - "raw-window-handle", - "tauri-runtime", - "tauri-utils", - "uuid 1.2.2", - "webkit2gtk", - "webview2-com", - "windows 0.37.0", - "wry", -] - -[[package]] -name = "tauri-utils" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5abbc109a6eb45127956ffcc26ef0e875d160150ac16cfa45d26a6b2871686f1" -dependencies = [ - "brotli", - "ctor", - "glob", - "heck 0.4.0", - "html5ever", - "infer", - "json-patch", - "kuchiki", - "memchr", - "phf 0.10.0", - "proc-macro2", - "quote", - "semver 1.0.4", - "serde", - "serde_json", - "serde_with", - "thiserror", - "url", - "walkdir", - "windows 0.39.0", -] - -[[package]] -name = "tempfile" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" -dependencies = [ - "cfg-if", - "libc", - "rand 0.8.4", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "tendril" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ef557cb397a4f0a5a3a628f06515f78563f2209e64d47055d9dc6052bf5e33" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "thin-slice" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" - -[[package]] -name = "thiserror" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" -dependencies = [ - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" -dependencies = [ - "itoa 1.0.1", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" -dependencies = [ - "autocfg", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.45.0", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" -dependencies = [ - "native-tls", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" -dependencies = [ - "futures-util", - "log", - "native-tls", - "tokio", - "tokio-native-tls", - "tungstenite", -] - -[[package]] -name = "toml" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" -dependencies = [ - "serde", -] - -[[package]] -name = "treediff" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff" -dependencies = [ - "serde_json", -] - -[[package]] -name = "tungstenite" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" -dependencies = [ - "base64", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "native-tls", - "rand 0.8.4", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "ucd-trie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" - -[[package]] -name = "unicode-bidi" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" -dependencies = [ - "matches", -] - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "unicode-normalization" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" - -[[package]] -name = "url" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" -dependencies = [ - "form_urlencoded", - "idna", - "matches", - "percent-encoding", - "serde", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" - -[[package]] -name = "uuid" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" -dependencies = [ - "getrandom 0.2.3", -] - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version-compare" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" - -[[package]] -name = "version-compare" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" - -[[package]] -name = "version_check" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "webkit2gtk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" -dependencies = [ - "bitflags", - "cairo-rs", - "gdk", - "gdk-sys", - "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", - "gtk", - "gtk-sys", - "javascriptcore-rs", - "libc", - "once_cell", - "soup2", - "webkit2gtk-sys", -] - -[[package]] -name = "webkit2gtk-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" -dependencies = [ - "atk-sys", - "bitflags", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", - "gtk-sys", - "javascriptcore-rs-sys", - "libc", - "pango-sys", - "pkg-config", - "soup2-sys", - "system-deps 6.0.1", -] - -[[package]] -name = "webview2-com" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a489a9420acabb3c2ed0434b6f71f6b56b9485ec32665a28dec1ee186d716e0f" -dependencies = [ - "webview2-com-macros", - "webview2-com-sys", - "windows 0.37.0", - "windows-implement 0.37.0", -] - -[[package]] -name = "webview2-com-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "webview2-com-sys" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0258c53ee9adc0a4f8ba1c8c317588f7a58c7048a55b621d469ba75ab3709ca1" -dependencies = [ - "regex", - "serde", - "serde_json", - "thiserror", - "windows 0.37.0", - "windows-bindgen", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" -dependencies = [ - "windows-implement 0.37.0", - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", -] - -[[package]] -name = "windows" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" -dependencies = [ - "windows-implement 0.39.0", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", -] - -[[package]] -name = "windows-bindgen" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bed7be31ade0af08fec9b5343e9edcc005d22b1f11859b8a59b24797f5858e8" -dependencies = [ - "windows-metadata", - "windows-tokens 0.37.0", -] - -[[package]] -name = "windows-implement" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a1062e555f7d9d66fd1130ed4f7c6ec41a47529ee0850cd0e926d95b26bb14" -dependencies = [ - "syn", - "windows-tokens 0.37.0", -] - -[[package]] -name = "windows-implement" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" -dependencies = [ - "syn", - "windows-tokens 0.39.0", -] - -[[package]] -name = "windows-metadata" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f33f2b90a6664e369c41ab5ff262d06f048fc9685d9bf8a0e99a47750bb0463" - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-tokens" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3263d25f1170419995b78ff10c06b949e8a986c35c208dc24333c64753a87169" - -[[package]] -name = "windows-tokens" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - -[[package]] -name = "windows_i686_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "winres" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4fb510bbfe5b8992ff15f77a2e6fe6cf062878f0eda00c0f44963a807ca5dc" -dependencies = [ - "toml", -] - -[[package]] -name = "wry" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce19dddbd3ce01dc8f14eb6d4c8f914123bf8379aaa838f6da4f981ff7104a3f" -dependencies = [ - "block", - "cocoa", - "core-graphics", - "gdk", - "gio", - "glib", - "gtk", - "http", - "jni 0.18.0", - "libc", - "log", - "objc", - "objc_id", - "once_cell", - "serde", - "serde_json", - "tao", - "thiserror", - "url", - "webkit2gtk", - "webkit2gtk-sys", - "webview2-com", - "windows 0.37.0", - "windows-implement 0.37.0", -] - -[[package]] -name = "x11" -version = "2.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd0565fa8bfba8c5efe02725b14dff114c866724eff2cfd44d76cea74bcd87a" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "x11-dl" -version = "2.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0" -dependencies = [ - "lazy_static", - "libc", - "pkg-config", -] - -[[package]] -name = "xattr" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" -dependencies = [ - "libc", -] - -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" diff --git a/plugins/websocket/examples/svelte-app/src-tauri/tauri.conf.json b/plugins/websocket/examples/svelte-app/src-tauri/tauri.conf.json index 1f14e4f3..3321f62d 100644 --- a/plugins/websocket/examples/svelte-app/src-tauri/tauri.conf.json +++ b/plugins/websocket/examples/svelte-app/src-tauri/tauri.conf.json @@ -33,9 +33,6 @@ "exceptionDomain": "" } }, - "allowlist": { - "all": false - }, "windows": [ { "title": "Tauri App", From bc0ea5a74f0823e3f8f12f08f58ce0583cdc9bd5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 May 2023 16:39:29 +0200 Subject: [PATCH 13/64] fix(deps): update rust crate tokio-tungstenite to 0.19 (#358) * fix(deps): update rust crate tokio-tungstenite to 0.19 * fix compile error --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Fabian-Lars --- Cargo.lock | 145 ++++++++++-------- plugins/websocket/Cargo.toml | 2 +- .../examples/svelte-app/src-tauri/Cargo.lock | 136 ++++++++-------- .../examples/svelte-app/src-tauri/Cargo.toml | 2 +- plugins/websocket/src/lib.rs | 2 +- 5 files changed, 155 insertions(+), 132 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dc63b5a8..743c68f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -183,7 +183,7 @@ checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -200,7 +200,7 @@ checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -802,7 +802,7 @@ dependencies = [ "proc-macro2", "quote", "smallvec", - "syn", + "syn 1.0.107", ] [[package]] @@ -812,7 +812,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" dependencies = [ "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -822,7 +822,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -877,7 +877,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 1.0.107", ] [[package]] @@ -894,7 +894,7 @@ checksum = "357f40d1f06a24b60ae1fe122542c1fb05d28d32acb2aed064e84bc2ad1e252e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -918,7 +918,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.107", ] [[package]] @@ -929,9 +929,15 @@ checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.107", ] +[[package]] +name = "data-encoding" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" + [[package]] name = "der" version = "0.5.1" @@ -951,7 +957,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -964,7 +970,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn", + "syn 1.0.107", ] [[package]] @@ -1124,7 +1130,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1262,9 +1268,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -1272,9 +1278,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" @@ -1300,9 +1306,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" @@ -1321,32 +1327,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.16", ] [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1560,7 +1566,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1655,7 +1661,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1766,7 +1772,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2652,7 +2658,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2727,7 +2733,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2947,7 +2953,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2961,7 +2967,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2999,7 +3005,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -3136,7 +3142,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "version_check", ] @@ -3159,9 +3165,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.50" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" +checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16" dependencies = [ "unicode-ident", ] @@ -3183,9 +3189,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" dependencies = [ "proc-macro2", ] @@ -3640,7 +3646,7 @@ checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -3662,7 +3668,7 @@ checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -3696,7 +3702,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -3718,7 +3724,7 @@ checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -3957,7 +3963,7 @@ dependencies = [ "sha2 0.10.6", "sqlx-core", "sqlx-rt", - "syn", + "syn 1.0.107", "url", ] @@ -4037,7 +4043,7 @@ checksum = "2835db23c4724c05a2f85b81c4681f4aa8ea158edc8a7f4ad791c916fb766c2e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -4110,6 +4116,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -4118,7 +4135,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", "unicode-xid", ] @@ -4286,7 +4303,7 @@ dependencies = [ "heck 0.4.0", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "tauri-codegen", "tauri-utils", ] @@ -4623,7 +4640,7 @@ checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -4721,9 +4738,9 @@ dependencies = [ [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -4753,9 +4770,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" +checksum = "ec509ac96e9a0c43427c74f003127d953a265737636129424288d27cb5c4b12c" dependencies = [ "futures-util", "log", @@ -4831,7 +4848,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -4890,13 +4907,13 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" +checksum = "15fba1a6d6bb030745759a9a2a588bfe8490fc8b4751a277db3a0be1c9ebbf67" dependencies = [ - "base64 0.13.1", "byteorder", "bytes 1.4.0", + "data-encoding", "http", "httparse", "log", @@ -5162,7 +5179,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "wasm-bindgen-shared", ] @@ -5196,7 +5213,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5316,7 +5333,7 @@ checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -5427,7 +5444,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" dependencies = [ - "syn", + "syn 1.0.107", "windows-tokens", ] @@ -5762,7 +5779,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn", + "syn 1.0.107", ] [[package]] @@ -5793,7 +5810,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", "synstructure", ] @@ -5820,5 +5837,5 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] diff --git a/plugins/websocket/Cargo.toml b/plugins/websocket/Cargo.toml index 37eafb5d..64bea6d7 100644 --- a/plugins/websocket/Cargo.toml +++ b/plugins/websocket/Cargo.toml @@ -18,4 +18,4 @@ thiserror.workspace = true rand = "0.8" futures-util = "0.3" tokio = { version = "1", features = ["net", "sync"] } -tokio-tungstenite = { version = "0.18", features = ["native-tls"] } +tokio-tungstenite = { version = "0.19", features = ["native-tls"] } diff --git a/plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock b/plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock index efab7176..d0e8a01c 100644 --- a/plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock +++ b/plugins/websocket/examples/svelte-app/src-tauri/Cargo.lock @@ -384,7 +384,7 @@ dependencies = [ "proc-macro2", "quote", "smallvec", - "syn", + "syn 1.0.107", ] [[package]] @@ -394,7 +394,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" dependencies = [ "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -404,7 +404,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" dependencies = [ "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -434,7 +434,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.107", ] [[package]] @@ -445,9 +445,15 @@ checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.107", ] +[[package]] +name = "data-encoding" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" + [[package]] name = "derivative" version = "2.2.0" @@ -456,7 +462,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -469,7 +475,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 1.0.107", ] [[package]] @@ -631,9 +637,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.16" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -641,9 +647,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.16" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" @@ -658,9 +664,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.16" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" @@ -679,36 +685,33 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.16" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ - "autocfg", - "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 2.0.16", ] [[package]] name = "futures-sink" -version = "0.3.16" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.16" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.16" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ - "autocfg", "futures-channel", "futures-core", "futures-io", @@ -718,8 +721,6 @@ dependencies = [ "memchr", "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] @@ -911,7 +912,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1006,7 +1007,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1050,7 +1051,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1286,9 +1287,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] @@ -1389,9 +1390,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.7" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", @@ -1504,7 +1505,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1712,7 +1713,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1726,7 +1727,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -1822,7 +1823,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "version_check", ] @@ -1843,26 +1844,20 @@ version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.9" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" dependencies = [ "proc-macro2", ] @@ -2157,7 +2152,7 @@ checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2179,7 +2174,7 @@ checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2202,7 +2197,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2224,7 +2219,7 @@ checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2372,6 +2367,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "system-deps" version = "5.0.0" @@ -2550,14 +2556,14 @@ dependencies = [ "heck 0.4.0", "proc-macro2", "quote", - "syn", + "syn 1.0.107", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin-websocket" -version = "0.1.0" +version = "0.0.0" dependencies = [ "futures-util", "log", @@ -2686,7 +2692,7 @@ checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -2758,9 +2764,9 @@ dependencies = [ [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -2768,9 +2774,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" +checksum = "ec509ac96e9a0c43427c74f003127d953a265737636129424288d27cb5c4b12c" dependencies = [ "futures-util", "log", @@ -2800,13 +2806,13 @@ dependencies = [ [[package]] name = "tungstenite" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" +checksum = "15fba1a6d6bb030745759a9a2a588bfe8490fc8b4751a277db3a0be1c9ebbf67" dependencies = [ - "base64", "byteorder", "bytes", + "data-encoding", "http", "httparse", "log", @@ -3020,7 +3026,7 @@ checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.107", ] [[package]] @@ -3112,7 +3118,7 @@ version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67a1062e555f7d9d66fd1130ed4f7c6ec41a47529ee0850cd0e926d95b26bb14" dependencies = [ - "syn", + "syn 1.0.107", "windows-tokens 0.37.0", ] @@ -3122,7 +3128,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" dependencies = [ - "syn", + "syn 1.0.107", "windows-tokens 0.39.0", ] diff --git a/plugins/websocket/examples/svelte-app/src-tauri/Cargo.toml b/plugins/websocket/examples/svelte-app/src-tauri/Cargo.toml index 249bf485..a514784a 100644 --- a/plugins/websocket/examples/svelte-app/src-tauri/Cargo.toml +++ b/plugins/websocket/examples/svelte-app/src-tauri/Cargo.toml @@ -13,7 +13,7 @@ tauri = { version = "1", features = [] } tokio = { version = "1", features = ["net"] } futures-util = "0.3" tauri-plugin-websocket = { path = "../../../" } -tokio-tungstenite = "0.18" +tokio-tungstenite = "0.19" [build-dependencies] tauri-build = { version = "1", features = [] } diff --git a/plugins/websocket/src/lib.rs b/plugins/websocket/src/lib.rs index 1f06da32..55676e12 100644 --- a/plugins/websocket/src/lib.rs +++ b/plugins/websocket/src/lib.rs @@ -86,7 +86,7 @@ async fn connect( config: Option, ) -> Result { let id = rand::random(); - let (ws_stream, _) = connect_async_with_config(url, config.map(Into::into)).await?; + let (ws_stream, _) = connect_async_with_config(url, config.map(Into::into), false).await?; tauri::async_runtime::spawn(async move { let (write, read) = ws_stream.split(); From 600de2867bba3e954e34b212f28f571ff888c747 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 May 2023 09:48:47 +0200 Subject: [PATCH 14/64] chore(deps): update dependency eslint-plugin-n to v16 (#359) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 84 ++++++++++++++++++-------------------------------- 2 files changed, 31 insertions(+), 55 deletions(-) diff --git a/package.json b/package.json index 5a0bfce4..8a842919 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-config-standard-with-typescript": "^34.0.1", "eslint-plugin-import": "^2.27.5", - "eslint-plugin-n": "^15.7.0", + "eslint-plugin-n": "^16.0.0", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-security": "^1.7.1", "prettier": "^2.8.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50c1bf1b..18a1cda0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,13 +27,13 @@ importers: version: 8.8.0(eslint@8.38.0) eslint-config-standard-with-typescript: specifier: ^34.0.1 - version: 34.0.1(@typescript-eslint/eslint-plugin@5.58.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@5.0.4) + version: 34.0.1(@typescript-eslint/eslint-plugin@5.58.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@16.0.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@5.0.4) eslint-plugin-import: specifier: ^2.27.5 version: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.38.0) eslint-plugin-n: - specifier: ^15.7.0 - version: 15.7.0(eslint@8.38.0) + specifier: ^16.0.0 + version: 16.0.0(eslint@8.38.0) eslint-plugin-promise: specifier: ^6.1.1 version: 6.1.1(eslint@8.38.0) @@ -899,7 +899,7 @@ packages: '@typescript-eslint/typescript-estree': 5.58.0(typescript@5.0.4) eslint: 8.38.0 eslint-scope: 5.1.1 - semver: 7.4.0 + semver: 7.5.1 transitivePeerDependencies: - supports-color - typescript @@ -1047,7 +1047,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.4.0 + semver: 7.5.1 dev: true /busboy@1.6.0: @@ -1307,7 +1307,7 @@ packages: eslint: 8.38.0 dev: true - /eslint-config-standard-with-typescript@34.0.1(@typescript-eslint/eslint-plugin@5.58.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@5.0.4): + /eslint-config-standard-with-typescript@34.0.1(@typescript-eslint/eslint-plugin@5.58.0)(eslint-plugin-import@2.27.5)(eslint-plugin-n@16.0.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0)(typescript@5.0.4): resolution: {integrity: sha512-J7WvZeLtd0Vr9F+v4dZbqJCLD16cbIy4U+alJMq4MiXdpipdBM3U5NkXaGUjePc4sb1ZE01U9g6VuTBpHHz1fg==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.43.0 @@ -1320,16 +1320,16 @@ packages: '@typescript-eslint/eslint-plugin': 5.58.0(@typescript-eslint/parser@5.58.0)(eslint@8.38.0)(typescript@5.0.4) '@typescript-eslint/parser': 5.58.0(eslint@8.38.0)(typescript@5.0.4) eslint: 8.38.0 - eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0) + eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@16.0.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0) eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.38.0) - eslint-plugin-n: 15.7.0(eslint@8.38.0) + eslint-plugin-n: 16.0.0(eslint@8.38.0) eslint-plugin-promise: 6.1.1(eslint@8.38.0) typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0): + /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@16.0.0)(eslint-plugin-promise@6.1.1)(eslint@8.38.0): resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: ^8.0.1 @@ -1339,7 +1339,7 @@ packages: dependencies: eslint: 8.38.0 eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.38.0) - eslint-plugin-n: 15.7.0(eslint@8.38.0) + eslint-plugin-n: 16.0.0(eslint@8.38.0) eslint-plugin-promise: 6.1.1(eslint@8.38.0) dev: true @@ -1382,15 +1382,15 @@ packages: - supports-color dev: true - /eslint-plugin-es@4.1.0(eslint@8.38.0): - resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} - engines: {node: '>=8.10.0'} + /eslint-plugin-es-x@6.1.0(eslint@8.38.0): + resolution: {integrity: sha512-f6dHOuVDDYHOCu3w+EledZnUkDdCa71GGHxZ0DMNfalM/2Upl0t/ks0+d5W5YDQJEQmvthE3WYv7RI/9Fl+csQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=4.19.1' + eslint: '>=8' dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) + '@eslint-community/regexpp': 4.5.0 eslint: 8.38.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 dev: true /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.58.0)(eslint@8.38.0): @@ -1426,21 +1426,21 @@ packages: - supports-color dev: true - /eslint-plugin-n@15.7.0(eslint@8.38.0): - resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} - engines: {node: '>=12.22.0'} + /eslint-plugin-n@16.0.0(eslint@8.38.0): + resolution: {integrity: sha512-akkZTE3hsHBrq6CwmGuYCzQREbVUrA855kzcHqe6i0FLBkeY7Y/6tThCVkjUnjhvRBAlc+8lILcSe5QvvDpeZQ==} + engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.38.0) builtins: 5.0.1 eslint: 8.38.0 - eslint-plugin-es: 4.1.0(eslint@8.38.0) - eslint-utils: 3.0.0(eslint@8.38.0) + eslint-plugin-es-x: 6.1.0(eslint@8.38.0) ignore: 5.2.4 is-core-module: 2.12.0 minimatch: 3.1.2 resolve: 1.22.2 - semver: 7.4.0 + semver: 7.5.1 dev: true /eslint-plugin-promise@6.1.1(eslint@8.38.0): @@ -1474,33 +1474,6 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - dependencies: - eslint-visitor-keys: 1.3.0 - dev: true - - /eslint-utils@3.0.0(eslint@8.38.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.38.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - /eslint-visitor-keys@3.4.0: resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2316,11 +2289,6 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2415,6 +2383,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /serialize-javascript@6.0.1: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: From d87b5696435ad91a1010f338fc15d3594adf8606 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 16 May 2023 16:39:00 -0700 Subject: [PATCH 15/64] chore(deps): update tauri and Android project (#360) --- Cargo.lock | 14 +- examples/api/src-tauri/Cargo.toml | 2 +- .../gen/android/{api => }/.editorconfig | 0 .../gen/android/{api => }/.gitignore | 1 + .../gen/android/api/app/build.gradle.kts | 113 ---------------- .../main/java/com/tauri/api/MainActivity.kt | 7 - .../java/com/tauri/api/kotlin/RustPlugin.kt | 59 --------- .../src-tauri/gen/android/api/settings.gradle | 6 - .../gen/android/{api => }/app/.gitignore | 1 + .../gen/android/app/build.gradle.kts | 57 ++++++++ .../android/{api => }/app/proguard-rules.pro | 0 .../app/src/main/AndroidManifest.xml | 1 - .../main/java/com/tauri/api/MainActivity.kt | 3 + .../drawable-v24/ic_launcher_foreground.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../app/src/main/res/layout/activity_main.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../mipmap-hdpi/ic_launcher_foreground.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../mipmap-mdpi/ic_launcher_foreground.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../mipmap-xhdpi/ic_launcher_foreground.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../app/src/main/res/values-night/themes.xml | 0 .../app/src/main/res/values/colors.xml | 0 .../app/src/main/res/values/strings.xml | 0 .../app/src/main/res/values/themes.xml | 0 .../app/src/main/res/xml/file_paths.xml | 0 .../gen/android/{api => }/build.gradle.kts | 7 +- .../{api => }/buildSrc/build.gradle.kts | 6 +- .../java/com/tauri/api/kotlin/BuildTask.kt | 16 +-- .../java/com/tauri/api/kotlin/RustPlugin.kt | 85 ++++++++++++ .../gen/android/{api => }/gradle.properties | 4 +- .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../src-tauri/gen/android/{api => }/gradlew | 0 .../gen/android/{api => }/gradlew.bat | 0 .../api/src-tauri/gen/android/settings.gradle | 3 + examples/api/src-tauri/src/lib.rs | 3 +- plugins/clipboard/Cargo.toml | 1 + plugins/dialog/Cargo.toml | 1 + plugins/notification/Cargo.toml | 1 + .../android/src/main/AndroidManifest.xml | 3 +- plugins/window/build.rs | 14 ++ .../src/{commands.rs => desktop_commands.rs} | 0 plugins/window/src/lib.rs | 124 ++++++++++-------- shared/template/Cargo.toml | 1 + 55 files changed, 262 insertions(+), 273 deletions(-) rename examples/api/src-tauri/gen/android/{api => }/.editorconfig (100%) rename examples/api/src-tauri/gen/android/{api => }/.gitignore (86%) delete mode 100644 examples/api/src-tauri/gen/android/api/app/build.gradle.kts delete mode 100644 examples/api/src-tauri/gen/android/api/app/src/main/java/com/tauri/api/MainActivity.kt delete mode 100644 examples/api/src-tauri/gen/android/api/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt delete mode 100644 examples/api/src-tauri/gen/android/api/settings.gradle rename examples/api/src-tauri/gen/android/{api => }/app/.gitignore (63%) create mode 100644 examples/api/src-tauri/gen/android/app/build.gradle.kts rename examples/api/src-tauri/gen/android/{api => }/app/proguard-rules.pro (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/AndroidManifest.xml (99%) create mode 100644 examples/api/src-tauri/gen/android/app/src/main/java/com/tauri/api/MainActivity.kt rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/drawable-v24/ic_launcher_foreground.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/drawable/ic_launcher_background.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/layout/activity_main.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-hdpi/ic_launcher_round.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-mdpi/ic_launcher_round.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/values-night/themes.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/values/colors.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/values/strings.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/values/themes.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/app/src/main/res/xml/file_paths.xml (100%) rename examples/api/src-tauri/gen/android/{api => }/build.gradle.kts (51%) rename examples/api/src-tauri/gen/android/{api => }/buildSrc/build.gradle.kts (59%) rename examples/api/src-tauri/gen/android/{api => }/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt (79%) create mode 100644 examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt rename examples/api/src-tauri/gen/android/{api => }/gradle.properties (92%) rename examples/api/src-tauri/gen/android/{api => }/gradle/wrapper/gradle-wrapper.jar (100%) rename examples/api/src-tauri/gen/android/{api => }/gradle/wrapper/gradle-wrapper.properties (93%) rename examples/api/src-tauri/gen/android/{api => }/gradlew (100%) rename examples/api/src-tauri/gen/android/{api => }/gradlew.bat (100%) create mode 100644 examples/api/src-tauri/gen/android/settings.gradle create mode 100644 plugins/window/build.rs rename plugins/window/src/{commands.rs => desktop_commands.rs} (100%) diff --git a/Cargo.lock b/Cargo.lock index 80d7bb36..cfe81a35 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4960,7 +4960,7 @@ dependencies = [ [[package]] name = "tauri" version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" +source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" dependencies = [ "anyhow", "bytes 1.4.0", @@ -5010,7 +5010,7 @@ dependencies = [ [[package]] name = "tauri-build" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" +source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" dependencies = [ "anyhow", "cargo_toml", @@ -5030,7 +5030,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" +source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" dependencies = [ "base64 0.21.0", "brotli", @@ -5055,7 +5055,7 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" +source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -5449,7 +5449,7 @@ dependencies = [ [[package]] name = "tauri-runtime" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" +source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" dependencies = [ "gtk", "http", @@ -5469,7 +5469,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" +source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" dependencies = [ "cocoa", "gtk", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "tauri-utils" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#6d25c4d07fcf18c2a19ac4faa7d9bedd96d1a75f" +source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" dependencies = [ "aes-gcm 0.10.1", "brotli", diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 4bd7ce49..6448c4e0 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -27,7 +27,6 @@ tauri-plugin-notification = { path = "../../../plugins/notification", features = tauri-plugin-os = { path = "../../../plugins/os" } tauri-plugin-process = { path = "../../../plugins/process" } tauri-plugin-shell = { path = "../../../plugins/shell" } -tauri-plugin-updater = { path = "../../../plugins/updater" } tauri-plugin-window = { path = "../../../plugins/window" } [dependencies.tauri] @@ -44,6 +43,7 @@ features = [ [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] tauri-plugin-cli = { path = "../../../plugins/cli" } tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut" } +tauri-plugin-updater = { path = "../../../plugins/updater" } [target."cfg(target_os = \"windows\")".dependencies] window-shadows = "0.2" diff --git a/examples/api/src-tauri/gen/android/api/.editorconfig b/examples/api/src-tauri/gen/android/.editorconfig similarity index 100% rename from examples/api/src-tauri/gen/android/api/.editorconfig rename to examples/api/src-tauri/gen/android/.editorconfig diff --git a/examples/api/src-tauri/gen/android/api/.gitignore b/examples/api/src-tauri/gen/android/.gitignore similarity index 86% rename from examples/api/src-tauri/gen/android/api/.gitignore rename to examples/api/src-tauri/gen/android/.gitignore index 6bb2f5ee..b2482031 100644 --- a/examples/api/src-tauri/gen/android/api/.gitignore +++ b/examples/api/src-tauri/gen/android/.gitignore @@ -13,6 +13,7 @@ build .externalNativeBuild .cxx local.properties +key.properties /.tauri /tauri.settings.gradle \ No newline at end of file diff --git a/examples/api/src-tauri/gen/android/api/app/build.gradle.kts b/examples/api/src-tauri/gen/android/api/app/build.gradle.kts deleted file mode 100644 index 7a18b94b..00000000 --- a/examples/api/src-tauri/gen/android/api/app/build.gradle.kts +++ /dev/null @@ -1,113 +0,0 @@ -plugins { - id("com.android.application") - id("org.jetbrains.kotlin.android") - id("rustPlugin") -} - -android { - compileSdk = 33 - defaultConfig { - manifestPlaceholders["usesCleartextTraffic"] = "false" - applicationId = "com.tauri.api" - minSdk = 24 - targetSdk = 33 - versionCode = 1 - versionName = "1.0" - } - sourceSets.getByName("main") { - // Vulkan validation layers - val ndkHome = System.getenv("NDK_HOME") - jniLibs.srcDir("${ndkHome}/sources/third_party/vulkan/src/build-android/jniLibs") - } - buildTypes { - getByName("debug") { - manifestPlaceholders["usesCleartextTraffic"] = "true" - isDebuggable = true - isJniDebuggable = true - isMinifyEnabled = false - packagingOptions { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so") - jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so") - jniLibs.keepDebugSymbols.add("*/x86/*.so") - jniLibs.keepDebugSymbols.add("*/x86_64/*.so") - } - } - getByName("release") { - isMinifyEnabled = true - val proguards = fileTree(".") { - include("*.pro") - } - proguardFiles(*proguards.toList().toTypedArray()) - } - } - flavorDimensions.add("abi") - productFlavors { - create("universal") { - dimension = "abi" - ndk { - abiFilters += (findProperty("abiList") as? String)?.split(",") ?: listOf( "arm64-v8a", "armeabi-v7a", "x86", "x86_64", - ) - } - } - create("arm64") { - dimension = "abi" - ndk { - abiFilters += listOf("arm64-v8a") - } - } - - create("arm") { - dimension = "abi" - ndk { - abiFilters += listOf("armeabi-v7a") - } - } - - create("x86") { - dimension = "abi" - ndk { - abiFilters += listOf("x86") - } - } - - create("x86_64") { - dimension = "abi" - ndk { - abiFilters += listOf("x86_64") - } - } - } - - assetPacks += mutableSetOf() - namespace = "com.tauri.api" -} - -rust { - rootDirRel = "../../../../" - targets = (findProperty("targetList") as? String)?.split(",") ?: listOf("aarch64", "armv7", "i686", "x86_64") - arches = (findProperty("archList") as? String)?.split(",") ?: listOf("arm64", "arm", "x86", "x86_64") -} - -dependencies { - implementation("androidx.webkit:webkit:1.5.0") - implementation("androidx.appcompat:appcompat:1.5.1") - implementation("com.google.android.material:material:1.7.0") - testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.4") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0") - implementation(project(":tauri-android")) -} - -apply(from = "tauri.build.gradle.kts") - -afterEvaluate { - android.applicationVariants.all { - tasks["mergeUniversalReleaseJniLibFolders"].dependsOn(tasks["rustBuildRelease"]) - tasks["mergeUniversalDebugJniLibFolders"].dependsOn(tasks["rustBuildDebug"]) - if (findProperty("targetList") == null) { - productFlavors.filter{ it.name != "universal" }.forEach { _ -> - val archAndBuildType = name.capitalize() - tasks["merge${archAndBuildType}JniLibFolders"].dependsOn(tasks["rustBuild${archAndBuildType}"]) - } - } - } -} diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/java/com/tauri/api/MainActivity.kt b/examples/api/src-tauri/gen/android/api/app/src/main/java/com/tauri/api/MainActivity.kt deleted file mode 100644 index 46c4bc6e..00000000 --- a/examples/api/src-tauri/gen/android/api/app/src/main/java/com/tauri/api/MainActivity.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.tauri.api - -import app.tauri.plugin.PluginManager - -class MainActivity : TauriActivity() { - var pluginManager: PluginManager = PluginManager(this) -} diff --git a/examples/api/src-tauri/gen/android/api/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt b/examples/api/src-tauri/gen/android/api/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt deleted file mode 100644 index 064fc632..00000000 --- a/examples/api/src-tauri/gen/android/api/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt +++ /dev/null @@ -1,59 +0,0 @@ -package com.tauri - -import org.gradle.api.DefaultTask -import org.gradle.api.GradleException -import org.gradle.api.Plugin -import org.gradle.api.Project -import java.io.File -import java.util.* - -const val TASK_GROUP = "rust" - -open class Config { - var rootDirRel: String? = null - var targets: List? = null - var arches: List? = null -} - -open class RustPlugin : Plugin { - private lateinit var config: Config - - override fun apply(project: Project) { - config = project.extensions.create("rust", Config::class.java) - project.afterEvaluate { - if (config.targets == null) { - throw GradleException("targets cannot be null") - } - if (config.arches == null) { - throw GradleException("arches cannot be null") - } - for (profile in listOf("debug", "release")) { - val profileCapitalized = profile.capitalize(Locale.ROOT) - val buildTask = project.tasks.maybeCreate( - "rustBuild$profileCapitalized", - DefaultTask::class.java - ).apply { - group = TASK_GROUP - description = "Build dynamic library in $profile mode for all targets" - } - for (targetPair in config.targets!!.withIndex()) { - val targetName = targetPair.value - val targetArch = config.arches!![targetPair.index] - val targetArchCapitalized = targetArch.capitalize(Locale.ROOT) - val targetBuildTask = project.tasks.maybeCreate( - "rustBuild$targetArchCapitalized$profileCapitalized", - BuildTask::class.java - ).apply { - group = TASK_GROUP - description = "Build dynamic library in $profile mode for $targetArch" - rootDirRel = config.rootDirRel?.let { File(it) } - target = targetName - release = profile == "release" - } - buildTask.dependsOn(targetBuildTask) - project.tasks.findByName("preBuild")?.mustRunAfter(targetBuildTask) - } - } - } - } -} diff --git a/examples/api/src-tauri/gen/android/api/settings.gradle b/examples/api/src-tauri/gen/android/api/settings.gradle deleted file mode 100644 index b179eac8..00000000 --- a/examples/api/src-tauri/gen/android/api/settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -include ':app' - -include ':tauri-android' -project(':tauri-android').projectDir = new File('./.tauri/tauri-api') - -apply from: 'tauri.settings.gradle' diff --git a/examples/api/src-tauri/gen/android/api/app/.gitignore b/examples/api/src-tauri/gen/android/app/.gitignore similarity index 63% rename from examples/api/src-tauri/gen/android/api/app/.gitignore rename to examples/api/src-tauri/gen/android/app/.gitignore index 3b9e0a22..ff9cb538 100644 --- a/examples/api/src-tauri/gen/android/api/app/.gitignore +++ b/examples/api/src-tauri/gen/android/app/.gitignore @@ -1,4 +1,5 @@ /src/main/java/com/tauri/api/generated /src/main/jniLibs/**/*.so +/src/main/assets/tauri.conf.json /tauri.build.gradle.kts /proguard-tauri.pro \ No newline at end of file diff --git a/examples/api/src-tauri/gen/android/app/build.gradle.kts b/examples/api/src-tauri/gen/android/app/build.gradle.kts new file mode 100644 index 00000000..e3de36fd --- /dev/null +++ b/examples/api/src-tauri/gen/android/app/build.gradle.kts @@ -0,0 +1,57 @@ +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("rust") +} + +android { + compileSdk = 33 + namespace = "com.tauri.api" + defaultConfig { + manifestPlaceholders["usesCleartextTraffic"] = "false" + applicationId = "com.tauri.api" + minSdk = 24 + targetSdk = 33 + versionCode = 1 + versionName = "1.0" + } + buildTypes { + getByName("debug") { + manifestPlaceholders["usesCleartextTraffic"] = "true" + isDebuggable = true + isJniDebuggable = true + isMinifyEnabled = false + packaging { jniLibs.keepDebugSymbols.add("*/arm64-v8a/*.so") + jniLibs.keepDebugSymbols.add("*/armeabi-v7a/*.so") + jniLibs.keepDebugSymbols.add("*/x86/*.so") + jniLibs.keepDebugSymbols.add("*/x86_64/*.so") + } + } + getByName("release") { + isMinifyEnabled = true + proguardFiles( + *fileTree(".") { include("**/*.pro") } + .plus(getDefaultProguardFile("proguard-android-optimize.txt")) + .toList().toTypedArray() + ) + } + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +rust { + rootDirRel = "../../../" +} + +dependencies { + implementation("androidx.webkit:webkit:1.6.1") + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("com.google.android.material:material:1.8.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.4") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0") +} + +apply(from = "tauri.build.gradle.kts") diff --git a/examples/api/src-tauri/gen/android/api/app/proguard-rules.pro b/examples/api/src-tauri/gen/android/app/proguard-rules.pro similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/proguard-rules.pro rename to examples/api/src-tauri/gen/android/app/proguard-rules.pro diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/AndroidManifest.xml b/examples/api/src-tauri/gen/android/app/src/main/AndroidManifest.xml similarity index 99% rename from examples/api/src-tauri/gen/android/api/app/src/main/AndroidManifest.xml rename to examples/api/src-tauri/gen/android/app/src/main/AndroidManifest.xml index 13dcbd14..6ad2d210 100644 --- a/examples/api/src-tauri/gen/android/api/app/src/main/AndroidManifest.xml +++ b/examples/api/src-tauri/gen/android/app/src/main/AndroidManifest.xml @@ -14,7 +14,6 @@ android:exported="true"> - diff --git a/examples/api/src-tauri/gen/android/app/src/main/java/com/tauri/api/MainActivity.kt b/examples/api/src-tauri/gen/android/app/src/main/java/com/tauri/api/MainActivity.kt new file mode 100644 index 00000000..ad3fa238 --- /dev/null +++ b/examples/api/src-tauri/gen/android/app/src/main/java/com/tauri/api/MainActivity.kt @@ -0,0 +1,3 @@ +package com.tauri.api + +class MainActivity : TauriActivity() diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/examples/api/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/drawable-v24/ic_launcher_foreground.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/drawable/ic_launcher_background.xml b/examples/api/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/drawable/ic_launcher_background.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/layout/activity_main.xml b/examples/api/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/layout/activity_main.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/layout/activity_main.xml diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to examples/api/src-tauri/gen/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/values-night/themes.xml b/examples/api/src-tauri/gen/android/app/src/main/res/values-night/themes.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/values-night/themes.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/values-night/themes.xml diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/values/colors.xml b/examples/api/src-tauri/gen/android/app/src/main/res/values/colors.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/values/colors.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/values/colors.xml diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/values/strings.xml b/examples/api/src-tauri/gen/android/app/src/main/res/values/strings.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/values/strings.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/values/strings.xml diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/values/themes.xml b/examples/api/src-tauri/gen/android/app/src/main/res/values/themes.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/values/themes.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/values/themes.xml diff --git a/examples/api/src-tauri/gen/android/api/app/src/main/res/xml/file_paths.xml b/examples/api/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml similarity index 100% rename from examples/api/src-tauri/gen/android/api/app/src/main/res/xml/file_paths.xml rename to examples/api/src-tauri/gen/android/app/src/main/res/xml/file_paths.xml diff --git a/examples/api/src-tauri/gen/android/api/build.gradle.kts b/examples/api/src-tauri/gen/android/build.gradle.kts similarity index 51% rename from examples/api/src-tauri/gen/android/api/build.gradle.kts rename to examples/api/src-tauri/gen/android/build.gradle.kts index 8c6fe584..5ce764e3 100644 --- a/examples/api/src-tauri/gen/android/api/build.gradle.kts +++ b/examples/api/src-tauri/gen/android/build.gradle.kts @@ -1,14 +1,11 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() mavenCentral() } dependencies { - classpath("com.android.tools.build:gradle:7.3.1") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10") - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + classpath("com.android.tools.build:gradle:8.0.0") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21") } } diff --git a/examples/api/src-tauri/gen/android/api/buildSrc/build.gradle.kts b/examples/api/src-tauri/gen/android/buildSrc/build.gradle.kts similarity index 59% rename from examples/api/src-tauri/gen/android/api/buildSrc/build.gradle.kts rename to examples/api/src-tauri/gen/android/buildSrc/build.gradle.kts index 73058dd7..099feff7 100644 --- a/examples/api/src-tauri/gen/android/api/buildSrc/build.gradle.kts +++ b/examples/api/src-tauri/gen/android/buildSrc/build.gradle.kts @@ -5,8 +5,8 @@ plugins { gradlePlugin { plugins { create("pluginsForCoolKids") { - id = "rustPlugin" - implementationClass = "com.tauri.RustPlugin" + id = "rust" + implementationClass = "RustPlugin" } } } @@ -18,6 +18,6 @@ repositories { dependencies { compileOnly(gradleApi()) - implementation("com.android.tools.build:gradle:7.3.1") + implementation("com.android.tools.build:gradle:8.0.0") } diff --git a/examples/api/src-tauri/gen/android/api/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt b/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt similarity index 79% rename from examples/api/src-tauri/gen/android/api/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt rename to examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt index dfc8507e..f9874825 100644 --- a/examples/api/src-tauri/gen/android/api/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt +++ b/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/BuildTask.kt @@ -1,28 +1,22 @@ -package com.tauri - import java.io.File import org.apache.tools.ant.taskdefs.condition.Os import org.gradle.api.DefaultTask import org.gradle.api.GradleException import org.gradle.api.logging.LogLevel import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction open class BuildTask : DefaultTask() { - @InputDirectory - @PathSensitive(PathSensitivity.RELATIVE) - var rootDirRel: File? = null + @Input + var rootDirRel: String? = null @Input var target: String? = null @Input var release: Boolean? = null @TaskAction - fun build() { - val executable = """yarn"""; + fun assemble() { + val executable = """pnpm"""; try { runTauriCli(executable) } catch (e: Exception) { @@ -41,7 +35,7 @@ open class BuildTask : DefaultTask() { val args = listOf("tauri", "android", "android-studio-script"); project.exec { - workingDir(File(project.projectDir, rootDirRel.path)) + workingDir(File(project.projectDir, rootDirRel)) executable(executable) args(args) if (project.logger.isEnabled(LogLevel.DEBUG)) { diff --git a/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt b/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt new file mode 100644 index 00000000..2ea5ce5c --- /dev/null +++ b/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt @@ -0,0 +1,85 @@ +import com.android.build.api.dsl.ApplicationExtension +import org.gradle.api.DefaultTask +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.get + +const val TASK_GROUP = "rust" + +open class Config { + lateinit var rootDirRel: String +} + +open class RustPlugin : Plugin { + private lateinit var config: Config + + override fun apply(project: Project) = with(project) { + config = extensions.create("rust", Config::class.java) + + val defaultAbiList = listOf("arm64-v8a", "armeabi-v7a", "x86", "x86_64"); + val abiList = (findProperty("abiList") as? String)?.split(',') ?: defaultAbiList + + val defaultArchList = listOf("arm64", "arm", "x86", "x86_64"); + val archList = (findProperty("archList") as? String)?.split(',') ?: listOf("arm64", "arm", "x86", "x86_64") + + val targetsList = (findProperty("targetList") as? String)?.split(',') ?: listOf("aarch64", "armv7", "i686", "x86_64") + + extensions.configure { + @Suppress("UnstableApiUsage") + flavorDimensions.add("abi") + productFlavors { + create("universal") { + dimension = "abi" + ndk { + abiFilters += abiList + } + } + defaultArchList.forEachIndexed { index, arch -> + create(arch) { + dimension = "abi" + ndk { + abiFilters.add(defaultAbiList[index]) + } + } + } + } + } + + afterEvaluate { + for (profile in listOf("debug", "release")) { + val profileCapitalized = profile.replaceFirstChar { it.uppercase() } + val buildTask = tasks.maybeCreate( + "rustBuildUniversal$profileCapitalized", + DefaultTask::class.java + ).apply { + group = TASK_GROUP + description = "Build dynamic library in $profile mode for all targets" + } + + tasks["mergeUniversal${profileCapitalized}JniLibFolders"].dependsOn(buildTask) + + for (targetPair in targetsList.withIndex()) { + val targetName = targetPair.value + val targetArch = archList[targetPair.index] + val targetArchCapitalized = targetArch.replaceFirstChar { it.uppercase() } + val targetBuildTask = project.tasks.maybeCreate( + "rustBuild$targetArchCapitalized$profileCapitalized", + BuildTask::class.java + ).apply { + group = TASK_GROUP + description = "Build dynamic library in $profile mode for $targetArch" + rootDirRel = config.rootDirRel + target = targetName + release = profile == "release" + } + + buildTask.dependsOn(targetBuildTask) + tasks["merge$targetArchCapitalized${profileCapitalized}JniLibFolders"].dependsOn( + targetBuildTask + ) + } + } + } + } +} \ No newline at end of file diff --git a/examples/api/src-tauri/gen/android/api/gradle.properties b/examples/api/src-tauri/gen/android/gradle.properties similarity index 92% rename from examples/api/src-tauri/gen/android/api/gradle.properties rename to examples/api/src-tauri/gen/android/gradle.properties index cd0519bb..022338b7 100644 --- a/examples/api/src-tauri/gen/android/api/gradle.properties +++ b/examples/api/src-tauri/gen/android/gradle.properties @@ -20,4 +20,6 @@ kotlin.code.style=official # Enables namespacing of each library's R class so that its R class includes only the # resources declared in the library itself and none from the library's dependencies, # thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file +android.nonTransitiveRClass=true +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false \ No newline at end of file diff --git a/examples/api/src-tauri/gen/android/api/gradle/wrapper/gradle-wrapper.jar b/examples/api/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from examples/api/src-tauri/gen/android/api/gradle/wrapper/gradle-wrapper.jar rename to examples/api/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.jar diff --git a/examples/api/src-tauri/gen/android/api/gradle/wrapper/gradle-wrapper.properties b/examples/api/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties similarity index 93% rename from examples/api/src-tauri/gen/android/api/gradle/wrapper/gradle-wrapper.properties rename to examples/api/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties index de8c362b..40a43506 100644 --- a/examples/api/src-tauri/gen/android/api/gradle/wrapper/gradle-wrapper.properties +++ b/examples/api/src-tauri/gen/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue May 10 19:22:52 CST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/examples/api/src-tauri/gen/android/api/gradlew b/examples/api/src-tauri/gen/android/gradlew similarity index 100% rename from examples/api/src-tauri/gen/android/api/gradlew rename to examples/api/src-tauri/gen/android/gradlew diff --git a/examples/api/src-tauri/gen/android/api/gradlew.bat b/examples/api/src-tauri/gen/android/gradlew.bat similarity index 100% rename from examples/api/src-tauri/gen/android/api/gradlew.bat rename to examples/api/src-tauri/gen/android/gradlew.bat diff --git a/examples/api/src-tauri/gen/android/settings.gradle b/examples/api/src-tauri/gen/android/settings.gradle new file mode 100644 index 00000000..39391166 --- /dev/null +++ b/examples/api/src-tauri/gen/android/settings.gradle @@ -0,0 +1,3 @@ +include ':app' + +apply from: 'tauri.settings.gradle' diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index d5d77a67..41be8760 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -40,7 +40,6 @@ pub fn run() { .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_shell::init()) - .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_window::init()) .setup(move |app| { #[cfg(desktop)] @@ -49,6 +48,8 @@ pub fn run() { app.handle().plugin(tauri_plugin_cli::init())?; app.handle() .plugin(tauri_plugin_global_shortcut::Builder::new().build())?; + app.handle() + .plugin(tauri_plugin_updater::Builder::new().build())?; } let mut window_builder = WindowBuilder::new(app, "main", WindowUrl::default()); diff --git a/plugins/clipboard/Cargo.toml b/plugins/clipboard/Cargo.toml index 00864ff4..1b02f6fc 100644 --- a/plugins/clipboard/Cargo.toml +++ b/plugins/clipboard/Cargo.toml @@ -4,6 +4,7 @@ version = "0.0.0" edition.workspace = true authors.workspace = true license.workspace = true +links = "tauri-plugin-clipboard" [build-dependencies] tauri-build.workspace = true diff --git a/plugins/dialog/Cargo.toml b/plugins/dialog/Cargo.toml index 1882da38..45a89d92 100644 --- a/plugins/dialog/Cargo.toml +++ b/plugins/dialog/Cargo.toml @@ -4,6 +4,7 @@ version = "0.0.0" edition.workspace = true authors.workspace = true license.workspace = true +links = "tauri-plugin-dialog" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/plugins/notification/Cargo.toml b/plugins/notification/Cargo.toml index f136b2e5..721cb3e3 100644 --- a/plugins/notification/Cargo.toml +++ b/plugins/notification/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" edition.workspace = true authors.workspace = true license.workspace = true +links = "tauri-plugin-notification" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/plugins/notification/android/src/main/AndroidManifest.xml b/plugins/notification/android/src/main/AndroidManifest.xml index 986d5f85..28ccac30 100644 --- a/plugins/notification/android/src/main/AndroidManifest.xml +++ b/plugins/notification/android/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/plugins/window/build.rs b/plugins/window/build.rs new file mode 100644 index 00000000..74bf430b --- /dev/null +++ b/plugins/window/build.rs @@ -0,0 +1,14 @@ +fn main() { + let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); + let mobile = target_os == "ios" || target_os == "android"; + alias("desktop", !mobile); + alias("mobile", mobile); +} + +// creates a cfg alias if `has_feature` is true. +// `alias` must be a snake case string. +fn alias(alias: &str, has_feature: bool) { + if has_feature { + println!("cargo:rustc-cfg={alias}"); + } +} diff --git a/plugins/window/src/commands.rs b/plugins/window/src/desktop_commands.rs similarity index 100% rename from plugins/window/src/commands.rs rename to plugins/window/src/desktop_commands.rs diff --git a/plugins/window/src/lib.rs b/plugins/window/src/lib.rs index 513a5d32..a9673b6d 100644 --- a/plugins/window/src/lib.rs +++ b/plugins/window/src/lib.rs @@ -3,63 +3,77 @@ use tauri::{ Runtime, }; -mod commands; +#[cfg(desktop)] +mod desktop_commands; pub fn init() -> TauriPlugin { Builder::new("window") - .invoke_handler(tauri::generate_handler![ - commands::create, - // getters - commands::scale_factor, - commands::inner_position, - commands::outer_position, - commands::inner_size, - commands::outer_size, - commands::is_fullscreen, - commands::is_minimized, - commands::is_maximized, - commands::is_decorated, - commands::is_resizable, - commands::is_visible, - commands::title, - commands::current_monitor, - commands::primary_monitor, - commands::available_monitors, - commands::theme, - // setters - commands::center, - commands::request_user_attention, - commands::set_resizable, - commands::set_title, - commands::maximize, - commands::unmaximize, - commands::minimize, - commands::unminimize, - commands::show, - commands::hide, - commands::close, - commands::set_decorations, - commands::set_shadow, - commands::set_always_on_top, - commands::set_content_protected, - commands::set_size, - commands::set_min_size, - commands::set_max_size, - commands::set_position, - commands::set_fullscreen, - commands::set_focus, - commands::set_skip_taskbar, - commands::set_cursor_grab, - commands::set_cursor_visible, - commands::set_cursor_icon, - commands::set_cursor_position, - commands::set_ignore_cursor_events, - commands::start_dragging, - commands::print, - commands::set_icon, - commands::toggle_maximize, - commands::internal_toggle_maximize, - commands::internal_toggle_devtools, - ]) + .invoke_handler(|invoke| { + #[cfg(desktop)] + { + let handler: Box) -> bool> = + Box::new(tauri::generate_handler![ + desktop_commands::create, + // getters + desktop_commands::scale_factor, + desktop_commands::inner_position, + desktop_commands::outer_position, + desktop_commands::inner_size, + desktop_commands::outer_size, + desktop_commands::is_fullscreen, + desktop_commands::is_minimized, + desktop_commands::is_maximized, + desktop_commands::is_decorated, + desktop_commands::is_resizable, + desktop_commands::is_visible, + desktop_commands::title, + desktop_commands::current_monitor, + desktop_commands::primary_monitor, + desktop_commands::available_monitors, + desktop_commands::theme, + // setters + desktop_commands::center, + desktop_commands::request_user_attention, + desktop_commands::set_resizable, + desktop_commands::set_title, + desktop_commands::maximize, + desktop_commands::unmaximize, + desktop_commands::minimize, + desktop_commands::unminimize, + desktop_commands::show, + desktop_commands::hide, + desktop_commands::close, + desktop_commands::set_decorations, + desktop_commands::set_shadow, + desktop_commands::set_always_on_top, + desktop_commands::set_content_protected, + desktop_commands::set_size, + desktop_commands::set_min_size, + desktop_commands::set_max_size, + desktop_commands::set_position, + desktop_commands::set_fullscreen, + desktop_commands::set_focus, + desktop_commands::set_skip_taskbar, + desktop_commands::set_cursor_grab, + desktop_commands::set_cursor_visible, + desktop_commands::set_cursor_icon, + desktop_commands::set_cursor_position, + desktop_commands::set_ignore_cursor_events, + desktop_commands::start_dragging, + desktop_commands::print, + desktop_commands::set_icon, + desktop_commands::toggle_maximize, + desktop_commands::internal_toggle_maximize, + desktop_commands::internal_toggle_devtools, + ]); + #[allow(clippy::needless_return)] + return handler(invoke); + } + #[cfg(mobile)] + { + invoke.resolver.reject("Window API not available on mobile"); + return true; + } + }) .build() } diff --git a/shared/template/Cargo.toml b/shared/template/Cargo.toml index defae478..20f4dd71 100644 --- a/shared/template/Cargo.toml +++ b/shared/template/Cargo.toml @@ -4,6 +4,7 @@ version = "0.0.0" edition.workspace = true authors.workspace = true license.workspace = true +links = "tauri-plugin-{{name}}" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 838ec9edcd32abff5644398e2ad5e54c85e95a7e Mon Sep 17 00:00:00 2001 From: Fabian-Lars Date: Wed, 17 May 2023 11:12:54 +0200 Subject: [PATCH 16/64] chore(deps): Update notify to v5 and notify-debouncer-mini to v0.3 (#365) --- Cargo.lock | 78 ++++++++++++++++++++++++------------- plugins/fs-watch/Cargo.toml | 4 +- 2 files changed, 53 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 743c68f4..28de7d51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2522,9 +2522,9 @@ dependencies = [ [[package]] name = "notify" -version = "5.1.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" +checksum = "4d9ba6c734de18ca27c8cef5cd7058aa4ac9f63596131e4c7e41e579319032a2" dependencies = [ "bitflags 1.3.2", "crossbeam-channel", @@ -2536,14 +2536,14 @@ dependencies = [ "mio", "serde", "walkdir", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] name = "notify-debouncer-mini" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e23e9fa24f094b143c1eb61f90ac6457de87be6987bc70746e0179f7dbc9007b" +checksum = "e55ee272914f4563a2f8b8553eb6811f3c0caea81c756346bad15b7e3ef969f0" dependencies = [ "crossbeam-channel", "notify", @@ -5460,13 +5460,22 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm 0.42.1", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", - "windows_x86_64_gnullvm 0.42.1", - "windows_x86_64_msvc 0.42.1", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", ] [[package]] @@ -5475,7 +5484,22 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -5501,9 +5525,9 @@ checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" @@ -5525,9 +5549,9 @@ checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" @@ -5549,9 +5573,9 @@ checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" @@ -5573,9 +5597,9 @@ checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" @@ -5597,9 +5621,9 @@ checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" @@ -5609,9 +5633,9 @@ checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" @@ -5633,9 +5657,9 @@ checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" diff --git a/plugins/fs-watch/Cargo.toml b/plugins/fs-watch/Cargo.toml index 8431bae0..07a4b0d8 100644 --- a/plugins/fs-watch/Cargo.toml +++ b/plugins/fs-watch/Cargo.toml @@ -15,5 +15,5 @@ serde_json.workspace = true tauri.workspace = true log.workspace = true thiserror.workspace = true -notify = { version = "5" , features = ["serde"] } -notify-debouncer-mini = { version = "0.2.1" , features = ["serde"] } +notify = { version = "6" , features = ["serde"] } +notify-debouncer-mini = { version = "0.3" , features = ["serde"] } From 40e3624f371c5cfc9ff8b7fedbfa49e8f992bf31 Mon Sep 17 00:00:00 2001 From: FabianLars Date: Wed, 17 May 2023 11:48:38 +0200 Subject: [PATCH 17/64] ci: change covector script to .cjs file extension --- .changes/config.json | 4 ++-- .../{package-latest-version.js => package-latest-version.cjs} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename .scripts/covector/{package-latest-version.js => package-latest-version.cjs} (100%) diff --git a/.changes/config.json b/.changes/config.json index 8de61c38..70ddfdd5 100644 --- a/.changes/config.json +++ b/.changes/config.json @@ -3,12 +3,12 @@ "pkgManagers": { "javascript": { "version": true, - "getPublishedVersion": "node ../../.scripts/covector/package-latest-version.js npm ${ pkgFile.pkg.name } ${ pkgFile.pkg.version }", + "getPublishedVersion": "node ../../.scripts/covector/package-latest-version.cjs npm ${ pkgFile.pkg.name } ${ pkgFile.pkg.version }", "publish": ["pnpm build", "pnpm publish --access public --no-git-checks"] }, "rust": { "version": true, - "getPublishedVersion": "node ../../.scripts/covector/package-latest-version.js cargo ${ pkgFile.pkg.package.name } ${ pkgFile.pkg.package.version }", + "getPublishedVersion": "node ../../.scripts/covector/package-latest-version.cjs cargo ${ pkgFile.pkg.package.name } ${ pkgFile.pkg.package.version }", "publish": [ { "command": "cargo package --no-verify", diff --git a/.scripts/covector/package-latest-version.js b/.scripts/covector/package-latest-version.cjs similarity index 100% rename from .scripts/covector/package-latest-version.js rename to .scripts/covector/package-latest-version.cjs From 5c05224e42b44dc1cc12f6c50a0e0180a85455c1 Mon Sep 17 00:00:00 2001 From: Vinayak <72456774+louremipsum@users.noreply.github.com> Date: Wed, 17 May 2023 19:07:18 +0530 Subject: [PATCH 18/64] docs(upload): documentation for download function (#362) * feat: documentation for download func. * fix: linguitic and header type changes --- plugins/upload/README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/plugins/upload/README.md b/plugins/upload/README.md index b69c8eda..0f74288d 100644 --- a/plugins/upload/README.md +++ b/plugins/upload/README.md @@ -1,6 +1,7 @@ ![plugin-upload](banner.png) Upload files from disk to a remote server over HTTP. +Download files from a remote HTTP server to disk. ## Install @@ -54,10 +55,21 @@ Afterwards all the plugin's APIs are available through the JavaScript guest bind import { upload } from 'tauri-plugin-upload-api' upload( - 'https://example.com/file-upload' - './path/to/my/file.txt' - (progress, total) => console.log(`Downloaded ${progress} of ${total} bytes`) // a callback that will be called with the upload progress - { 'ContentType': 'text/plain' } // optional headers to send with the request + 'https://example.com/file-upload', + './path/to/my/file.txt', + (progress, total) => console.log(`Uploaded ${progress} of ${total} bytes`), // a callback that will be called with the upload progress + { 'Content-Type': 'text/plain' } // optional headers to send with the request +) +``` + +```javascript +import { download } from "tauri-plugin-upload-api"; + +download( + 'https://example.com/file-download-link', + './path/to/save/my/file.txt', + (progress, total) => console.log(`Downloaded ${progress} of ${total} bytes`), // a callback that will be called with the download progress + { 'Content-Type': 'text/plain' } // optional headers to send with the request ) ``` From 843800ab1e79bdb6ea4b537e96b3c770af808977 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 17:52:51 +0200 Subject: [PATCH 19/64] Publish New Versions (#341) * publish new versions * Update Cargo.toml * add msrv note to changelog * changelog wording --------- Co-authored-by: FabianLars Co-authored-by: Fabian-Lars --- .changes/persisted-scope-fix-oom.md | 5 ----- plugins/persisted-scope/CHANGELOG.md | 7 +++++++ plugins/persisted-scope/Cargo.toml | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) delete mode 100644 .changes/persisted-scope-fix-oom.md create mode 100644 plugins/persisted-scope/CHANGELOG.md diff --git a/.changes/persisted-scope-fix-oom.md b/.changes/persisted-scope-fix-oom.md deleted file mode 100644 index 6e6520af..00000000 --- a/.changes/persisted-scope-fix-oom.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -persisted-scope: patch ---- - -Recursively unescape saved patterns before allowing/forbidding them. This effectively prevents `.persisted-scope` files from blowing up, which caused Out-Of-Memory issues, while automatically fixing existing broken files seamlessly. diff --git a/plugins/persisted-scope/CHANGELOG.md b/plugins/persisted-scope/CHANGELOG.md new file mode 100644 index 00000000..d1991b01 --- /dev/null +++ b/plugins/persisted-scope/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +## \[0.1.1] + +- The MSRV was raised to 1.64! +- The plugin now recursively unescapes saved patterns before allowing/forbidding them. This effectively prevents `.persisted-scope` files from blowing up, which caused Out-Of-Memory issues, while automatically fixing existing broken files seamlessly. + - [ebb2eb2](https://github.com/tauri-apps/plugins-workspace/commit/ebb2eb2fe2ebfbb70530d16a983d396aa5829aa1) fix(persisted-scope): Prevent out-of-memory issues, fixes [#274](https://github.com/tauri-apps/plugins-workspace/pull/274) ([#328](https://github.com/tauri-apps/plugins-workspace/pull/328)) on 2023-04-26 diff --git a/plugins/persisted-scope/Cargo.toml b/plugins/persisted-scope/Cargo.toml index 4e1f24d0..5e25f178 100644 --- a/plugins/persisted-scope/Cargo.toml +++ b/plugins/persisted-scope/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-persisted-scope" -version = "0.1.0" +version = "0.1.1" description = "Save filesystem and asset scopes and restore them when the app is reopened." authors.workspace = true license.workspace = true @@ -19,4 +19,4 @@ aho-corasick = "1.0" bincode = "1" [features] -protocol-asset = [ "tauri/protocol-asset" ] \ No newline at end of file +protocol-asset = [ "tauri/protocol-asset" ] From 794f2d5cb8d53284f0abbeb8f584185b4dce3fc1 Mon Sep 17 00:00:00 2001 From: FabianLars Date: Wed, 17 May 2023 18:17:55 +0200 Subject: [PATCH 20/64] ci: install linux deps in covector workflow --- .github/workflows/covector-version-or-publish.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index b5c4ab7d..f6a67724 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -29,6 +29,11 @@ jobs: version: 7.x.x run_install: true + - name: install webkit2gtk and libudev for [authenticator] + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev + - name: cargo login run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }} From 7ae7167fbebbf0cf2683bcdb03f12b4fbd214ce9 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 17 May 2023 18:25:56 -0300 Subject: [PATCH 21/64] feat: add init scripts (#361) --- Cargo.lock | 14 +++---- examples/api/src-tauri/Cargo.toml | 2 +- plugins/dialog/src/commands.rs | 8 ++-- plugins/dialog/src/init.js | 15 +++++++ plugins/dialog/src/lib.rs | 10 ++++- plugins/shell/src/init.js | 40 +++++++++++++++++++ plugins/shell/src/lib.rs | 1 + plugins/window/Cargo.toml | 1 + plugins/window/src/desktop_commands.rs | 1 + plugins/window/src/lib.rs | 11 +++++ plugins/window/src/scripts/drag.js | 17 ++++++++ plugins/window/src/scripts/print.js | 7 ++++ plugins/window/src/scripts/toggle-devtools.js | 26 ++++++++++++ 13 files changed, 140 insertions(+), 13 deletions(-) create mode 100644 plugins/dialog/src/init.js create mode 100644 plugins/shell/src/init.js create mode 100644 plugins/window/src/scripts/drag.js create mode 100644 plugins/window/src/scripts/print.js create mode 100644 plugins/window/src/scripts/toggle-devtools.js diff --git a/Cargo.lock b/Cargo.lock index cfe81a35..6a12b8d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4960,7 +4960,7 @@ dependencies = [ [[package]] name = "tauri" version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" +source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" dependencies = [ "anyhow", "bytes 1.4.0", @@ -5010,7 +5010,7 @@ dependencies = [ [[package]] name = "tauri-build" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" +source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" dependencies = [ "anyhow", "cargo_toml", @@ -5030,7 +5030,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" +source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" dependencies = [ "base64 0.21.0", "brotli", @@ -5055,7 +5055,7 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" +source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -5449,7 +5449,7 @@ dependencies = [ [[package]] name = "tauri-runtime" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" +source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" dependencies = [ "gtk", "http", @@ -5469,7 +5469,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" +source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" dependencies = [ "cocoa", "gtk", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "tauri-utils" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#59db76af4c88645ee03b9f87c0f787fbc0040905" +source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" dependencies = [ "aes-gcm 0.10.1", "brotli", diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 6448c4e0..9620af9a 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -27,7 +27,7 @@ tauri-plugin-notification = { path = "../../../plugins/notification", features = tauri-plugin-os = { path = "../../../plugins/os" } tauri-plugin-process = { path = "../../../plugins/process" } tauri-plugin-shell = { path = "../../../plugins/shell" } -tauri-plugin-window = { path = "../../../plugins/window" } +tauri-plugin-window = { path = "../../../plugins/window", features = ["devtools", "icon-ico", "icon-png"] } [dependencies.tauri] workspace = true diff --git a/plugins/dialog/src/commands.rs b/plugins/dialog/src/commands.rs index 905c01ca..8232eedf 100644 --- a/plugins/dialog/src/commands.rs +++ b/plugins/dialog/src/commands.rs @@ -271,8 +271,8 @@ pub(crate) async fn ask( title, message, type_, - ok_button_label, - cancel_button_label, + Some(ok_button_label.unwrap_or_else(|| "Yes".into())), + Some(cancel_button_label.unwrap_or_else(|| "No".into())), )) } @@ -292,7 +292,7 @@ pub(crate) async fn confirm( title, message, type_, - ok_button_label, - cancel_button_label, + Some(ok_button_label.unwrap_or_else(|| "Ok".into())), + Some(cancel_button_label.unwrap_or_else(|| "Cancel".into())), )) } diff --git a/plugins/dialog/src/init.js b/plugins/dialog/src/init.js new file mode 100644 index 00000000..79c9fd8b --- /dev/null +++ b/plugins/dialog/src/init.js @@ -0,0 +1,15 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +window.alert = function (message) { + window.__TAURI_INVOKE__('plugin:dialog|message', { + message: message.toString() + }) +} + +window.confirm = function (message) { + return window.__TAURI_INVOKE__('plugin:dialog|confirm', { + message: message.toString() + }) +} diff --git a/plugins/dialog/src/lib.rs b/plugins/dialog/src/lib.rs index 85518fef..3349965b 100644 --- a/plugins/dialog/src/lib.rs +++ b/plugins/dialog/src/lib.rs @@ -69,7 +69,15 @@ impl Dialog { /// Initializes the plugin. pub fn init() -> TauriPlugin { - Builder::new("dialog") + let mut builder = Builder::new("dialog"); + + // Dialogs are implemented natively on Android + #[cfg(not(target_os = "android"))] + { + builder = builder.js_init_script(include_str!("init.js").to_string()); + } + + builder .invoke_handler(tauri::generate_handler![ commands::open, commands::save, diff --git a/plugins/shell/src/init.js b/plugins/shell/src/init.js new file mode 100644 index 00000000..c43f7cdf --- /dev/null +++ b/plugins/shell/src/init.js @@ -0,0 +1,40 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +;(function () { + // open links with the API + function openLinks() { + document.querySelector('body').addEventListener( + 'click', + function (e) { + var target = e.target + while (target != null) { + if (target.matches('a')) { + if ( + target.href && + (['http://', 'https://', 'mailto:', 'tel:'].some(v => target.href.startsWith(v))) && + target.target === '_blank' + ) { + window.__TAURI_INVOKE__('plugin:shell|open', { + path: target.href + }) + e.preventDefault() + } + break + } + target = target.parentElement + } + } + ) + } + + if ( + document.readyState === 'complete' || + document.readyState === 'interactive' + ) { + openLinks() + } else { + window.addEventListener('DOMContentLoaded', openLinks, true) + } +})() diff --git a/plugins/shell/src/lib.rs b/plugins/shell/src/lib.rs index f9ffd1e7..5453b15b 100644 --- a/plugins/shell/src/lib.rs +++ b/plugins/shell/src/lib.rs @@ -64,6 +64,7 @@ impl> ShellExt for T { pub fn init() -> TauriPlugin> { Builder::>::new("shell") + .js_init_script(include_str!("init.js").to_string()) .invoke_handler(tauri::generate_handler![ commands::execute, commands::stdin_write, diff --git a/plugins/window/Cargo.toml b/plugins/window/Cargo.toml index 6fda6b38..60500a09 100644 --- a/plugins/window/Cargo.toml +++ b/plugins/window/Cargo.toml @@ -13,3 +13,4 @@ thiserror.workspace = true [features] icon-png = ["tauri/icon-png"] icon-ico = ["tauri/icon-ico"] +devtools = [] diff --git a/plugins/window/src/desktop_commands.rs b/plugins/window/src/desktop_commands.rs index 453c1f98..63ef037b 100644 --- a/plugins/window/src/desktop_commands.rs +++ b/plugins/window/src/desktop_commands.rs @@ -182,6 +182,7 @@ pub fn internal_toggle_maximize( Ok(()) } +#[cfg(any(debug_assertions, feature = "devtools"))] #[tauri::command] pub fn internal_toggle_devtools( window: Window, diff --git a/plugins/window/src/lib.rs b/plugins/window/src/lib.rs index a9673b6d..0f4c2dda 100644 --- a/plugins/window/src/lib.rs +++ b/plugins/window/src/lib.rs @@ -7,7 +7,18 @@ use tauri::{ mod desktop_commands; pub fn init() -> TauriPlugin { + let mut init_js = String::new(); + // window.print works on Linux/Windows; need to use the API on macOS + #[cfg(any(target_os = "macos", target_os = "ios"))] + { + init_js.push_str(include_str!("./scripts/print.js")); + } + init_js.push_str(include_str!("./scripts/drag.js")); + #[cfg(any(debug_assertions, feature = "devtools"))] + init_js.push_str(include_str!("./scripts/toggle-devtools.js")); + Builder::new("window") + .js_init_script(init_js) .invoke_handler(|invoke| { #[cfg(desktop)] { diff --git a/plugins/window/src/scripts/drag.js b/plugins/window/src/scripts/drag.js new file mode 100644 index 00000000..b8abeb2c --- /dev/null +++ b/plugins/window/src/scripts/drag.js @@ -0,0 +1,17 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +document.addEventListener('mousedown', (e) => { + if (e.target.hasAttribute('data-tauri-drag-region') && e.buttons === 1) { + // prevents text cursor + e.preventDefault() + // fix #2549: double click on drag region edge causes content to maximize without window sizing change + // https://github.com/tauri-apps/tauri/issues/2549#issuecomment-1250036908 + e.stopImmediatePropagation() + + // start dragging if the element has a `tauri-drag-region` data attribute and maximize on double-clicking it + const cmd = e.detail === 2 ? 'internal_toggle_maximize' : 'start_dragging' + window.__TAURI_INVOKE__('plugin:window|' + cmd) + } +}) diff --git a/plugins/window/src/scripts/print.js b/plugins/window/src/scripts/print.js new file mode 100644 index 00000000..2be2e491 --- /dev/null +++ b/plugins/window/src/scripts/print.js @@ -0,0 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +window.print = function () { + return window.__TAURI_INVOKE__('plugin:window|print') +} diff --git a/plugins/window/src/scripts/toggle-devtools.js b/plugins/window/src/scripts/toggle-devtools.js new file mode 100644 index 00000000..2bff9d12 --- /dev/null +++ b/plugins/window/src/scripts/toggle-devtools.js @@ -0,0 +1,26 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +;(function () { + function toggleDevtoolsHotkey() { + const isHotkey = navigator.appVersion.includes('Mac') + ? event => event.metaKey && event.altKey && event.key === 'I' + : event => event.ctrlKey && event.shiftKey && event.key === 'I' + + document.addEventListener('keydown', event => { + if (isHotkey(event)) { + window.__TAURI_INVOKE__('plugin:window|internal_toggle_devtools'); + } + }) + } + + if ( + document.readyState === 'complete' || + document.readyState === 'interactive' + ) { + toggleDevtoolsHotkey() + } else { + window.addEventListener('DOMContentLoaded', toggleDevtoolsHotkey, true) + } +})() From caf8456864fbef9f6e35cf1fc978e83c41d760bd Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 17 May 2023 18:47:12 -0300 Subject: [PATCH 22/64] fix: adjust feature flags, wrong zip usage (#367) --- examples/api/src-tauri/Cargo.toml | 2 +- examples/api/src-tauri/tauri.conf.json | 74 +++++------ plugins/dialog/src/init.js | 16 +-- plugins/http/Cargo.toml | 2 +- plugins/http/guest-js/index.ts | 2 +- plugins/http/src/commands/client.rs | 2 +- plugins/shell/src/init.js | 49 ++++--- plugins/updater/Cargo.toml | 2 + plugins/updater/src/error.rs | 4 + plugins/updater/src/updater/extract.rs | 124 ++++++++++-------- plugins/window/guest-js/index.ts | 2 +- plugins/window/src/scripts/drag.js | 14 +- plugins/window/src/scripts/print.js | 4 +- plugins/window/src/scripts/toggle-devtools.js | 24 ++-- 14 files changed, 167 insertions(+), 154 deletions(-) diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 9620af9a..489ea2ed 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -22,7 +22,7 @@ tauri-plugin-log = { path = "../../../plugins/log" } tauri-plugin-fs = { path = "../../../plugins/fs" } tauri-plugin-clipboard = { path = "../../../plugins/clipboard" } tauri-plugin-dialog = { path = "../../../plugins/dialog" } -tauri-plugin-http = { path = "../../../plugins/http", features = [ "http-multipart" ] } +tauri-plugin-http = { path = "../../../plugins/http", features = [ "multipart" ] } tauri-plugin-notification = { path = "../../../plugins/notification", features = [ "windows7-compat" ] } tauri-plugin-os = { path = "../../../plugins/os" } tauri-plugin-process = { path = "../../../plugins/process" } diff --git a/examples/api/src-tauri/tauri.conf.json b/examples/api/src-tauri/tauri.conf.json index 8fd3fee4..6f5f422d 100644 --- a/examples/api/src-tauri/tauri.conf.json +++ b/examples/api/src-tauri/tauri.conf.json @@ -48,44 +48,44 @@ } }, "fs": { - "scope": { - "allow": ["$APPDATA/db/**", "$DOWNLOAD/**", "$RESOURCE/**"], - "deny": ["$APPDATA/db/*.stronghold"] - } - }, - "shell": { - "open": true, - "scope": [ - { - "name": "sh", - "cmd": "sh", - "args": [ - "-c", - { - "validator": "\\S+" - } - ] - }, - { - "name": "cmd", - "cmd": "cmd", - "args": [ - "/C", - { - "validator": "\\S+" - } - ] - } - ] - }, - "http": { - "scope": ["http://localhost:3003"] - }, - "updater": { - "endpoints": [ - "https://tauri-update-server.vercel.app/update/{{target}}/{{current_version}}" - ] + "scope": { + "allow": ["$APPDATA/db/**", "$DOWNLOAD/**", "$RESOURCE/**"], + "deny": ["$APPDATA/db/*.stronghold"] } + }, + "shell": { + "open": true, + "scope": [ + { + "name": "sh", + "cmd": "sh", + "args": [ + "-c", + { + "validator": "\\S+" + } + ] + }, + { + "name": "cmd", + "cmd": "cmd", + "args": [ + "/C", + { + "validator": "\\S+" + } + ] + } + ] + }, + "http": { + "scope": ["http://localhost:3003"] + }, + "updater": { + "endpoints": [ + "https://tauri-update-server.vercel.app/update/{{target}}/{{current_version}}" + ] + } }, "tauri": { "pattern": { diff --git a/plugins/dialog/src/init.js b/plugins/dialog/src/init.js index 79c9fd8b..62d0b82c 100644 --- a/plugins/dialog/src/init.js +++ b/plugins/dialog/src/init.js @@ -3,13 +3,13 @@ // SPDX-License-Identifier: MIT window.alert = function (message) { - window.__TAURI_INVOKE__('plugin:dialog|message', { - message: message.toString() - }) -} + window.__TAURI_INVOKE__("plugin:dialog|message", { + message: message.toString(), + }); +}; window.confirm = function (message) { - return window.__TAURI_INVOKE__('plugin:dialog|confirm', { - message: message.toString() - }) -} + return window.__TAURI_INVOKE__("plugin:dialog|confirm", { + message: message.toString(), + }); +}; diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index b0e6ab32..faf4371f 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -19,7 +19,7 @@ http = "0.2" reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } [features] -http-multipart = [ "reqwest/multipart" ] +multipart = [ "reqwest/multipart" ] native-tls = [ "reqwest/native-tls" ] native-tls-vendored = [ "reqwest/native-tls-vendored" ] rustls-tls = [ "reqwest/rustls-tls" ] diff --git a/plugins/http/guest-js/index.ts b/plugins/http/guest-js/index.ts index 47e5e323..6efb45b6 100644 --- a/plugins/http/guest-js/index.ts +++ b/plugins/http/guest-js/index.ts @@ -103,7 +103,7 @@ class Body { * and the value is either a string or a file object. * * By default it sets the `application/x-www-form-urlencoded` Content-Type header, - * but you can set it to `multipart/form-data` if the Cargo feature `http-multipart` is enabled. + * but you can set it to `multipart/form-data` if the Cargo feature `multipart` is enabled. * * Note that a file path must be allowed in the `fs` allowlist scope. * @example diff --git a/plugins/http/src/commands/client.rs b/plugins/http/src/commands/client.rs index 2b7131a7..997dee05 100644 --- a/plugins/http/src/commands/client.rs +++ b/plugins/http/src/commands/client.rs @@ -91,7 +91,7 @@ impl Client { headers: &mut Option, form_body: FormBody, ) -> crate::Result { - #[cfg(feature = "http-multipart")] + #[cfg(feature = "multipart")] if matches!( headers .as_ref() diff --git a/plugins/shell/src/init.js b/plugins/shell/src/init.js index c43f7cdf..61cbe3b4 100644 --- a/plugins/shell/src/init.js +++ b/plugins/shell/src/init.js @@ -2,39 +2,38 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -;(function () { +(function () { // open links with the API function openLinks() { - document.querySelector('body').addEventListener( - 'click', - function (e) { - var target = e.target - while (target != null) { - if (target.matches('a')) { - if ( - target.href && - (['http://', 'https://', 'mailto:', 'tel:'].some(v => target.href.startsWith(v))) && - target.target === '_blank' - ) { - window.__TAURI_INVOKE__('plugin:shell|open', { - path: target.href - }) - e.preventDefault() - } - break + document.querySelector("body").addEventListener("click", function (e) { + var target = e.target; + while (target != null) { + if (target.matches("a")) { + if ( + target.href && + ["http://", "https://", "mailto:", "tel:"].some((v) => + target.href.startsWith(v) + ) && + target.target === "_blank" + ) { + window.__TAURI_INVOKE__("plugin:shell|open", { + path: target.href, + }); + e.preventDefault(); } - target = target.parentElement + break; } + target = target.parentElement; } - ) + }); } if ( - document.readyState === 'complete' || - document.readyState === 'interactive' + document.readyState === "complete" || + document.readyState === "interactive" ) { - openLinks() + openLinks(); } else { - window.addEventListener('DOMContentLoaded', openLinks, true) + window.addEventListener("DOMContentLoaded", openLinks, true); } -})() +})(); diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index 33e726ac..d4f036fa 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -26,6 +26,8 @@ tempfile = "3" flate2 = "1" tar = "0.4" ignore = "0.4" + +[target."cfg(target_os = \"windows\")".dependencies] zip = { version = "0.6", default-features = false } [dev-dependencies] diff --git a/plugins/updater/src/error.rs b/plugins/updater/src/error.rs index 8f0b9c74..20f2eb42 100644 --- a/plugins/updater/src/error.rs +++ b/plugins/updater/src/error.rs @@ -84,6 +84,10 @@ pub enum Error { /// Ignore error. #[error("failed to walkdir: {0}")] Ignore(#[from] ignore::Error), + /// Zip error. + #[cfg(windows)] + #[error(transparent)] + ZipError(#[from] zip::result::ZipError), } impl Serialize for Error { diff --git a/plugins/updater/src/updater/extract.rs b/plugins/updater/src/updater/extract.rs index 143c4d3f..4d0feca6 100644 --- a/plugins/updater/src/updater/extract.rs +++ b/plugins/updater/src/updater/extract.rs @@ -5,8 +5,8 @@ use std::{ borrow::Cow, fs, - io::{self, Cursor, Read, Seek}, - path::{self, Path, PathBuf}, + io::{self, Read, Seek}, + path::{self, Path}, }; use crate::{Error, Result}; @@ -46,10 +46,20 @@ pub enum ArchiveFormat { /// Tar archive. Tar(Option), /// Zip archive. - #[allow(dead_code)] + #[cfg(windows)] Zip, } +impl ArchiveFormat { + fn compression(self) -> Option { + match self { + Self::Tar(c) => c, + #[allow(unreachable_patterns)] + _ => None, + } + } +} + /// The supported compression types. #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[non_exhaustive] @@ -59,8 +69,9 @@ pub enum Compression { } /// The zip entry. +#[cfg(windows)] pub struct ZipEntry { - path: PathBuf, + path: std::path::PathBuf, is_dir: bool, file_contents: Vec, } @@ -73,7 +84,7 @@ pub enum Entry<'a, R: Read> { Tar(Box>), /// An entry of a zip archive. #[non_exhaustive] - #[allow(dead_code)] + #[cfg(windows)] Zip(ZipEntry), } @@ -82,6 +93,7 @@ impl<'a, R: Read> Entry<'a, R> { pub fn path(&self) -> Result> { match self { Self::Tar(e) => e.path().map_err(Into::into), + #[cfg(windows)] Self::Zip(e) => Ok(Cow::Borrowed(&e.path)), } } @@ -113,6 +125,7 @@ impl<'a, R: Read> Entry<'a, R> { } } } + #[cfg(windows)] Self::Zip(entry) => { if entry.is_dir { // this is a directory, lets create it @@ -126,7 +139,10 @@ impl<'a, R: Read> Entry<'a, R> { } } else { let mut out_file = fs::File::create(into_path)?; - io::copy(&mut Cursor::new(entry.file_contents), &mut out_file)?; + io::copy( + &mut std::io::Cursor::new(entry.file_contents), + &mut out_file, + )?; } } } @@ -158,11 +174,7 @@ impl<'a, R: Read + Seek> Extract<'a, R> { #[cfg(debug_assertions)] eprintln!("Could not seek to start of the file"); } - let compression = if let ArchiveFormat::Tar(compression) = archive_format { - compression - } else { - None - }; + let compression = archive_format.compression(); Extract { reader: match compression { Some(Compression::Gz) => { @@ -198,28 +210,26 @@ impl<'a, R: Read + Seek> Extract<'a, R> { } } + #[cfg(windows)] ArchiveFormat::Zip => { - #[cfg(feature = "fs-extract-api")] - { - let mut archive = zip::ZipArchive::new(self.reader.get_mut())?; - let file_names = archive - .file_names() - .map(|f| f.to_string()) - .collect::>(); - for path in file_names { - let mut zip_file = archive.by_name(&path)?; - let is_dir = zip_file.is_dir(); - let mut file_contents = Vec::new(); - zip_file.read_to_end(&mut file_contents)?; - let stop = f(Entry::Zip(ZipEntry { - path: path.into(), - is_dir, - file_contents, - })) - .map_err(Into::into)?; - if stop { - break; - } + let mut archive = zip::ZipArchive::new(self.reader.get_mut())?; + let file_names = archive + .file_names() + .map(|f| f.to_string()) + .collect::>(); + for path in file_names { + let mut zip_file = archive.by_name(&path)?; + let is_dir = zip_file.is_dir(); + let mut file_contents = Vec::new(); + zip_file.read_to_end(&mut file_contents)?; + let stop = f(Entry::Zip(ZipEntry { + path: path.into(), + is_dir, + file_contents, + })) + .map_err(Into::into)?; + if stop { + break; } } } @@ -239,34 +249,32 @@ impl<'a, R: Read + Seek> Extract<'a, R> { archive.unpack(into_dir)?; } + #[cfg(windows)] ArchiveFormat::Zip => { - #[cfg(feature = "fs-extract-api")] - { - let mut archive = zip::ZipArchive::new(self.reader.get_mut())?; - for i in 0..archive.len() { - let mut file = archive.by_index(i)?; - // Decode the file name from raw bytes instead of using file.name() directly. - // file.name() uses String::from_utf8_lossy() which may return messy characters - // such as: 爱交易.app/, that does not work as expected. - // Here we require the file name must be a valid UTF-8. - let file_name = String::from_utf8(file.name_raw().to_vec())?; - let out_path = into_dir.join(file_name); - if file.is_dir() { - fs::create_dir_all(&out_path)?; - } else { - if let Some(out_path_parent) = out_path.parent() { - fs::create_dir_all(out_path_parent)?; - } - let mut out_file = fs::File::create(&out_path)?; - io::copy(&mut file, &mut out_file)?; + let mut archive = zip::ZipArchive::new(self.reader.get_mut())?; + for i in 0..archive.len() { + let mut file = archive.by_index(i)?; + // Decode the file name from raw bytes instead of using file.name() directly. + // file.name() uses String::from_utf8_lossy() which may return messy characters + // such as: 爱交易.app/, that does not work as expected. + // Here we require the file name must be a valid UTF-8. + let file_name = String::from_utf8(file.name_raw().to_vec())?; + let out_path = into_dir.join(file_name); + if file.is_dir() { + fs::create_dir_all(&out_path)?; + } else { + if let Some(out_path_parent) = out_path.parent() { + fs::create_dir_all(out_path_parent)?; } - // Get and Set permissions - #[cfg(unix)] - { - use std::os::unix::fs::PermissionsExt; - if let Some(mode) = file.unix_mode() { - fs::set_permissions(&out_path, fs::Permissions::from_mode(mode))?; - } + let mut out_file = fs::File::create(&out_path)?; + io::copy(&mut file, &mut out_file)?; + } + // Get and Set permissions + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + if let Some(mode) = file.unix_mode() { + fs::set_permissions(&out_path, fs::Permissions::from_mode(mode))?; } } } diff --git a/plugins/window/guest-js/index.ts b/plugins/window/guest-js/index.ts index 59e7f77a..6a3a1585 100644 --- a/plugins/window/guest-js/index.ts +++ b/plugins/window/guest-js/index.ts @@ -319,7 +319,7 @@ class WebviewWindowHandle { /** The window label. It is a unique identifier for the window, can be used to reference it later. */ label: WindowLabel; /** Local event listeners. */ - listeners: Record>>; + listeners: Record>>; constructor(label: WindowLabel) { this.label = label; diff --git a/plugins/window/src/scripts/drag.js b/plugins/window/src/scripts/drag.js index b8abeb2c..3b227bc6 100644 --- a/plugins/window/src/scripts/drag.js +++ b/plugins/window/src/scripts/drag.js @@ -2,16 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -document.addEventListener('mousedown', (e) => { - if (e.target.hasAttribute('data-tauri-drag-region') && e.buttons === 1) { +document.addEventListener("mousedown", (e) => { + if (e.target.hasAttribute("data-tauri-drag-region") && e.buttons === 1) { // prevents text cursor - e.preventDefault() + e.preventDefault(); // fix #2549: double click on drag region edge causes content to maximize without window sizing change // https://github.com/tauri-apps/tauri/issues/2549#issuecomment-1250036908 - e.stopImmediatePropagation() + e.stopImmediatePropagation(); // start dragging if the element has a `tauri-drag-region` data attribute and maximize on double-clicking it - const cmd = e.detail === 2 ? 'internal_toggle_maximize' : 'start_dragging' - window.__TAURI_INVOKE__('plugin:window|' + cmd) + const cmd = e.detail === 2 ? "internal_toggle_maximize" : "start_dragging"; + window.__TAURI_INVOKE__("plugin:window|" + cmd); } -}) +}); diff --git a/plugins/window/src/scripts/print.js b/plugins/window/src/scripts/print.js index 2be2e491..1e833766 100644 --- a/plugins/window/src/scripts/print.js +++ b/plugins/window/src/scripts/print.js @@ -3,5 +3,5 @@ // SPDX-License-Identifier: MIT window.print = function () { - return window.__TAURI_INVOKE__('plugin:window|print') -} + return window.__TAURI_INVOKE__("plugin:window|print"); +}; diff --git a/plugins/window/src/scripts/toggle-devtools.js b/plugins/window/src/scripts/toggle-devtools.js index 2bff9d12..42c4bdba 100644 --- a/plugins/window/src/scripts/toggle-devtools.js +++ b/plugins/window/src/scripts/toggle-devtools.js @@ -2,25 +2,25 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -;(function () { +(function () { function toggleDevtoolsHotkey() { - const isHotkey = navigator.appVersion.includes('Mac') - ? event => event.metaKey && event.altKey && event.key === 'I' - : event => event.ctrlKey && event.shiftKey && event.key === 'I' + const isHotkey = navigator.appVersion.includes("Mac") + ? (event) => event.metaKey && event.altKey && event.key === "I" + : (event) => event.ctrlKey && event.shiftKey && event.key === "I"; - document.addEventListener('keydown', event => { + document.addEventListener("keydown", (event) => { if (isHotkey(event)) { - window.__TAURI_INVOKE__('plugin:window|internal_toggle_devtools'); + window.__TAURI_INVOKE__("plugin:window|internal_toggle_devtools"); } - }) + }); } if ( - document.readyState === 'complete' || - document.readyState === 'interactive' + document.readyState === "complete" || + document.readyState === "interactive" ) { - toggleDevtoolsHotkey() + toggleDevtoolsHotkey(); } else { - window.addEventListener('DOMContentLoaded', toggleDevtoolsHotkey, true) + window.addEventListener("DOMContentLoaded", toggleDevtoolsHotkey, true); } -})() +})(); From 22991af9f47dbfcba7ac21730a350b7b4937887a Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 17 May 2023 20:52:53 -0300 Subject: [PATCH 23/64] feat(plugins): use `@tauri-apps` namespace on NPM (#368) Co-authored-by: Amr Bashir --- examples/api/package.json | 26 ++-- examples/api/src/App.svelte | 8 +- examples/api/src/views/App.svelte | 2 +- examples/api/src/views/Cli.svelte | 2 +- examples/api/src/views/Clipboard.svelte | 14 +- examples/api/src/views/Communication.svelte | 2 +- examples/api/src/views/Dialog.svelte | 93 ++++++------- examples/api/src/views/FileSystem.svelte | 76 +++++------ examples/api/src/views/Http.svelte | 62 ++++----- examples/api/src/views/Shell.svelte | 60 ++++----- examples/api/src/views/Shortcuts.svelte | 36 ++--- examples/api/src/views/Updater.svelte | 4 +- examples/api/src/views/Welcome.svelte | 26 ++-- examples/api/src/views/Window.svelte | 6 +- examples/api/yarn-error.log | 4 +- plugins/app/README.md | 2 +- plugins/app/guest-js/index.ts | 10 +- plugins/app/package.json | 2 +- plugins/authenticator/README.md | 2 +- plugins/authenticator/package.json | 2 +- plugins/autostart/README.md | 2 +- plugins/autostart/package.json | 2 +- plugins/cli/guest-js/index.ts | 2 +- plugins/cli/package.json | 2 +- plugins/clipboard/guest-js/index.ts | 4 +- plugins/clipboard/package.json | 2 +- plugins/dialog/README.md | 8 +- plugins/dialog/package.json | 2 +- plugins/fs-watch/README.md | 2 +- plugins/fs-watch/package.json | 2 +- plugins/fs/README.md | 2 +- plugins/fs/guest-js/index.ts | 26 ++-- plugins/fs/package.json | 2 +- plugins/global-shortcut/guest-js/index.ts | 10 +- plugins/global-shortcut/package.json | 2 +- plugins/http/guest-js/index.ts | 26 ++-- plugins/http/package.json | 2 +- plugins/log/README.md | 2 +- plugins/log/guest-js/index.ts | 10 +- plugins/log/package.json | 2 +- plugins/notification/package.json | 2 +- plugins/os/README.md | 2 +- plugins/os/guest-js/index.ts | 10 +- plugins/os/package.json | 2 +- plugins/positioner/README.md | 8 +- plugins/positioner/package.json | 2 +- plugins/process/README.md | 2 +- plugins/process/guest-js/index.ts | 4 +- plugins/process/package.json | 2 +- plugins/shell/guest-js/index.ts | 14 +- plugins/shell/package.json | 2 +- plugins/sql/README.md | 2 +- plugins/sql/package.json | 2 +- plugins/store/README.md | 2 +- plugins/store/package.json | 2 +- plugins/stronghold/README.md | 2 +- plugins/stronghold/package.json | 2 +- plugins/updater/README.md | 2 +- plugins/updater/package.json | 2 +- plugins/upload/README.md | 2 +- plugins/upload/package.json | 2 +- plugins/websocket/README.md | 2 +- .../examples/svelte-app/package.json | 2 +- .../svelte-app/src/routes/+page.svelte | 57 ++++---- plugins/websocket/package.json | 2 +- plugins/window-state/README.md | 7 +- plugins/window-state/package.json | 2 +- plugins/window/README.md | 2 +- plugins/window/guest-js/index.ts | 127 +++++++++--------- plugins/window/package.json | 2 +- pnpm-lock.yaml | 28 ++-- shared/template/package.json | 2 +- 72 files changed, 435 insertions(+), 419 deletions(-) diff --git a/examples/api/package.json b/examples/api/package.json index c6801ef7..036aa3db 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -11,19 +11,19 @@ "@tauri-apps/api": "2.0.0-alpha.3", "@tauri-apps/cli": "2.0.0-alpha.8", "@zerodevx/svelte-json-view": "0.2.1", - "tauri-plugin-app-api": "0.0.0", - "tauri-plugin-cli-api": "0.0.0", - "tauri-plugin-clipboard-api": "0.0.0", - "tauri-plugin-dialog-api": "0.0.0", - "tauri-plugin-fs-api": "0.0.0", - "tauri-plugin-global-shortcut-api": "0.0.0", - "tauri-plugin-http-api": "0.0.0", - "tauri-plugin-notification-api": "0.0.0", - "tauri-plugin-os-api": "0.0.0", - "tauri-plugin-process-api": "0.0.0", - "tauri-plugin-shell-api": "0.0.0", - "tauri-plugin-updater-api": "0.0.0", - "tauri-plugin-window-api": "0.0.0" + "@tauri-apps/plugin-app": "0.0.0", + "@tauri-apps/plugin-cli": "0.0.0", + "@tauri-apps/plugin-clipboard": "0.0.0", + "@tauri-apps/plugin-dialog": "0.0.0", + "@tauri-apps/plugin-fs": "0.0.0", + "@tauri-apps/plugin-global-shortcut": "0.0.0", + "@tauri-apps/plugin-http": "0.0.0", + "@tauri-apps/plugin-notification": "0.0.0", + "@tauri-apps/plugin-os": "0.0.0", + "@tauri-apps/plugin-process": "0.0.0", + "@tauri-apps/plugin-shell": "0.0.0", + "@tauri-apps/plugin-updater": "0.0.0", + "@tauri-apps/plugin-window": "0.0.0" }, "devDependencies": { "@iconify-json/codicon": "^1.1.10", diff --git a/examples/api/src/App.svelte b/examples/api/src/App.svelte index 3bd71a0d..1b3c9b71 100644 --- a/examples/api/src/App.svelte +++ b/examples/api/src/App.svelte @@ -1,8 +1,8 @@ diff --git a/examples/api/src/views/Communication.svelte b/examples/api/src/views/Communication.svelte index 76a823f5..770cde47 100644 --- a/examples/api/src/views/Communication.svelte +++ b/examples/api/src/views/Communication.svelte @@ -1,5 +1,5 @@ diff --git a/examples/api/src/views/FileSystem.svelte b/examples/api/src/views/FileSystem.svelte index ca0e277e..c13326a0 100644 --- a/examples/api/src/views/FileSystem.svelte +++ b/examples/api/src/views/FileSystem.svelte @@ -3,79 +3,79 @@ readBinaryFile, writeTextFile, readDir, - Dir - } from 'tauri-plugin-fs-api' - import { convertFileSrc } from '@tauri-apps/api/tauri' + Dir, + } from "@tauri-apps/plugin-fs"; + import { convertFileSrc } from "@tauri-apps/api/tauri"; - export let onMessage - export let insecureRenderHtml + export let onMessage; + export let insecureRenderHtml; - let pathToRead = '' - let img + let pathToRead = ""; + let img; function getDir() { - const dirSelect = document.getElementById('dir') - return dirSelect.value ? parseInt(dir.value) : null + const dirSelect = document.getElementById("dir"); + return dirSelect.value ? parseInt(dir.value) : null; } function arrayBufferToBase64(buffer, callback) { const blob = new Blob([buffer], { - type: 'application/octet-binary' - }) - const reader = new FileReader() + type: "application/octet-binary", + }); + const reader = new FileReader(); reader.onload = function (evt) { - const dataurl = evt.target.result - callback(dataurl.substr(dataurl.indexOf(',') + 1)) - } - reader.readAsDataURL(blob) + const dataurl = evt.target.result; + callback(dataurl.substr(dataurl.indexOf(",") + 1)); + }; + reader.readAsDataURL(blob); } const DirOptions = Object.keys(Dir) .filter((key) => isNaN(parseInt(key))) - .map((dir) => [dir, Dir[dir]]) + .map((dir) => [dir, Dir[dir]]); function read() { - const isFile = pathToRead.match(/\S+\.\S+$/g) + const isFile = pathToRead.match(/\S+\.\S+$/g); const opts = { - dir: getDir() - } + dir: getDir(), + }; const promise = isFile ? readBinaryFile(pathToRead, opts) - : readDir(pathToRead, opts) + : readDir(pathToRead, opts); promise .then(function (response) { if (isFile) { - if (pathToRead.includes('.png') || pathToRead.includes('.jpg')) { + if (pathToRead.includes(".png") || pathToRead.includes(".jpg")) { arrayBufferToBase64(new Uint8Array(response), function (base64) { - const src = 'data:image/png;base64,' + base64 - insecureRenderHtml('') - }) + const src = "data:image/png;base64," + base64; + insecureRenderHtml(''); + }); } else { - const value = String.fromCharCode.apply(null, response) + const value = String.fromCharCode.apply(null, response); insecureRenderHtml( '' - ) + ); setTimeout(() => { - const fileInput = document.getElementById('file-response') - fileInput.value = value + const fileInput = document.getElementById("file-response"); + fileInput.value = value; document - .getElementById('file-save') - .addEventListener('click', function () { + .getElementById("file-save") + .addEventListener("click", function () { writeTextFile(pathToRead, fileInput.value, { - dir: getDir() - }).catch(onMessage) - }) - }) + dir: getDir(), + }).catch(onMessage); + }); + }); } } else { - onMessage(response) + onMessage(response); } }) - .catch(onMessage) + .catch(onMessage); } function setSrc() { - img.src = convertFileSrc(pathToRead) + img.src = convertFileSrc(pathToRead); } diff --git a/examples/api/src/views/Http.svelte b/examples/api/src/views/Http.svelte index 5b34126e..5a1d3032 100644 --- a/examples/api/src/views/Http.svelte +++ b/examples/api/src/views/Http.svelte @@ -1,60 +1,60 @@ diff --git a/examples/api/src/views/Shell.svelte b/examples/api/src/views/Shell.svelte index e7afb9a7..5f5e2d25 100644 --- a/examples/api/src/views/Shell.svelte +++ b/examples/api/src/views/Shell.svelte @@ -1,65 +1,65 @@ diff --git a/examples/api/src/views/Shortcuts.svelte b/examples/api/src/views/Shortcuts.svelte index cdc2a065..cdcc9066 100644 --- a/examples/api/src/views/Shortcuts.svelte +++ b/examples/api/src/views/Shortcuts.svelte @@ -1,46 +1,46 @@ diff --git a/examples/api/src/views/Updater.svelte b/examples/api/src/views/Updater.svelte index faaa3e5b..808e5868 100644 --- a/examples/api/src/views/Updater.svelte +++ b/examples/api/src/views/Updater.svelte @@ -1,6 +1,6 @@ diff --git a/examples/api/src/views/Window.svelte b/examples/api/src/views/Window.svelte index 5a54f942..2d4a8c61 100644 --- a/examples/api/src/views/Window.svelte +++ b/examples/api/src/views/Window.svelte @@ -6,9 +6,9 @@ UserAttentionType, PhysicalSize, PhysicalPosition, - } from "tauri-plugin-window-api"; - import { open as openDialog } from "tauri-plugin-dialog-api"; - import { open } from "tauri-plugin-shell-api"; + } from "@tauri-apps/plugin-window"; + import { open as openDialog } from "@tauri-apps/plugin-dialog"; + import { open } from "@tauri-apps/plugin-shell"; let selectedWindow = appWindow.label; const windowMap = { diff --git a/examples/api/yarn-error.log b/examples/api/yarn-error.log index 59baf8f8..552bc05e 100644 --- a/examples/api/yarn-error.log +++ b/examples/api/yarn-error.log @@ -40,7 +40,7 @@ npm manifest: "dependencies": { "@tauri-apps/api": "../../tooling/api/dist", "@zerodevx/svelte-json-view": "0.2.1", - "tauri-plugin-fs-api": "https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin&scripts.build=build" + "@tauri-apps/plugin-fs": "https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin&scripts.build=build" }, "devDependencies": { "@iconify-json/codicon": "^1.1.10", @@ -1009,7 +1009,7 @@ Lockfile: resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.49.0.tgz#5baee3c672306de1070c3b7888fc2204e36a4029" integrity sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA== - "tauri-plugin-fs-api@https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin": + "@tauri-apps/plugin-fs@https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin": version "0.0.0" resolved "https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin#a4b37d92c5fd3e638ad21d4ccf0132e07acc0136" dependencies: diff --git a/plugins/app/README.md b/plugins/app/README.md index 9c07789a..9b4bace2 100644 --- a/plugins/app/README.md +++ b/plugins/app/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as app from "tauri-plugin-app-api"; +import * as app from "@tauri-apps/plugin-app"; ``` ## Contributing diff --git a/plugins/app/guest-js/index.ts b/plugins/app/guest-js/index.ts index faba16ba..d5e06aed 100644 --- a/plugins/app/guest-js/index.ts +++ b/plugins/app/guest-js/index.ts @@ -30,7 +30,7 @@ import { invoke } from "@tauri-apps/api/tauri"; * Gets the application version. * @example * ```typescript - * import { getVersion } from 'tauri-plugin-app-api'; + * import { getVersion } from '@tauri-apps/plugin-app'; * const appVersion = await getVersion(); * ``` * @@ -44,7 +44,7 @@ async function getVersion(): Promise { * Gets the application name. * @example * ```typescript - * import { getName } from 'tauri-plugin-app-api'; + * import { getName } from '@tauri-apps/plugin-app'; * const appName = await getName(); * ``` * @@ -59,7 +59,7 @@ async function getName(): Promise { * * @example * ```typescript - * import { getTauriVersion } from 'tauri-plugin-app-api'; + * import { getTauriVersion } from '@tauri-apps/plugin-app'; * const tauriVersion = await getTauriVersion(); * ``` * @@ -74,7 +74,7 @@ async function getTauriVersion(): Promise { * * @example * ```typescript - * import { show } from 'tauri-plugin-app-api'; + * import { show } from '@tauri-apps/plugin-app'; * await show(); * ``` * @@ -89,7 +89,7 @@ async function show(): Promise { * * @example * ```typescript - * import { hide } from 'tauri-plugin-app-api'; + * import { hide } from '@tauri-apps/plugin-app'; * await hide(); * ``` * diff --git a/plugins/app/package.json b/plugins/app/package.json index ce687e97..4580aa09 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-app-api", + "name": "@tauri-apps/plugin-app", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/authenticator/README.md b/plugins/authenticator/README.md index 490d6255..c902bc23 100644 --- a/plugins/authenticator/README.md +++ b/plugins/authenticator/README.md @@ -53,7 +53,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { Authenticator } from "tauri-plugin-authenticator-api"; +import { Authenticator } from "@tauri-apps/plugin-authenticator"; const auth = new Authenticator(); auth.init(); // initialize transports diff --git a/plugins/authenticator/package.json b/plugins/authenticator/package.json index 7374695f..fa52d666 100644 --- a/plugins/authenticator/package.json +++ b/plugins/authenticator/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-authenticator-api", + "name": "@tauri-apps/plugin-authenticator", "version": "0.0.0", "description": "Use hardware security-keys in your Tauri App.", "license": "MIT or APACHE-2.0", diff --git a/plugins/autostart/README.md b/plugins/autostart/README.md index f07bd5c6..d62d4c26 100644 --- a/plugins/autostart/README.md +++ b/plugins/autostart/README.md @@ -53,7 +53,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { enable, isEnabled, disable } from "tauri-plugin-autostart-api"; +import { enable, isEnabled, disable } from "@tauri-apps/plugin-autostart"; await enable(); diff --git a/plugins/autostart/package.json b/plugins/autostart/package.json index f8cf56cb..c2d71ae2 100644 --- a/plugins/autostart/package.json +++ b/plugins/autostart/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-autostart-api", + "name": "@tauri-apps/plugin-autostart", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/cli/guest-js/index.ts b/plugins/cli/guest-js/index.ts index 81eaae86..49f0cba7 100644 --- a/plugins/cli/guest-js/index.ts +++ b/plugins/cli/guest-js/index.ts @@ -47,7 +47,7 @@ interface CliMatches { * * @example * ```typescript - * import { getMatches } from 'tauri-plugin-cli-api'; + * import { getMatches } from '@tauri-apps/plugin-cli'; * const matches = await getMatches(); * if (matches.subcommand?.name === 'run') { * // `./your-app run $ARGS` was executed diff --git a/plugins/cli/package.json b/plugins/cli/package.json index aa29aa22..69874fc3 100644 --- a/plugins/cli/package.json +++ b/plugins/cli/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-cli-api", + "name": "@tauri-apps/plugin-cli", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/clipboard/guest-js/index.ts b/plugins/clipboard/guest-js/index.ts index 3dd2a67f..f9a40d30 100644 --- a/plugins/clipboard/guest-js/index.ts +++ b/plugins/clipboard/guest-js/index.ts @@ -37,7 +37,7 @@ type ClipResponse = Clip<"PlainText", string>; * Writes plain text to the clipboard. * @example * ```typescript - * import { writeText, readText } from 'tauri-plugin-clipboard-api'; + * import { writeText, readText } from '@tauri-apps/plugin-clipboard'; * await writeText('Tauri is awesome!'); * assert(await readText(), 'Tauri is awesome!'); * ``` @@ -65,7 +65,7 @@ async function writeText( * Gets the clipboard content as plain text. * @example * ```typescript - * import { readText } from 'tauri-plugin-clipboard-api'; + * import { readText } from '@tauri-apps/plugin-clipboard'; * const clipboardText = await readText(); * ``` * @since 1.0.0. diff --git a/plugins/clipboard/package.json b/plugins/clipboard/package.json index d51585f4..22425919 100644 --- a/plugins/clipboard/package.json +++ b/plugins/clipboard/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-clipboard-api", + "name": "@tauri-apps/plugin-clipboard", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/dialog/README.md b/plugins/dialog/README.md index de31bcb8..172ed55e 100644 --- a/plugins/dialog/README.md +++ b/plugins/dialog/README.md @@ -18,7 +18,7 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] -tauri-plugin-dialog-api = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } +tauri-plugin-dialog = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` You can install the JavaScript Guest bindings using your preferred JavaScript package manager: @@ -26,11 +26,11 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh -pnpm add tauri-plugin-dialog-api +pnpm add @tauri-apps/plugin-dialog # or -npm add tauri-plugin-dialog-api +npm add @tauri-apps/plugin-dialog # or -yarn add tauri-plugin-dialog-api +yarn add @tauri-apps/plugin-dialog ``` ## Usage diff --git a/plugins/dialog/package.json b/plugins/dialog/package.json index 6c5d4aed..cb5d7427 100644 --- a/plugins/dialog/package.json +++ b/plugins/dialog/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-dialog-api", + "name": "@tauri-apps/plugin-dialog", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/fs-watch/README.md b/plugins/fs-watch/README.md index 12cb0d1c..63a154c8 100644 --- a/plugins/fs-watch/README.md +++ b/plugins/fs-watch/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { watch, watchImmediate } from "tauri-plugin-fs-watch-api"; +import { watch, watchImmediate } from "@tauri-apps/plugin-fs-watch"; // can also watch an array of paths const stopWatching = await watch( diff --git a/plugins/fs-watch/package.json b/plugins/fs-watch/package.json index 4ac45241..e5c0bb7a 100644 --- a/plugins/fs-watch/package.json +++ b/plugins/fs-watch/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-fs-watch-api", + "name": "@tauri-apps/plugin-fs-watch", "version": "0.0.0", "description": "Watch files and directories for changes.", "license": "MIT or APACHE-2.0", diff --git a/plugins/fs/README.md b/plugins/fs/README.md index c59990d8..f411ca25 100644 --- a/plugins/fs/README.md +++ b/plugins/fs/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { metadata } from "tauri-plugin-fs-api"; +import { metadata } from "@tauri-apps/plugin-fs"; await metadata("/path/to/file"); ``` diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts index 66dd3591..8801ce11 100644 --- a/plugins/fs/guest-js/index.ts +++ b/plugins/fs/guest-js/index.ts @@ -273,7 +273,7 @@ interface FileEntry { * Reads a file as an UTF-8 encoded string. * @example * ```typescript - * import { readTextFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { readTextFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Read the text file in the `$APPCONFIG/app.conf` path * const contents = await readTextFile('app.conf', { dir: BaseDirectory.AppConfig }); * ``` @@ -294,7 +294,7 @@ async function readTextFile( * Reads a file as byte array. * @example * ```typescript - * import { readBinaryFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { readBinaryFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Read the image file in the `$RESOURCEDIR/avatar.png` path * const contents = await readBinaryFile('avatar.png', { dir: BaseDirectory.Resource }); * ``` @@ -317,7 +317,7 @@ async function readBinaryFile( * Writes a UTF-8 text file. * @example * ```typescript - * import { writeTextFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { writeTextFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Write a text file to the `$APPCONFIG/app.conf` path * await writeTextFile('app.conf', 'file contents', { dir: BaseDirectory.AppConfig }); * ``` @@ -334,7 +334,7 @@ async function writeTextFile( * Writes a UTF-8 text file. * @example * ```typescript - * import { writeTextFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { writeTextFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Write a text file to the `$APPCONFIG/app.conf` path * await writeTextFile({ path: 'app.conf', contents: 'file contents' }, { dir: BaseDirectory.AppConfig }); * ``` @@ -392,7 +392,7 @@ async function writeTextFile( * Writes a byte array content to a file. * @example * ```typescript - * import { writeBinaryFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { writeBinaryFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Write a binary file to the `$APPDATA/avatar.png` path * await writeBinaryFile('avatar.png', new Uint8Array([]), { dir: BaseDirectory.AppData }); * ``` @@ -412,7 +412,7 @@ async function writeBinaryFile( * Writes a byte array content to a file. * @example * ```typescript - * import { writeBinaryFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { writeBinaryFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Write a binary file to the `$APPDATA/avatar.png` path * await writeBinaryFile({ path: 'avatar.png', contents: new Uint8Array([]) }, { dir: BaseDirectory.AppData }); * ``` @@ -478,7 +478,7 @@ async function writeBinaryFile( * List directory files. * @example * ```typescript - * import { readDir, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { readDir, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Reads the `$APPDATA/users` directory recursively * const entries = await readDir('users', { dir: BaseDirectory.AppData, recursive: true }); * @@ -510,7 +510,7 @@ async function readDir( * and the `recursive` option isn't set to true, the promise will be rejected. * @example * ```typescript - * import { createDir, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { createDir, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Create the `$APPDATA/users` directory * await createDir('users', { dir: BaseDirectory.AppData, recursive: true }); * ``` @@ -534,7 +534,7 @@ async function createDir( * If the directory is not empty and the `recursive` option isn't set to true, the promise will be rejected. * @example * ```typescript - * import { removeDir, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { removeDir, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Remove the directory `$APPDATA/users` * await removeDir('users', { dir: BaseDirectory.AppData }); * ``` @@ -557,7 +557,7 @@ async function removeDir( * Copies a file to a destination. * @example * ```typescript - * import { copyFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { copyFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Copy the `$APPCONFIG/app.conf` file to `$APPCONFIG/app.conf.bk` * await copyFile('app.conf', 'app.conf.bk', { dir: BaseDirectory.AppConfig }); * ``` @@ -582,7 +582,7 @@ async function copyFile( * Removes a file. * @example * ```typescript - * import { removeFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { removeFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Remove the `$APPConfig/app.conf` file * await removeFile('app.conf', { dir: BaseDirectory.AppConfig }); * ``` @@ -605,7 +605,7 @@ async function removeFile( * Renames a file. * @example * ```typescript - * import { renameFile, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { renameFile, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Rename the `$APPDATA/avatar.png` file * await renameFile('avatar.png', 'deleted.png', { dir: BaseDirectory.AppData }); * ``` @@ -630,7 +630,7 @@ async function renameFile( * Check if a path exists. * @example * ```typescript - * import { exists, BaseDirectory } from 'tauri-plugin-fs-api'; + * import { exists, BaseDirectory } from '@tauri-apps/plugin-fs'; * // Check if the `$APPDATA/avatar.png` file exists * await exists('avatar.png', { dir: BaseDirectory.AppData }); * ``` diff --git a/plugins/fs/package.json b/plugins/fs/package.json index 0f4348e6..153e30c8 100644 --- a/plugins/fs/package.json +++ b/plugins/fs/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-fs-api", + "name": "@tauri-apps/plugin-fs", "version": "0.0.0", "description": "Access the file system.", "license": "MIT or APACHE-2.0", diff --git a/plugins/global-shortcut/guest-js/index.ts b/plugins/global-shortcut/guest-js/index.ts index c2c66756..f8686cff 100644 --- a/plugins/global-shortcut/guest-js/index.ts +++ b/plugins/global-shortcut/guest-js/index.ts @@ -29,7 +29,7 @@ export type ShortcutHandler = (shortcut: string) => void; * Register a global shortcut. * @example * ```typescript - * import { register } from 'tauri-plugin-global-shortcut-api'; + * import { register } from '@tauri-apps/plugin-global-shortcut'; * await register('CommandOrControl+Shift+C', () => { * console.log('Shortcut triggered'); * }); @@ -54,7 +54,7 @@ async function register( * Register a collection of global shortcuts. * @example * ```typescript - * import { registerAll } from 'tauri-plugin-global-shortcut-api'; + * import { registerAll } from '@tauri-apps/plugin-global-shortcut'; * await registerAll(['CommandOrControl+Shift+C', 'Ctrl+Alt+F12'], (shortcut) => { * console.log(`Shortcut ${shortcut} triggered`); * }); @@ -82,7 +82,7 @@ async function registerAll( * * @example * ```typescript - * import { isRegistered } from 'tauri-plugin-global-shortcut-api'; + * import { isRegistered } from '@tauri-apps/plugin-global-shortcut'; * const isRegistered = await isRegistered('CommandOrControl+P'); * ``` * @@ -100,7 +100,7 @@ async function isRegistered(shortcut: string): Promise { * Unregister a global shortcut. * @example * ```typescript - * import { unregister } from 'tauri-plugin-global-shortcut-api'; + * import { unregister } from '@tauri-apps/plugin-global-shortcut'; * await unregister('CmdOrControl+Space'); * ``` * @@ -118,7 +118,7 @@ async function unregister(shortcut: string): Promise { * Unregisters all shortcuts registered by the application. * @example * ```typescript - * import { unregisterAll } from 'tauri-plugin-global-shortcut-api'; + * import { unregisterAll } from '@tauri-apps/plugin-global-shortcut'; * await unregisterAll(); * ``` * diff --git a/plugins/global-shortcut/package.json b/plugins/global-shortcut/package.json index 5b8cf29d..0d0fbb77 100644 --- a/plugins/global-shortcut/package.json +++ b/plugins/global-shortcut/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-global-shortcut-api", + "name": "@tauri-apps/plugin-global-shortcut", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/http/guest-js/index.ts b/plugins/http/guest-js/index.ts index 6efb45b6..4f542b86 100644 --- a/plugins/http/guest-js/index.ts +++ b/plugins/http/guest-js/index.ts @@ -108,7 +108,7 @@ class Body { * Note that a file path must be allowed in the `fs` allowlist scope. * @example * ```typescript - * import { Body } from "tauri-plugin-http-api" + * import { Body } from "@tauri-apps/plugin-http" * const body = Body.form({ * key: 'value', * image: { @@ -169,7 +169,7 @@ class Body { * Creates a new JSON body. * @example * ```typescript - * import { Body } from "tauri-plugin-http-api" + * import { Body } from "@tauri-apps/plugin-http" * Body.json({ * registered: true, * name: 'tauri' @@ -188,7 +188,7 @@ class Body { * Creates a new UTF-8 string body. * @example * ```typescript - * import { Body } from "tauri-plugin-http-api" + * import { Body } from "@tauri-apps/plugin-http" * Body.text('The body content as a string'); * ``` * @@ -204,7 +204,7 @@ class Body { * Creates a new byte array body. * @example * ```typescript - * import { Body } from "tauri-plugin-http-api" + * import { Body } from "@tauri-apps/plugin-http" * Body.bytes(new Uint8Array([1, 2, 3])); * ``` * @@ -308,7 +308,7 @@ class Client { * Drops the client instance. * @example * ```typescript - * import { getClient } from 'tauri-plugin-http-api'; + * import { getClient } from '@tauri-apps/plugin-http'; * const client = await getClient(); * await client.drop(); * ``` @@ -323,7 +323,7 @@ class Client { * Makes an HTTP request. * @example * ```typescript - * import { getClient } from 'tauri-plugin-http-api'; + * import { getClient } from '@tauri-apps/plugin-http'; * const client = await getClient(); * const response = await client.request({ * method: 'GET', @@ -367,7 +367,7 @@ class Client { * Makes a GET request. * @example * ```typescript - * import { getClient, ResponseType } from 'tauri-plugin-http-api'; + * import { getClient, ResponseType } from '@tauri-apps/plugin-http'; * const client = await getClient(); * const response = await client.get('http://localhost:3003/users', { * timeout: 30, @@ -388,7 +388,7 @@ class Client { * Makes a POST request. * @example * ```typescript - * import { getClient, Body, ResponseType } from 'tauri-plugin-http-api'; + * import { getClient, Body, ResponseType } from '@tauri-apps/plugin-http'; * const client = await getClient(); * const response = await client.post('http://localhost:3003/users', { * body: Body.json({ @@ -417,7 +417,7 @@ class Client { * Makes a PUT request. * @example * ```typescript - * import { getClient, Body } from 'tauri-plugin-http-api'; + * import { getClient, Body } from '@tauri-apps/plugin-http'; * const client = await getClient(); * const response = await client.put('http://localhost:3003/users/1', { * body: Body.form({ @@ -447,7 +447,7 @@ class Client { * Makes a PATCH request. * @example * ```typescript - * import { getClient, Body } from 'tauri-plugin-http-api'; + * import { getClient, Body } from '@tauri-apps/plugin-http'; * const client = await getClient(); * const response = await client.patch('http://localhost:3003/users/1', { * body: Body.json({ email: 'contact@tauri.app' }) @@ -466,7 +466,7 @@ class Client { * Makes a DELETE request. * @example * ```typescript - * import { getClient } from 'tauri-plugin-http-api'; + * import { getClient } from '@tauri-apps/plugin-http'; * const client = await getClient(); * const response = await client.delete('http://localhost:3003/users/1'); * ``` @@ -484,7 +484,7 @@ class Client { * Creates a new client using the specified options. * @example * ```typescript - * import { getClient } from 'tauri-plugin-http-api'; + * import { getClient } from '@tauri-apps/plugin-http'; * const client = await getClient(); * ``` * @@ -507,7 +507,7 @@ let defaultClient: Client | null = null; * Perform an HTTP request using the default client. * @example * ```typescript - * import { fetch } from 'tauri-plugin-http-api'; + * import { fetch } from '@tauri-apps/plugin-http'; * const response = await fetch('http://localhost:3003/users/2', { * method: 'GET', * timeout: 30, diff --git a/plugins/http/package.json b/plugins/http/package.json index cb35a774..cd3e986f 100644 --- a/plugins/http/package.json +++ b/plugins/http/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-http-api", + "name": "@tauri-apps/plugin-http", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/log/README.md b/plugins/log/README.md index 7785ae66..b3cb6e8a 100644 --- a/plugins/log/README.md +++ b/plugins/log/README.md @@ -57,7 +57,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { trace, info, error, attachConsole } from "tauri-plugin-log-api"; +import { trace, info, error, attachConsole } from "@tauri-apps/plugin-log"; // with LogTarget::Webview enabled this function will print logs to the browser console const detach = await attachConsole(); diff --git a/plugins/log/guest-js/index.ts b/plugins/log/guest-js/index.ts index 4fb4b0c9..f7b8e7ef 100644 --- a/plugins/log/guest-js/index.ts +++ b/plugins/log/guest-js/index.ts @@ -75,7 +75,7 @@ async function log( * # Examples * * ```js - * import { error } from 'tauri-plugin-log-api'; + * import { error } from '@tauri-apps/plugin-log'; * * const err_info = "No connection"; * const port = 22; @@ -98,7 +98,7 @@ export async function error( * # Examples * * ```js - * import { warn } from 'tauri-plugin-log-api'; + * import { warn } from '@tauri-apps/plugin-log'; * * const warn_description = "Invalid Input"; * @@ -120,7 +120,7 @@ export async function warn( * # Examples * * ```js - * import { info } from 'tauri-plugin-log-api'; + * import { info } from '@tauri-apps/plugin-log'; * * const conn_info = { port: 40, speed: 3.20 }; * @@ -142,7 +142,7 @@ export async function info( * # Examples * * ```js - * import { debug } from 'tauri-plugin-log-api'; + * import { debug } from '@tauri-apps/plugin-log'; * * const pos = { x: 3.234, y: -1.223 }; * @@ -164,7 +164,7 @@ export async function debug( * # Examples * * ```js - * import { trace } from 'tauri-plugin-log-api'; + * import { trace } from '@tauri-apps/plugin-log'; * * let pos = { x: 3.234, y: -1.223 }; * diff --git a/plugins/log/package.json b/plugins/log/package.json index b610090d..770a147d 100644 --- a/plugins/log/package.json +++ b/plugins/log/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-log-api", + "name": "@tauri-apps/plugin-log", "version": "0.0.0", "description": "Configurable logging for your Tauri app.", "license": "MIT or APACHE-2.0", diff --git a/plugins/notification/package.json b/plugins/notification/package.json index 52d81e45..da51ff92 100644 --- a/plugins/notification/package.json +++ b/plugins/notification/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-notification-api", + "name": "@tauri-apps/plugin-notification", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/os/README.md b/plugins/os/README.md index 124a1f30..b16ea49f 100644 --- a/plugins/os/README.md +++ b/plugins/os/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as os from "tauri-plugin-os-api"; +import * as os from "@tauri-apps/plugin-os"; ``` ## Contributing diff --git a/plugins/os/guest-js/index.ts b/plugins/os/guest-js/index.ts index ea600d62..93147c0a 100644 --- a/plugins/os/guest-js/index.ts +++ b/plugins/os/guest-js/index.ts @@ -68,7 +68,7 @@ const EOL = isWindows() ? "\r\n" : "\n"; * The value is set at compile time. Possible values are `'linux'`, `'darwin'`, `'ios'`, `'freebsd'`, `'dragonfly'`, `'netbsd'`, `'openbsd'`, `'solaris'`, `'android'`, `'win32'` * @example * ```typescript - * import { platform } from 'tauri-plugin-os-api'; + * import { platform } from '@tauri-apps/plugin-os'; * const platformName = await platform(); * ``` * @@ -83,7 +83,7 @@ async function platform(): Promise { * Returns a string identifying the kernel version. * @example * ```typescript - * import { version } from 'tauri-plugin-os-api'; + * import { version } from '@tauri-apps/plugin-os'; * const osVersion = await version(); * ``` * @@ -97,7 +97,7 @@ async function version(): Promise { * Returns `'Linux'` on Linux, `'Darwin'` on macOS, and `'Windows_NT'` on Windows. * @example * ```typescript - * import { type } from 'tauri-plugin-os-api'; + * import { type } from '@tauri-apps/plugin-os'; * const osType = await type(); * ``` * @@ -112,7 +112,7 @@ async function type(): Promise { * Possible values are `'x86'`, `'x86_64'`, `'arm'`, `'aarch64'`, `'mips'`, `'mips64'`, `'powerpc'`, `'powerpc64'`, `'riscv64'`, `'s390x'`, `'sparc64'`. * @example * ```typescript - * import { arch } from 'tauri-plugin-os-api'; + * import { arch } from '@tauri-apps/plugin-os'; * const archName = await arch(); * ``` * @@ -126,7 +126,7 @@ async function arch(): Promise { * Returns the operating system's default directory for temporary files as a string. * @example * ```typescript - * import { tempdir } from 'tauri-plugin-os-api'; + * import { tempdir } from '@tauri-apps/plugin-os'; * const tempdirPath = await tempdir(); * ``` * diff --git a/plugins/os/package.json b/plugins/os/package.json index fe1c3717..a1a84181 100644 --- a/plugins/os/package.json +++ b/plugins/os/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-os-api", + "name": "@tauri-apps/plugin-os", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/positioner/README.md b/plugins/positioner/README.md index 26787b0e..0da5aaa9 100644 --- a/plugins/positioner/README.md +++ b/plugins/positioner/README.md @@ -30,11 +30,11 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh -pnpm add tauri-plugin-positioner-api +pnpm add @tauri-apps/plugin-positioner # or -npm add tauri-plugin-positioner-api +npm add @tauri-apps/plugin-positioner # or -yarn add tauri-plugin-positioner-api +yarn add @tauri-apps/plugin-positioner ``` Or through git: @@ -69,7 +69,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { move_window, Position } from "tauri-plugin-positioner-api"; +import { move_window, Position } from "@tauri-apps/plugin-positioner"; move_window(Position.TopRight); ``` diff --git a/plugins/positioner/package.json b/plugins/positioner/package.json index 83acb56f..3adfef55 100644 --- a/plugins/positioner/package.json +++ b/plugins/positioner/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-positioner-api", + "name": "@tauri-apps/plugin-positioner", "version": "0.2.7", "description": "Position your windows at well-known locations.", "license": "MIT or APACHE-2.0", diff --git a/plugins/process/README.md b/plugins/process/README.md index 55b83071..01fc5d61 100644 --- a/plugins/process/README.md +++ b/plugins/process/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as process from "tauri-plugin-process-api"; +import * as process from "@tauri-apps/plugin-process"; ``` ## Contributing diff --git a/plugins/process/guest-js/index.ts b/plugins/process/guest-js/index.ts index 556ca3ed..403dbc92 100644 --- a/plugins/process/guest-js/index.ts +++ b/plugins/process/guest-js/index.ts @@ -13,7 +13,7 @@ import { invoke } from "@tauri-apps/api/tauri"; * Exits immediately with the given `exitCode`. * @example * ```typescript - * import { exit } from 'tauri-plugin-process-api'; + * import { exit } from '@tauri-apps/plugin-process'; * await exit(1); * ``` * @@ -30,7 +30,7 @@ async function exit(code = 0): Promise { * Exits the current instance of the app then relaunches it. * @example * ```typescript - * import { relaunch } from 'tauri-plugin-process-api'; + * import { relaunch } from '@tauri-apps/plugin-process'; * await relaunch(); * ``` * diff --git a/plugins/process/package.json b/plugins/process/package.json index 400c04c3..ca0596fb 100644 --- a/plugins/process/package.json +++ b/plugins/process/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-process-api", + "name": "@tauri-apps/plugin-process", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/shell/guest-js/index.ts b/plugins/shell/guest-js/index.ts index 0cf86b0b..979f51d1 100644 --- a/plugins/shell/guest-js/index.ts +++ b/plugins/shell/guest-js/index.ts @@ -66,7 +66,7 @@ * ``` * Usage: * ```typescript - * import { Command } from 'tauri-plugin-shell-api' + * import { Command } from '@tauri-apps/plugin-shell' * Command.create('run-git-commit', ['commit', '-m', 'the commit message']) * ``` * @@ -348,7 +348,7 @@ class Child { * @param data The message to write, either a string or a byte array. * @example * ```typescript - * import { Command } from 'tauri-plugin-shell-api'; + * import { Command } from '@tauri-apps/plugin-shell'; * const command = Command.create('node'); * const child = await command.spawn(); * await child.write('message'); @@ -392,7 +392,7 @@ interface OutputEvents { * It emits the `close` and `error` events. * @example * ```typescript - * import { Command } from 'tauri-plugin-shell-api'; + * import { Command } from '@tauri-apps/plugin-shell'; * const command = Command.create('node'); * command.on('close', data => { * console.log(`command finished with code ${data.code} and signal ${data.signal}`) @@ -456,7 +456,7 @@ class Command extends EventEmitter { * Creates a command to execute the given program. * @example * ```typescript - * import { Command } from 'tauri-plugin-shell-api'; + * import { Command } from '@tauri-apps/plugin-shell'; * const command = Command.create('my-app', ['run', 'tauri']); * const output = await command.execute(); * ``` @@ -488,7 +488,7 @@ class Command extends EventEmitter { * Creates a command to execute the given sidecar program. * @example * ```typescript - * import { Command } from 'tauri-plugin-shell-api'; + * import { Command } from '@tauri-apps/plugin-shell'; * const command = Command.sidecar('my-sidecar'); * const output = await command.execute(); * ``` @@ -539,7 +539,7 @@ class Command extends EventEmitter { * Executes the command as a child process, waiting for it to finish and collecting all of its output. * @example * ```typescript - * import { Command } from 'tauri-plugin-shell-api'; + * import { Command } from '@tauri-apps/plugin-shell'; * const output = await Command.create('echo', 'message').execute(); * assert(output.code === 0); * assert(output.signal === null); @@ -624,7 +624,7 @@ type CommandEvent = * * @example * ```typescript - * import { open } from 'tauri-plugin-shell-api'; + * import { open } from '@tauri-apps/plugin-shell'; * // opens the given URL on the default browser: * await open('https://github.com/tauri-apps/tauri'); * // opens the given URL using `firefox`: diff --git a/plugins/shell/package.json b/plugins/shell/package.json index b6025864..42ab5b33 100644 --- a/plugins/shell/package.json +++ b/plugins/shell/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-shell-api", + "name": "@tauri-apps/plugin-shell", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/sql/README.md b/plugins/sql/README.md index 153d23dd..f6658668 100644 --- a/plugins/sql/README.md +++ b/plugins/sql/README.md @@ -53,7 +53,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import Database from "tauri-plugin-sql-api"; +import Database from "@tauri-apps/plugin-sql"; // sqlite. The path is relative to `tauri::api::path::BaseDirectory::App`. const db = await Database.load("sqlite:test.db"); diff --git a/plugins/sql/package.json b/plugins/sql/package.json index a5607cd6..e67a9398 100644 --- a/plugins/sql/package.json +++ b/plugins/sql/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-sql-api", + "name": "@tauri-apps/plugin-sql", "version": "0.0.0", "description": "Interface with SQL databases", "license": "MIT or APACHE-2.0", diff --git a/plugins/store/README.md b/plugins/store/README.md index cc63ab7e..c8411112 100644 --- a/plugins/store/README.md +++ b/plugins/store/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { Store } from "tauri-plugin-store-api"; +import { Store } from "@tauri-apps/plugin-store"; const store = new Store(".settings.dat"); diff --git a/plugins/store/package.json b/plugins/store/package.json index 02e5d230..7f48475f 100644 --- a/plugins/store/package.json +++ b/plugins/store/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-store-api", + "name": "@tauri-apps/plugin-store", "version": "0.0.0", "description": "Simple, persistent key-value store.", "license": "MIT or APACHE-2.0", diff --git a/plugins/stronghold/README.md b/plugins/stronghold/README.md index b57bd2d9..52b22a87 100644 --- a/plugins/stronghold/README.md +++ b/plugins/stronghold/README.md @@ -55,7 +55,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { Stronghold, Location } from "tauri-plugin-stronghold-api"; +import { Stronghold, Location } from "@tauri-apps/plugin-stronghold"; // TODO ``` diff --git a/plugins/stronghold/package.json b/plugins/stronghold/package.json index 254a3925..371b27c8 100644 --- a/plugins/stronghold/package.json +++ b/plugins/stronghold/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-stronghold-api", + "name": "@tauri-apps/plugin-stronghold", "version": "0.0.0", "description": "Store secrets and keys using the IOTA Stronghold encrypted database.", "license": "MIT or APACHE-2.0", diff --git a/plugins/updater/README.md b/plugins/updater/README.md index d618b606..842af4d9 100644 --- a/plugins/updater/README.md +++ b/plugins/updater/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as updater from "tauri-plugin-updater-api"; +import * as updater from "@tauri-apps/plugin-updater"; ``` ## Contributing diff --git a/plugins/updater/package.json b/plugins/updater/package.json index 5f907a64..1589e979 100644 --- a/plugins/updater/package.json +++ b/plugins/updater/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-updater-api", + "name": "@tauri-apps/plugin-updater", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/upload/README.md b/plugins/upload/README.md index a7e387ee..d451a8d6 100644 --- a/plugins/upload/README.md +++ b/plugins/upload/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { upload } from 'tauri-plugin-upload-api' +import { upload } from '@tauri-apps/plugin-upload' upload( 'https://example.com/file-upload' diff --git a/plugins/upload/package.json b/plugins/upload/package.json index acd01d42..afa43371 100644 --- a/plugins/upload/package.json +++ b/plugins/upload/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-upload-api", + "name": "@tauri-apps/plugin-upload", "version": "0.0.0", "description": "Upload files from disk to a remote server over HTTP.", "license": "MIT or APACHE-2.0", diff --git a/plugins/websocket/README.md b/plugins/websocket/README.md index 1e2aa98e..0971d6ff 100644 --- a/plugins/websocket/README.md +++ b/plugins/websocket/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { WebSocket } from "tauri-plugin-websocket-api"; +import { WebSocket } from "@tauri-apps/plugin-websocket"; const ws = await WebSocket.connect("wss://example.com"); diff --git a/plugins/websocket/examples/svelte-app/package.json b/plugins/websocket/examples/svelte-app/package.json index d5885cd6..5f1f5511 100644 --- a/plugins/websocket/examples/svelte-app/package.json +++ b/plugins/websocket/examples/svelte-app/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@tauri-apps/cli": "^2.0.0-alpha.8", - "tauri-plugin-websocket-api": "link:../../" + "@tauri-apps/plugin-websocket": "link:../../" }, "type": "module" } diff --git a/plugins/websocket/examples/svelte-app/src/routes/+page.svelte b/plugins/websocket/examples/svelte-app/src/routes/+page.svelte index 26e53cb0..d41d6389 100644 --- a/plugins/websocket/examples/svelte-app/src/routes/+page.svelte +++ b/plugins/websocket/examples/svelte-app/src/routes/+page.svelte @@ -1,35 +1,44 @@
- - - + + +
{@html response}
diff --git a/plugins/websocket/package.json b/plugins/websocket/package.json index dab28b37..e9b9f5c3 100644 --- a/plugins/websocket/package.json +++ b/plugins/websocket/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-websocket-api", + "name": "@tauri-apps/plugin-websocket", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/window-state/README.md b/plugins/window-state/README.md index ef99f245..97848cd2 100644 --- a/plugins/window-state/README.md +++ b/plugins/window-state/README.md @@ -62,7 +62,7 @@ app.save_window_state(StateFlags::all()); // will save the state of all open win or through Javascript ```javascript -import { saveWindowState, StateFlags } from "tauri-plugin-window-state-api"; +import { saveWindowState, StateFlags } from "@tauri-apps/plugin-window-state"; saveWindowState(StateFlags.ALL); ``` @@ -79,7 +79,10 @@ window.restore_state(StateFlags::all()); // will restore the windows state from or through Javascript ```javascript -import { restoreStateCurrent, StateFlags } from "tauri-plugin-window-state-api"; +import { + restoreStateCurrent, + StateFlags, +} from "@tauri-apps/plugin-window-state"; restoreStateCurrent(StateFlags.ALL); ``` diff --git a/plugins/window-state/package.json b/plugins/window-state/package.json index f7938586..c564eca3 100644 --- a/plugins/window-state/package.json +++ b/plugins/window-state/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-window-state-api", + "name": "@tauri-apps/plugin-window-state", "version": "0.0.0", "description": "Save window positions and sizes and restore them when the app is reopened.", "license": "MIT or APACHE-2.0", diff --git a/plugins/window/README.md b/plugins/window/README.md index 00257ccc..1a47b706 100644 --- a/plugins/window/README.md +++ b/plugins/window/README.md @@ -51,7 +51,7 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as tauriWindow from "tauri-plugin-window-api"; +import * as tauriWindow from "@tauri-apps/plugin-window"; ``` ## Contributing diff --git a/plugins/window/guest-js/index.ts b/plugins/window/guest-js/index.ts index 6a3a1585..b330314b 100644 --- a/plugins/window/guest-js/index.ts +++ b/plugins/window/guest-js/index.ts @@ -54,7 +54,7 @@ * * Events can be listened to using `appWindow.listen`: * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * appWindow.listen("my-window-event", ({ event, payload }) => { }); * ``` * @@ -144,7 +144,7 @@ class PhysicalSize { * Converts the physical size to a logical one. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const factor = await appWindow.scaleFactor(); * const size = await appWindow.innerSize(); * const logical = size.toLogical(factor); @@ -190,7 +190,7 @@ class PhysicalPosition { * Converts the physical position to a logical one. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const factor = await appWindow.scaleFactor(); * const position = await appWindow.innerPosition(); * const logical = position.toLogical(factor); @@ -319,7 +319,8 @@ class WebviewWindowHandle { /** The window label. It is a unique identifier for the window, can be used to reference it later. */ label: WindowLabel; /** Local event listeners. */ - listeners: Record>>; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + listeners: Record>>; constructor(label: WindowLabel) { this.label = label; @@ -332,7 +333,7 @@ class WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const unlisten = await appWindow.listen('state-changed', (event) => { * console.log(`Got error: ${payload}`); * }); @@ -365,7 +366,7 @@ class WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const unlisten = await appWindow.once('initialized', (event) => { * console.log(`Window initialized!`); * }); @@ -394,7 +395,7 @@ class WebviewWindowHandle { * Emits an event to the backend, tied to the webview window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.emit('window-loaded', { loggedIn: true, token: 'authToken' }); * ``` * @@ -440,7 +441,7 @@ class WindowManager extends WebviewWindowHandle { * The scale factor that can be used to map physical pixels to logical pixels. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const factor = await appWindow.scaleFactor(); * ``` * @@ -456,7 +457,7 @@ class WindowManager extends WebviewWindowHandle { * The position of the top-left hand corner of the window's client area relative to the top-left hand corner of the desktop. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const position = await appWindow.innerPosition(); * ``` * @@ -472,7 +473,7 @@ class WindowManager extends WebviewWindowHandle { * The position of the top-left hand corner of the window relative to the top-left hand corner of the desktop. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const position = await appWindow.outerPosition(); * ``` * @@ -489,7 +490,7 @@ class WindowManager extends WebviewWindowHandle { * The client area is the content of the window, excluding the title bar and borders. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const size = await appWindow.innerSize(); * ``` * @@ -509,7 +510,7 @@ class WindowManager extends WebviewWindowHandle { * These dimensions include the title bar and borders. If you don't want that (and you usually don't), use inner_size instead. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const size = await appWindow.outerSize(); * ``` * @@ -528,7 +529,7 @@ class WindowManager extends WebviewWindowHandle { * Gets the window's current fullscreen state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const fullscreen = await appWindow.isFullscreen(); * ``` * @@ -544,7 +545,7 @@ class WindowManager extends WebviewWindowHandle { * Gets the window's current minimized state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const minimized = await appWindow.isMinimized(); * ``` * @@ -560,7 +561,7 @@ class WindowManager extends WebviewWindowHandle { * Gets the window's current maximized state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const maximized = await appWindow.isMaximized(); * ``` * @@ -576,7 +577,7 @@ class WindowManager extends WebviewWindowHandle { * Gets the window's current decorated state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const decorated = await appWindow.isDecorated(); * ``` * @@ -592,7 +593,7 @@ class WindowManager extends WebviewWindowHandle { * Gets the window's current resizable state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const resizable = await appWindow.isResizable(); * ``` * @@ -608,7 +609,7 @@ class WindowManager extends WebviewWindowHandle { * Gets the window's current visible state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const visible = await appWindow.isVisible(); * ``` * @@ -624,7 +625,7 @@ class WindowManager extends WebviewWindowHandle { * Gets the window's current title. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const title = await appWindow.title(); * ``` * @@ -645,7 +646,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * const theme = await appWindow.theme(); * ``` * @@ -663,7 +664,7 @@ class WindowManager extends WebviewWindowHandle { * Centers the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.center(); * ``` * @@ -690,7 +691,7 @@ class WindowManager extends WebviewWindowHandle { * - **Linux:** Urgency levels have the same effect. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.requestUserAttention(); * ``` * @@ -719,7 +720,7 @@ class WindowManager extends WebviewWindowHandle { * Updates the window resizable flag. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setResizable(false); * ``` * @@ -737,7 +738,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window title. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setTitle('Tauri'); * ``` * @@ -755,7 +756,7 @@ class WindowManager extends WebviewWindowHandle { * Maximizes the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.maximize(); * ``` * @@ -771,7 +772,7 @@ class WindowManager extends WebviewWindowHandle { * Unmaximizes the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.unmaximize(); * ``` * @@ -787,7 +788,7 @@ class WindowManager extends WebviewWindowHandle { * Toggles the window maximized state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.toggleMaximize(); * ``` * @@ -803,7 +804,7 @@ class WindowManager extends WebviewWindowHandle { * Minimizes the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.minimize(); * ``` * @@ -819,7 +820,7 @@ class WindowManager extends WebviewWindowHandle { * Unminimizes the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.unminimize(); * ``` * @@ -835,7 +836,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window visibility to true. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.show(); * ``` * @@ -851,7 +852,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window visibility to false. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.hide(); * ``` * @@ -867,7 +868,7 @@ class WindowManager extends WebviewWindowHandle { * Closes the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.close(); * ``` * @@ -883,7 +884,7 @@ class WindowManager extends WebviewWindowHandle { * Whether the window should have borders and bars. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setDecorations(false); * ``` * @@ -910,7 +911,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setShadow(false); * ``` * @@ -929,7 +930,7 @@ class WindowManager extends WebviewWindowHandle { * Whether the window should always be on top of other windows. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setAlwaysOnTop(true); * ``` * @@ -947,7 +948,7 @@ class WindowManager extends WebviewWindowHandle { * Prevents the window contents from being captured by other apps. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setContentProtected(true); * ``` * @@ -966,7 +967,7 @@ class WindowManager extends WebviewWindowHandle { * Resizes the window with a new inner size. * @example * ```typescript - * import { appWindow, LogicalSize } from 'tauri-plugin-window-api'; + * import { appWindow, LogicalSize } from '@tauri-apps/window'; * await appWindow.setSize(new LogicalSize(600, 500)); * ``` * @@ -996,7 +997,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window minimum inner size. If the `size` argument is not provided, the constraint is unset. * @example * ```typescript - * import { appWindow, PhysicalSize } from 'tauri-plugin-window-api'; + * import { appWindow, PhysicalSize } from '@tauri-apps/window'; * await appWindow.setMinSize(new PhysicalSize(600, 500)); * ``` * @@ -1030,7 +1031,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window maximum inner size. If the `size` argument is undefined, the constraint is unset. * @example * ```typescript - * import { appWindow, LogicalSize } from 'tauri-plugin-window-api'; + * import { appWindow, LogicalSize } from '@tauri-apps/window'; * await appWindow.setMaxSize(new LogicalSize(600, 500)); * ``` * @@ -1064,7 +1065,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window outer position. * @example * ```typescript - * import { appWindow, LogicalPosition } from 'tauri-plugin-window-api'; + * import { appWindow, LogicalPosition } from '@tauri-apps/window'; * await appWindow.setPosition(new LogicalPosition(600, 500)); * ``` * @@ -1099,7 +1100,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window fullscreen state. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setFullscreen(true); * ``` * @@ -1117,7 +1118,7 @@ class WindowManager extends WebviewWindowHandle { * Bring the window to front and focus. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setFocus(); * ``` * @@ -1133,7 +1134,7 @@ class WindowManager extends WebviewWindowHandle { * Sets the window icon. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setIcon('/tauri/awesome.png'); * ``` * @@ -1162,7 +1163,7 @@ class WindowManager extends WebviewWindowHandle { * - **macOS:** Unsupported. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setSkipTaskbar(true); * ``` * @@ -1188,7 +1189,7 @@ class WindowManager extends WebviewWindowHandle { * - **macOS:** This locks the cursor in a fixed location, which looks visually awkward. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setCursorGrab(true); * ``` * @@ -1212,7 +1213,7 @@ class WindowManager extends WebviewWindowHandle { * outside of the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setCursorVisible(false); * ``` * @@ -1230,7 +1231,7 @@ class WindowManager extends WebviewWindowHandle { * Modifies the cursor icon of the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setCursorIcon('help'); * ``` * @@ -1248,7 +1249,7 @@ class WindowManager extends WebviewWindowHandle { * Changes the position of the cursor in window coordinates. * @example * ```typescript - * import { appWindow, LogicalPosition } from 'tauri-plugin-window-api'; + * import { appWindow, LogicalPosition } from '@tauri-apps/window'; * await appWindow.setCursorPosition(new LogicalPosition(600, 300)); * ``` * @@ -1284,7 +1285,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.setIgnoreCursorEvents(true); * ``` * @@ -1302,7 +1303,7 @@ class WindowManager extends WebviewWindowHandle { * Starts dragging the window. * @example * ```typescript - * import { appWindow } from 'tauri-plugin-window-api'; + * import { appWindow } from '@tauri-apps/window'; * await appWindow.startDragging(); * ``` * @@ -1321,7 +1322,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * const unlisten = await appWindow.onResized(({ payload: size }) => { * console.log('Window resized', size); * }); @@ -1347,7 +1348,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * const unlisten = await appWindow.onMoved(({ payload: position }) => { * console.log('Window moved', position); * }); @@ -1373,7 +1374,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * import { confirm } from '@tauri-apps/api/dialog'; * const unlisten = await appWindow.onCloseRequested(async (event) => { * const confirmed = await confirm('Are you sure?'); @@ -1412,7 +1413,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * const unlisten = await appWindow.onFocusChanged(({ payload: focused }) => { * console.log('Focus changed, window is focused? ' + focused); * }); @@ -1454,7 +1455,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * const unlisten = await appWindow.onScaleChanged(({ payload }) => { * console.log('Scale changed', payload.scaleFactor, payload.size); * }); @@ -1482,7 +1483,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * const unlisten = await appWindow.onMenuClicked(({ payload: menuId }) => { * console.log('Menu clicked: ' + menuId); * }); @@ -1507,7 +1508,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * const unlisten = await appWindow.onFileDropEvent((event) => { * if (event.payload.type === 'hover') { * console.log('User hovering', event.payload.paths); @@ -1563,7 +1564,7 @@ class WindowManager extends WebviewWindowHandle { * * @example * ```typescript - * import { appWindow } from "tauri-plugin-window-api"; + * import { appWindow } from "@tauri-apps/window"; * const unlisten = await appWindow.onThemeChanged(({ payload: theme }) => { * console.log('New theme: ' + theme); * }); @@ -1647,7 +1648,7 @@ class WebviewWindow extends WindowManager { * Creates a new WebviewWindow. * @example * ```typescript - * import { WebviewWindow } from 'tauri-plugin-window-api'; + * import { WebviewWindow } from '@tauri-apps/window'; * const webview = new WebviewWindow('my-label', { * url: 'https://github.com/tauri-apps/tauri' * }); @@ -1681,7 +1682,7 @@ class WebviewWindow extends WindowManager { * Gets the WebviewWindow for the webview associated with the given label. * @example * ```typescript - * import { WebviewWindow } from 'tauri-plugin-window-api'; + * import { WebviewWindow } from '@tauri-apps/window'; * const mainWindow = WebviewWindow.getByLabel('main'); * ``` * @@ -1850,7 +1851,7 @@ function mapPhysicalSize(m: PhysicalSize): PhysicalSize { * Returns `null` if current monitor can't be detected. * @example * ```typescript - * import { currentMonitor } from 'tauri-plugin-window-api'; + * import { currentMonitor } from '@tauri-apps/window'; * const monitor = currentMonitor(); * ``` * @@ -1867,7 +1868,7 @@ async function currentMonitor(): Promise { * Returns `null` if it can't identify any monitor as a primary one. * @example * ```typescript - * import { primaryMonitor } from 'tauri-plugin-window-api'; + * import { primaryMonitor } from '@tauri-apps/window'; * const monitor = primaryMonitor(); * ``` * @@ -1883,7 +1884,7 @@ async function primaryMonitor(): Promise { * Returns the list of all the monitors available on the system. * @example * ```typescript - * import { availableMonitors } from 'tauri-plugin-window-api'; + * import { availableMonitors } from '@tauri-apps/window'; * const monitors = availableMonitors(); * ``` * diff --git a/plugins/window/package.json b/plugins/window/package.json index 6e564693..53ceec55 100644 --- a/plugins/window/package.json +++ b/plugins/window/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-window-api", + "name": "@tauri-apps/plugin-window", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2305976a..15858968 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,43 +61,43 @@ importers: '@zerodevx/svelte-json-view': specifier: 0.2.1 version: 0.2.1 - tauri-plugin-app-api: + '@tauri-apps/plugin-app': specifier: 0.0.0 version: link:../../plugins/app - tauri-plugin-cli-api: + '@tauri-apps/plugin-cli': specifier: 0.0.0 version: link:../../plugins/cli - tauri-plugin-clipboard-api: + '@tauri-apps/plugin-clipboard': specifier: 0.0.0 version: link:../../plugins/clipboard - tauri-plugin-dialog-api: + '@tauri-apps/plugin-dialog': specifier: 0.0.0 version: link:../../plugins/dialog - tauri-plugin-fs-api: + '@tauri-apps/plugin-fs': specifier: 0.0.0 version: link:../../plugins/fs - tauri-plugin-global-shortcut-api: + '@tauri-apps/plugin-global-shortcut': specifier: 0.0.0 version: link:../../plugins/global-shortcut - tauri-plugin-http-api: + '@tauri-apps/plugin-http': specifier: 0.0.0 version: link:../../plugins/http - tauri-plugin-notification-api: + '@tauri-apps/plugin-notification': specifier: 0.0.0 version: link:../../plugins/notification - tauri-plugin-os-api: + '@tauri-apps/plugin-os': specifier: 0.0.0 version: link:../../plugins/os - tauri-plugin-process-api: + '@tauri-apps/plugin-process': specifier: 0.0.0 version: link:../../plugins/process - tauri-plugin-shell-api: + '@tauri-apps/plugin-shell': specifier: 0.0.0 version: link:../../plugins/shell - tauri-plugin-updater-api: + '@tauri-apps/plugin-updater': specifier: 0.0.0 version: link:../../plugins/updater - tauri-plugin-window-api: + '@tauri-apps/plugin-window': specifier: 0.0.0 version: link:../../plugins/window devDependencies: @@ -354,7 +354,7 @@ importers: '@tauri-apps/cli': specifier: ^2.0.0-alpha.8 version: 2.0.0-alpha.8 - tauri-plugin-websocket-api: + '@tauri-apps/plugin-websocket': specifier: link:../../ version: link:../.. devDependencies: diff --git a/shared/template/package.json b/shared/template/package.json index e62c3c9f..77b7a603 100644 --- a/shared/template/package.json +++ b/shared/template/package.json @@ -1,5 +1,5 @@ { - "name": "tauri-plugin-{{name}}-api", + "name": "@tauri-apps/plugin-{{name}}", "version": "0.0.0", "license": "MIT or APACHE-2.0", "authors": [ From b064718f32a2562ed85a468d1dfe74685f1d9630 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 17 May 2023 20:53:03 -0300 Subject: [PATCH 24/64] feat(ci): also test on Windows and macOS (#366) --- .../{msrv-check.yml => test-rust.yml} | 20 ++++++++++++++----- Cargo.lock | 14 ++++++------- plugins/notification/src/desktop.rs | 2 +- plugins/updater/src/updater/core.rs | 7 ++++--- 4 files changed, 27 insertions(+), 16 deletions(-) rename .github/workflows/{msrv-check.yml => test-rust.yml} (71%) diff --git a/.github/workflows/msrv-check.yml b/.github/workflows/test-rust.yml similarity index 71% rename from .github/workflows/msrv-check.yml rename to .github/workflows/test-rust.yml index ef8fd15c..b81a1ef9 100644 --- a/.github/workflows/msrv-check.yml +++ b/.github/workflows/test-rust.yml @@ -1,4 +1,4 @@ -name: Check MSRV +name: Test Rust on: push: @@ -6,7 +6,7 @@ on: - v1 - v2 paths: - - ".github/workflows/msrv-check.yml" + - ".github/workflows/test-rust.yml" - "plugins/*/src/**" - "**/Cargo.toml" - "**/Cargo.lock" @@ -15,7 +15,7 @@ on: - v1 - v2 paths: - - ".github/workflows/msrv-check.yml" + - ".github/workflows/test-rust.yml" - "plugins/*/src/**" - "**/Cargo.toml" - "**/Cargo.lock" @@ -25,19 +25,29 @@ concurrency: cancel-in-progress: true jobs: - msrv: - runs-on: ubuntu-latest + test: + runs-on: ${{ matrix.platform }} + strategy: fail-fast: false + matrix: + platform: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v3 - name: install webkit2gtk and libudev for [authenticator] + if: matrix.platform == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev + - name: install openssl + if: matrix.platform == 'windows-latest' + run: | + echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append + vcpkg install openssl:x64-windows-static-md + - uses: dtolnay/rust-toolchain@1.65.0 - uses: Swatinem/rust-cache@v2 diff --git a/Cargo.lock b/Cargo.lock index 6a12b8d9..266a3c38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4960,7 +4960,7 @@ dependencies = [ [[package]] name = "tauri" version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" dependencies = [ "anyhow", "bytes 1.4.0", @@ -5010,7 +5010,7 @@ dependencies = [ [[package]] name = "tauri-build" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" dependencies = [ "anyhow", "cargo_toml", @@ -5030,7 +5030,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" dependencies = [ "base64 0.21.0", "brotli", @@ -5055,7 +5055,7 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -5449,7 +5449,7 @@ dependencies = [ [[package]] name = "tauri-runtime" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" dependencies = [ "gtk", "http", @@ -5469,7 +5469,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" dependencies = [ "cocoa", "gtk", @@ -5489,7 +5489,7 @@ dependencies = [ [[package]] name = "tauri-utils" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#994e4fd6d9e649e0d76124cd6fcd18443ac585b0" +source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" dependencies = [ "aes-gcm 0.10.1", "brotli", diff --git a/plugins/notification/src/desktop.rs b/plugins/notification/src/desktop.rs index 81473489..897790f0 100644 --- a/plugins/notification/src/desktop.rs +++ b/plugins/notification/src/desktop.rs @@ -243,7 +243,7 @@ mod imp { #[cfg(all(windows, feature = "windows7-compat"))] fn notify_win7(self, app: &tauri::AppHandle) -> crate::Result<()> { let app = app.clone(); - let default_window_icon = app.manager.inner.default_window_icon.clone(); + let default_window_icon = app.default_window_icon().cloned(); let _ = app.run_on_main_thread(move || { let mut notification = win7_notifications::Notification::new(); if let Some(body) = self.body { diff --git a/plugins/updater/src/updater/core.rs b/plugins/updater/src/updater/core.rs index bdc4d745..fd917497 100644 --- a/plugins/updater/src/updater/core.rs +++ b/plugins/updater/src/updater/core.rs @@ -610,7 +610,7 @@ impl Update { &self.extract_path, self.with_elevated_task, &self.app.config(), - &self.app.state::().config, + &self.app.state::().config, )?; #[cfg(not(target_os = "windows"))] copy_files_and_run(archive_buffer, &self.extract_path)?; @@ -738,7 +738,7 @@ fn copy_files_and_run( // Run the EXE let mut installer = Command::new(found_path); if tauri::utils::config::WindowsUpdateInstallMode::Quiet - == config.tauri.bundle.updater.install_mode + == config.tauri.bundle.updater.windows.install_mode { installer.arg("/S"); } @@ -798,10 +798,11 @@ fn copy_files_and_run( msi_path_arg.push(&found_path); msi_path_arg.push("\"\"\""); - let mut msiexec_args = updater_config + let mut msiexec_args = config .tauri .bundle .updater + .windows .install_mode .clone() .msiexec_args() From ac76abcebddf1f6e56fcb8388e3bbbfbc75b3b7e Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 17 May 2023 22:50:45 -0300 Subject: [PATCH 25/64] refactor: move fs-watch to fs (#369) --- .changes/config.json | 9 - Cargo.lock | 19 +- README.md | 32 +- examples/api/yarn-error.log | 1094 ----------------- plugins/fs-watch/.gitignore | 1 - plugins/fs-watch/Cargo.toml | 19 - plugins/fs-watch/LICENSE.spdx | 20 - plugins/fs-watch/LICENSE_APACHE-2.0 | 177 --- plugins/fs-watch/LICENSE_MIT | 21 - plugins/fs-watch/README.md | 82 -- plugins/fs-watch/banner.png | Bin 43432 -> 0 bytes plugins/fs-watch/guest-js/index.ts | 135 -- plugins/fs-watch/package.json | 33 - plugins/fs-watch/rollup.config.mjs | 11 - plugins/fs-watch/tsconfig.json | 1 - plugins/fs/Cargo.toml | 5 + plugins/fs/src/error.rs | 4 + plugins/fs/src/lib.rs | 12 +- .../src/lib.rs => fs/src/watcher.rs} | 45 +- plugins/http/README.md | 2 +- plugins/mirrors.txt | 1 - pnpm-lock.yaml | 16 +- 22 files changed, 51 insertions(+), 1688 deletions(-) delete mode 100644 examples/api/yarn-error.log delete mode 100644 plugins/fs-watch/.gitignore delete mode 100644 plugins/fs-watch/Cargo.toml delete mode 100644 plugins/fs-watch/LICENSE.spdx delete mode 100644 plugins/fs-watch/LICENSE_APACHE-2.0 delete mode 100644 plugins/fs-watch/LICENSE_MIT delete mode 100644 plugins/fs-watch/README.md delete mode 100644 plugins/fs-watch/banner.png delete mode 100644 plugins/fs-watch/guest-js/index.ts delete mode 100644 plugins/fs-watch/package.json delete mode 100644 plugins/fs-watch/rollup.config.mjs delete mode 120000 plugins/fs-watch/tsconfig.json rename plugins/{fs-watch/src/lib.rs => fs/src/watcher.rs} (72%) diff --git a/.changes/config.json b/.changes/config.json index 5792535f..f74e1a5f 100644 --- a/.changes/config.json +++ b/.changes/config.json @@ -88,15 +88,6 @@ "manager": "javascript-disabled" }, - "fs-watch": { - "path": "./plugins/fs-watch", - "manager": "rust-disabled" - }, - "fs-watch-js": { - "path": "./plugins/fs-watch", - "manager": "javascript-disabled" - }, - "global-shortcut": { "path": "./plugins/global-shortcut", "manager": "rust-disabled" diff --git a/Cargo.lock b/Cargo.lock index 266a3c38..7162dcc7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3100,9 +3100,9 @@ dependencies = [ [[package]] name = "notify" -version = "5.1.0" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" dependencies = [ "bitflags 1.3.2", "crossbeam-channel", @@ -3114,7 +3114,7 @@ dependencies = [ "mio", "serde", "walkdir", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -5150,23 +5150,12 @@ version = "0.0.0" dependencies = [ "anyhow", "glob", - "serde", - "tauri", - "thiserror", - "uuid", -] - -[[package]] -name = "tauri-plugin-fs-watch" -version = "0.0.0" -dependencies = [ - "log", "notify", "notify-debouncer-mini", "serde", - "serde_json", "tauri", "thiserror", + "uuid", ] [[package]] diff --git a/README.md b/README.md index edeb0ac5..1fdcf447 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,19 @@ ## Plugins Found Here -| | | Win | Mac | Lin | iOS | And | -| ------------------------------------------ | --------------------------------------------------------- | --- | --- | --- | --- | --- | -| [authenticator](plugins/authenticator) | Interface with hardware security keys. | ✅ | ✅ | ✅ | ? | ? | -| [autostart](plugins/autostart) | Automatically launch your app at system startup. | ✅ | ✅ | ✅ | ? | ? | -| [fs-extra](plugins/fs-extra) | File system methods that aren't included in the core API. | ✅ | ✅ | ✅ | ? | ? | -| [fs-watch](plugins/fs-watch) | Watch the filesystem for changes. | ✅ | ✅ | ✅ | ? | ? | -| [localhost](plugins/localhost) | Use a localhost server in production apps. | ✅ | ✅ | ✅ | ? | ? | -| [log](plugins/log) | Configurable logging. | ✅ | ✅ | ✅ | ✅ | ✅ | -| [persisted-scope](plugins/persisted-scope) | Persist runtime scope changes on the filesystem. | ✅ | ✅ | ✅ | ? | ? | -| [positioner](plugins/positioner) | Move windows to common locations. | ✅ | ✅ | ✅ | ? | ? | -| [single-instance](plugins/single-instance) | Ensure a single instance of your tauri app is running. | ✅ | ? | ✅ | ? | ? | -| [sql](plugins/sql) | Interface with SQL databases. | ✅ | ✅ | ✅ | ? | ? | -| [store](plugins/store) | Persistent key value storage. | ✅ | ✅ | ✅ | ? | ? | -| [stronghold](plugins/stronghold) | Encrypted, secure database. | ✅ | ✅ | ✅ | ? | ? | -| [upload](plugins/upload) | Tauri plugin for file uploads through HTTP. | ✅ | ✅ | ✅ | ? | ? | -| [websocket](plugins/websocket) | Open a WebSocket connection using a Rust client in JS. | ✅ | ✅ | ✅ | ? | ? | -| [window-state](plugins/window-state) | Persist window sizes and positions. | ✅ | ✅ | ✅ | ? | ? | +| | | Win | Mac | Lin | iOS | And | +| ------------------------------------------ | ------------------------------------------------------ | --- | --- | --- | --- | --- | +| [authenticator](plugins/authenticator) | Interface with hardware security keys. | ✅ | ✅ | ✅ | ? | ? | +| [autostart](plugins/autostart) | Automatically launch your app at system startup. | ✅ | ✅ | ✅ | ? | ? | +| [localhost](plugins/localhost) | Use a localhost server in production apps. | ✅ | ✅ | ✅ | ? | ? | +| [log](plugins/log) | Configurable logging. | ✅ | ✅ | ✅ | ✅ | ✅ | +| [persisted-scope](plugins/persisted-scope) | Persist runtime scope changes on the filesystem. | ✅ | ✅ | ✅ | ? | ? | +| [positioner](plugins/positioner) | Move windows to common locations. | ✅ | ✅ | ✅ | ? | ? | +| [single-instance](plugins/single-instance) | Ensure a single instance of your tauri app is running. | ✅ | ? | ✅ | ? | ? | +| [sql](plugins/sql) | Interface with SQL databases. | ✅ | ✅ | ✅ | ? | ? | +| [store](plugins/store) | Persistent key value storage. | ✅ | ✅ | ✅ | ? | ? | +| [stronghold](plugins/stronghold) | Encrypted, secure database. | ✅ | ✅ | ✅ | ? | ? | +| [upload](plugins/upload) | Tauri plugin for file uploads through HTTP. | ✅ | ✅ | ✅ | ? | ? | +| [websocket](plugins/websocket) | Open a WebSocket connection using a Rust client in JS. | ✅ | ✅ | ✅ | ? | ? | +| [window-state](plugins/window-state) | Persist window sizes and positions. | ✅ | ✅ | ✅ | ? | ? | _This repo and all plugins require a Rust version of at least **1.65**_ diff --git a/examples/api/yarn-error.log b/examples/api/yarn-error.log deleted file mode 100644 index 552bc05e..00000000 --- a/examples/api/yarn-error.log +++ /dev/null @@ -1,1094 +0,0 @@ -Arguments: - /home/lucas/.nvm/versions/node/v16.14.0/bin/node /usr/bin/yarn - -PATH: - /home/lucas/.local/bin:/opt/ums:/home/lucas/NDK/x86/bin:/home/lucas/Android/Sdk/platform-tools:/home/lucas/.yarn/bin:/home/lucas/.cargo/bin:/home/lucas/.nvm/versions/node/v16.14.0/bin:/home/lucas/.config/composer/vendor/bin:/home/lucasfernog/perl5/bin:/usr/bin:/home/lucas/.local/bin:/opt/ums:/home/lucas/NDK/x86/bin:/home/lucas/Android/Sdk/platform-tools:/home/lucas/.yarn/bin:/home/lucas/.cargo/bin:/home/lucas/.nvm/versions/node/v16.14.0/bin:/home/lucas/.config/composer/vendor/bin:/home/lucasfernog/perl5/bin:/usr/condabin:/usr/local/sbin:/usr/local/bin:/usr/bin:/home/lucas/.dotnet/tools:/home/lucas/.local/share/flatpak/exports/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/lucas/.rvm/bin:/home/lucas/.rvm/bin - -Yarn version: - 1.22.19 - -Node version: - 16.14.0 - -Platform: - linux x64 - -Trace: - Error: https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin&scripts.build=build: Request failed "500 Internal Server Error" - at ResponseError.ExtendableBuiltin (/usr/lib/node_modules/yarn/lib/cli.js:696:66) - at new ResponseError (/usr/lib/node_modules/yarn/lib/cli.js:802:124) - at Request. (/usr/lib/node_modules/yarn/lib/cli.js:66215:16) - at Request.emit (node:events:520:28) - at Request.module.exports.Request.onRequestResponse (/usr/lib/node_modules/yarn/lib/cli.js:141767:10) - at ClientRequest.emit (node:events:520:28) - at HTTPParser.parserOnIncomingClient (node:_http_client:618:27) - at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17) - at TLSSocket.socketOnData (node:_http_client:482:22) - at TLSSocket.emit (node:events:520:28) - -npm manifest: - { - "name": "svelte-app", - "version": "1.0.0", - "type": "module", - "scripts": { - "dev": "vite --clearScreen false", - "build": "vite build", - "serve": "vite preview", - "tauri": "node ../../tooling/cli/node/tauri.js" - }, - "dependencies": { - "@tauri-apps/api": "../../tooling/api/dist", - "@zerodevx/svelte-json-view": "0.2.1", - "@tauri-apps/plugin-fs": "https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin&scripts.build=build" - }, - "devDependencies": { - "@iconify-json/codicon": "^1.1.10", - "@iconify-json/ph": "^1.1.1", - "@sveltejs/vite-plugin-svelte": "^1.0.1", - "internal-ip": "^7.0.0", - "svelte": "^3.49.0", - "unocss": "^0.39.3", - "vite": "^3.0.9" - } - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "@antfu/install-pkg@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.1.0.tgz#8d8c61820cbc32e5c37d82d515485ad3ee9bd052" - integrity sha512-VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw== - dependencies: - execa "^5.1.1" - find-up "^5.0.0" - - "@antfu/utils@^0.5.0", "@antfu/utils@^0.5.1": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.5.2.tgz#8c2d931ff927be0ebe740169874a3d4004ab414b" - integrity sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA== - - "@esbuild/linux-loong64@0.14.54": - version "0.14.54" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" - integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== - - "@iconify-json/codicon@^1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@iconify-json/codicon/-/codicon-1.1.10.tgz#22fee909be51afebfbcc6cd57209064b5363f202" - integrity sha512-xx3nX5k4UeDQnpX9D1T6L1RCEwyLtqu3Lqk9plYK+SoBSQ/kR73bPy9WbYyDVOw2MDw50JCSpZZYlBC718k7Sg== - dependencies: - "@iconify/types" "^1.1.0" - - "@iconify-json/ph@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@iconify-json/ph/-/ph-1.1.1.tgz#17b3dee91a47055bac93d65c32b9ee33c654d56f" - integrity sha512-sIHTY+c1F8x29BM49IqoccJ3T8mvVXPcrE4WOpJ3GsBaip2YqFJRYU60rw64UL6GEI13vWSD7NsZKq8ytTO87g== - dependencies: - "@iconify/types" "^1.0.12" - - "@iconify/types@^1.0.12", "@iconify/types@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@iconify/types/-/types-1.1.0.tgz#dc15fc988b1b3fd558dd140a24ede7e0aac11280" - integrity sha512-Jh0llaK2LRXQoYsorIH8maClebsnzTcve+7U3rQUSnC11X4jtPnFuyatqFLvMxZ8MLG8dB4zfHsbPfuvxluONw== - - "@iconify/utils@^1.0.33": - version "1.0.33" - resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-1.0.33.tgz#9952ecae79e3b1685b83c58159c1d48959f6105a" - integrity sha512-vGeAqo7aGPxOQmGdVoXFUOuyN+0V7Lcrx2EvaiRjxUD1x6Om0Tvq2bdm7E24l2Pz++4S0mWMCVFXe/17EtKImQ== - dependencies: - "@antfu/install-pkg" "^0.1.0" - "@antfu/utils" "^0.5.0" - "@iconify/types" "^1.1.0" - debug "^4.3.4" - kolorist "^1.5.1" - local-pkg "^0.4.1" - - "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - - "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - - "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - - "@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== - - "@rollup/pluginutils@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" - integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - - "@sveltejs/vite-plugin-svelte@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.1.tgz#7f468f03c933fcdfc60d4773671c73f33b9ef4d6" - integrity sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg== - dependencies: - "@rollup/pluginutils" "^4.2.1" - debug "^4.3.4" - deepmerge "^4.2.2" - kleur "^4.1.5" - magic-string "^0.26.2" - svelte-hmr "^0.14.12" - - "@tauri-apps/api@../../tooling/api/dist": - version "2.0.0-alpha.3" - - "@tauri-apps/api@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-1.2.0.tgz#1f196b3e012971227f41b98214c846430a4eb477" - integrity sha512-lsI54KI6HGf7VImuf/T9pnoejfgkNoXveP14pVV7XarrQ46rOejIVJLFqHI9sRReJMGdh2YuCoI3cc/yCWCsrw== - - "@unocss/cli@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/cli/-/cli-0.39.3.tgz#a7e956a4fffb9586579f09727069f83d34c5e358" - integrity sha512-h+qq76CJTkV7GYBSQ3vSJCn/jewFzBVh8owMYH3B1ROe5D1mCev2INYvHlsQsVVoyxnccBeuZ6st6OK56VyDjA== - dependencies: - "@unocss/config" "0.39.3" - "@unocss/core" "0.39.3" - "@unocss/preset-uno" "0.39.3" - cac "^6.7.12" - chokidar "^3.5.3" - colorette "^2.0.16" - consola "^2.15.3" - fast-glob "^3.2.11" - pathe "^0.3.0" - perfect-debounce "^0.1.3" - - "@unocss/config@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/config/-/config-0.39.3.tgz#0404c29dc76b87833fef331a628652be7cb1f9ee" - integrity sha512-qyxjUUdi+D/vS4Snhoj0uW8ErKlfZCKdjJ+ntwnJK3c8dxAp/IuicE+6ukcLfHxT0kAw1xaRlNwamtL3MgcX/A== - dependencies: - "@unocss/core" "0.39.3" - unconfig "^0.3.4" - - "@unocss/core@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/core/-/core-0.39.3.tgz#fec1e71b2f89e14629c47be72f6c894dd88933ac" - integrity sha512-8MnXKHNtp6xgsFIaFtWctnbsT60c8JSlxXA7XbGxEztOmSEhpZmLeLGe5AgmEGPH6MssqJtI0DCeTbzbbtOjfw== - - "@unocss/inspector@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/inspector/-/inspector-0.39.3.tgz#0e22826e1c9c017be2d5e0db00728d48f2e39a1d" - integrity sha512-j7U04I07sqK63+3cA7oju/hoGOkdN+/hAwGYkCgWGNj+HwxiU7TTEVg0qZ1FAUU/GyyI9G/c4RIpwei9dLVz9w== - dependencies: - gzip-size "^6.0.0" - sirv "^2.0.2" - - "@unocss/preset-attributify@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-attributify/-/preset-attributify-0.39.3.tgz#b2bf4f645edd7f9890e85fcdfd770e19298d611d" - integrity sha512-SZWWUfTTKyHHqlF9x6aZ+BFMIiwOsUTP4NXS3/rIroqzfvVDZtGS6/a7RVBl+M74wjqSWB/DDeS9kQiH2L/CIg== - dependencies: - "@unocss/core" "0.39.3" - - "@unocss/preset-icons@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-icons/-/preset-icons-0.39.3.tgz#d6dcbd09bce41c11370a1d652967584f9eb7043f" - integrity sha512-zMTfP3pVaN2WREWY36adsY62gEm51R0CZd7v0gHOlltEG6kT1UCeyIQwOtn48wHRCesy92f70R6RIR3rwSVaCQ== - dependencies: - "@iconify/utils" "^1.0.33" - "@unocss/core" "0.39.3" - ohmyfetch "^0.4.18" - - "@unocss/preset-mini@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-mini/-/preset-mini-0.39.3.tgz#3996da482ddc9ba3de5e5656d1808939befd5812" - integrity sha512-XCxp3mwWsEpCo0cIJA3tLrWqdAL09gP3wv9iGh4H9o0fIPlYXjVTC1WtUHkv3C09LdZ+MH/9Ja/KqnVf3bNROA== - dependencies: - "@unocss/core" "0.39.3" - - "@unocss/preset-tagify@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-tagify/-/preset-tagify-0.39.3.tgz#a0268c8aae0e0c5825079a87312c93ac8b05a43c" - integrity sha512-OXE47cS/tiL92ZThgLOpbSFy7MPZ4upE4ZX1m9pnCaWzX7LBzp8Gw0DM+dF3IYdIfJpmU4R6b53ME8SchofuHA== - dependencies: - "@unocss/core" "0.39.3" - - "@unocss/preset-typography@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-typography/-/preset-typography-0.39.3.tgz#fd151885aa9d83a9ea9577aa26737f9f96dcf661" - integrity sha512-jTJOA87bEkU0RGMPSFZK3Zobr2fgkqKCYDczTjPbCiZ8UzlMJnWrpsNTN9f4UI0b6Ck8sXtMtW8sRrJsEll9jg== - dependencies: - "@unocss/core" "0.39.3" - - "@unocss/preset-uno@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-uno/-/preset-uno-0.39.3.tgz#bf8d05ee9e92006a788d56c95a52f8a6676af4e1" - integrity sha512-EADVFqx5x4te/teqwjHb025FIy/T0QXafcVDRwUijS6OOqm5rZ7fXd/hu41XYYn3B802r/g4bDC2wO+7foNVwA== - dependencies: - "@unocss/core" "0.39.3" - "@unocss/preset-mini" "0.39.3" - "@unocss/preset-wind" "0.39.3" - - "@unocss/preset-web-fonts@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-web-fonts/-/preset-web-fonts-0.39.3.tgz#a7af50bda616d9e980e45157a59079f90d463e01" - integrity sha512-b23nmEGHbfvC/PCv0m0BGqFt2zX8J9ekwjfmEL1Bk1C0KL2voYGSdbSm0I8iO6sKb1CLy6qy71N/CuGtIE3FJA== - dependencies: - "@unocss/core" "0.39.3" - ohmyfetch "^0.4.18" - - "@unocss/preset-wind@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/preset-wind/-/preset-wind-0.39.3.tgz#014d5da2cae63489c363ff057a500f26d15455a4" - integrity sha512-kjMgPxt4xfmiliodKTbotJDSAqAOCy25f1jdIj9CjjFjwYsUAuiYi8UgPsEi550Bj5BlBEHFn/RhcMGvinzY8A== - dependencies: - "@unocss/core" "0.39.3" - "@unocss/preset-mini" "0.39.3" - - "@unocss/reset@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/reset/-/reset-0.39.3.tgz#71fbbac03c96617e039b46f98e372271413a5d3d" - integrity sha512-hW3gZ3lsu6N58XEG7m1dprt15fN0xkYjAo7vSp8eT3/p7h5HE7wNgU2v9ttGBC3B2z4AWHGdspfmaH3sR8lCJw== - - "@unocss/scope@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/scope/-/scope-0.39.3.tgz#8f1b5fd02f6d935bb1b83f4100c06b23dbb38c2f" - integrity sha512-ex2QDRgBQ5mTwBcXtCWdTDPl6/HrBv0asDWVXXv7ezjxcByJjMrHj64gMvUbAcGAoX2ic7hIEUT3Ju5i6knKFw== - - "@unocss/transformer-compile-class@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/transformer-compile-class/-/transformer-compile-class-0.39.3.tgz#6e8b7ca6eee0a689588d19a8ba3b5953e03d086b" - integrity sha512-OmYP0uk+DGR5kc2T+teL6CLNj/sRxbY3SmlPx2kDbsRLc5gFccQryjj4bBk6QNOKxP5OGJpAqcw1y1JctvRgog== - dependencies: - "@unocss/core" "0.39.3" - - "@unocss/transformer-directives@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/transformer-directives/-/transformer-directives-0.39.3.tgz#e490a479582a94503fc02f91ce167347e822cff5" - integrity sha512-E1wzZaR6rIBQNemgDi9LoljtkYcOSiKGMUTz6kRGoxVBzaYE6Ji/YKbb22lKd6vLOFnRyCxzPHdzY9qvvl5D6w== - dependencies: - "@unocss/core" "0.39.3" - css-tree "^2.1.0" - - "@unocss/transformer-variant-group@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/transformer-variant-group/-/transformer-variant-group-0.39.3.tgz#31730bd414a06a676e753f69839652eaf6c0be9c" - integrity sha512-YoYz87qSSEvXXUkgHbO2kz/M03dbZuedjDvvWXsBAvj20MQFpkZpbNHYf2DJ+EkO/WXd+KEF2HBwlgoANcZlaw== - dependencies: - "@unocss/core" "0.39.3" - - "@unocss/vite@0.39.3": - version "0.39.3" - resolved "https://registry.yarnpkg.com/@unocss/vite/-/vite-0.39.3.tgz#a65cfa72732a6f3bc9c18640c74716d2f56c9f6b" - integrity sha512-JT21v6ZwLCHPGVfjoWsOdSkMhFNiW2robhQke33WLlRGyT5U4K1SWLxNk+XPDbFdP+WZdcVJi5W5yG8Mm27WBw== - dependencies: - "@rollup/pluginutils" "^4.2.1" - "@unocss/config" "0.39.3" - "@unocss/core" "0.39.3" - "@unocss/inspector" "0.39.3" - "@unocss/scope" "0.39.3" - "@unocss/transformer-directives" "0.39.3" - magic-string "^0.26.2" - - "@zerodevx/svelte-json-view@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@zerodevx/svelte-json-view/-/svelte-json-view-0.2.1.tgz#12d1497f49d120bfb74e098dbe46ce5f16240d1c" - integrity sha512-yaLojLYTi08vccUKRg/XSRCCPoyzCZqrG+W8mVhJEGiOfFKAmWqNH6b+/il1gG3V1UaEe7amj2mzmo1mo4q1iA== - - anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - - binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - - braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - - busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - - cac@^6.7.12: - version "6.7.12" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.12.tgz#6fb5ea2ff50bd01490dbda497f4ae75a99415193" - integrity sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA== - - chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - - colorette@^2.0.16: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - - consola@^2.15.3: - version "2.15.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== - - cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - - css-tree@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.1.0.tgz#170e27ccf94e7c5facb183765c25898be843d1d2" - integrity sha512-PcysZRzToBbrpoUrZ9qfblRIRf8zbEAkU0AIpQFtgkFK0vSbzOmBCvdSAx2Zg7Xx5wiYJKUKk0NMP7kxevie/A== - dependencies: - mdn-data "2.0.27" - source-map-js "^1.0.1" - - debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - - deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - - default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - - defu@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/defu/-/defu-6.0.0.tgz#b397a6709a2f3202747a3d9daf9446e41ad0c5fc" - integrity sha512-t2MZGLf1V2rV4VBZbWIaXKdX/mUcYW0n2znQZoADBkGGxYL8EWqCuCZBmJPJ/Yy9fofJkyuuSuo5GSwo0XdEgw== - - destr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/destr/-/destr-1.1.1.tgz#910457d10a2f2f247add4ca4fdb4a03adcc49079" - integrity sha512-QqkneF8LrYmwATMdnuD2MLI3GHQIcBnG6qFC2q9bSH430VTCDAVjcspPmUaKhPGtAtPAftIUFqY1obQYQuwmbg== - - duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - - esbuild-android-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" - integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== - - esbuild-android-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" - integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== - - esbuild-darwin-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" - integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== - - esbuild-darwin-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" - integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== - - esbuild-freebsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" - integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== - - esbuild-freebsd-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" - integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== - - esbuild-linux-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" - integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== - - esbuild-linux-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" - integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== - - esbuild-linux-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" - integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== - - esbuild-linux-arm@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" - integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== - - esbuild-linux-mips64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" - integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== - - esbuild-linux-ppc64le@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" - integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== - - esbuild-linux-riscv64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" - integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== - - esbuild-linux-s390x@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" - integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== - - esbuild-netbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" - integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== - - esbuild-openbsd-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" - integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== - - esbuild-sunos-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" - integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== - - esbuild-windows-32@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" - integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== - - esbuild-windows-64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" - integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== - - esbuild-windows-arm64@0.14.54: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" - integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== - - esbuild@^0.14.47: - version "0.14.54" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" - integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== - optionalDependencies: - "@esbuild/linux-loong64" "0.14.54" - esbuild-android-64 "0.14.54" - esbuild-android-arm64 "0.14.54" - esbuild-darwin-64 "0.14.54" - esbuild-darwin-arm64 "0.14.54" - esbuild-freebsd-64 "0.14.54" - esbuild-freebsd-arm64 "0.14.54" - esbuild-linux-32 "0.14.54" - esbuild-linux-64 "0.14.54" - esbuild-linux-arm "0.14.54" - esbuild-linux-arm64 "0.14.54" - esbuild-linux-mips64le "0.14.54" - esbuild-linux-ppc64le "0.14.54" - esbuild-linux-riscv64 "0.14.54" - esbuild-linux-s390x "0.14.54" - esbuild-netbsd-64 "0.14.54" - esbuild-openbsd-64 "0.14.54" - esbuild-sunos-64 "0.14.54" - esbuild-windows-32 "0.14.54" - esbuild-windows-64 "0.14.54" - esbuild-windows-arm64 "0.14.54" - - estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - - execa@^5.0.0, execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - - fast-glob@^3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - - fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - - fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - - find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - - fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - - function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - - get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - - glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - - gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - - has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - - human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - - internal-ip@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-7.0.0.tgz#5b1c6a9d7e188aa73a1b69717daf50c8d8ed774f" - integrity sha512-qE4TeD4brqC45Vq/+VASeMiS1KRyfBkR6HT2sh9pZVVCzSjPkaCEfKFU+dL0PRv7NHJtvoKN2r82G6wTfzorkw== - dependencies: - default-gateway "^6.0.3" - ipaddr.js "^2.0.1" - is-ip "^3.1.0" - p-event "^4.2.0" - - ip-regex@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - - ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - - is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - - is-core-module@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - - is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - - is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - - is-ip@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" - integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== - dependencies: - ip-regex "^4.0.0" - - is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - - is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - - isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - - jiti@^1.13.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.14.0.tgz#5350fff532a4d891ca4bcd700c47c1f40e6ee326" - integrity sha512-4IwstlaKQc9vCTC+qUXLM1hajy2ImiL9KnLvVYiaHOtS/v3wRjhLlGl121AmgDgx/O43uKmxownJghS5XMya2A== - - kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - - kolorist@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.5.1.tgz#c3d66dc4fabde4f6b7faa6efda84c00491f9e52b" - integrity sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ== - - local-pkg@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.1.tgz#e7b0d7aa0b9c498a1110a5ac5b00ba66ef38cfff" - integrity sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw== - - locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - - magic-string@^0.26.2: - version "0.26.2" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432" - integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== - dependencies: - sourcemap-codec "^1.4.8" - - mdn-data@2.0.27: - version "2.0.27" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.27.tgz#1710baa7b0db8176d3b3d565ccb7915fc69525ab" - integrity sha512-kwqO0I0jtWr25KcfLm9pia8vLZ8qoAKhWZuZMbneJq3jjBD3gl5nZs8l8Tu3ZBlBAHVQtDur9rdDGyvtfVraHQ== - - merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - - merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - - micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - - mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - - mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - - ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - - nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - - node-fetch-native@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-0.1.4.tgz#09b06754f9e298bac23848050da2352125634f89" - integrity sha512-10EKpOCQPXwZVFh3U1ptOMWBgKTbsN7Vvo6WVKt5pw4hp8zbv6ZVBZPlXw+5M6Tyi1oc1iD4/sNPd71KYA16tQ== - - normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - - npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - - ohmyfetch@^0.4.18: - version "0.4.18" - resolved "https://registry.yarnpkg.com/ohmyfetch/-/ohmyfetch-0.4.18.tgz#2952e04bd52662d0618d3d2f344db0250c3eeac2" - integrity sha512-MslzNrQzBLtZHmiZBI8QMOcMpdNFlK61OJ34nFNFynZ4v+4BonfCQ7VIN4EGXvGGq5zhDzgdJoY3o9S1l2T7KQ== - dependencies: - destr "^1.1.1" - node-fetch-native "^0.1.3" - ufo "^0.8.4" - undici "^5.2.0" - - onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - - p-event@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" - integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== - dependencies: - p-timeout "^3.1.0" - - p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - - p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - - p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - - p-timeout@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - - path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - - path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - - path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - - pathe@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.0.tgz#fd95bc16208263fa6dc1c78c07b3907a528de6eb" - integrity sha512-3vUjp552BJzCw9vqKsO5sttHkbYqqsZtH0x1PNtItgqx8BXEXzoY1SYRKcL6BTyVh4lGJGLj0tM42elUDMvcYA== - - perfect-debounce@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-0.1.3.tgz#ff6798ea543a3ba1f0efeeaf97c0340f5c8871ce" - integrity sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ== - - picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - - picomatch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - - postcss@^8.4.16: - version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - - queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - - readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - - resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - - reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - - "rollup@>=2.75.6 <2.77.0 || ~2.77.0": - version "2.77.3" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" - integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== - optionalDependencies: - fsevents "~2.3.2" - - run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - - shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - - shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - - signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - - sirv@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.2.tgz#128b9a628d77568139cff85703ad5497c46a4760" - integrity sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^3.0.0" - - source-map-js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" - integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== - - source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - - sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - - streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - - strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - - supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - - svelte-hmr@^0.14.12: - version "0.14.12" - resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.12.tgz#a127aec02f1896500b10148b2d4d21ddde39973f" - integrity sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w== - - svelte@^3.49.0: - version "3.49.0" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.49.0.tgz#5baee3c672306de1070c3b7888fc2204e36a4029" - integrity sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA== - - "@tauri-apps/plugin-fs@https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin": - version "0.0.0" - resolved "https://gitpkg.now.sh/tauri-apps/plugins-workspace/plugins/fs?feat/fs-plugin#a4b37d92c5fd3e638ad21d4ccf0132e07acc0136" - dependencies: - "@tauri-apps/api" "^1.2.0" - - to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - - totalist@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.0.tgz#4ef9c58c5f095255cdc3ff2a0a55091c57a3a1bd" - integrity sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw== - - ufo@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.4.tgz#23e9ed82398d2116dcb378e8fba5ced8eca2ee40" - integrity sha512-/+BmBDe8GvlB2nIflWasLLAInjYG0bC9HRnfEpNi4sw77J2AJNnEVnTDReVrehoh825+Q/evF3THXTAweyam2g== - - unconfig@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/unconfig/-/unconfig-0.3.4.tgz#f0c85584a088a434dde2215d8a3b272427d6056c" - integrity sha512-cf39F1brwQuLSuMLTYXOdWJH0O1CJee6a4QW1nYtO7SoBUfVvQCvEel6ssTNXtPfi17kop1ADmVtmC49NlFkIQ== - dependencies: - "@antfu/utils" "^0.5.1" - defu "^6.0.0" - jiti "^1.13.0" - - undici@^5.2.0: - version "5.19.1" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.19.1.tgz#92b1fd3ab2c089b5a6bd3e579dcda8f1934ebf6d" - integrity sha512-YiZ61LPIgY73E7syxCDxxa3LV2yl3sN8spnIuTct60boiiRaE1J8mNWHO8Im2Zi/sFrPusjLlmRPrsyraSqX6A== - dependencies: - busboy "^1.6.0" - - unocss@^0.39.3: - version "0.39.3" - resolved "https://registry.yarnpkg.com/unocss/-/unocss-0.39.3.tgz#3b92d689a86c97a5cb2e57ebfab04219a0de1c01" - integrity sha512-+BZazovI1A+jlW0+GuSSABHQjBLpu2sQkLXriBTdZiPYZAqJJdiWHuQ6VPzF4Al5WM4VPpOgX5mUYWusJ813qw== - dependencies: - "@unocss/cli" "0.39.3" - "@unocss/core" "0.39.3" - "@unocss/preset-attributify" "0.39.3" - "@unocss/preset-icons" "0.39.3" - "@unocss/preset-mini" "0.39.3" - "@unocss/preset-tagify" "0.39.3" - "@unocss/preset-typography" "0.39.3" - "@unocss/preset-uno" "0.39.3" - "@unocss/preset-web-fonts" "0.39.3" - "@unocss/preset-wind" "0.39.3" - "@unocss/reset" "0.39.3" - "@unocss/transformer-compile-class" "0.39.3" - "@unocss/transformer-directives" "0.39.3" - "@unocss/transformer-variant-group" "0.39.3" - "@unocss/vite" "0.39.3" - - vite@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.9.tgz#45fac22c2a5290a970f23d66c1aef56a04be8a30" - integrity sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw== - dependencies: - esbuild "^0.14.47" - postcss "^8.4.16" - resolve "^1.22.1" - rollup ">=2.75.6 <2.77.0 || ~2.77.0" - optionalDependencies: - fsevents "~2.3.2" - - which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - - yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/plugins/fs-watch/.gitignore b/plugins/fs-watch/.gitignore deleted file mode 100644 index b512c09d..00000000 --- a/plugins/fs-watch/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/plugins/fs-watch/Cargo.toml b/plugins/fs-watch/Cargo.toml deleted file mode 100644 index 8431bae0..00000000 --- a/plugins/fs-watch/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "tauri-plugin-fs-watch" -version = "0.0.0" -description = "Watch files and directories for changes." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true -notify = { version = "5" , features = ["serde"] } -notify-debouncer-mini = { version = "0.2.1" , features = ["serde"] } diff --git a/plugins/fs-watch/LICENSE.spdx b/plugins/fs-watch/LICENSE.spdx deleted file mode 100644 index cdd0df5a..00000000 --- a/plugins/fs-watch/LICENSE.spdx +++ /dev/null @@ -1,20 +0,0 @@ -SPDXVersion: SPDX-2.1 -DataLicense: CC0-1.0 -PackageName: tauri -DataFormat: SPDXRef-1 -PackageSupplier: Organization: The Tauri Programme in the Commons Conservancy -PackageHomePage: https://tauri.app -PackageLicenseDeclared: Apache-2.0 -PackageLicenseDeclared: MIT -PackageCopyrightText: 2019-2022, The Tauri Programme in the Commons Conservancy -PackageSummary: Tauri is a rust project that enables developers to make secure -and small desktop applications using a web frontend. - -PackageComment: The package includes the following libraries; see -Relationship information. - -Created: 2019-05-20T09:00:00Z -PackageDownloadLocation: git://github.com/tauri-apps/tauri -PackageDownloadLocation: git+https://github.com/tauri-apps/tauri.git -PackageDownloadLocation: git+ssh://github.com/tauri-apps/tauri.git -Creator: Person: Daniel Thompson-Yvetot \ No newline at end of file diff --git a/plugins/fs-watch/LICENSE_APACHE-2.0 b/plugins/fs-watch/LICENSE_APACHE-2.0 deleted file mode 100644 index 4947287f..00000000 --- a/plugins/fs-watch/LICENSE_APACHE-2.0 +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/plugins/fs-watch/LICENSE_MIT b/plugins/fs-watch/LICENSE_MIT deleted file mode 100644 index 4d754725..00000000 --- a/plugins/fs-watch/LICENSE_MIT +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 - Present Tauri Apps Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/plugins/fs-watch/README.md b/plugins/fs-watch/README.md deleted file mode 100644 index 63a154c8..00000000 --- a/plugins/fs-watch/README.md +++ /dev/null @@ -1,82 +0,0 @@ -![plugin-fs-watch](banner.png) - -Watch files and directories for changes using [notify](https://github.com/notify-rs/notify). - -## Install - -_This plugin requires a Rust version of at least **1.65**_ - -There are three general methods of installation that we can recommend. - -1. Use crates.io and npm (easiest, and requires you to trust that our publishing pipeline worked) -2. Pull sources directly from Github using git tags / revision hashes (most secure) -3. Git submodule install this repo in your tauri project and then use file protocol to ingest the source (most secure, but inconvenient to use) - -Install the Core plugin by adding the following to your `Cargo.toml` file: - -`src-tauri/Cargo.toml` - -```toml -[dependencies] -tauri-plugin-fs-watch = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } -``` - -You can install the JavaScript Guest bindings using your preferred JavaScript package manager: - -> Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. - -```sh -pnpm add https://github.com/tauri-apps/tauri-plugin-fs-watch#v2 -# or -npm add https://github.com/tauri-apps/tauri-plugin-fs-watch#v2 -# or -yarn add https://github.com/tauri-apps/tauri-plugin-fs-watch#v2 -``` - -## Usage - -First you need to register the core plugin with Tauri: - -`src-tauri/src/main.rs` - -```rust -fn main() { - tauri::Builder::default() - .plugin(tauri_plugin_fs_watch::init()) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); -} -``` - -Afterwards all the plugin's APIs are available through the JavaScript guest bindings: - -```javascript -import { watch, watchImmediate } from "@tauri-apps/plugin-fs-watch"; - -// can also watch an array of paths -const stopWatching = await watch( - "/path/to/something", - (event) => { - const { type, payload } = event; - }, - { recursive: true } -); - -const stopRawWatcher = await watchImmediate( - ["/path/a", "/path/b"], - (event) => { - const { path, operation, cookie } = event; - }, - {} -); -``` - -## Contributing - -PRs accepted. Please make sure to read the Contributing Guide before making a pull request. - -## License - -Code: (c) 2015 - Present - The Tauri Programme within The Commons Conservancy. - -MIT or MIT/Apache 2.0 where applicable. diff --git a/plugins/fs-watch/banner.png b/plugins/fs-watch/banner.png deleted file mode 100644 index 6e77fe16b1896e8f42209a1d2d79ec4ba97a387e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43432 zcmXtA2T+q+(|$t`1cP`%1q4MDLT^DpRGNrVLJlrTIfiT-i!1I z3PNa7l`7J^bm{-e{pM$eVaU8WIc4|RXP@1ZH=62?=xDFdLJ&l!tn@$&g3gj42v%~I z3cS*g=S&2DXq=S{Tp{QjBl#BwB_uI}7h$eikM2W7-E52CA4(f}HF*ds4L^5eaR!2N zrIjDZ>%4%i9Gm52&HJ+ZOp3+JukeU%oo^A*<<9G-C{y!&5-8Ar06SwKnC^SC1k3m@ z_Q`h%YTeT7{@1lQV+LTMD%7@N1%|%rN&51u^3Gfq3I_pL7V3n{j{>%5x^8O3bcrDP z9*qCX(RpvnWV6z@E1`1F^kw0p>2l-x&OUK-!f2v=Z{*pyfAR9mW4}iUbRL^C?RSg( z|2~yzIQcZaG?;(-=Ue1We2@RZWJ0Rnd6DW-$GSo(kCh*5!%RZPPdz+5u0XBJu||%z zRaI39MotZtQr_DOYNw|=%bjzZvn2c@8ESL3qHuonwaDqi{jK?{^RS02aQ44MtFe#9 zTW0kyO1<{RJz1dx-f3~0o|I&tl;v&7NuP4q0k37gO?MK($8WYHX0EV$!tUwU$pQ9a zle%5W;bQD*>T+tM@9~E0=0@%5cl#XrTdcnieqrv5vN!mlj<_GaXKSDLG@fKuADVPM zZjyvZx80Wp=;R5@+|2SUxPM4$V;j?L+=0U7^?MU9@vibR6e2P-@^kkhl>6^(dc8k{ z!nBJHm!0dEeQv5Z4at}=GqEf*7IMLV{HwE1FH6^ZRDJW& z`=is%=LJ)Q$HCa5$pW9HgV+9k$M4WebML9l6;ZcM>EkmK!sK0W&!ut(wRB_V{-(;i z!bPCOjPoQbXW{vCF;q}1_a1DA^Zj#n+(~{uF<$_Fj1=gr>e}f! z9o>1pae8>*{>T5>!zX_%2z=MKf)}e)p!|q)YZYdEF5i<=2B9zoq%`BdWBG$x6sX)A zmQOC4i_IR$&f{ECzDZfWd|3xGH(s)9mRd{v0$Y%Eh&R8z^!3f<8@qj1!5JxEn?8qe zo+G5|C9zoP&&?dpvTj-*ZPl_}Am+_JIqW2e)tT9(%`^v}Q=ft0af#&xY-(Ht0}htL zSSTl}miV*WhC6k>KD`z}{512)RF7K|LuJmqWLX_?b34&_G;QEB;q>|OR*?0HwwPQX zEs2xU)fe@fG;H?wb>g1tDO8}QKE`rEnEMYp*7{6ts3UGlMG49OaI4pj2In<GgNlM4}rNng%Ucri%hMzdsu;lJ@`o_faXYc$wjZbcn)k&T&XWc>2vlj0)RXVHYwwTiT!GB>QIP}>RWCG& zHbhIY)ruRUCKL(bT|>91iGQ*T^&{UTj2!X$O zy*`vUp&TK&h<#oMgh;%M77@Uvdw=qrK-hM<0ZS4#KK<)oSl-b&^1s=U^4cK<=cR#M z)~JOzArqHZbiE2SxhisVyQ5C2Xiar$?2-x!Se2V?Z7q7d`x5R%8`%Gk3iAMq(jLcx zi@N)y<>3i>$!BGo9jM{cA9%fDQ{NQ;=+6!_U~@5_Bd6QK*Zq=X9>fWoIYJBJK~^pW z-5I9AnpWm_>0vC8?&9ySp?C>gq%O|uHWO^y?ENr#;zrUNj#K>GMy;;PqT~5`#S-?> zc=DO;4Y%!{PVKDz+Njp^*=XnkP&g`d90vf)rvkQ6Q&?EYs>`stvch~Fwm@L88{_B9 zSUm$RN13Cq5!~J-m1~V7aDLaHxHekZ|H-_+;Bj`5zxN|} zuPaSQrm?q_{QOMPr8Jc$Sb-T$J7@3hh9x;ADqJJ)AogvoAq+a!X8-7VqzfkgA{)Mx zrz6)yQ!UE%iqKT=XL90PPLcc?`<`9)!yr(J>w;zDQf*$FguC3TFPV zkV$RDp;xyJjUPp?tdxvKI5kY<-cD)#`6BqS&U$&P2X7IGd+T^H+dI3jvK98>@7bg_ zU(ylftj>HN8X8&~=B-{1xMJ>$%8j?&DyX_d(>`;16-kSeA*l?J;)HF&tTx@7_wU}l z%cn=Nt%S5)%0tx*JEy`#&;WHx&XP*vX3(fu7hm-3M)u9*U@RpTm);JmzQ){+tC|>q zmP^f)kQ}WAeR>a>aOvNC75Oe_4nDh9v*%n4>t(Om%i*?T%YcRCpC>Wj4LHd!{=8C- zUcMvJudM%2lZrWE@zMh+j^WupnEt!K`zSs?n8<_N8+Z}Fn)z>X;dy7E;|S68TE z7^np)0B_L(m}QQQ6@rTuzW(1#-uzwpS&qMy5($eu$0T$MDp02p910u=jzB<`5hdtu zSE>2giRtad{;u6!4>-{~OWHJ2lmml>LiptgsBZRVRIgLkft^JvR@mf>wILk|II}{u z{L-D8gtV|r51{Z&S_rpwVV=Bh;x zA@Tta#-ugNko;=TcCtAbx*WgpHTZ9#y6m=ed3^cH{nK2&77MQM%`Mr}t)`)h z%$R=&%aWJa8&1BYI6_pMi!I)ooY?PMP@0iJgV(4-_4vi8_KsHtGxz*Y>gDaAhy1U4 z%M6A1&0NhWh)c76nMHCDXLNwWnq)Oo2rM*tr(SZlG##G5c%r?@t9CB-JjvMqhNp3z z$7<6p2p;u0;tmh~OP>5cI7h6zhM@+!x+z}))sX@h@nC@p6b@)e1M`Ydt>jhRPTzlN zuHdHfxhF8WfI+MWn}j}RZvV*nu}{D@x1@82+j;YVaer$$b>cgOc%a@$C=eV(xKK1Y zPu+*hNp?J!46kK#v??nJvf9o(W3D}bFRKw&j<|>$Y;RDGoG$H^A^zdw$;di~2rWUV zewzOHih%E8h@~YNr}n-m_$L}hH8+r}Et!O4jDF5Q_0)`t$EDDFZLB8oK8iQ^aLC9> zEzg^#9V&U#_dfTV7s`PawlLwQC=7_-^PKQinhs{CfD>)Hw_Lv4AH8CN1&!zT4%EKJ zg#({*hKpP$RE&>|j2z#=SEv)ARTAX(zGmlbijopC@cY3-c*&xR5IVTBkBT$>BsuwN z-~n_s!I5;lR=2Kx4MLbTXp(;GFEoX*4qLXZ1sgor!X$gHxi)2B#^_68~wnY81)n*DraOhR4y#>0Ady)Ua)%EHRYo9&)I`#K4%t zYwrh_axXO1UeVG2(fxr82>P4+T@;t|1YD1qPWE@`Rd@U;^s|!O#GV^j$#LSVpo*Jq zKN0sds*O~XvV#~4&qFxY*|B&J^nXM<8Ry@fMYRVTiBmD%Iaax^_2y|F_}vB zwif{1`C|X0rUZpMZdkGvE*`o)0=vWFBg8#{2+AyjK_pUMr_QR1IAJjjZKzzoGh~F9 ze=5%c#TQms@-5|2Llp{#T)5||n%RvZ5*z1_^{B_fuJ#9Lm^4kCHq1qw7eDxL%mA=} zN1Izm`*CXr2W}R-^YT85#jS{%6SWwp`8)U=6Ppvv{Jgt+pjIIrZue;urHErc28*s& zIL)O}93^kUY)h5p9UZ{Bg#QZD5pkJc9Iq)-DQGQ1xUaJhk(cValcZb~m__0L&~PGo zGJGka&SEe<2Bj`IZkB7T_?UtCX|T-;zb1m%`K>x^U6EN~nJ_wLL0+=ir<17+GRjg& zVz6(6tP0pD^oZPqJ!x=(0L88-mbL!XAt4XvF|gl z_P1>LZ5dk-qVsD!R!1z!Bi)z8(7(;p(q0AA8}nW+?5c5{cgz{OMELP?xv(19rqAUF zGnaC&3>@o!3XVT%v6Le;2hjE5uAR&}yS85cpH9misAg0JZ%r)T{fQsDD@Xz~e2zwT z=skfCM|M!}@O4&DK5nJ^^~Xh^3vxv+XRBJ8esZ>O@o^V}L#y$QZP6-@{qh)S4!^PC zZO_xDXQ=>9Yg1!gq#crI51hQ4D$n9$xp>6%+zId&R4$+E%(uwNXAsqmK#p9T=7J)f z^9!2RnHLFmsD8mX7h^SXLPa$k8i|Q1amREfg)hH)0G*G0p6)GbyJi9CDl>PXvH6Q7 zx$@&!Au`mE+H2UheYbRCzx&ZJhZ!?#?0wLE!t~3T;e8G8frLesU>0K;|C6JcPkgKN z(0Gl{{^nYyBSis725ZurS)rGt8C755jQ`Fpv>sjCB7)Y7eRV#mzR}@oyz5WTOfK6* zK+S#AVazy0h}DIfZ{|u3HyClpG1E^+ga#K+`WWu3-i7p&lU|b2rnbKbgAt|GYEs*u z-`W#}!t}1jK2}78$YWV_rvOtjyPZ?pDNl;hiGfi~lR<|rL@AS^bN=tfG~NznWMm|H zv{zuSAx_X)qJVU{VS|*`ZrG%a7aOoN%+n@{ z49F8o*2^g9*LVC^q-x0&OhcT^i6gc@2%(sx@=(xbA(!pQ{1W-&V|UIL+XMdo|#SL*LHS-0I`1D{GY)}>&0;h2Xd$g zQgp^*76``q)KNFvx5*;6bq-2*5lSUm&~iQ)U3Uq2x6>&w@$9CtlWa+ z{IOZ~<64~f7WbcCIJM}~^n+{MmI`YQkVMONP+bWE5g5U`>`Z2zGRsYq7h`Mu0yn-d zv&)P?+xlA5?q3T$Cw=usFW^{q^N@J?Af2f8%*40GkO-n?zP&*sGPYu8|Ef8jQ$#9fG8Fbv=&~dkU+=wVz*Q4J0-7})Fx4CKM*M)O|8y$*do3p)VQG96#GVz58j|rD$RCI$vuu7-&B5dHUl(aCaiyf^#f`)5&qep7kVcTi zqt?bH8cz!r<`C~Dx)`i}78vPxWZS=vLtv}FPYghcbj;G(YA~m@VZtAAW{N*zFEMy! zDVISj$ehiEKAMOwt*mrc;Ag;zs>+p^UUc60tq3N`nq9<)@6Dv~WTp~~*DuHS7shAv zla37Gz1mW5hTz2Y#>2JDn6uEK9$r}qX~6=S-*b82L-{=NW!7Se0P)96%Ey%JUB2Dj z-Rf|n_4fdp5an}7?_VLhXvrXKg*nB603(rrc%Sq@?TDg&J{z+=RdTfGSuXZ$K@B@e$c#MwOu4N?^K@1NyP&$Bn<=Zz`G?%xTlf z(K|RejEh{4`h0==v3Y+k5)NIoZPV#KCfrjp&%PE!$y_#eXcZ|J`BmGU^$sMVYJ!;q z!WtimD2JvV7x>raorjU=pasFd586gky;z1tA|N9v%KuHr79^u}f$wS_=8XQJKwywM z43L0J5@|ySp8?q;1>?=*m(tKhvjV$T?_@ACKd*|D1I@=PxRmxFX9A)dr!*oAv(ICr zx541aKx#$&K}QAI7a=5QJ0Z)cY5f4y>}}lulr9I{UIJJFav#y&=zn=Y!C~H(Y^26F=c^(G`TnophurMdGai z+}S6f9kUY9CZ<&t`kHD~&<|B4olAozIlSV33Cc}&(RLWuzxaLw1|gSJwgXTi0wW^d zxrgUf;~+yr@glX??&-wB zygAzcc)Q$&*C2ymsiB^6VF^D}mboCDR}9S@Lp*Px;~8sQWBZKqTHw;9wzXGK4z{4+ zny|Jz0&HDg*qP03;?@0BdSiB;{e{YB!|D>yv)FUvwYOfV$5TCjr506Ujx5dA-UWi} z1vX0P@(mIA_PD7$OB*j_=Z+zS;aT_tr*ew7R_eCD>`X=CJvjq-dEndksT@>M_qa*u z^KknB#CaQv{IxnZ14RPtiSkRxoQ0-y#x$Q2O9^InAsS|Gy7P&U2X?L>$UxjO2?n-; z@wm!5K>4`C?;moRYg=J}Rk*YKWIGiytzT$mhn}htUR;ic9o*NX!nNe^lgQ9Zbbgxt zP$OB#fJ(n^aaYw~M_(lv9%cZda$D24uKNKfiaCw3^m~DfLWzaqfokSH>VjVt zVf*QciB12AbckPj3JviD-kiNJiEp8L2p~;VxUJD!5p7)SX4~gY1Euk2y|v*R4JIN= z>_7tl0o~B74`y+Ut~T#0V++Xu+Q4MxX&=*Y^;iGDugHkkLS?Ro5;02U!DvIRj>T1~ zU@s#8fz|z>vsnNatC46wW|oTs)6owCqK$E0N3Y(a@N37XK4~z0JR&R_6BcPl+rdp? z8Ea|kI~I!8&H51bKpHAh>3>B4qPY9!cXyiJ7z25hL2=k^rEXT_sKuwHl0+%F15QP3 zg$2bB63(fZ$7hA3G!L_`H0j{f(bc%ZOa%=A6#*?VGa)d{Pt$32~h%Uc=J)sCxlL|V0K zGZkzwO5~gf5(MEU+cI8wvs1%PEGryJlgx&Tl^bS30yp*^*zN%+!A{}Y)uFkp;ByE) za_&1~d|lf0bq9*rK^{h*${dZlkOZ63{-{3wXR_Z>D66$n9D)wA(dHV|)=Qt&a4p~N z=N_cwu-OQ(LFT439Rq?#L0EHrotX4>;Po*b*Wc`_660r?v!vcifZgI65fBs>~yZ{Pn zC7hyX5F*163)B5jz{gi%M$wv`qRHoykhij|u1Da=@|EpJZ3td-@E@&s=! z&O!03l92v`Zf^I#S{Pd9*fCkVmIsqGB#1xq)gVe=OP7x#O#ZzC4Sa~-#3e~poJDd2 zB1Uj+8&Qa{ETBbhXZ@+vf@OE*l@TJsbSof%ylc-$l^@@DFvo(l{ZM5uV*C4dsx(W0 z_?9u}PReb1CY-lYSoc8iR@J0}n1j)7^CQ_~EnGZF%cudYyxazNi+*T-^uAe4_E_%$1J?bD%r`*W?ooqKoF@zD%&(^7bL_I#1gcyNU#hLcNYfS4zog;ge4$_xXs`F zcmiWHLF)4U+AJ`zIk_eLVa#qxXwS7>6(isklO1HC|-;M!mqgjo^l@cmlP)z$Y9r4T*kc2Ywizfi^;&+=${IQg_o0G4e zcj#;Isf>ddQg>RY^H0?}yf^!fz%(1YMQl7kc~<@a*z!UU*%YlrZU;8+bhJ}Km240s zfuXvmt%eNcL|sTYYznf`iNifFdja7v?Uh(*s*hy|gvNM4d*uyZAazv;!MVxD75T@^ zR!ozVGsEyQ1oVZ}I3n7&Av&Dq$}v}pdS*4k^-gk_8fw%y-y%FKrYo!&~T97*$ z>&f?Y0ZP7+EWjr69Y*8>Rg3>9lCIrlbgw5cAbwy#Aw{Mz6RTM(T}=we`8L5^7UY_A z!}|O2&SgWfy~2Rrl3g96BK~$!rHA+@N1!DF6njy!u^+HjUXGPJ0+v3>7Z3v6Ow1z?<@|JZzPiY5Y}=_x_d1l z>c3H^%r zSf^h+5&d}g`${-eVn+tVaKIe*?}y%Crm$c!x9DGu6EbVGcV=V`8pEYZxz2?o{$XoD z-9|uip4J!wZ>R`Eyr?L}c>A#iP^~y0a(;=mLtUnWN`(4XzpItChzt%B_#TJ?A0;-U zJ{cerTw#fCKo}==?UBW9eMQ0>7Qq<^(#_B*`6g|ZyRC=Z(B8Olni|a9n=*FDnH2lT zmp%GefP;k*D2+zr0lXaQV1g3pB2gCd1UU%yMg0>h)^LT02s4v^RCB>%ciN?AKtb6v zztf6AmXXVA=9-wrl^7v&DT8q%!_>htf2?eIIIP4Gl)-LWnF)PfF}BRR@bv;X%h$1Z z6X~Bxp?XXua+82K^6sz`l4_i%0zy3?oH+k#oJ*>~Wo&d$rFFnptFjw=azN)OYnD7m zHAW5VWg?F^Fr2(=8FF8r>UITyNy9kEHx_3`_2#2feRXv;<_iV1@TTuP61(TRs#|T{ zA)ON;*7;GuIgg1pC@%rpjsYCvyu1FxbIAXOh(_oR!G!=0_{P5aO@{4WesR12O$U$U zd8k*GaJ~KJUb0toZzsT83BrsgJ#G2y#K#rMtRvruw9b2QvBe8>^+T~}dC=B`PRXdc5Foiq=JoalIBDe%0 z5{Ia_axN=*OTUnB9M8?8U7U9@8U`^JF(kB8b}aUP^fVHSfz)h8;fXgGLw}wu)3knT zj5@rAe+MBxyPeC{xkMR~+bD#=gmC;53!96Qk4J47Q<*^r*1G!}s8R}$@M4311H<4R z_NjR!m`*T0&0@%lfGn%^Kxx;Lky%U^PK+23jCV=4c`k$)cEhqT(^|0nlFJhIvG{Xl zAp;#@^&#^cZUe9a<0Lo~hPG|Gbu~eGkl^}kAlL!{zu#RD4I*u)_X+AW2AKadSc=H&q89sm7>uvWa4LEWROna zDGVl^Ize$V9lHrQbQOk!1!@(TulIH_;d;p|AsEk$0=}m4Q9XI&_#R^qOEhdD5OHmu z8AFZL`YkHY64(YoiG}C8W}cG-tI;Pf_wNk9t7#G!RbaO|M1RV+|5#a8xVEzLsRw3$ zYsuBL+o`DC{1by8W30tD5ETe0oc_l;F&JGhHBCp7^vm7s&_6)vVV0wU%=KuxtnO!1 zVs8vb=4!^{?iby}JjM>HA_k5b%KFdbIMUYMc8& zld%!*6sVmBCn~S4Z+kfs3W?|QZh#W;+Oy3P1}2bV=8Ud4;l~DboA0Szte{Z z?x{DU5XmJ7=Rm-gSN&2x%V96Pa%TkIlE&{In%#HfBjWGeGK1SUD|OpQcsb{FyaP9k zfTmQhHlW2=K|idrE?GxzafleZYtD7V@E19;aDwyIW9j9ss;*|mxif%~%rA93iM)qe zNbE&Rr)!Vg!oE_b>DH&~s)rF6D#}JKVXK}! zD`a2Ww^XKCNFP${D9I<#q6xN%(Lh`enaLO>%0gGrUy#G=U4;=*<^M(651wZ;}-;)b9C)c|@hzqNE#Ol0l$ixVTl*$!!Unx0IpcfY=rMDME1 zN*8fcWYc_uh@Z>!t2GC&g*XB9S~e$-`-y```=A0|5J+COuijeX);ITOSCe>$OS1;$ zY$YRLGY9fb(ava^d#ifVNJbcq9C;ic7nA5Mdy6En;zrZ%N>KzLq4uA={|E^gf9i$) zH<$uG?Sbv!MXuZU@SRM}t3)1)P==((Ue-G*-*W3Uyax6-`c<&$^*s~9(CwtfueAX! zB0lc=*<*|@Z zygU6IVm=gI!@t)32P*k=kT4HgKj=j4cN)~r5=E_=Q6--lqItP15R?tayQ6f(JT*`m zxTg}s&-4?55C-E#yxF5i1M(YM0+lU&>@9_iayK?;rH5AA)+{>r@tV4`R|l zbr9}cl*n?&g5`&1mcMu8gX$P9Vjj?9?46v9l+QuLh3H?Z29Hew*xdQkp6KonHpN`l zP5pFfyzC8)(!y+`FBQ&;HZ;4-dNnLb=u_>((pY!cg6teb&gUi>fT_BHsiu<)*>V^R zmA*KrJ3$f#H1*LPVp)7Dpa8yAdw`DCRFjsw>i*RFz;bQ>_2umL7m8leDy&%y|F#eJ z7nA(5^S3#fEkB%xYV}60UmhuJxjn$)pY9s62KPU#_8*1p1L*z!1k&}=g9Hh3&Zr$x zeq4R2!%CYb49y?&^vNA1ZO-dj_iyy4&U?nmb(yBJx4NZe2@LVFlTOV}_ZT9i&=;%? zb8EF_Xj>uTfz@Zn$gNV^i{Rky{&eZ0Q^+nuKqchl3ld4aBd0wgsc0*uQ+*==^Cnxj z(P=@YGKt}BuIyxmhYr+h(t=cm#v33wwpq z35%B>&Te7(stfMZG@z>^8UBUgral3o#_8;0Bl$!{d<;cIC7MwXQDuf|pPb(!xtKhC~puAw>ipPmQd2KiP)A!sCaqsjaJ_+R!gg$A>@yl@e>bMt+L;*9z5ejb6v(N^6E=arTpo zmNx_dQ3q+fPPDQ?E0DCvPqnUsO&veJcL}SLihKSo9@JjKfMY|w3H={6KmnIL5S6kb z0VDwTF0=yG$+*Tv@um1fMe-*q0$EF{74&A*iINAyMc(z=oLQSEC=CbDv}Rn}(!+$5 z0)7L<#fIK8LovnB-Os~Oz9SCY7Nb)&qF#vcA&%8MOHI#{!{D}Ej z8BWL{o;D`i;@T~Noew5sb=aA-Z$I+CweMp{A(nc2G@sbxyXK1TfsMq4onZl4r1>oW$UB(dwS}32pw|~|2_~*Yj_k#km2h$)I4}Phi_+r3eXk|K# z(1Gf8b*Ol(vYcJ)f4odbyaBogxp?5@H=vQd%S-*OG!{Nfm(hHWM6LNqa^aPaG1*EO zLeqX?ldS}JxAO~bjg+K&w7i=Z2f=24gA-+%K=ptV&9Wa~4EyvGw9b0+-*e4lzW z!;KGrpAJpW-Gd;>y!?(##Y4cHub7h!Z)nV8)B)d9Y}#;#kRMcfAP3(bGCLkL6L)C; z)fMi4G(C5deP0PK5{{r4mM3g;HMlKmDV)wU9Q=7LJLa>Xz@C86AM-n0#rG_KKJv06 z%7!C$=h?OomWw6lds3Ztd?;^ zuj)XV9rVQ|Ji6vJqscgxAElgLR$GK_+b0B@BbMY|l}z#8HR$Mw2JI)!c`!tg*h1UNTZTb zR6^4H=

4234=^C#AxR467FF)@q+^mXfBQp0wJZ?z0YWc)mB0n)g5GPj!ra{JvU4 zdS~G2d+pi3$!c2)oN498V6{w;EAwH1!fyXqKk8n;MRxOn3PpYEdlrNqzuj^?tdN5* ze+Bh7`c<=!@oPk;?_S-c!$|b23bJ){MI0|YlC^VBdtp+nyc@p4?a=P=vPXKaz_+A= z((2laU#}|FORSo@%wL#M9ga>oPCqj{Gz2}X4${^2-9M>@MfZE>mhXm4&+yIcbT2n5 zuQi>X#27Qq{2-*Q)FSg#uis?cTCSzKl33NVZ+S<(($~*^dF<1_LFp;}C;Qo|HC631 zFX9-Yl`llG`tFm=QrMXE(&>l$xzb{w**nEqu0DS!_8NzmmLpt^x)+ywcSW6&{m;pn zadF~H(3#>SApDExionAj@jc9P@rpdtyX)Gz@)W+U%jZfIFgPQv!}2c)!cx64^V#^? zj?+a-={C5?@b8YsHgRwyrSr|Uj#d;6XLc!+-j< zhfc_%p`DR07NqH({C5sK#o9(ag0kGj`+1eV#tTcwR}zJ~ANvmPOeP(Rw)HlhEH{}x z!!{mGu$gTdGmMOX*{gMM&^vSGV8{6ToK()!!vj0h{kthIe!t0nwtwi-HJGI%GG%R| zr@S({Pi5Z%kNgo(iA*7DfgxE?;>eqhzp{ z?E53rse03}*!%9n?@#7^uP`0Ey2wX|9&BA!wlvr7_z4w-<{>;MyllkW94d4ORYkPS z`AH>fcLXwa`s_^_n|zy6iWC;|WtiODPpOHwvqm0VjrBTQt!6d%Svod8STE21CHzVk`8m~a zasOQ?~Wm?m2dsrX6?>#{AZsK4`~xK)w@hk?<0VjV<2%}$WtT!Ws~;a z&h9{ocz^)Ct5%iI+SZ0y#=SgJ{f&ipKZ$lUlBZ1 zMk)>ebhQ14=8APx#d61G%YH@u|6*%MQ7Ey8%toyThyF3G0SLkx;_z*_|L2^m5VO|P zYq$;2IV+(cE$cknaVh<_L;!iMF}vvHm8nKv)LEnA^A^%7`4Oe)sMurAob*%~lEjn2 zyPdH_<-B&p{trBj7Cv+9Fu&;_Kik1FN1*?!Os}HI;`QYm-8~|l{uV-;M)m!a_Z@$Q zZky(LX!}(js)S{!BT{vAP#0CiO$q29Fjvijy^${)BCK z-)Z|mX|2NsH&4#a?}(Rsy^+^~0v$1Q_COK@)tbVK=ug%Bl69al$X34?RU$h_^Z3x| zuxvd3_N&x(QRJY0s}*B6y~8J;eHU(y_Z-zvmTn024ldWH>ijhr-d(T7>bLsT3pf}$ z;6YLds`3qc6N&e58@Yj~+-q3@7ZU*!#eEi;nn=lb6fQyTnFGB&WF4SDm*vM~kS^;_ z|5U$&#gN?@aq&0j*Q;&YPedMODW=Av50^h&>IdBBCj!IdkXifU9er81=F_6@E1oSS zylu*R%}_y$8-`3v>tL?3J4q5t^NO$r}l5)GdsV%kkDiM!3Y7z;Lhw>t=&GlYFWWh4P{D*Bo~u7(PPk9-1?>sN#TleCrXdSomI`6~@8E*g6XT=TH5lvhg zGW%9rny{~&HCtwNvgqdl@8~zA*`fXYbN8VkaK|DDOM7nBe9W!x82jTE zNP#nh6h|E6Ze83T)y7Z{&8EM;hO)Tzacm|<%GG*rnGy@6oFZKfEB&4Z${0L9d9n?&Xg)_{s%qi!_6>UQC2{COS3 zIVH{PiOI>A>kU-oGZ9e6UeZsc#G;wI=0R_E9aBT(TU5_g@o=t;f8(_}aS%Q>iAzgZXugi}WslfOle z_&5ssmW!Jv>JOIkyI7s-MfZKYPrDmmg0A59FNVl~AyJlSmAmvZf6ZGqRldIYnBtxH zD&1?fa(M1!0;3i^H*$mHm7b{=R!bSx_T8}Nq`k7o#B*F+Dx~Q5m7Jj9)n&=04`pbk z&-fzuQl|otL{2vI0t|L~W>H}OG2oiy-OiJ`rRBx?J*h`n+1vk>l=^qPu20q4*X8^8 zZ@pv`dN~!$bOm}E3V_o9Q14w&iAdn}bqsfGEwA4W^kCsR+A%xb>83s>cALO3Ky}uJ zoDtG7dJ_JY->{O_m8wbfm71y!L{_6jBiGyatoy`!gc&d7+e<|pOOECcjqdi1@G&0d z7g0c=9gU}z#lD66yVXt7drj?M+~Yc)Z~wGO9pC$*gY%|fM#`aJZNXT_ zXyuhEx>7oACRnPF>1e}tZXSArjQZiyyZZehW92zIuI0eL9E;YCc6PQcy5WiwllE=- zwJF`}&xH|kMmjOCx;~s?1XY6GSLnXE$j@KVV;&6$!i?HfXPsh0$ANBO{KvG`E!RR? zS9Bl$>fklI-;1fioqf;!JpxWmH5H>amlM%j6g>kd+97KW*Tp?DaQNac9lWL^jr;D6 ztLeG0sa57HQuypk(j3p&xLv)67U6DN5Hh5v!!Q*qvVO+5=p=medhxUAX8KN*njU7U zj}KnAW#{V8|CwmaU&Z(FsHp{7k@kNB^8j!6z$Sp@c9*?VQyn`Ic z^w85l@&SPsGZ16$#18&udD{8qrCvdIy@8{>MygE1p}V6qDDtolSzZ!6gZdtETuArR zhOtUt@rNKv6kMW9v42K$9jkcjB4K9bgIZS}SA8!gKcikIlnR^euZ}d-ewRVAd}=65 zU^^z%uX(MHjLEp1m{uGZoQ!Yv$oemA`JcRhxmIH{HTm=FNok%PHs8_0mHB7f=*T2P zycAlzu;trU=Z?{+-=3$x=V~Y;;2+5)=qiFuikG#Pa;d6A6)oJ{HJ1;b_~;z+X+j1a zg@Cyp{vA z9?3Y>M8PQ+#OmfjTV+pI?b#r~k+-~UQ;Nvl@^>~azWY34Br~h>q(Z{ebH`PWBkQ)pWfv}5nX9_C+v6vs8) zFO>U?w_(!#Fc#bf6R+SOH5tw?u^6n)Tj{kv^VYDtrAOw_zQxXMLq^EuT@6|@TR*cy zg$b623C1!!u-)3{7U=iDa?cO!EFO5@v4|CNzv>uXF$c#fCg1Za1D9ow7w?1egP6U8 z!>XTSstq29EF~y|@t=clYZX;z!j*MjW#*wH6OH5vJIgLHHpqb5^Q8}VM~k@s3BuM! z>RuapD1tP>XnV~kdnOcFH8+M{c+?FW%Mo^nABi6@1CH{~HUH^%AhG)d;3~0drk2aW ze5pq2iC_g$2L8@5~1X<&!?eQkg$y(J0_YGphz|fX4mv-*Q!YkcV<` zh(GG{=K}TBCzxN^^v3h8AkizYGn>ER32u1Sc<WmjZIo>tYU+(TQyrw`EO_NpdPLWV3c@2$lQH zcc0R$3-pdOW($IPT2RMGy@&GGRH1wawjmE`IPQB8zO(F04ED^ z%)F|EJU41=LciQMn0JJsglRWir?16tDOW{G6rXeLzKedE)#bno%lA@v++TQmwCt?} z+F{+lxPG%^ZT{yxgZk6u%J!Ex1j@Zlu4arD$+$(V^q2%=E4Zl4{~rz5xrs=Axush#9PPQ94>R&HDf#jB39-j}Cx`2)h*olrWUCq{IPzk$Uqe

~dZE@XE?VvZ(lWRsM0h^0iu;|bQ0iWNV#iGfWv&liEhrP680Bxim*(FE-5HJA zYdX(ZZSu3P^ojIH{aQicfv><6Tg(;MLTGJXCkWr5uxO9-zQ(Z{C-4c|PqsEKq}^yt z=;$J=QNG+kR{mv+<%G<3&gkCJKUQ};tuhDyAjUyCHL>Vy%sYjEe;i(8*Xp;rYnoA9 zO5bBC&F2d3`V}#6ikfXJt44G$l^2D(tUcTEB_}AsSlxpBJl^HAsh*c&e{NTOf!I<2 zxDr6xutEPHG!^t_SF74-JKFX8eJmN--0Lpom3o{J zs_R;yo0neUF!AP~iks+47rBJmT6j`tq8Rau-)vu{Kby()#Z>lbY*R*;{4eTjFNo4z zwC-ML)3zPAJVkd=UXIT5M2o@Db*;z9bANEpNj~?l#+FV7l8?pOyhfUQ*WCEmWuT{P zN|f5v^0Bbz>#uhG&2*tc7z_`xX|>;cMUXIBEHN}eGxv;YiC%g%BH;vm4DDc*J({9V zEUIJ?>3Au-%p7UnT-|iMnk`t9y7*!BQn@=ztidB9=je1sxXj4Xx{xd*H0KWLr+|^O z@*Mg_riIl|_J+{lE-mK;?PkXyI+wyN+upDGB`1z-GiRCAB3|?2+i#$F2_9&JL4-oI zr5TdBF6mxZkKY`@200ktxLa8)Ufi&oaOn_U*4=>ux9QFLtByL+0qkxQ>o@AZ?|7uT zY9$_S`dQS*nfZCSoIF$I`~CFmEgz@Gee3e`G)}YMb@dBYmz1F}Gn3pq;BrlTi*=5I z%g;R+*{N25Gdk9mC}SkF_@3A5sdk8H}Jm+KQ1OM zHr2}#ZaIpTBsg%$IyJQ~c#U#h)y;iUW+sx6UlndrZDCgz(C^wKT|IvqH(cDcdSks^ zew1=`0mW9cw&zsvD&M_AOy~1ub3cMWsws{-%#3e9LoXHvM1TEsat@SC_r#&&3r5Ip zd63;;e=7U(?J&02sX(-t`%KMlZ~m|DrPy5Tj(;u`0mm8(BMuj_tGk==g(*ET@Mtq=|)qCecj!yIyXv(b&17VX-P7k8Y+oA zaM1hrb^#^h=C=o4(SOh>!+^(r_YyyUK6Wo{wWJdylr`%wM|JPU7?8EExze_4qg$uz zAG&OZhglq6FPM2RX2F}dW70>WUBM+h=UiG!B2ooIKoz~%S;CzAV;(rLX9gU8oiX+m z7Z=ZFyM|wx!I$dBox(Z#lV9{yR}=O(!u`kChJe`Zq+wc4mP}KFYF#RRBB zJlo#y@%Ll6vj1-K?>przf?8D59{cIE|Jc!x)3NSWBG9Voreo94!;FTOW?z$0Z~C!X zg(qor1l+T7x@HUPhvo;H-c|v^ZF7&7G#ca?WMfcYM5UF4^;Io` zd?~>v+0vMhqk(G`EjBUi*aOiHWL>IrIn08&`Z5Rn6>7{r0h| z@e*<)!86~PNNami>#|3GTDn4o8-F0=i{3B*%4$>AgPkO`lotD%1m)1@3G`P|8tvJA zjqZ5pu`WoDB&jg6%~-R=*oU%@HBxR76@#%WOZJ_tLyGKV8B3^; z-IT##4Bs>E=ka^|`s4m{-`?|H&ikC#d2TOS(YdCM19)Q5tc@kyO7&o8_H>c?Hsyi1 zgcpnUk2#sRx!|`e??ux6A9@yVP7y==*sWGwv8jUENd;>ceWo+aCS7k`EA%IB+;E_# zE9Xh|&089y;Uk^${LnwRwRgQwoSfer1MFwMahm+mf}g;MS}rgoHj%9u_M-vM!6Eu8 zqoqgsa6?)lBEBTz;`MmTBRHQ2v2>~?{dpKfnVd;qjVkDske)$17yI$SG^X!Teq_8qZ}$lUZwR&~)Eq*O3C-%3%tg z3;yV;EzjZ`y^xK#xDGP@km@iblnIuw3E5&36LF)4c&(iB`&Z^2`R&{-|k#O)<1uw+{@?)ji!hZt^pi8wX7|5;^VsipH`-n!+pRHHKRSB zzpHZT`W*P_u_gMhbL;2=K|J)Z0?WX$<8?NsO? zRW}1=7;r+efmY-F21S_ciSkRBw9t8z5R{>hvjnnW!!KJCpb-x2HLf?x25MGUFsIqi znIpJI404}}GN+foyyFQ%9V>fd-!ylsySYF)_C5;X-MK<=n9phy$^Y}d9#F6fIH4ID zp*%5m3E&BbdZtodEG@5M$J9PGb@Td~d8#b|CvMl`i^z0-A?`@(JQR-9}Y&aW{pPpXyXU|hQN=Z!qP z+9#qiSA5+2pHU30(w3UrGWR=``){ump_sxDd zTZ{X7Tb|$8u)pQT*iOw=Z_I7(%A3GB>td0D7Oj`bmcL=1R(y9mN@|k3SfeHfd}_Ja zZC8=|sZP)Banuh{Xq&xrRWS*V@+FK{9+qpGQ1m8C39#aN_FR{%-sS}d5Xh!xJ69g} zFS?Y=ltand?-djuF(60+N>rQI6Yg3A+;#sJn*`f`=>TGz^G}?eJBEF`BjKCXvVv?Y z@m*f|u((*ew=ZS#VRpAdRGDv81s5m%xsRce9`j>S%ldazealt64X`5pUiD&q6;@#J zaWEKHolw0~MJ3ZgBwPZ548FLGDFe4IKyZP%Xb}gX`#idBurC;cw!8!!`ApgJQ9#U? zj+j%GWL)q{66CqOu+SUo?5x1y&W9473J=x8ebQ;tQU&J_zyJtEI{8wd*u)X6Lz|Xv zf!hTfT%$KCX+K(C*Mv$3F$ENA*Um%e*GczTmQ8E^gmIudeli|`%5-cu6`hqi;-||p z;w^~pw(bec-Kmj!mG*soEbEr?o_%)F&y19s~{50N~1N z<1e7>(4#qw=Np`KYndgJULqV_8#v>*g4R|ZsvQUJw|lwiLj60xMhZ=MZM^JbvRHcn z`8!Sf?PgLM@mk7qT*kh=7eH5!Z@*RlD;>Jq-Fr?q@vbhLK~qE+CVRqo5(|NilfPb$ zy(YuO453kraRWV1*;KFZxLkGa%%&f1t^e@WkX{T>%zl+07_TKTJ7;U_(7&=|ygK1d zAA#!1NR_$O`%f^8NHLy#{I1FMKs_?uf-by-GSReby3IAEl zTQ=<1EZVF@7RZy($uusnGh|p3^-3z+{O&FEYH`#V1ie`Ib2Tf>JXY&W z5RWqhwgo;p;iiMAYD%ja4A1|1Fzs;jiaHdT0eRw+Uuc~7F8Z(Lm@;@OV2Co=go2a^ z4z+{7u_>h?TZO$)?UfugN~M~sjrs9XBG|p=h;ZylP&M*A?6G%IoG{sIfVBTTqR0j~9+u-7)h1YbBqj~7^ow8(Dw-rY;Iui` zT`%WxQg z!13SR-T_V$#dD?0eq>B!!;2vhFa}elaT~suyBlGDt5z9*&<2g!TJV?_zQ~^Y-C`c% zXTaYt+`KlJI@ZovfCHulS(?wpzq}Cq;etVd=?S%U$)B` z+ja(HLxd!Tj1)s0zUjGgJ%4yFt`k!teA7ti!`nYSKv<;W+z)mumrr!Bu7O+^-Hc($ z2*c_RdL1iLpJ3?7t_inRM0{{V@q+m+H%#b~G@)Wj%e4*JtxBd*^N^GR)-Ka%rj$Ze zE}<)Nz!|1y%VYYK(eCKm4BhVt{T_5knemX|sr;oDb&o4(#6> zTj%mUv}Bi6C|?rn`snuX%-b!>1fh8}h{m!vy``^` zA*OMA!nJ{eF~y<&+VYr5klTjp%=~s5VI)(g(!QblbDb}IxWaN%v?X!*Oit6F>0DAO zUNn}Gu^9*fu4PbH9aBn#od)l?HkU6OU0lgYw5ngiOAfuvM}zB~aBsaPl<)Z_*hoBg z-Us7mK`yT>9?ezk8y|(p6KHxLwf?z}%${R#=3cDWHqN6=hWqzr2?m|6>^7)zq$n7( zIp^B5BFqvDj`LP}%q^gvxg1zv9(hr6*4EZ?+3EvALqPOSvssQR7D4oUsPvSwk_ezNARX>b{<%Bv<3f6n+9j4EMZuNz zY}7a2NmXzf%UxaRS0=%Sa`$@{GD4e=X4m6SdSxx^0yx^wg^hbEe*o?eF$NM?vY&7+ z1yXWKjL|W|5^*p3G`;2MwzJrRKbS?9gp_s}t?}C3$b~C8JX92~piKOd?08v)EY~&C z@t5RetS`9enY7FZxQ`#%zrFxgV`OuLwzG6eDdAHv9%Oe_Q)UGLZhC)fT@22IuA?nnyX7g&twzEh)-o}?6iHJcU%Z83d_>6frh=3 zf?i__OxL<@hyT+)wkg<{@KQBUOSnMx8LC31K!Vf^&?*zt++&u{`YY2)>i6_aY|;kX!71}$bXOKoHiwgrJ}}CQHWs@Q{)06|A$#DlB}yP^{N|F>$xnSy@3n) zI7Y7}f$@p^4n9vEB>lZB*TM=JJB=mrHzcJAmOt$|e0-$RO`NN%68A%Q(|wM^CxTwJ zpB;EGs==l*th_aBbh?{IXQ#3IA}%2pl5!;ELcWnvWKD4e|NO$-fAfOqtu`RCdlIwN zL^YIT7__V!*AhKI!q0kFKUCv7onvoUBVHI_>1uiUPif#Kub%d?m>0cq%kkGkY3 zV3PBXjn~{h650-gRs{gwyN=AYQM}6w$utV~z#~>%*rf|yOayyJ*EV6FwkFwDXzle6>J0@0@h$) zE?b@|Rmx#v#=LZdxN#!S(}Bo@@J5N4CA)bS8#zz-JrwR1lIOZIK#mp%^e3b_El=Ne z46j@XTVzzMH!rU1`Qc?XRMPcs!Dr2LAQ+49ez~%q!yi|`#WM1OLj;hZw+?CFmvMg7 zGCGUe-a5+J1^<$SiD|;H5qzY2i0-bu%VHmu?b($7+;qgUDQG5A+6&B)zC227M;Alm zH`It;w2R5Ls9^4I{Rsxi&AZQsL-H3rFYdj$dtu4#$#u2b?u#9O7ao`o|@i%O+;xh17Hyzsld9=_+#naTGI&j0YiST;N;Pi>`2i8D0)`E=@ZVHQ7! z#>l+TQkUNaa-r+C)hJPdWm(0(?CB9m=<07Q%iym+#iA=JpocjA%h%7}j=zwIn#dFc2qTU_{h{Keb6So5xvlTsO8 zb3XrkH!c1aBRYACMU%i0rkEH6q-JS+8i|Suy?b?vCd^$$GfHCJ0N5ArwM9`@_P*aJ zeno&11kGjEq(@K)KZ^%3K6THRHYV^@{JkL`SGSzEXKBJWVQe?TnekjL{9ir2mxW+K zktDJDoPq*U=P{TZ2j0;(Zc8aFo2sCo_bP3d`1wpq=UHNB8~pqn8TG_3y|Y<4uOHCi zygzoV!i zd@YXj`<>)t&zP=*>X#&}*0NG^r)F3uJEjT{wU6l0e0nR&sC|8 z0kegO)Ix1k9iI-#R8u(YlhD%s#=$(*?3w0FqMKtKs|7Nt+-eVh5@qcWhr)G>8nuJbk1^ud{D^fM?PEGR=-t_uqp%}_vO)$NH2 z?3pRRazfdT#zdK*HZ}oMWOuRNqyAh_U%w8oXz|JEj1$*B;zKY38;h=)Ctdn<6*!cX zQxVTipP?q-&CQe)a2oMSCVlhFJw;o{%}um?2en0Py(w#+qyH=u#V0|GRT>R?Aw}3D zVj=IES$!WonFo^}h?iNYucp>wwOeVZew_3;T)??)xTeO!R_YyM$JxUCeMRa69S_eRS183^ zf-U|>(#k9su4RJ;#seW$AcKr?u-Qn1c45*JxT!so!#6mt^OY{!sjWfi z`U;ClVpx0DSB&=JpFbPPK9;#k3uO7}6h=DZzZaw@pNp;u1Jz~2t7T>M;ycd{1~%nP zCF4^x4eu+-8yT6=UckopUwXks^?G0eAA_u&NeJWGFAUu(P1cRi8~{qT&g1855vgO@ ztz*(5f1}b4n|Q`T0WhcF{`v-or*Z4H$+k~Z49`p58ww-r*M|e_9$R`SppV~b2+2r1 zy$=2J7;G5i&?`n?UQ2~zFjK13B|QZR5sGI?o`UYDxAc9G*&Hf+Sz?uq7_g}$Qo|EY zbl*G`LQ)9z0;+(=ziwADZ}>rlNHk93v`h$2nN~+AJY-jS+TUGLmTq!o|#qvYu<0}ke}Si<=y4iIDNoU zg+4Rso)({h%@`k%tt*vGGUj}cZgR^7jc3}$)NNn=+SK@cE7xsxcw_y5%xGmiYTc2`bFb#!wx?3_!`M6dkJmSR& z@?UjS{F){N^aB__zuleDnG0SmNxIX49O$EPhedWnFN9!Av(G| zLv*(IAniJ|UsJsE-LqRVuHVaTj0R|J1Dy>d((pK%avk^hTrh7?A4%(sGt1MT^VOUm z&y~1EYRq(uOU$2B%I%_$$(j0kJAgZGDIYSVxhU6PT{!y}wiZ+Ggc%xf9eWNgyu{h! z6O8`qT9^E_1e?%ZiwCiE(HX#A9=L^>9crpOVpqZMnnQ&u5~U`Eeg0M^j^9 zkf|>2COk45=We(zGVMdKJiXQ>=iSGkaau2dQdExYq_dF+*$mXVoy=n#-a5c2V`|Er z<~@EXQx~^*?$%e4Qb(RS0d1#THEKUgKy>TZ6J*qioGp_Nz`-tpU2nW$_NP9_zenPQ-6g>M>zD`KRD!)j@WIuUaS| zPx&urGJth^HGn3l&@F$#p>NrQ$9?}AVV}YDUgw^J)7pF3*NlblgaP>WdpO^GlYpmO zs@cT#JKp8}#e3JM03by7Wb53}fnq7U@)G5*DCKqx$xb<88#&1duWvqBx)gn+k&IFb z+4mo+5qyy0Gbnbo6qSMus8{MZn3|zlUcIeRr`PGVKh~it|I)W;r9#V&r^O#EBz)P; zWS~`X$|z%LfkUPMLvwcWphIP?5<11o~6 zTLVT?AaJ$3Gc!cB#Ot8~z9EWS^NOI@U))Q`E#x}GeruN2xQ(uM>Xelnxmcfo&Mtm=eRncZ(XS>r zx~oPlB0+K7W0LhMfQtvd_&iLXDJ*TCU@@B^8r6TeAQzix6_CF*(@>&sI7u-yQRB!2 zx$N=a1vGyP$>$Sc{{X5*@D&H&1+!d<9EA4=K-6rmLSvOT?vZf)LAhA$zdVqxi-)<# z?it=XpiKmYg^H9bao2HAOgktkgl&$Do!g`(z0msIfk@TiCD*jD>HT6{ODAL}sXNgT zsgALv(e-*(lTz55+Tg#(M-s7X%S(9~>5b5CF%DaFwSdcP9Tpv!#woJlH|LK5^Rnav zgUq5-`6Zc*)fqkIzn{N#^fpe9=N22|4YoV~vtGQi>re(p+z795o$)-RnK}N!sSq%C zm@g`u_i^L?Sd9eYW<6p~jXQ8F%FkU-U1^n%VZvO%P!sZDMtvU4)2yQR#z%uqO%}eS zs%`L1epHp9TarC)xk8B#T7CD>(4b~Z*^_l~C|G-4*t58Pb=&ZuJ>n+8C!{-YZ=cj( zTeH^SeykqM5w+j-k-&5X(h74y><_y4Xk7;GJ_8ib;=g4qWwPyD3AWYWG(N6h4m#M! zsNCXy-8x1qw~xz^Frq4UAu`glFJ-6Gr zs}Xb#osS;^2!QO`adI&o)Xl4coT#o>ZXd7z??|zKYQYS?PT;Xdh|(tscf5RmcP67A zq@p}7dcq03oKJW>4U{Z5WY}mYe)1F!l9Il-%tp0X<;HT~Bm>^o<~fM!2Ad1o|K~I3 z`gK(5xzeV}VdT13<9};kAegsgPyr)%jf1XWPS6hRIf|^5_&hm1?Op ztMfF*Ijf+D1`!v#uJ^t2$MHB+S^ot`+y$op{b(={xL z_Q#NIuirhmDNTRptO{D8yDHKVE%8H=an(izkr38Jv%#r_f(eTeWupNnbNJexr2P?} z(CkaI2n*m(?QEof1oq0A0)PcFBp>hTWIl&qVyr!7L_6%qMcO^U{jHmW#{YMmS_JAx z9x!u?>i~(3Ob9Tl#cTQechXgn*%wE_3`#)3ggpM^qR-d+iKk4ZZFzR`mA=$fR?dPe zw^3?M8xhzJrk&nKjTV?{OE*o6#D4UePr(pdQ0C7)3ckLO0#!v(?1_}D`;SC~>}Hr~ zhi}Kpe)&&#^b*GPgO2p|*A#7xrUU7VrIbw*xB-mX6{Gw2wZcGzk&JugUU+@}(cs>G z`}cDIomKl;$rgs+vMM4!$LLnTYv}C-0dX`-3hm@cCeV648WZKyezsbl?nwW%TH|q5 zgpPVqqODy=lNQrc*#pp6+R-vPzyG1}P!?IL98)0w;&e-6ZlNLVtZnUuPhoW}BLZjI z!FAD&wXx#Sli(Djeb(mn3|`&8EWzUrjX;h0`}i=c1Bqw665@Z?a5o$V(#vM3O0zF$ zCX$v$AX*M#Pq2M2`~~-dbn7k0|2yXeFeDmmm1RL1%~Xpm5Nc6{CED(Qp9aw{JE)9O za-c#D?Z;araNkwI2m#TU8uvi*ZyQj7>;WeHRqinkw}icS*C>sQ3bX@dK!{z=`OkpT zNdZ{5md$Y+tAZ|&65m}`o@*gv*&I|y*RJ!w8@gcToyY~(Y-c|P@FMW0_jJJt<)*@y zK!U?*8LJ~ZtTGaXh&vkIx%{AsK`yg<6guqaU_Ed!vessTRwn)}kk-}+KQaU-CCGmM z&yS#4)6O2INxLWTIPWC8w+i(#&l+3D|L@tuyBk|+7#jY*@V_9O;~FFq=yzFwNRAie zZ;tVe&wwOq+8rHz7`*NO041~tiRr(i+L+Fd-2{(FCR^>#TJ4PLuIWBa2$L1SSSZ#e zM*Sqc|7p&E&o>Y~Sroj;q_(53p|*(*RE%C)NMA@>=>J*uIDI9Y%ngBzU2|^o21cT( zQeb)(y22oF8;EsTZF%HlxZo_E9D2%wG<8gJ(18wqQ|FW(0`+O-uG-$<90};#>M%4l z1SXV7W1N0RS?~YqnMvzx!tX@kKia+}$~05gJQUb~j7Im6dQ>Z5OM`NDf!|b_+j(l#rQf>?85uzbK%FChxP?C;FmQa|nz`D)f=FMXiEt#A2k#1`?Mr?E z!hLJKkVBdQfu@S`qDJo@D96GbLRRer8l2zCmCgex>^Hu4D>YZ?DECv=2OEhV{sJot z$pkf`MsbLB-r-uKDrLN1o(3U$nFg*s9mj`I3876irjWI|X|&X=Swt<=YHQ`%iq92_ zzG~mwU}An=dh+T_ph})5oTxBEnIX65u)Dqo1mT<3Q%@6 zDn@J8BvQ9C8fz4rRRJ-3)p|j>qcnKUmC1dQ)L0|@<8=qPc)uY^uqh}erRn8R?2% ziHfGxYM?08`Y0IovdJn%x#MY!$Gl$;NqOT&Wm8W8p6znK@MJ(bC8S?`(zs@e8e$Th znnJ#Abl8WPiDR@{4o&PQPfELNk+h#&qb%B{&xU}pYGtudSJQ_SM%2tuQV!F}3NwiW zE-<~Zz^r8~aT9a$Wmf>8Xo^U%opoyc{5t#7t;b`_EY*862Q;fRInYs8$l;xwcxPS{ zsqaP{=W->D;%JET&zFBgOfxwQR6Klt>OEP@BwUwC6sK4`jLrTx15@T zu9o$<%2+DqxME63#*C&_o;UMVWnz~yI|}BvGHM?VZLS#HI{n3J(iNI`Ic|oz!ah*a za4HKC+*Ol7UdY7ijO%sz%31ytJha{oo+oy{57JB5_;h(b>Gce5#-zYuwN`IoOdmS9 zFqP+;p8$&`E%Xy9hYOfF*?#$ig}|`_ZAvHcf%lf^45`aYd<3&Rv)j(=@x2T!Y--jgxNFJml`Ym?Z*P&25N!X(*#7Wf z=8&R+44u#k3FVKzvG`Gz===K6qcqrWqG;BgdI0tuDG|bkdfCH{4 zj@vZ8i^@Lr#){iB~t^M!))bHyHBm~xMIHXkF zQtl#0d$5zmn}iEd@UsGU4*Hs`;+io4%;$2MKMQP=JL?Nf=u*@rrODgSKixzLNk8qJ zHvncLRu_s4cH<>;$ysJ-n~iCaxz|K-tlIMHzK}_;?aGaYh4H++-jm-Y#Y(Blt6z{6` z&kS$LIwmO3FmhcMEQx5SIKQX; z^=seMi5|CLiqGfedO|+Vc!8(7SlPn~0-tHq&Fkfx9S*t&I87@4#m-lu4Xa#{@|93-T#z)!(0C%*mBZ-P30W0ctH@uh1xaz#LdJ92!cl^v zoSxf8=Ixv6mRJ$u7B_z9i%Q%1A=^r7%o@pjn_7ZD%seSFp1yKZi?9&WG)yr_*USHf z?88M}|8Q(X-4K`a^`OC8IB97ulQFnnU*N{_?4Sgm(tvMhSR0)La+j6?kUEPSjzPqO zW)%s*r@#Wxblx2IR{M?AtScPTxF0EU1__-FMc4Imux4>@w}i&j*VqB2nM1FIvnejj z_Rcz({GI<@W@ zDW-h#->2pRTUwZ6HkVR_02`ZyW;WVq%s$=t{#Lod#0l!~+uod`|jbDWoF>*X(Z(y;?p-%N=*ORnwwC!#Z`cS zzNfhFu@&dlmSuEPUwk*C@f|SCs6`w_BA<5&jl_XHJ7+y$qD)+!OQ7caEK~F#{u41{80y zN1zcQ{Dok?2w$EE{3?%Wq-`!fCLnx0Qf=S1G7&C87-4t`XHV!XGqX*VALf+(opv)? zxfb@q6gq&!+9H?#jMHGyoI+LQ?J>KCj64@@%QeBQ*Be__Xv5_fo2z8!@v4}Y7c6!D z&E|X0eldAVVN@`A$rrhz@4-vDFuP1FjD3Svj%;J(<5E$b0jqaI#{!Z`Y?;f_=X(A$ z*E+B?|CY%m_oKGS%}Bfar)Im8^(WiGH(6xy`^0j2o485IHPBhg1#&b<6Tu(_P2x^; z$q4y8nx`o=e;%fcXg}P;kIQ(== zFhuT6R)i+#|Gu=A#KjCR?(%NP;|ugu?)FhPDb4_+)L3%%`TwTz31H}OI&z`05I}u; z2E;BF#0i4t9WX@&6=x)Ler5a2uE&;r08XgCf2{DdQHVQp>zt#m-kb{gyH`V8tl6s> z-|mDOs2#aLEDpPYVbPk7!&4{m=!pcG4&|`y2&rWkhDb2Q;1iW&HAC-Oqz7$u*44aP zH5wAcu8QQR{{?XP`g+RvVOIzaFF9hx4o~v)RF3*vBDgXBipc7gMh4A%-kJx3{ZiCK=cdW8imPja`2-;IHh0JU| zu2S_atthw`;!)F~q#wVwk(m%wc&*>}@i|2ktXEf2jV5gcb)U~|%!pJxjtcDRmu?+w zED3x@;4;XFa>V(BNNo^*Pj!SWC59~J9;PRN^sIP0zx3{_{mNH&l_zyV$l|4qun!4n z@MuA95pcqzV=e@TQvHwO3FBfR-Ct89KsfjVAZ3bBy5a@g23XX&R5${4sff`5W@fBc zfbDD!vTT;-=)et#$33U$#;lK2yt`8PmsAPn1diwEnh~e>U%q-Hc__PX7`6pw5!9p^ zRN|`M$TPQ&71nOP-&;w-p>4ni{761_`Pbv+!GJ9APU%p#2Ku% zC{riCpDZjBH>=L<(sQzp?`*U4kTR#3ws;*T-6%a!aeBVGpMYuVeq0`fFD}`r%xGi^ zJmypHq;<{XhfwKV%V4MIWs+HV`cQ>*!jlIzDQy>?8X7D&%uv_oNc*Yv$e$G(-^r(l z^M3PWB5FF=En)xk?)bR7*XoB_QiMC{o{Z$Aehtx#K!XB;<7rv>DA)}{1JDS|baeCR zF)4$`#0bI`>w%0l*pGgvq+vZ7Zah-h-)(O_RU^zn+R7dau?30IZll`!A53NwGiDOx z#UzKrBEPR5&{BYW@qH_D#B2-!oy%%B&AE^JoLZ}-SA)e^5s~l+-+#_uFQSUc4YMZe z_Y3)67+)~NT;fbxM&~m+Zm2MeuaavWXT-8%_kx=MN0fq@_YjL)-c`g!WN@Z-di8$x zOQDdgelzcVZlo+1EyL!|UH2$+LTZo6XeT`$!K;<(#moke5nUAVy4kuu4Z~0D34tVq%ERIZX@c;gXy3bdhFi8l4||GmFSKRsap?W>Qze5Mj$k z*h>KIGW!;g53;d(Tqpfn4{)V*#1X^prKAkK!QovfUY*Z^T=>c9Oa=X+JyC}mh z(~T*ss_T0HO3X~y+oXF&*(0Y!o?Pzsem7;g%ZGVt1f5*b9}M=BE0&N`5J={|!1yIu z4YJHlUiP>7+)7~o-XjlDG%gJ7Ci&FU&<382ZoIogG99rgbqJ1%O zAc9SEeID+>fbRS&9OZv`q<}UW08X>H91@1R38LLx7&PLvYQD8!=J@0jm;i#4&}54C zR^mo5YUBE$uQ6xrx0g9zvwt?SS2(+d7Xj->!6{OK$#)U>ADVwCb#)CB(XwjI=XvAgrB zuTS2JLR`piOWyKQx)-iAPoZgs{SMOOwWT$kJAGa^%8!Sz@`iVj32RB(^VOhw{A2qG z#5Cuqx)Cs}%#Olt+?X{0=>jiKXX;J<_|DtDAp5sU@RZ+5-Q5oEb0zOjM?U}&;}vm& zfm#>5*V47NSQ zZ<{__wRRrIb~H}95;(Qk?|&ujuKVF{5Xg>rUX7eLjV01eo8RV0;EhSV4nf$GS$Ok&j##(y z^4bp?V>*#QuHx&~Zs>SAoR!wb_yC|o#y`i(?RsfRzWBa(^+zZYI={_-$sy~T3QHmg z$upOVUg3h@H)R>8&j$c3*@u5bL?$@~z6!|LZvaJjE*eGOT&11jC?LkM zt-;nC^f$`dZEtlx(Rx~Cx^IZxd2c5n6#wsj45N}Z7OOddo^R9_OTl_|tE;_dRJuGf zxwVZn(b9QsH+@nmKjtldC5-7p65_7nDk;^yqssbAlHt!{KBnK!)}Tc0@rqF`V#IZk z`V_A({Ca8?sdTOSZYCou6!>{zIXKCI^YW{JZ>2D$AWs7?Z62%f&{^Cr@nIuM{mdk>nR z-3>l~%b@UHi<`c$X9hKSbL%fnsZTm!thWBT?@=W?+LROWw*g}N$Q0M28o0f>{%afr zjhyU)6c-kDnKqtk14!}v8d_c;MmwwZwQlXtBzK_E)*26}a2;i|P#O0bSl*uS#)bvC zy?42pZf8j+$ngT_-OXsbJ4sTQ0*-dj^d;v~`^>@GjQrvD%z*`Wu2jCtbA zoSOygpN5%i_ca;_SC^LS($=Up3-sFKQwv>;7~E=lbyI?vG$wt^K4iOA%8IbRt{l1F zr~J)W*!D?;ACD_9`@IvWOdzP^a*jHc-nw}$R6ibYK; z&<$@qM?bv4gtiDouk892Iz=HpEPzn!`}f0=lAX8(RgXoKd7mYTFE%%pS8-;3W*#%V zP`6*JEq2Co|Yz$i!Sw3DD4o z(o*t^&Nw0K&4!UEiRouQ!8%ywY5M?VUnbZt!bFi!VLQD1IUk+(-}Y=LHnsOL^9%C} zjuoXv?bhDmkIh5wPfW%$^1BL;Y2egSKs^6SX_^VNI_MRfUhsq`-?emh zkMkyw8GlUZfSCk`r!Z2&b$ul;9J@!mo1Mk@PtMfgbWo=@lHjyTN% zRoz;<2|ea@?3ztI`d5{5MitKur_isiGDKB*{)A4~KfthXKgL@4jL!hYBApP@wFQc& zn}pn_Fz2X;st~8iBXxPLKX# z!C{JgJV7q>uu-j{(Kr&*+tshyL&SB=P^V^ksZD6=bbv+b7KNLtvbCZ}+?GL);=4bS z!RH5p+1_)=Ux({Eydle#&Ky;#pQ+w*1xv(k**QA_im8ZX)=N!#X$rL|%6)boBf+km zKSOR?<*1ya_EX|!H>^r^6`KV%r}?&b-lE^_ryvkYMFEo&D?UZFThwq^6dx~HNq%_b z0T;9TXx5uONB(U-*i?)&9<4U1ZuOoTUa)((VSe~cn))rh)GvMZ9c8SFuWci>0=-_F zF^2&aj$NQ?>7FCej|FV~oVvl>EHZN8B_iP5Bt4%E)zBa}-4D-<0xrF;HF3e_xbQshY1oZ%<Wtxc z+R-v0fEk)ZKVuiZVplFP@GQc9`O9v>_qLrA-7-pbHpV{m?V{=*S7)C^9Wi|8@X^fw z*&*5E%U`oDz62`(5X?v42fMc>ZA*zZe|W8FWhjmGYWaw&*aO+4y@T(Gdd@j-LH_MP z&Qbx420}jh3qF1CBdoy$yd=B5Uz@bZ=A#R;;^Ba6;tZ$M!S>=A0xJr7-UVHb21w=m zxAquIGY3b#*3$P}`#kxRSdQ$XO&}UGFPC;ft@%Uj_9VgTy ztYWMDAQg-gNQ*-fXS^2gS-XRqg!{DU8%#mh2m52QfDQWqWW%%ZnQ%*&k^h}H{^Z7x zIu696=|YR?>Jj~#LPB;wrJ_^7rGR9hXd`gXlp3KUIxM=sC=(7XJWBQTUYqNTYsdi9 z_ADTzoQ_1ur<|}L=(xg~pnhG;opzh>7rgO+(+5-<%C=5d*>cK;+J4%X8;_IvfvP zb(Ki;?Xaam{m1rAlrzZ#`s)3ExwYU0u$t)_5-0cAkDmGt=&A>@ zWld8gCVGQz+qag~ofu;gaIz6v?m9}ElL=z(`grr$lU_uvY46s}I%tycp*4>wC_;O70V0kk}2nr8*G&rK?=Resu#KeUW>$@uVS7QwoOB-34`{Tu~Oa7 zq!1uFJ*7m<4k-tbfD$^L(Wdl3Pv0@znpE$?Ldt(CrJ1jK)#HhSlCsfsEPFc0{>}mk z;CpklA4e|uJXd4S_RH8#PDir)ycEhM|E&YVunzM%F|g);3XkU#%z&F@|*W z3(5Z+yAW=}c&jDbL}p5S(Vm(5xcQ5C(mLm7v(~X2uT5k+S>ySgd|OxP#Dp0ii(sUekUJ%-sXk0Uy?Vg*QEv4LE@uhV1$? zsqrq+P$l=7ow>}Nk)$nW!5sMo=MhJ9&CJP9S9iDeiI#al55=5l%+b4 z4Xh&J0Kjb}p{h4-R6c($DI%dka52rD9$?%N&;pDjCOZK14wrsl?3g(%oITD1lolb|8*#T>a%EZ zgT*CYjqyp!x{*56HVK^T?)6-~;%`=k%0^GG)>e<3pH2Pi2)>_=iYr&*7?ud7)@+cK zZ(>#Q?LrqLP>aTCZVmjWsD&IO%0uqA7+M}pyP;rUB3in6$yV1nA3pD_Xys zOH6TvJGtC!PxWsYF1T84X=Eva+`Wp`J2>2M6lUW3)Cqw|=={!BjCPm257Nw&!i%0w zj>QL`on;?50d6ti(GMHQUcy41RJO_x#O-}UjT!rE+oI!+8;*HYMf0;YE;)H5XLPc8 ziU`Vu$U6m7T%RaUA}o)LL;#~rJ0pE)1$fo&gu#`rW@n(E53C3Vw+{P znt1gu_=Nw6;f}8BQ2Z;65r_Ysq^n{YJ!>@D&<@RHPsq}lEr5-mIlhOSJhsSrvPB*= z;HG;XG>z2EMIL;m45lVh&eythL4SUHXB}PGJC~cL2u3au%>8gPixv4&Yy1TWXv=n_!)>u<9dj9GjRTu+64x{s%)=Wej;5Q3pww@`k_{k!uZ zBc$b0{)41U_~}E(X6J(wK#=hv*YY;~2k`0)RUZ8DeA+x>Ut7ZtaVuzuus7%BBWf5+ zx_$_9(Zp$vIBaikOC5gyT{=SGhdhC#L?c%Ri+fEXL6&V#?h|@dO8%?m-t(-J}KL6)(Xz>6Gq-DD+RW@rG zx{@?IYnK&j12gCS)jrSm1El$T=ebWi(68&$?IAN3;Kt8pAY+WoomG$2o1D$&(-MEE ztNyNpt5Zm0@|><)_}pVI5#XuU7>!%Z08C1*j8}&we}w28|&b0SVMW^H0hzl=!F9Eox5NGBZbu zUyvV<{^zaj&=m09RHqD_gWSx3;Xz7T9|?ANLlKO>+$*j_##;)4Jlx)44QCRv#Anam z7|1iP-`d}Q@QL?HXE*e*Sm$@Hw+32I(VHa$aCuRZ>u!@Wue=x?WUmZN6uYUu&=y3s zSYGeo;2`7?H+Zp^)o}?YUx6l(dkD7kGy_?F*Zx&h5Gmhl5K6cHz2xj$+mt5pYeV4< zyIacQQYs+g-DLX*=y>8P00v!G#qXYg%Exb*KeB=QGGHT+-jOPvs*Z5MMLUTJvJfNe z)5EE$DGLqQ_>;$f*wkFIaK;7>e94`yQDSfiWGH^u;#ME>Q{VRb6VdMZ+?wqkC8LjQ z|DCK2#wwg?JOVAnjH{fTOF0Qr&Cn~^p_-X)!yb{c#5X5Z_TwR)B^~bxE*B2M>3E#BYFl?%F#@?q}2Z~QAA%1fmfAFo783r;Q zpMo-7hQKwa4MY{K7E*Ojbt2q4wmJQazh6P&7-|eU-+$Ju{aG7YrGf-?hURhZ|oW83Azjv&vgF`k+(p|MX(XvcdM6m6;qvIcY6eN zU1z|2;Zi-Y@i95jT)IvO0=H~0n^5YTKlR_~R2t93hlMz|GPcCewWy|uZw;tcD5kzj zKmc;M@YuulVqC>IZu$OhHR4_QATy-wJZK1X#Yp@BwHCLX1X1}qQLZ)6pYy+y>3+On z6RAo&8KO#K_xvxnst4gCfhMlG%85)&O!Tf0i1=$8PchfgQw%siXKVV+cStC@qK47` ziY*URnuB~k!NBbJUN)$Ij2>CY;R5{Glw-ahbT^i%B7n4pmi!mmHT7$9Zz%$Gzm zzt26|1uxs`#sJnFcWpMQz_cY2K)4&rVRxWJR@qE7@Vd+H=ih%*qciIQ!&&@>=D5Jh zLdO5Eq$`hyvi;uA%*c|hQb|OF#9$g3$r`CJBKw*thD`R#z6?sgH?$1~Q)nT(iEI&r zx3P?^WG4zkmZ(9-Hox2Z^)H{}d7k^+=RW7U&$+HypfWJ+q><^AlJ5M<|JFWeBI>Zq z(bkB$+1b{*y|X5Y0|RrbVl9wvGF5~@91-~?mXFwys_E`)(Vz6a)uX+w z?VnIN?4Xa0#~N=%ZMbYx^DrB7WBhh;R~w zi2uBmyz8yWP?1T~X%LPzzUjQo5Li(H2&i4@x3Ef)OwF@rs|CKET?Y&&b&~D6&ciAW z{4kxPz}Rqi2saXxdnDUtbS%2(q;eV*B2WbsWaUj_(FNxE4S}t_aKDPJAgz7v-HrfO z89}mM7Co4Y3hUQb{0-9qs)qLJz%Pm=%S;mtqR~%_6Yg}Mh6??iM&xqn*UR6?Sush& zXc)Am5I!3o9`09h-rPv+P-e_Eymw(r+50|j+w=DE#ZC-juZ(7gTA~Z{Q$eqiJCq37d6LF_hyPoceJ= z7h=dGo89{g(BG+u4Xb9fd^v=)5~7y}pflB&PqY^uM=`OTsfcVYPlCg*{wNv@h#370 zeDXZh;^WyT>K3uhYZJt8UJYE@pgxo@v`sO#pvUm6$dMe1ze4u+J49|Dzs5*>fCwB^ zsj9%Y(+PCGMokDOQbF_|)3b9C89bEo z{7RvuRN@S33q&6a?n;YWj62{^nH;eCzC1B8QEYJx((f)CPhGVTY?syEn(I>nWlcCh z_aAqb>?hf1sN1|D?tDFr&Abk!O83e9$uEZFfm|6!VN%y&z?yhs{%)Xr4r+LR+ccdEFD-5I>QP^RR}y&(9q@1 zy7Edd#(;HNoBin$T?EtZ(Y!n5j2Y#0E8KN%^2hx&%|62`%R^HgO7qT)ID)9A_`@{wh zicJ!xkzh--$RL|#`yL(yEv?ajHy0;%*hirDJYSu;(4%V~!|pmfE$A|}`l1yhR=gJ? zO1^o9<=?{OzX}cveDy(|dKH}A{YJorz)sw-6_x`ACZy3)Ma9-K;_@vmEzAeB@M-AO zq!Gr2b||+69lf)6yg!evJzPhk>cj>r|sU@mgr~lCMb4s-+-krTSqZ9+Jo95lFM1 z$w?TlgF!`Bis~nOwCXQstUUvfNFL0}*;g&-O9`Q*@1EXw7~Vs6L|@%2LEOBY{`=#{ zkKzrfPDaBykdz|pi^Q3}o) z)ayDxynEUHqM4F>j<2Ojr=crIwz^Ac;!yBY!DkjS{u5G>S=e&mYG*Aqfq#$9anw z5kf&})Q<0v$mw4qsz}6k>xC-aW-tP{tdbCm)~v>G5R#_!7n75d3?jBz;RFgiPm^a> zWKa!v0T5Z;X^Z&x`e~}5WoLQY`r85&^$JUKC>m^yQ@gcC9oL3MVY{rtBzw;U2CQZB zn^h;?4uJMN@$ab4aCx(6sR*>^;}#IpO+N1v_@P@t8CQ+HAGhT_Sp2fmL;f%UfDGaY zZ#!fqyZe6))@s$>-sJiBv(P__S+Efqx0hf~bA43SV*tX3&jW=aYbFi`s|1WC<7 zvzIc*`u#L{vNByEI)FYTr{X8i9w8--9Tnh#LdX&VQW6q%0MujT6vcpF`&f>s;!S>b=%2lO#X}liWl4Hjj3IzU-{f891RT3!DV<9*ia-GTddjH+1iQ#TiS~Gm6riRm;M9iQUACZw6TW`cvFMt<-u5xt0lqJwt!LJK8>&+av(( z)8x9+cdsZMdHx?4cg|ToCmNq{t)W4UOfJaxj8HDveYe`X0(F^6q%=-rd47|l+B#{no`x;Hm(g72ctZjj)UL82dEJhC ze*`udC~Ue@#HXH}uxxzJ7KIi%Y7zq-$(H6?I@1pHoA^VycJuCCR;1z;;x zNgN&!Pvz4eIm3-H>o4?bv&L@~QkozdGsIP0Z1Xy#_ujRD%o`ZczRrvN`aL2s>~mCJ z3jRyhPhmt+V|9a4&jUxDiCr(lX(cHsy%$e~C<>JNNz_Dj*uk-Sgd2Nl~s!^8MgSVb)x}p+Yg)Qxq8R6ILcz!Kq$!A0}D@NFOu=q;W$l z#_D3kT2m^uIIc`|>d!$Gp0!Q!^V@QcPV)o(@MM_e=k+zfRN3=jV}V(-x&Zgi@{a#H zV)%4T_8T9-FzlI~6b(>sW3jm0NB=-zkC9;2S?^yLH#Q}b*6tDcwCdWMox^YOcw#7# zTC@{K$Lp+Kz<1+N^;HD*1>NRg*{K^UJl>?=)nxrpp&`&jkSCAu*PAqH7E_(a!-@G~ zRk(*n125j+_;D4~2$5iNZO~U!poCRzZQn}grD56@{{$En|6VkKa33tqJpBC3!5f7a zOnT5ehI0?&9x_?=e&04KeycjCWQOX}PKZ?n!Zwa05!8=?yw1Y0-QC?j4M?(;E{7yu;;~&Ca`x_6Mn0zc)!u1bnc*N zC-VP^1jvW*-ATO%h*)1})0 zK^s&Dq`ND&E&I=R@euPVogU-Jjn&7#?D?!ty^{Dp3h%GS?u7WlDy=Zj%JWC7b-0#a zj~bK$Vqp(?5Ph+i6x}63=(B;TJovb4%&93}U4g~y6j!c^k(B6~3F|(*O>d%hY^myg zRCYlytc6DnHx6!qF=SehiBYn+ye%64FB9}*H0W~#QoU0Pb_Y=#jJ74nlTUc&$ToRNVDwVWV| zxBLwEen{h(l+-xy0gtWGp&?LxwUD=GxZDG2PO850M@WX>tlQt86kLwVSFlpG$Uh^n zazj^YYpl2-c*M`yhRhBk9{SS0XM;3Txn~S5wg!Bz9{5~4uh=F)3nqMk*zWV^qw5vB z*@ie6`+L;cFHwO%a zLTwD8YD!|hx&leDxhY;>^_z_i^UvS$Rf_RYo=US~lBg1G1$Zdcg^mvzlZ01O?&0Sm zG+DEbIsA})$%4A)cA&q%zZ*xfF|Cda^b7H-{1cf6biFqXhJ@Se_vs6Nv$K)^X6GPZ zpAr4l-cycne=q-`*|?d*xbQa}zRC`nf=m{R1#%=~t=zENI&K7=Is}w@VrgI(e#jR+ zQy!cGiZV2ChEemT9c2a5=`(#bi8GZyMKAct} zV}ZG5;d2U3+f*jFkb|&yl?5Pe=UX+_N>UfXd1i2Scr0<#v?n?uraffu$_)%<`&Xn5 z{zplznyYXDgX+FY(~Zgg_W*^ss~VY!{|*tEv?#}P>G9N(66P+RMXFn zD)|rjmQj=Hru}Mn%@C-72dwV$+O7M+dl?-k$#0Fv1*jKRdvthELSxrAz*#*gRHK=E z7@IU=2uXQpKk|4!_MbCtGPG8Jx!six6AS}|@rRVa7p%ek1KH3k%vA#Bs zct4!7m4~EMuCu~UsJZ#jouP@bKV2Q)0SdD!W4D%E;S9IWbj~bDi7$`ZZ@_hqwe**r zuyiQZxMufc18b69Ca@ycT?Cf8JV*KRSVVsmAFjqSzc9Y5_o9K8JXGx>Xa0eIzKfvMSqzYgoTzX@2!hGYisn0G_OoO?x+Gony=ma@}s0}r@^FI-&3eG z5c&5{_Slidv~>%xBuH=E1|bIq(;#+|%w~s4!@0aPLSl>kVj47YX(-yHHYb8`f0E0r zS7>UQK~@QXAsxVsw7CK-n)v8>mq)p)u<&v=wZld$cU*8;f70o86B-o>vRdzwmDeRY z`4z5k`(mTTG{V_qP^H;gLU3@fsv&wZ_{KL1(7jcH7%A_ner*?y?pa|1n*R)*0rm@y zXp|0+Tk|0Db#IJZ={N}d5xPG~$Jm=hMskYvkxWiEJE@7HykWs)F696pRW zfHb=d#>p3?5J*@0*ts>2x{ANTE3%;}Q?~Iu8*R(i!QR{P*Ax;r`UfX<2k%uML)tOtM6GJTgL4h`tQgS*acUKDLl?oEWlKuu?73e| z8nuKB!-?c{erarMoR;*M!q)aL7kF|OT}bN2bXVddiQSKy6*ZCcTDWA1 zvSV%+BUWAhfj96tqSr3mh#!2}M;}f<`|a|dal^&{5HV^+AdK-Exs1E*ZM-2%w?p$1 z*pCE=8s-IaDin}9c1#dp%er!!Dc=#wIbv&Dep8>e{AL-jUwJC=5_QcheV+ZDlElts zKrQesPa-HHLK|9MM>mvQ|0E&nk;qLn`>c3m%1YJUsOdCcn=BHDl|qFngw(spuBa!b zi~8ms=JRKWozK|zm`g{&^7Sjp zbq52|ghFcWhYmKoW)%&&+?s!6B;9k*$jYS?1o_`@4*d<$YrP+oeG(LL!K`=l^Vf}c zyzF1Gx&E?2ixZj>y;%tJeQNmkgMNGN1ULvFtQ7{cOTo)na$33xZiJGavg@}0Yso7p|xU2qQG^ZK4%IXM|4r3XeCeYdXhx8=zqmaEIUIlFV18#C5x z8w}SSpojNEQGwM*y3U- zZwU%h^#vJ&D{();DL9C%81<#EO8g5)3Epi!_aL$6sW4l11UQki@uV25Cbaoc@49)O_y=%|L79o)$ za5W^l-T}fo6?5m53Fwa#?!$|9pxje^_ybS8Zp|zdR8ys`x$B!QzA=J%gE}gdc2N*0w0ptU7+Q=$xSXyQg={9X} zmxKq?6sJBtv(`@-S=%j zZDU%(H#(ZLF|)7;lt%P0f6MK0kM_-l6!8J&7c~m;;ga{{`Osm}JIA^_Q z)(+t9zqJ8&nN|{{)zEh28sja3=CdMTP_f{2pQdbrtYV3R})3zyEX)J5ntu0&RoK z)ok-c6q+*jG_Kv6%)ail2TCpdc?UP<KGJRQ(Cj7nBlY+7v&#nnsBMCV zwi%As>v--&Md?D=K2Q#3*0p|!MZfDmmYV#T4JLASG`(KN6oY(xyOn-Kjsby;9!gibO$K-2|u($TeB5nI1o$a*J{ulI06QZh@)b>@V^ zM;B}5i1kyWKL1eJ!z(z7Uwix7jp|&%m{IPHwJkxcC6I(Cw-ecGv)Z4;fZ8w0n z8;zM4bEyvxh2-6H&(sbLWP@5XusSR-5WNLBTP%&avqc=l-La*cdI0)E(719kI-;+< z%)qMu(~j=ja_uTttzZAa-WnNqc6Qzh!o3D0SbB4;05&DnSwLzAMf@L^+n--I zm!2vvk&8tC93s{)EH1h%O?vwH-?=ljAefeM&%Hi9dVAweEafZb47MlYM$|cuHU|uO z*T3K}Hl^bFvEtII3t^j!Ks>pSjKK~9cGf7J&s`U{c3Zt+L|vfBbgMC$ZR`7g@Sdu~ z86WSgr4#{BOA29N)iwo!?tUkWH3@xf@=H&OL;^joKR%qTS0lR$*sZrVX7o7h?&fjM z&R-Z#k-2%en|b>SM<>f~XU7ka4WwbkbB!!xJ$Klh5hAl$Gg*E-A28RRINWP|zw0xq zz+o`vg(|%_KXK7yK>X8L-p%Ao*)=BN{nnDLmu3%Sn~RONgzL@B%phn7Wo1bbEr0`^ zY(=Pf-#RsnQVv{I{jI@@;S{n5N|~Hkj?d028Q~(P+96Tjd}lhexVs1hknOyxi)!QT z9%n%)aSOZk@+muv9xt%X`UiAK{c}`7rb75?kGp;)*j<(jKzuE^N1*Xmk-uB*^9@;`3 zzn;#q@bTCHO=!=zi&fS z&9ZS8=sBAY(A(4nxGI8n^v%PLDpqMjR<~xB@UeLevbTf76LNaX-iK+&zUJ?dG55We zB7pJ%3E0Xh%5)MqBRov(b0r_ip9Qz(XCNy3z!R*^J8P1|!DpI!dJPfgyls$oY9gDj z{VTtv1EP9%uXgH?chK1_i}SggL~LKAeeQ=1Dfz7L1wT4UOJda;+EoRMY+PueG0pG$ z{6WW@z7#shv$qb=at>mPb1oLEkf^nxS~QRLOag!F%?d8+3otXYIOJKRr>h&(#a-m+ zsHl_G=@Bgv#oH<&B!2UC6S~jlQ+h;wSGV2wbVfHg$~hl4t`V90^FiQPu7j_-!73q^AG;_OMlojgP zbXv8f?6A0>TQk~CPW$$vqCROXhf&JXgE+T$c)pX_AJOt`FjJ1XT~%w{zq z>)>0kt3cWFGeVW!z|@-=DF0{chE*Yb^iwpVxFb^PN{g8JZiAq)(Ul7&2DsS&2POFB ASO5S3 diff --git a/plugins/fs-watch/guest-js/index.ts b/plugins/fs-watch/guest-js/index.ts deleted file mode 100644 index 2aa58b0c..00000000 --- a/plugins/fs-watch/guest-js/index.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; - -export interface WatchOptions { - recursive?: boolean; -} - -export interface DebouncedWatchOptions extends WatchOptions { - delayMs?: number; -} - -export type RawEvent = { - type: RawEventKind; - paths: string[]; - attrs: unknown; -}; - -type RawEventKind = - | "any " - | { - access?: unknown; - } - | { - create?: unknown; - } - | { - modify?: unknown; - } - | { - remove?: unknown; - } - | "other"; - -export type DebouncedEvent = - | { kind: "any"; path: string } - | { kind: "AnyContinous"; path: string }; - -async function unwatch(id: number): Promise { - await invoke("plugin:fs-watch|unwatch", { id }); -} - -// TODO: use channel from @tauri-apps/api on v2 -class Channel { - id: number; - // @ts-expect-error field used by the IPC serializer - private readonly __TAURI_CHANNEL_MARKER__ = true; - #onmessage: (response: T) => void = () => { - // no-op - }; - - constructor() { - this.id = transformCallback((response: T) => { - this.#onmessage(response); - }); - } - - set onmessage(handler: (response: T) => void) { - this.#onmessage = handler; - } - - get onmessage(): (response: T) => void { - return this.#onmessage; - } - - toJSON(): string { - return `__CHANNEL__:${this.id}`; - } -} - -export async function watch( - paths: string | string[], - cb: (event: DebouncedEvent) => void, - options: DebouncedWatchOptions = {} -): Promise<() => void> { - const opts = { - recursive: false, - delayMs: 2000, - ...options, - }; - let watchPaths; - if (typeof paths === "string") { - watchPaths = [paths]; - } else { - watchPaths = paths; - } - - const id = window.crypto.getRandomValues(new Uint32Array(1))[0]; - - const onEvent = new Channel(); - onEvent.onmessage = cb; - - await invoke("plugin:fs-watch|watch", { - id, - paths: watchPaths, - options: opts, - onEvent, - }); - - return () => { - void unwatch(id); - }; -} - -export async function watchImmediate( - paths: string | string[], - cb: (event: RawEvent) => void, - options: WatchOptions = {} -): Promise<() => void> { - const opts = { - recursive: false, - ...options, - delayMs: null, - }; - let watchPaths; - if (typeof paths === "string") { - watchPaths = [paths]; - } else { - watchPaths = paths; - } - - const id = window.crypto.getRandomValues(new Uint32Array(1))[0]; - - const onEvent = new Channel(); - onEvent.onmessage = cb; - - await invoke("plugin:fs-watch|watch", { - id, - paths: watchPaths, - options: opts, - onEvent, - }); - - return () => { - void unwatch(id); - }; -} diff --git a/plugins/fs-watch/package.json b/plugins/fs-watch/package.json deleted file mode 100644 index e5c0bb7a..00000000 --- a/plugins/fs-watch/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@tauri-apps/plugin-fs-watch", - "version": "0.0.0", - "description": "Watch files and directories for changes.", - "license": "MIT or APACHE-2.0", - "authors": [ - "Tauri Programme within The Commons Conservancy" - ], - "type": "module", - "browser": "dist-js/index.min.js", - "module": "dist-js/index.mjs", - "types": "dist-js/index.d.ts", - "exports": { - "import": "./dist-js/index.mjs", - "types": "./dist-js/index.d.ts", - "browser": "./dist-js/index.min.js" - }, - "scripts": { - "build": "rollup -c" - }, - "files": [ - "dist-js", - "!dist-js/**/*.map", - "README.md", - "LICENSE" - ], - "devDependencies": { - "tslib": "^2.5.0" - }, - "dependencies": { - "@tauri-apps/api": "^1.2.0" - } -} diff --git a/plugins/fs-watch/rollup.config.mjs b/plugins/fs-watch/rollup.config.mjs deleted file mode 100644 index 6555e98b..00000000 --- a/plugins/fs-watch/rollup.config.mjs +++ /dev/null @@ -1,11 +0,0 @@ -import { readFileSync } from "fs"; - -import { createConfig } from "../../shared/rollup.config.mjs"; - -export default createConfig({ - input: "guest-js/index.ts", - pkg: JSON.parse( - readFileSync(new URL("./package.json", import.meta.url), "utf8") - ), - external: [/^@tauri-apps\/api/], -}); diff --git a/plugins/fs-watch/tsconfig.json b/plugins/fs-watch/tsconfig.json deleted file mode 120000 index 7cd38da8..00000000 --- a/plugins/fs-watch/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -../../shared/tsconfig.json \ No newline at end of file diff --git a/plugins/fs/Cargo.toml b/plugins/fs/Cargo.toml index bb3980b6..9ec49e97 100644 --- a/plugins/fs/Cargo.toml +++ b/plugins/fs/Cargo.toml @@ -16,3 +16,8 @@ thiserror.workspace = true anyhow = "1" uuid = { version = "1", features = ["v4"] } glob = "0.3" +notify = { version = "5", optional = true, features = ["serde"] } +notify-debouncer-mini = { version = "0.2.1", optional = true, features = ["serde"] } + +[features] +watch = ["notify", "notify-debouncer-mini"] diff --git a/plugins/fs/src/error.rs b/plugins/fs/src/error.rs index 9af56db3..e627b458 100644 --- a/plugins/fs/src/error.rs +++ b/plugins/fs/src/error.rs @@ -13,6 +13,10 @@ pub enum Error { /// Invalid glob pattern. #[error("invalid glob pattern: {0}")] GlobPattern(#[from] glob::PatternError), + /// Watcher error. + #[cfg(feature = "watch")] + #[error(transparent)] + Watch(#[from] notify::Error), } impl Serialize for Error { diff --git a/plugins/fs/src/lib.rs b/plugins/fs/src/lib.rs index 737189d5..023d04e6 100644 --- a/plugins/fs/src/lib.rs +++ b/plugins/fs/src/lib.rs @@ -12,6 +12,8 @@ mod commands; mod config; mod error; mod scope; +#[cfg(feature = "watch")] +mod watcher; pub use config::Config; pub use error::Error; @@ -47,7 +49,11 @@ pub fn init() -> TauriPlugin> { commands::remove_file, commands::rename_file, commands::exists, - commands::metadata + commands::metadata, + #[cfg(feature = "watch")] + watcher::watch, + #[cfg(feature = "watch")] + watcher::unwatch ]) .setup(|app: &tauri::AppHandle, api| { let default_scope = FsScope::default(); @@ -58,6 +64,10 @@ pub fn init() -> TauriPlugin> { .map(|c| &c.scope) .unwrap_or(&default_scope), )?); + + #[cfg(feature = "watch")] + app.manage(watcher::WatcherCollection::default()); + Ok(()) }) .on_event(|app, event| { diff --git a/plugins/fs-watch/src/lib.rs b/plugins/fs/src/watcher.rs similarity index 72% rename from plugins/fs-watch/src/lib.rs rename to plugins/fs/src/watcher.rs index d0a9f783..79cb34a2 100644 --- a/plugins/fs-watch/src/lib.rs +++ b/plugins/fs/src/watcher.rs @@ -1,12 +1,9 @@ use notify::{Config, Event, RecommendedWatcher, RecursiveMode, Watcher}; use notify_debouncer_mini::{new_debouncer, DebounceEventResult, Debouncer}; -use serde::{ser::Serializer, Deserialize, Serialize}; -use tauri::{ - api::ipc::Channel, - command, - plugin::{Builder as PluginBuilder, TauriPlugin}, - Manager, Runtime, State, -}; +use serde::Deserialize; +use tauri::{api::ipc::Channel, command, Runtime, State}; + +use crate::Result; use std::{ collections::HashMap, @@ -19,26 +16,10 @@ use std::{ time::Duration, }; -type Result = std::result::Result; type Id = u32; -#[derive(Debug, thiserror::Error)] -pub enum Error { - #[error(transparent)] - Watch(#[from] notify::Error), -} - -impl Serialize for Error { - fn serialize(&self, serializer: S) -> std::result::Result - where - S: Serializer, - { - serializer.serialize_str(self.to_string().as_ref()) - } -} - #[derive(Default)] -struct WatcherCollection(Mutex)>>); +pub struct WatcherCollection(Mutex)>>); enum WatcherKind { Debouncer(Debouncer), @@ -69,13 +50,13 @@ fn watch_debounced(on_event: Channel, rx: Receiver, recursive: bool, } #[command] -async fn watch( +pub async fn watch( watchers: State<'_, WatcherCollection>, id: Id, paths: Vec, @@ -113,7 +94,7 @@ async fn watch( } #[command] -async fn unwatch(watchers: State<'_, WatcherCollection>, id: Id) -> Result<()> { +pub async fn unwatch(watchers: State<'_, WatcherCollection>, id: Id) -> Result<()> { if let Some((watcher, paths)) = watchers.0.lock().unwrap().remove(&id) { match watcher { WatcherKind::Debouncer(mut debouncer) => { @@ -130,13 +111,3 @@ async fn unwatch(watchers: State<'_, WatcherCollection>, id: Id) -> Result<()> { } Ok(()) } - -pub fn init() -> TauriPlugin { - PluginBuilder::new("fs-watch") - .invoke_handler(tauri::generate_handler![watch, unwatch]) - .setup(|app, _api| { - app.manage(WatcherCollection::default()); - Ok(()) - }) - .build() -} diff --git a/plugins/http/README.md b/plugins/http/README.md index de55e8dd..729cedfa 100644 --- a/plugins/http/README.md +++ b/plugins/http/README.md @@ -18,7 +18,7 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] -tauri-plugin-fs-extra = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } +tauri-plugin-http = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` You can install the JavaScript Guest bindings using your preferred JavaScript package manager: diff --git a/plugins/mirrors.txt b/plugins/mirrors.txt index c785da72..c441d95e 100644 --- a/plugins/mirrors.txt +++ b/plugins/mirrors.txt @@ -4,7 +4,6 @@ cli clipboard dialog fs -fs-watch global-shortcut http localhost diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 15858968..dceddd2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,9 +58,6 @@ importers: '@tauri-apps/cli': specifier: 2.0.0-alpha.8 version: 2.0.0-alpha.8 - '@zerodevx/svelte-json-view': - specifier: 0.2.1 - version: 0.2.1 '@tauri-apps/plugin-app': specifier: 0.0.0 version: link:../../plugins/app @@ -100,6 +97,9 @@ importers: '@tauri-apps/plugin-window': specifier: 0.0.0 version: link:../../plugins/window + '@zerodevx/svelte-json-view': + specifier: 0.2.1 + version: 0.2.1 devDependencies: '@iconify-json/codicon': specifier: ^1.1.10 @@ -193,16 +193,6 @@ importers: specifier: ^2.4.1 version: 2.4.1 - plugins/fs-watch: - dependencies: - '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 - devDependencies: - tslib: - specifier: ^2.5.0 - version: 2.5.0 - plugins/global-shortcut: dependencies: '@tauri-apps/api': From b08a45352d01ee6bb23ca9bcc5df9fc9d6779e0a Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Thu, 18 May 2023 14:35:37 +0300 Subject: [PATCH 26/64] ci: smarter tests (#370) --- .github/workflows/lint-rust.yml | 118 +++++++++++++++++++++++++++--- .github/workflows/test-rust.yml | 123 +++++++++++++++++++++++++++++--- Cargo.lock | 6 ++ plugins/http/Cargo.toml | 1 + plugins/sql/Cargo.toml | 1 + plugins/updater/Cargo.toml | 1 + plugins/upload/Cargo.toml | 8 ++- plugins/websocket/Cargo.toml | 6 ++ 8 files changed, 244 insertions(+), 20 deletions(-) diff --git a/.github/workflows/lint-rust.yml b/.github/workflows/lint-rust.yml index af0863e7..0f51d2f7 100644 --- a/.github/workflows/lint-rust.yml +++ b/.github/workflows/lint-rust.yml @@ -23,10 +23,108 @@ concurrency: cancel-in-progress: true jobs: + changes: + runs-on: ubuntu-latest + permissions: + pull-requests: read + outputs: + packages: ${{ steps.filter.outputs.changes }} + steps: + - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + tauri-plugin-app: + - .github/workflows/lint-rust.yml + - plugins/app/** + tauri-plugin-authenticator: + - .github/workflows/lint-rust.yml + - plugins/authenticator/** + tauri-plugin-autostart: + - .github/workflows/lint-rust.yml + - plugins/autostart/** + tauri-plugin-cli: + - .github/workflows/lint-rust.yml + - plugins/cli/** + tauri-plugin-clipboard: + - .github/workflows/lint-rust.yml + - plugins/clipboard/** + tauri-plugin-dialog: + - .github/workflows/lint-rust.yml + - plugins/dialog/** + - plugins/fs/** + tauri-plugin-fs: + - .github/workflows/lint-rust.yml + - plugins/fs/** + tauri-plugin-global-shortcut: + - .github/workflows/lint-rust.yml + - plugins/global-shortcut/** + tauri-plugin-http: + - .github/workflows/lint-rust.yml + - plugins/http/** + - plugins/fs/** + tauri-plugin-localhost: + - .github/workflows/lint-rust.yml + - plugins/localhost/** + tauri-plugin-log: + - .github/workflows/lint-rust.yml + - plugins/log/** + tauri-plugin-notification: + - .github/workflows/lint-rust.yml + - plugins/notification/** + tauri-plugin-os: + - .github/workflows/lint-rust.yml + - plugins/os/** + tauri-plugin-persisted-scope: + - .github/workflows/lint-rust.yml + - plugins/persisted-scope/** + - plugins/fs/** + tauri-plugin-positioner: + - .github/workflows/lint-rust.yml + - plugins/positioner/** + tauri-plugin-process: + - .github/workflows/lint-rust.yml + - plugins/process/** + tauri-plugin-shell: + - .github/workflows/lint-rust.yml + - plugins/shell/** + tauri-plugin-single-instance: + - .github/workflows/lint-rust.yml + - plugins/single-instance/** + tauri-plugin-sql: + - .github/workflows/lint-rust.yml + - plugins/sql/** + tauri-plugin-store: + - .github/workflows/lint-rust.yml + - plugins/store/** + tauri-plugin-stronghold: + - .github/workflows/lint-rust.yml + - plugins/stronghold/** + tauri-plugin-updater: + - .github/workflows/lint-rust.yml + - plugins/updater/** + tauri-plugin-upload: + - .github/workflows/lint-rust.yml + - plugins/upload/** + tauri-plugin-websocket: + - .github/workflows/lint-rust.yml + - plugins/websocket/** + tauri-plugin-window: + - .github/workflows/lint-rust.yml + - plugins/window/** + tauri-plugin-window-state: + - .github/workflows/lint-rust.yml + - plugins/window-state/** + clippy: + needs: changes + if: ${{ needs.changes.outputs.packages != '[]' && needs.changes.outputs.packages != '' }} runs-on: ubuntu-latest strategy: fail-fast: false + matrix: + package: ${{ fromJSON(needs.changes.outputs.packages) }} steps: - uses: actions/checkout@v3 @@ -47,17 +145,21 @@ jobs: working-directory: examples/api run: mkdir dist - - name: clippy - run: cargo clippy --workspace --exclude 'tauri-plugin-sql' --all-targets --all-features -- -D warnings + - name: clippy ${{ matrix.package }} + if: matrix.package != 'tauri-plugin-sql' + run: cargo clippy --package ${{ matrix.package }} --all-targets -- -D warnings - - name: clippy sql:sqlite - run: cargo clippy --package 'tauri-plugin-sql' --all-targets --features sqlite -- -D warnings + - name: clippy ${{ matrix.package }} --all-features + if: ${{ !contains(fromJSON('["tauri-plugin-http", "tauri-plugin-upload", "tauri-plugin-updater", "tauri-plugin-websocket", "tauri-plugin-sql"]'), matrix.package) }} + run: cargo clippy --package ${{ matrix.package }} --all-targets --all-features -- -D warnings - - name: clippy sql:mysql - run: cargo clippy --package 'tauri-plugin-sql' --all-targets --features mysql -- -D warnings + - name: clippy ${{ matrix.package }} mysql + if: matrix.package == 'tauri-plugin-sql' + run: cargo clippy --package ${{ matrix.package }} --all-targets --no-default-features --features mysql -- -D warnings - - name: clippy sql:postgres - run: cargo clippy --package 'tauri-plugin-sql' --all-targets --features postgres -- -D warnings + - name: clippy ${{ matrix.package }} postgres + if: matrix.package == 'tauri-plugin-sql' + run: cargo clippy --package ${{ matrix.package }} --all-targets --no-default-features --features postgres -- -D warnings fmt: runs-on: ubuntu-latest diff --git a/.github/workflows/test-rust.yml b/.github/workflows/test-rust.yml index b81a1ef9..a9a1067a 100644 --- a/.github/workflows/test-rust.yml +++ b/.github/workflows/test-rust.yml @@ -25,14 +25,111 @@ concurrency: cancel-in-progress: true jobs: - test: - runs-on: ${{ matrix.platform }} + changes: + runs-on: ubuntu-latest + permissions: + pull-requests: read + outputs: + packages: ${{ steps.filter.outputs.changes }} + steps: + - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + tauri-plugin-app: + - .github/workflows/test-rust.yml + - plugins/app/** + tauri-plugin-authenticator: + - .github/workflows/test-rust.yml + - plugins/authenticator/** + tauri-plugin-autostart: + - .github/workflows/test-rust.yml + - plugins/autostart/** + tauri-plugin-cli: + - .github/workflows/test-rust.yml + - plugins/cli/** + tauri-plugin-clipboard: + - .github/workflows/test-rust.yml + - plugins/clipboard/** + tauri-plugin-dialog: + - .github/workflows/test-rust.yml + - plugins/dialog/** + - plugins/fs/** + tauri-plugin-fs: + - .github/workflows/test-rust.yml + - plugins/fs/** + tauri-plugin-global-shortcut: + - .github/workflows/test-rust.yml + - plugins/global-shortcut/** + tauri-plugin-http: + - .github/workflows/test-rust.yml + - plugins/http/** + - plugins/fs/** + tauri-plugin-localhost: + - .github/workflows/test-rust.yml + - plugins/localhost/** + tauri-plugin-log: + - .github/workflows/test-rust.yml + - plugins/log/** + tauri-plugin-notification: + - .github/workflows/test-rust.yml + - plugins/notification/** + tauri-plugin-os: + - .github/workflows/test-rust.yml + - plugins/os/** + tauri-plugin-persisted-scope: + - .github/workflows/test-rust.yml + - plugins/persisted-scope/** + - plugins/fs/** + tauri-plugin-positioner: + - .github/workflows/test-rust.yml + - plugins/positioner/** + tauri-plugin-process: + - .github/workflows/test-rust.yml + - plugins/process/** + tauri-plugin-shell: + - .github/workflows/test-rust.yml + - plugins/shell/** + tauri-plugin-single-instance: + - .github/workflows/test-rust.yml + - plugins/single-instance/** + tauri-plugin-sql: + - .github/workflows/test-rust.yml + - plugins/sql/** + tauri-plugin-store: + - .github/workflows/test-rust.yml + - plugins/store/** + tauri-plugin-stronghold: + - .github/workflows/test-rust.yml + - plugins/stronghold/** + tauri-plugin-updater: + - .github/workflows/test-rust.yml + - plugins/updater/** + tauri-plugin-upload: + - .github/workflows/test-rust.yml + - plugins/upload/** + tauri-plugin-websocket: + - .github/workflows/test-rust.yml + - plugins/websocket/** + tauri-plugin-window: + - .github/workflows/test-rust.yml + - plugins/window/** + tauri-plugin-window-state: + - .github/workflows/test-rust.yml + - plugins/window-state/** + test: + needs: changes + if: ${{ needs.changes.outputs.packages != '[]' && needs.changes.outputs.packages != '' }} strategy: fail-fast: false matrix: + package: ${{ fromJSON(needs.changes.outputs.packages) }} platform: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.platform }} + steps: - uses: actions/checkout@v3 @@ -43,7 +140,7 @@ jobs: sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev - name: install openssl - if: matrix.platform == 'windows-latest' + if: ${{ matrix.platform == 'windows-latest' && matrix.package == 'tauri-plugin-authenticator' }} run: | echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append vcpkg install openssl:x64-windows-static-md @@ -56,14 +153,18 @@ jobs: working-directory: examples/api run: mkdir dist - - name: build - run: cargo build --workspace --exclude 'tauri-plugin-sql' --all-targets --all-features + - name: test ${{ matrix.package }} + if: matrix.package != 'tauri-plugin-sql' + run: cargo test --package ${{ matrix.package }} --all-targets - - name: build sql:sqlite - run: cargo build --package 'tauri-plugin-sql' --all-targets --features sqlite + - name: test ${{ matrix.package }} --all-features + if: ${{ !contains(fromJSON('["tauri-plugin-http", "tauri-plugin-upload", "tauri-plugin-updater", "tauri-plugin-websocket", "tauri-plugin-sql"]'), matrix.package) }} + run: cargo test --package ${{ matrix.package }} --all-targets --all-features - - name: build sql:mysql - run: cargo build --package 'tauri-plugin-sql' --all-targets --features mysql + - name: test ${{ matrix.package }} mysql + if: matrix.package == 'tauri-plugin-sql' + run: cargo test --package ${{ matrix.package }} --all-targets --no-default-features --features mysql - - name: build sql:postgres - run: cargo build --package 'tauri-plugin-sql' --all-targets --features postgres + - name: test ${{ matrix.package }} postgres + if: matrix.package == 'tauri-plugin-sql' + run: cargo test --package ${{ matrix.package }} --all-targets --no-default-features --features postgres diff --git a/Cargo.lock b/Cargo.lock index 7162dcc7..a652e68d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5756,9 +5756,13 @@ dependencies = [ "futures-util", "log", "native-tls", + "rustls", "tokio", "tokio-native-tls", + "tokio-rustls", "tungstenite", + "webpki", + "webpki-roots", ] [[package]] @@ -5915,10 +5919,12 @@ dependencies = [ "log", "native-tls", "rand 0.8.5", + "rustls", "sha1", "thiserror", "url", "utf-8", + "webpki", ] [[package]] diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index faf4371f..a292cbed 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -19,6 +19,7 @@ http = "0.2" reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } [features] +default = [ "native-tls-vendored" ] multipart = [ "reqwest/multipart" ] native-tls = [ "reqwest/native-tls" ] native-tls-vendored = [ "reqwest/native-tls-vendored" ] diff --git a/plugins/sql/Cargo.toml b/plugins/sql/Cargo.toml index 91a839ac..3b9bd854 100644 --- a/plugins/sql/Cargo.toml +++ b/plugins/sql/Cargo.toml @@ -21,6 +21,7 @@ time = "0.3" tokio = { version = "1", features = ["sync"] } [features] +default = [ "sqlite" ] sqlite = ["sqlx/sqlite"] mysql = ["sqlx/mysql"] postgres = ["sqlx/postgres"] \ No newline at end of file diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index d4f036fa..9f88d468 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -35,6 +35,7 @@ mockito = "0.31" tokio-test = "0.4.2" [features] +default = [ "native-tls-vendored" ] native-tls = [ "reqwest/native-tls" ] native-tls-vendored = [ "reqwest/native-tls-vendored" ] rustls-tls = [ "reqwest/rustls-tls" ] diff --git a/plugins/upload/Cargo.toml b/plugins/upload/Cargo.toml index 49abc6d4..500addfc 100644 --- a/plugins/upload/Cargo.toml +++ b/plugins/upload/Cargo.toml @@ -19,4 +19,10 @@ tokio = { version = "1", features = [ "fs" ] } tokio-util = { version = "0.7", features = [ "codec" ] } reqwest = { version = "0.11", features = [ "json", "stream" ] } futures-util = "0.3" -read-progress-stream = "1.0.0" \ No newline at end of file +read-progress-stream = "1.0.0" + +[features] +default = [ "native-tls-vendored" ] +native-tls = [ "reqwest/native-tls" ] +native-tls-vendored = [ "reqwest/native-tls-vendored" ] +rustls-tls = [ "reqwest/rustls-tls" ] \ No newline at end of file diff --git a/plugins/websocket/Cargo.toml b/plugins/websocket/Cargo.toml index 37eafb5d..94f7a55c 100644 --- a/plugins/websocket/Cargo.toml +++ b/plugins/websocket/Cargo.toml @@ -19,3 +19,9 @@ rand = "0.8" futures-util = "0.3" tokio = { version = "1", features = ["net", "sync"] } tokio-tungstenite = { version = "0.18", features = ["native-tls"] } + +[features] +default = [ "native-tls-vendored" ] +native-tls = [ "tokio-tungstenite/native-tls" ] +native-tls-vendored = [ "tokio-tungstenite/native-tls-vendored" ] +rustls-tls-webpki-roots = [ "tokio-tungstenite/rustls-tls-webpki-roots" ] From 717ae670978feb4492fac1f295998b93f2b9347f Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Thu, 18 May 2023 10:08:37 -0300 Subject: [PATCH 27/64] feat: prepare v2 alpha release (#371) --- .changes/config.json | 160 +++- .changes/pre.json | 4 + .changes/v2-alpha.md | 53 ++ Cargo.lock | 50 +- examples/api/package.json | 26 +- examples/api/src-tauri/Cargo.toml | 34 +- examples/api/src/views/Welcome.svelte | 4 +- package.json | 1 + plugins/app/Cargo.toml | 10 +- plugins/app/package.json | 2 +- plugins/authenticator/Cargo.toml | 20 +- plugins/authenticator/package.json | 2 +- plugins/autostart/Cargo.toml | 20 +- plugins/autostart/package.json | 2 +- plugins/cli/Cargo.toml | 18 +- plugins/cli/package.json | 2 +- plugins/clipboard/Cargo.toml | 20 +- plugins/clipboard/package.json | 2 +- plugins/dialog/Cargo.toml | 22 +- plugins/dialog/package.json | 2 +- plugins/fs/Cargo.toml | 16 +- plugins/fs/package.json | 2 +- plugins/global-shortcut/Cargo.toml | 18 +- plugins/global-shortcut/package.json | 2 +- plugins/http/Cargo.toml | 18 +- plugins/http/package.json | 2 +- plugins/localhost/Cargo.toml | 20 +- plugins/log/Cargo.toml | 18 +- plugins/log/package.json | 2 +- plugins/notification/Cargo.toml | 20 +- plugins/notification/package.json | 2 +- plugins/os/Cargo.toml | 18 +- plugins/os/package.json | 2 +- plugins/persisted-scope/Cargo.toml | 22 +- plugins/positioner/Cargo.toml | 18 +- plugins/positioner/package.json | 2 +- plugins/process/Cargo.toml | 10 +- plugins/process/package.json | 2 +- plugins/shell/Cargo.toml | 18 +- plugins/shell/package.json | 2 +- plugins/single-instance/Cargo.toml | 20 +- plugins/sql/Cargo.toml | 20 +- plugins/sql/package.json | 2 +- plugins/store/Cargo.toml | 20 +- plugins/store/package.json | 2 +- plugins/stronghold/Cargo.toml | 20 +- plugins/stronghold/package.json | 2 +- plugins/updater/Cargo.toml | 16 +- plugins/updater/package.json | 2 +- plugins/updater/tests/app-updater/Cargo.toml | 10 +- plugins/upload/Cargo.toml | 20 +- plugins/upload/package.json | 2 +- plugins/websocket/Cargo.toml | 20 +- plugins/websocket/package.json | 2 +- plugins/window-state/Cargo.toml | 20 +- plugins/window-state/package.json | 2 +- plugins/window/Cargo.toml | 14 +- plugins/window/package.json | 2 +- pnpm-lock.yaml | 756 ++++++++++++++++++- shared/template/Cargo.toml | 20 +- shared/template/package.json | 2 +- 61 files changed, 1259 insertions(+), 383 deletions(-) create mode 100644 .changes/pre.json create mode 100644 .changes/v2-alpha.md diff --git a/.changes/config.json b/.changes/config.json index f74e1a5f..64a490ac 100644 --- a/.changes/config.json +++ b/.changes/config.json @@ -33,78 +33,130 @@ } }, "packages": { + "api-example": { + "path": "./examples/api/src-tauri", + "manager": "rust", + "publish": false, + "dependencies": [ + "app", + "log-plugin", + "cli", + "clipboard", + "dialog", + "fs", + "global-shortcut", + "http", + "notification", + "os", + "process", + "shell", + "updater", + "window" + ] + }, + "api-example-js": { + "path": "./examples/api", + "manager": "javascript", + "publish": false, + "dependencies": [ + "app-js", + "log-js", + "cli-js", + "clipboard-js", + "dialog-js", + "fs-js", + "global-shortcut-js", + "http-js", + "notification-js", + "os-js", + "process-js", + "shell-js", + "updater-js", + "window-js" + ] + }, + + "app": { + "path": "./plugins/app", + "manager": "rust" + }, + "app-js": { + "path": "./plugins/app", + "manager": "javascript" + }, + "authenticator": { "path": "./plugins/authenticator", - "manager": "rust-disabled" + "manager": "rust" }, "authenticator-js": { "path": "./plugins/authenticator", - "manager": "javascript-disabled" + "manager": "javascript" }, "autostart": { "path": "./plugins/autostart", - "manager": "rust-disabled" + "manager": "rust" }, "autostart-js": { "path": "./plugins/autostart", - "manager": "javascript-disabled" + "manager": "javascript" }, "cli": { "path": "./plugins/cli", - "manager": "rust-disabled" + "manager": "rust" }, "cli-js": { "path": "./plugins/cli", - "manager": "javascript-disabled" + "manager": "javascript" }, "clipboard": { "path": "./plugins/clipboard", - "manager": "rust-disabled" + "manager": "rust" }, "clipboard-js": { "path": "./plugins/clipboard", - "manager": "javascript-disabled" + "manager": "javascript" }, "dialog": { "path": "./plugins/dialog", - "manager": "rust-disabled", + "manager": "rust", "dependencies": ["fs"] }, "dialog-js": { "path": "./plugins/dialog", - "manager": "javascript-disabled" + "manager": "javascript" }, "fs": { "path": "./plugins/fs", - "manager": "rust-disabled" + "manager": "rust" }, "fs-js": { "path": "./plugins/fs", - "manager": "javascript-disabled" + "manager": "javascript" }, "global-shortcut": { "path": "./plugins/global-shortcut", - "manager": "rust-disabled" + "manager": "rust" }, "global-shortcut-js": { "path": "./plugins/global-shortcut", - "manager": "javascript-disabled" + "manager": "javascript" }, "http": { "path": "./plugins/http", - "manager": "rust-disabled", + "manager": "rust", "dependencies": ["fs"] }, "http-js": { "path": "./plugins/http", - "manager": "javascript-disabled" + "manager": "javascript" }, "localhost": { @@ -112,22 +164,31 @@ "manager": "rust" }, - "log": { + "log-plugin": { "path": "./plugins/log", - "manager": "rust-disabled" + "manager": "rust" }, "log-js": { "path": "./plugins/log", - "manager": "javascript-disabled" + "manager": "javascript" }, "notification": { "path": "./plugins/notification", - "manager": "rust-disabled" + "manager": "rust" }, "notification-js": { "path": "./plugins/notification", - "manager": "javascript-disabled" + "manager": "javascript" + }, + + "os": { + "path": "./plugins/os", + "manager": "rust" + }, + "os-js": { + "path": "./plugins/os", + "manager": "javascript" }, "persisted-scope": { @@ -142,66 +203,93 @@ }, "positioner-js": { "path": "./plugins/positioner", - "manager": "javascript-disabled" + "manager": "javascript" + }, + + "process": { + "path": "./plugins/process", + "manager": "rust" + }, + "process-js": { + "path": "./plugins/process", + "manager": "javascript" }, "shell": { "path": "./plugins/shell", - "manager": "rust-disabled" + "manager": "rust" }, "shell-js": { "path": "./plugins/shell", - "manager": "javascript-disabled" + "manager": "javascript" }, "single-instance": { "path": "./plugins/single-instance", - "manager": "rust-disabled" + "manager": "rust" }, "sql": { "path": "./plugins/sql", - "manager": "rust-disabled" + "manager": "rust" }, "sql-js": { "path": "./plugins/sql", - "manager": "javascript-disabled" + "manager": "javascript" }, "store": { "path": "./plugins/store", - "manager": "rust-disabled" + "manager": "rust" }, "store-js": { "path": "./plugins/store", - "manager": "javascript-disabled" + "manager": "javascript" }, "stronghold": { "path": "./plugins/stronghold", - "manager": "rust-disabled" + "manager": "rust" }, "stronghold-js": { "path": "./plugins/stronghold", - "manager": "javascript-disabled" + "manager": "javascript" + }, + + "updater": { + "path": "./plugins/updater", + "manager": "rust" + }, + "updater-js": { + "path": "./plugins/updater", + "manager": "javascript" }, "upload": { "path": "./plugins/upload", - "manager": "rust-disabled" + "manager": "rust" }, "upload-js": { "path": "./plugins/upload", - "manager": "javascript-disabled" + "manager": "javascript" }, "websocket": { "path": "./plugins/websocket", - "manager": "rust-disabled" + "manager": "rust" }, "websocket-js": { "path": "./plugins/websocket", - "manager": "javascript-disabled" + "manager": "javascript" + }, + + "window": { + "path": "./plugins/window", + "manager": "rust" + }, + "window-js": { + "path": "./plugins/window", + "manager": "javascript" }, "window-state": { @@ -210,7 +298,7 @@ }, "window-state-js": { "path": "./plugins/window-state", - "manager": "javascript-disabled" + "manager": "javascript" } } } diff --git a/.changes/pre.json b/.changes/pre.json new file mode 100644 index 00000000..5914ed91 --- /dev/null +++ b/.changes/pre.json @@ -0,0 +1,4 @@ +{ + "tag": "alpha", + "changes": [] +} diff --git a/.changes/v2-alpha.md b/.changes/v2-alpha.md new file mode 100644 index 00000000..6c8e7894 --- /dev/null +++ b/.changes/v2-alpha.md @@ -0,0 +1,53 @@ +--- +"app": major +"app-js": major +"authenticator": major +"authenticator-js": major +"autostart": major +"autostart-js": major +"cli": major +"cli-js": major +"clipboard": major +"clipboard-js": major +"dialog": major +"dialog-js": major +"fs": major +"fs-js": major +"global-shortcut": major +"global-shortcut-js": major +"http": major +"http-js": major +"localhost": major +"log-plugin": major +"log-js": major +"notification": major +"notification-js": major +"os": major +"os-js": major +"persisted-scope": major +"positioner": major +"positioner-js": major +"process": major +"process-js": major +"shell": major +"shell-js": major +"single-instance": major +"sql": major +"sql-js": major +"store": major +"store-js": major +"stronghold": major +"stronghold-js": major +"updater": major +"updater-js": major +"upload": major +"upload-js": major +"websocket": major +"websocket-js": major +"window": major +"window-js": major +"window-state": major +"window-state-js": major +--- + +First v2 alpha release! diff --git a/Cargo.lock b/Cargo.lock index a652e68d..650b88bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5067,14 +5067,14 @@ dependencies = [ [[package]] name = "tauri-plugin-app" -version = "0.0.0" +version = "1.0.0" dependencies = [ "tauri", ] [[package]] name = "tauri-plugin-authenticator" -version = "0.0.0" +version = "1.0.0" dependencies = [ "authenticator", "base64 0.21.0", @@ -5093,7 +5093,7 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" -version = "0.0.0" +version = "1.0.0" dependencies = [ "auto-launch", "log", @@ -5105,7 +5105,7 @@ dependencies = [ [[package]] name = "tauri-plugin-cli" -version = "0.0.0" +version = "1.0.0" dependencies = [ "clap", "log", @@ -5117,7 +5117,7 @@ dependencies = [ [[package]] name = "tauri-plugin-clipboard" -version = "0.0.0" +version = "1.0.0" dependencies = [ "arboard", "log", @@ -5130,7 +5130,7 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "0.0.0" +version = "1.0.0" dependencies = [ "glib", "log", @@ -5146,7 +5146,7 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "0.0.0" +version = "1.0.0" dependencies = [ "anyhow", "glob", @@ -5160,7 +5160,7 @@ dependencies = [ [[package]] name = "tauri-plugin-global-shortcut" -version = "0.0.0" +version = "1.0.0" dependencies = [ "global-hotkey", "log", @@ -5172,7 +5172,7 @@ dependencies = [ [[package]] name = "tauri-plugin-http" -version = "0.0.0" +version = "1.0.0" dependencies = [ "bytes 1.4.0", "glob", @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "tauri-plugin-localhost" -version = "0.1.0" +version = "1.0.0" dependencies = [ "http", "log", @@ -5202,7 +5202,7 @@ dependencies = [ [[package]] name = "tauri-plugin-log" -version = "0.0.0" +version = "1.0.0" dependencies = [ "android_logger", "byte-unit", @@ -5221,7 +5221,7 @@ dependencies = [ [[package]] name = "tauri-plugin-notification" -version = "0.1.0" +version = "1.0.0" dependencies = [ "log", "notify-rust", @@ -5239,7 +5239,7 @@ dependencies = [ [[package]] name = "tauri-plugin-os" -version = "0.0.0" +version = "1.0.0" dependencies = [ "log", "os_info", @@ -5251,7 +5251,7 @@ dependencies = [ [[package]] name = "tauri-plugin-persisted-scope" -version = "0.1.0" +version = "1.0.0" dependencies = [ "aho-corasick 1.0.1", "bincode", @@ -5277,14 +5277,14 @@ dependencies = [ [[package]] name = "tauri-plugin-process" -version = "0.0.0" +version = "1.0.0" dependencies = [ "tauri", ] [[package]] name = "tauri-plugin-shell" -version = "0.0.0" +version = "1.0.0" dependencies = [ "encoding_rs", "log", @@ -5300,7 +5300,7 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "0.0.0" +version = "1.0.0" dependencies = [ "log", "serde", @@ -5313,7 +5313,7 @@ dependencies = [ [[package]] name = "tauri-plugin-sql" -version = "0.0.0" +version = "1.0.0" dependencies = [ "futures-core", "log", @@ -5328,7 +5328,7 @@ dependencies = [ [[package]] name = "tauri-plugin-store" -version = "0.0.0" +version = "1.0.0" dependencies = [ "log", "serde", @@ -5339,7 +5339,7 @@ dependencies = [ [[package]] name = "tauri-plugin-stronghold" -version = "0.0.0" +version = "1.0.0" dependencies = [ "hex", "iota-crypto 0.17.1", @@ -5356,7 +5356,7 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "0.0.0" +version = "1.0.0" dependencies = [ "base64 0.21.0", "dirs-next", @@ -5384,7 +5384,7 @@ dependencies = [ [[package]] name = "tauri-plugin-upload" -version = "0.0.0" +version = "1.0.0" dependencies = [ "futures-util", "log", @@ -5400,7 +5400,7 @@ dependencies = [ [[package]] name = "tauri-plugin-websocket" -version = "0.0.0" +version = "1.0.0" dependencies = [ "futures-util", "log", @@ -5415,7 +5415,7 @@ dependencies = [ [[package]] name = "tauri-plugin-window" -version = "0.0.0" +version = "1.0.0" dependencies = [ "serde", "tauri", @@ -5424,7 +5424,7 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "0.1.0" +version = "1.0.0" dependencies = [ "bincode", "bitflags 2.2.1", diff --git a/examples/api/package.json b/examples/api/package.json index 036aa3db..56e9e165 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -11,19 +11,19 @@ "@tauri-apps/api": "2.0.0-alpha.3", "@tauri-apps/cli": "2.0.0-alpha.8", "@zerodevx/svelte-json-view": "0.2.1", - "@tauri-apps/plugin-app": "0.0.0", - "@tauri-apps/plugin-cli": "0.0.0", - "@tauri-apps/plugin-clipboard": "0.0.0", - "@tauri-apps/plugin-dialog": "0.0.0", - "@tauri-apps/plugin-fs": "0.0.0", - "@tauri-apps/plugin-global-shortcut": "0.0.0", - "@tauri-apps/plugin-http": "0.0.0", - "@tauri-apps/plugin-notification": "0.0.0", - "@tauri-apps/plugin-os": "0.0.0", - "@tauri-apps/plugin-process": "0.0.0", - "@tauri-apps/plugin-shell": "0.0.0", - "@tauri-apps/plugin-updater": "0.0.0", - "@tauri-apps/plugin-window": "0.0.0" + "@tauri-apps/plugin-app": "1.0.0", + "@tauri-apps/plugin-cli": "1.0.0", + "@tauri-apps/plugin-clipboard": "1.0.0", + "@tauri-apps/plugin-dialog": "1.0.0", + "@tauri-apps/plugin-fs": "1.0.0", + "@tauri-apps/plugin-global-shortcut": "1.0.0", + "@tauri-apps/plugin-http": "1.0.0", + "@tauri-apps/plugin-notification": "1.0.0", + "@tauri-apps/plugin-os": "1.0.0", + "@tauri-apps/plugin-process": "1.0.0", + "@tauri-apps/plugin-shell": "1.0.0", + "@tauri-apps/plugin-updater": "1.0.0", + "@tauri-apps/plugin-window": "1.0.0" }, "devDependencies": { "@iconify-json/codicon": "^1.1.10", diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 489ea2ed..9e98d669 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -13,21 +13,21 @@ crate-type = ["staticlib", "cdylib", "rlib"] tauri-build = { workspace = true, features = ["codegen", "isolation"] } [dependencies] -serde_json.workspace = true -serde.workspace = true +serde_json = { workspace = true } +serde = { workspace = true } tiny_http = "0.11" -log.workspace = true -tauri-plugin-app = { path = "../../../plugins/app" } -tauri-plugin-log = { path = "../../../plugins/log" } -tauri-plugin-fs = { path = "../../../plugins/fs" } -tauri-plugin-clipboard = { path = "../../../plugins/clipboard" } -tauri-plugin-dialog = { path = "../../../plugins/dialog" } -tauri-plugin-http = { path = "../../../plugins/http", features = [ "multipart" ] } -tauri-plugin-notification = { path = "../../../plugins/notification", features = [ "windows7-compat" ] } -tauri-plugin-os = { path = "../../../plugins/os" } -tauri-plugin-process = { path = "../../../plugins/process" } -tauri-plugin-shell = { path = "../../../plugins/shell" } -tauri-plugin-window = { path = "../../../plugins/window", features = ["devtools", "icon-ico", "icon-png"] } +log = { workspace = true } +tauri-plugin-app = { path = "../../../plugins/app", version = "1.0.0" } +tauri-plugin-log = { path = "../../../plugins/log", version = "1.0.0" } +tauri-plugin-fs = { path = "../../../plugins/fs", version = "1.0.0" } +tauri-plugin-clipboard = { path = "../../../plugins/clipboard", version = "1.0.0" } +tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "1.0.0" } +tauri-plugin-http = { path = "../../../plugins/http", version = "1.0.0", features = [ "multipart" ] } +tauri-plugin-notification = { path = "../../../plugins/notification", version = "1.0.0", features = [ "windows7-compat" ] } +tauri-plugin-os = { path = "../../../plugins/os", version = "1.0.0" } +tauri-plugin-process = { path = "../../../plugins/process", version = "1.0.0" } +tauri-plugin-shell = { path = "../../../plugins/shell", version = "1.0.0" } +tauri-plugin-window = { path = "../../../plugins/window", version = "1.0.0", features = ["devtools", "icon-ico", "icon-png"] } [dependencies.tauri] workspace = true @@ -41,9 +41,9 @@ features = [ ] [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] -tauri-plugin-cli = { path = "../../../plugins/cli" } -tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut" } -tauri-plugin-updater = { path = "../../../plugins/updater" } +tauri-plugin-cli = { path = "../../../plugins/cli", version = "1.0.0" } +tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut", version = "1.0.0" } +tauri-plugin-updater = { path = "../../../plugins/updater", version = "1.0.0" } [target."cfg(target_os = \"windows\")".dependencies] window-shadows = "0.2" diff --git a/examples/api/src/views/Welcome.svelte b/examples/api/src/views/Welcome.svelte index a7a50f0f..09eb1405 100644 --- a/examples/api/src/views/Welcome.svelte +++ b/examples/api/src/views/Welcome.svelte @@ -2,8 +2,8 @@ import { getName, getVersion, getTauriVersion } from "@tauri-apps/plugin-app"; import { relaunch, exit } from "@tauri-apps/plugin-process"; - let version = "0.0.0"; - let tauriVersion = "0.0.0"; + let version = "1.0.0"; + let tauriversion = "1.0.0"; let appName = "Unknown"; getName().then((n) => { diff --git a/package.json b/package.json index 4a3df949..868b5cef 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@rollup/plugin-typescript": "^11.1.0", "@typescript-eslint/eslint-plugin": "^5.58.0", "@typescript-eslint/parser": "^5.58.0", + "covector": "^0.9.0", "eslint": "^8.38.0", "eslint-config-prettier": "^8.8.0", "eslint-config-standard-with-typescript": "^34.0.1", diff --git a/plugins/app/Cargo.toml b/plugins/app/Cargo.toml index 74f60534..521ce69c 100644 --- a/plugins/app/Cargo.toml +++ b/plugins/app/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "tauri-plugin-app" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -tauri.workspace = true +tauri = { workspace = true } diff --git a/plugins/app/package.json b/plugins/app/package.json index 4580aa09..5142e85a 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-app", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/authenticator/Cargo.toml b/plugins/authenticator/Cargo.toml index 007e63f4..7ee8fb22 100644 --- a/plugins/authenticator/Cargo.toml +++ b/plugins/authenticator/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-authenticator" -version = "0.0.0" +version = "1.0.0" description = "Use hardware security-keys in your Tauri App." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } authenticator = "0.3.1" once_cell = "1" sha2 = "0.10" diff --git a/plugins/authenticator/package.json b/plugins/authenticator/package.json index fa52d666..8402ac3f 100644 --- a/plugins/authenticator/package.json +++ b/plugins/authenticator/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-authenticator", - "version": "0.0.0", + "version": "1.0.0", "description": "Use hardware security-keys in your Tauri App.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/autostart/Cargo.toml b/plugins/autostart/Cargo.toml index 8d0abc50..5ff1f3b9 100644 --- a/plugins/autostart/Cargo.toml +++ b/plugins/autostart/Cargo.toml @@ -1,18 +1,18 @@ [package] name = "tauri-plugin-autostart" -version = "0.0.0" +version = "1.0.0" description = "Automatically launch your application at startup." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } auto-launch = "0.4" \ No newline at end of file diff --git a/plugins/autostart/package.json b/plugins/autostart/package.json index c2d71ae2..60dbad28 100644 --- a/plugins/autostart/package.json +++ b/plugins/autostart/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-autostart", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/cli/Cargo.toml b/plugins/cli/Cargo.toml index f6dc2cd3..2988a077 100644 --- a/plugins/cli/Cargo.toml +++ b/plugins/cli/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-plugin-cli" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } clap = { version = "4", features = ["string"] } diff --git a/plugins/cli/package.json b/plugins/cli/package.json index 69874fc3..ff10d73b 100644 --- a/plugins/cli/package.json +++ b/plugins/cli/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-cli", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/clipboard/Cargo.toml b/plugins/clipboard/Cargo.toml index 1b02f6fc..0d3b1e5e 100644 --- a/plugins/clipboard/Cargo.toml +++ b/plugins/clipboard/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-clipboard" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } links = "tauri-plugin-clipboard" [build-dependencies] -tauri-build.workspace = true +tauri-build = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] arboard = "3" diff --git a/plugins/clipboard/package.json b/plugins/clipboard/package.json index 22425919..d77c8497 100644 --- a/plugins/clipboard/package.json +++ b/plugins/clipboard/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-clipboard", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/dialog/Cargo.toml b/plugins/dialog/Cargo.toml index 45a89d92..60f31dfc 100644 --- a/plugins/dialog/Cargo.toml +++ b/plugins/dialog/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-dialog" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } links = "tauri-plugin-dialog" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true -tauri-plugin-fs = { path = "../fs", version = "0.0.0" } +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } +tauri-plugin-fs = { path = "../fs", version = "1.0.0" } [target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] glib = "0.16" @@ -24,4 +24,4 @@ rfd = { version = "0.11", features = [ "gtk3", "common-controls-v6" ] } raw-window-handle = "0.5" [build-dependencies] -tauri-build.workspace = true +tauri-build = { workspace = true } diff --git a/plugins/dialog/package.json b/plugins/dialog/package.json index cb5d7427..ad1b6523 100644 --- a/plugins/dialog/package.json +++ b/plugins/dialog/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-dialog", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/fs/Cargo.toml b/plugins/fs/Cargo.toml index 9ec49e97..59b24d61 100644 --- a/plugins/fs/Cargo.toml +++ b/plugins/fs/Cargo.toml @@ -1,18 +1,18 @@ [package] name = "tauri-plugin-fs" -version = "0.0.0" +version = "1.0.0" description = "Access the file system." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -tauri.workspace = true -thiserror.workspace = true +serde = { workspace = true } +tauri = { workspace = true } +thiserror = { workspace = true } anyhow = "1" uuid = { version = "1", features = ["v4"] } glob = "0.3" diff --git a/plugins/fs/package.json b/plugins/fs/package.json index 153e30c8..129a2b38 100644 --- a/plugins/fs/package.json +++ b/plugins/fs/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-fs", - "version": "0.0.0", + "version": "1.0.0", "description": "Access the file system.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/global-shortcut/Cargo.toml b/plugins/global-shortcut/Cargo.toml index 19cd3c92..bf685739 100644 --- a/plugins/global-shortcut/Cargo.toml +++ b/plugins/global-shortcut/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-plugin-global-shortcut" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } global-hotkey = "0.2.1" diff --git a/plugins/global-shortcut/package.json b/plugins/global-shortcut/package.json index 0d0fbb77..28574ff3 100644 --- a/plugins/global-shortcut/package.json +++ b/plugins/global-shortcut/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-global-shortcut", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index a292cbed..40863f17 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -1,16 +1,16 @@ [package] name = "tauri-plugin-http" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -thiserror.workspace = true -tauri-plugin-fs = { path = "../fs", version = "0.0.0" } +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +thiserror = { workspace = true } +tauri-plugin-fs = { path = "../fs", version = "1.0.0" } glob = "0.3" rand = "0.8" bytes = { version = "1", features = [ "serde" ] } diff --git a/plugins/http/package.json b/plugins/http/package.json index cd3e986f..c349369b 100644 --- a/plugins/http/package.json +++ b/plugins/http/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-http", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/localhost/Cargo.toml b/plugins/localhost/Cargo.toml index 12fad9a0..5f303476 100644 --- a/plugins/localhost/Cargo.toml +++ b/plugins/localhost/Cargo.toml @@ -1,19 +1,19 @@ [package] name = "tauri-plugin-localhost" -version = "0.1.0" +version = "1.0.0" description = "Expose your apps assets through a localhost server instead of the default custom protocol." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } tiny_http = "0.12" http = "0.2" \ No newline at end of file diff --git a/plugins/log/Cargo.toml b/plugins/log/Cargo.toml index c3370549..9e4c8508 100644 --- a/plugins/log/Cargo.toml +++ b/plugins/log/Cargo.toml @@ -1,21 +1,21 @@ [package] name = "tauri-plugin-log" -version = "0.0.0" +version = "1.0.0" description = "Configurable logging for your Tauri app." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build.workspace = true +tauri-build = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } serde_repr = "0.1" byte-unit = "4.0" log = { workspace = true, features = ["kv_unstable"] } diff --git a/plugins/log/package.json b/plugins/log/package.json index 770a147d..e0c33dd5 100644 --- a/plugins/log/package.json +++ b/plugins/log/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-log", - "version": "0.0.0", + "version": "1.0.0", "description": "Configurable logging for your Tauri app.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/notification/Cargo.toml b/plugins/notification/Cargo.toml index 721cb3e3..a6660eba 100644 --- a/plugins/notification/Cargo.toml +++ b/plugins/notification/Cargo.toml @@ -1,22 +1,22 @@ [package] name = "tauri-plugin-notification" -version = "0.1.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } links = "tauri-plugin-notification" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build.workspace = true +tauri-build = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } rand = "0.8" time = { version = "0.3", features = ["serde", "parsing", "formatting"] } url = { version = "2", features = ["serde"] } diff --git a/plugins/notification/package.json b/plugins/notification/package.json index da51ff92..00bef173 100644 --- a/plugins/notification/package.json +++ b/plugins/notification/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-notification", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/os/Cargo.toml b/plugins/os/Cargo.toml index e43f25df..3dfc669c 100644 --- a/plugins/os/Cargo.toml +++ b/plugins/os/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-plugin-os" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } os_info = "3" diff --git a/plugins/os/package.json b/plugins/os/package.json index a1a84181..5552fdd4 100644 --- a/plugins/os/package.json +++ b/plugins/os/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-os", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/persisted-scope/Cargo.toml b/plugins/persisted-scope/Cargo.toml index 841fc5c1..ec7ecf86 100644 --- a/plugins/persisted-scope/Cargo.toml +++ b/plugins/persisted-scope/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-persisted-scope" -version = "0.1.0" +version = "1.0.0" description = "Save filesystem and asset scopes and restore them when the app is reopened." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } aho-corasick = "1.0" bincode = "1" -tauri-plugin-fs = { path = "../fs", version = "0.0.0" } +tauri-plugin-fs = { path = "../fs", version = "1.0.0" } diff --git a/plugins/positioner/Cargo.toml b/plugins/positioner/Cargo.toml index dcab86c9..11623b33 100644 --- a/plugins/positioner/Cargo.toml +++ b/plugins/positioner/Cargo.toml @@ -2,19 +2,19 @@ name = "tauri-plugin-positioner" version = "1.0.4" description = "Position your windows at well-known locations." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } serde_repr = "0.1" [features] diff --git a/plugins/positioner/package.json b/plugins/positioner/package.json index 3adfef55..c4709f8d 100644 --- a/plugins/positioner/package.json +++ b/plugins/positioner/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-positioner", - "version": "0.2.7", + "version": "1.0.0", "description": "Position your windows at well-known locations.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/process/Cargo.toml b/plugins/process/Cargo.toml index f9025a7a..7a44f481 100644 --- a/plugins/process/Cargo.toml +++ b/plugins/process/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "tauri-plugin-process" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -tauri.workspace = true +tauri = { workspace = true } diff --git a/plugins/process/package.json b/plugins/process/package.json index ca0596fb..aca539de 100644 --- a/plugins/process/package.json +++ b/plugins/process/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-process", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/shell/Cargo.toml b/plugins/shell/Cargo.toml index fa517099..a9eb609d 100644 --- a/plugins/shell/Cargo.toml +++ b/plugins/shell/Cargo.toml @@ -1,16 +1,16 @@ [package] name = "tauri-plugin-shell" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } shared_child = "1" regex = "1" open = "4" diff --git a/plugins/shell/package.json b/plugins/shell/package.json index 42ab5b33..3fe86628 100644 --- a/plugins/shell/package.json +++ b/plugins/shell/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-shell", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/single-instance/Cargo.toml b/plugins/single-instance/Cargo.toml index be46f3aa..2baa69e9 100644 --- a/plugins/single-instance/Cargo.toml +++ b/plugins/single-instance/Cargo.toml @@ -1,21 +1,21 @@ [package] name = "tauri-plugin-single-instance" -version = "0.0.0" +version = "1.0.0" description = "Ensure a single instance of your tauri app is running." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } exclude = ["/examples"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } [target.'cfg(target_os = "windows")'.dependencies.windows-sys] version = "0.48" diff --git a/plugins/sql/Cargo.toml b/plugins/sql/Cargo.toml index 3b9bd854..00660c6e 100644 --- a/plugins/sql/Cargo.toml +++ b/plugins/sql/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-sql" -version = "0.0.0" +version = "1.0.0" description = "Interface with SQL databases." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } futures-core = "0.3" sqlx = { version = "0.6", features = ["runtime-tokio-rustls", "json", "time"] } time = "0.3" diff --git a/plugins/sql/package.json b/plugins/sql/package.json index e67a9398..907555b0 100644 --- a/plugins/sql/package.json +++ b/plugins/sql/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-sql", - "version": "0.0.0", + "version": "1.0.0", "description": "Interface with SQL databases", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/store/Cargo.toml b/plugins/store/Cargo.toml index 626dbebc..3386b9fb 100644 --- a/plugins/store/Cargo.toml +++ b/plugins/store/Cargo.toml @@ -1,17 +1,17 @@ [package] name = "tauri-plugin-store" -version = "0.0.0" +version = "1.0.0" description = "Simple, persistent key-value store." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true \ No newline at end of file +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } \ No newline at end of file diff --git a/plugins/store/package.json b/plugins/store/package.json index 7f48475f..1de3f640 100644 --- a/plugins/store/package.json +++ b/plugins/store/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-store", - "version": "0.0.0", + "version": "1.0.0", "description": "Simple, persistent key-value store.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/stronghold/Cargo.toml b/plugins/stronghold/Cargo.toml index fb3ac3b8..80d04b0f 100644 --- a/plugins/stronghold/Cargo.toml +++ b/plugins/stronghold/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-stronghold" -version = "0.0.0" +version = "1.0.0" description = "Store secrets and keys using the IOTA Stronghold encrypted database." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } iota_stronghold = "1" iota-crypto = "0.17" hex = "0.4" diff --git a/plugins/stronghold/package.json b/plugins/stronghold/package.json index 371b27c8..d6dc517a 100644 --- a/plugins/stronghold/package.json +++ b/plugins/stronghold/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-stronghold", - "version": "0.0.0", + "version": "1.0.0", "description": "Store secrets and keys using the IOTA Stronghold encrypted database.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index 9f88d468..a5cd01ed 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -1,15 +1,15 @@ [package] name = "tauri-plugin-updater" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -tauri.workspace = true -serde.workspace = true -serde_json.workspace = true -thiserror.workspace = true +tauri = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +thiserror = { workspace = true } tokio = "1" reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } diff --git a/plugins/updater/package.json b/plugins/updater/package.json index 1589e979..c995086c 100644 --- a/plugins/updater/package.json +++ b/plugins/updater/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-updater", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/updater/tests/app-updater/Cargo.toml b/plugins/updater/tests/app-updater/Cargo.toml index 0d09ee9e..e3f94814 100644 --- a/plugins/updater/tests/app-updater/Cargo.toml +++ b/plugins/updater/tests/app-updater/Cargo.toml @@ -1,15 +1,15 @@ [package] name = "app-updater" version = "0.1.0" -edition.workspace = true +edition = { workspace = true } [build-dependencies] -tauri-build.workspace = true +tauri-build = { workspace = true } [dependencies] -tauri.workspace = true -serde.workspace = true -serde_json.workspace = true +tauri = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } tauri-plugin-updater = { path = "../.." } tiny_http = "0.11" time = { version = "0.3", features = ["formatting"] } diff --git a/plugins/upload/Cargo.toml b/plugins/upload/Cargo.toml index 500addfc..e027968e 100644 --- a/plugins/upload/Cargo.toml +++ b/plugins/upload/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-upload" -version = "0.0.0" +version = "1.0.0" description = "Upload files from disk to a remote server over HTTP." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } tokio = { version = "1", features = [ "fs" ] } tokio-util = { version = "0.7", features = [ "codec" ] } reqwest = { version = "0.11", features = [ "json", "stream" ] } diff --git a/plugins/upload/package.json b/plugins/upload/package.json index afa43371..bf3233ac 100644 --- a/plugins/upload/package.json +++ b/plugins/upload/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-upload", - "version": "0.0.0", + "version": "1.0.0", "description": "Upload files from disk to a remote server over HTTP.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/websocket/Cargo.toml b/plugins/websocket/Cargo.toml index 94f7a55c..b396bf27 100644 --- a/plugins/websocket/Cargo.toml +++ b/plugins/websocket/Cargo.toml @@ -1,20 +1,20 @@ [package] name = "tauri-plugin-websocket" -version = "0.0.0" -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +version = "1.0.0" +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } exclude = ["/examples"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } rand = "0.8" futures-util = "0.3" tokio = { version = "1", features = ["net", "sync"] } diff --git a/plugins/websocket/package.json b/plugins/websocket/package.json index e9b9f5c3..7142f964 100644 --- a/plugins/websocket/package.json +++ b/plugins/websocket/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-websocket", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/window-state/Cargo.toml b/plugins/window-state/Cargo.toml index 19693f36..cd5cc835 100644 --- a/plugins/window-state/Cargo.toml +++ b/plugins/window-state/Cargo.toml @@ -1,19 +1,19 @@ [package] name = "tauri-plugin-window-state" -version = "0.1.0" +version = "1.0.0" description = "Save window positions and sizes and restore them when the app is reopened." -authors.workspace = true -license.workspace = true -edition.workspace = true -rust-version.workspace = true +authors = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } bincode = "1.3" bitflags = "2" diff --git a/plugins/window-state/package.json b/plugins/window-state/package.json index c564eca3..19f384a3 100644 --- a/plugins/window-state/package.json +++ b/plugins/window-state/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-window-state", - "version": "0.0.0", + "version": "1.0.0", "description": "Save window positions and sizes and restore them when the app is reopened.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/window/Cargo.toml b/plugins/window/Cargo.toml index 60500a09..e274079a 100644 --- a/plugins/window/Cargo.toml +++ b/plugins/window/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-plugin-window" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } [dependencies] -tauri.workspace = true -serde.workspace = true -thiserror.workspace = true +tauri = { workspace = true } +serde = { workspace = true } +thiserror = { workspace = true } [features] icon-png = ["tauri/icon-png"] diff --git a/plugins/window/package.json b/plugins/window/package.json index 53ceec55..578d58bf 100644 --- a/plugins/window/package.json +++ b/plugins/window/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-window", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dceddd2f..464bc7e9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,6 +19,9 @@ importers: '@typescript-eslint/parser': specifier: ^5.58.0 version: 5.59.1(eslint@8.39.0)(typescript@5.0.4) + covector: + specifier: ^0.9.0 + version: 0.9.0 eslint: specifier: ^8.38.0 version: 8.39.0 @@ -59,43 +62,43 @@ importers: specifier: 2.0.0-alpha.8 version: 2.0.0-alpha.8 '@tauri-apps/plugin-app': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/app '@tauri-apps/plugin-cli': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/cli '@tauri-apps/plugin-clipboard': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/clipboard '@tauri-apps/plugin-dialog': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/dialog '@tauri-apps/plugin-fs': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/fs '@tauri-apps/plugin-global-shortcut': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/global-shortcut '@tauri-apps/plugin-http': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/http '@tauri-apps/plugin-notification': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/notification '@tauri-apps/plugin-os': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/os '@tauri-apps/plugin-process': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/process '@tauri-apps/plugin-shell': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/shell '@tauri-apps/plugin-updater': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/updater '@tauri-apps/plugin-window': - specifier: 0.0.0 + specifier: 1.0.0 version: link:../../plugins/window '@zerodevx/svelte-json-view': specifier: 0.2.1 @@ -403,6 +406,130 @@ packages: resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} dev: true + /@covector/apply@0.8.0: + resolution: {integrity: sha512-t/yDcj9kzLl0NjmA86lET5ePGmGneHtcTlENdDEoWiJvLtjgtrCg9NcxMBHImEwIdUi1EsLQw9MgpWEZSMmtRg==} + dependencies: + '@covector/files': 0.6.1 + effection: 2.0.6 + lodash: 4.17.21 + semver: 7.3.8 + transitivePeerDependencies: + - encoding + dev: true + + /@covector/assemble@0.10.0: + resolution: {integrity: sha512-Ug8NMj/tEbRB3ZE7DhVL86AJiymi3T7AE6gBKVlWjSOQsAfj10bLRUUYXUrpFpt0uf1UGxldaqJshp9qemRKsA==} + dependencies: + '@covector/command': 0.6.1 + '@covector/files': 0.6.1 + effection: 2.0.6 + js-yaml: 4.1.0 + lodash: 4.17.21 + remark-frontmatter: 3.0.0 + remark-parse: 9.0.0 + remark-stringify: 9.0.1 + unified: 9.2.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@covector/changelog@0.8.0: + resolution: {integrity: sha512-INSuWMdGt96gkafwF+lK3o4113tqAuBNEP6VxjWGVUX4LRKRZlndwLua1Ckjc7TV5pMMfSTSUgBuc7AF/p2uzA==} + dependencies: + '@covector/files': 0.6.1 + effection: 2.0.6 + lodash: 4.17.21 + remark-parse: 9.0.0 + remark-stringify: 9.0.1 + unified: 9.2.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@covector/command@0.6.1: + resolution: {integrity: sha512-H44DLRVqRp/GarYqt1X1yo26+hBYqrrFqUstIb6b/+KRuuwN57VlHCvTlOnEK4Mn5bGZErFDrRiJ5yRCdMDYNw==} + dependencies: + '@effection/process': 2.1.2 + effection: 2.0.6 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - encoding + dev: true + + /@covector/files@0.6.1: + resolution: {integrity: sha512-JQuh7LUqOvymOg/TYOfVZJJiXOrtCy2FD7/sNCAqabN6yOiVvY2kHQ134rqI20YnYtXghEbO7BZSPiyrCOiIYg==} + dependencies: + '@iarna/toml': 2.2.5 + '@tauri-apps/toml': 2.2.4 + globby: 11.1.0 + js-yaml: 4.1.0 + semver: 7.3.8 + dev: true + + /@effection/channel@2.0.4: + resolution: {integrity: sha512-JlopFnlubIGEKEwmoENsNqj2Tfxt0Xz6P8wFnmKVOajT9ggsFKgIaD3DwZ8ndJnHM+mw5BvKMaPGuuL7r3Pvuw==} + dependencies: + '@effection/core': 2.2.1 + '@effection/events': 2.0.4 + '@effection/stream': 2.0.4 + dev: true + + /@effection/core@2.2.1: + resolution: {integrity: sha512-uYItornfIcdEya1NrRbatPQyRc1DR+o1RNtpYkVyXMSf3bpShsPADdqPJmxTvGaa2CK6mLkZ+6onUNz06tsPWA==} + dependencies: + abort-controller: 3.0.0 + dev: true + + /@effection/events@2.0.4: + resolution: {integrity: sha512-7CsWy1h9JON+ZtIcQTcld4MWLs7JS09ncmiO1bLFQE3BaIEBjs98E89WtfGg66bXvlTYC0wTC7it03CcA/QEbA==} + dependencies: + '@effection/core': 2.2.1 + '@effection/stream': 2.0.4 + dev: true + + /@effection/fetch@2.0.5: + resolution: {integrity: sha512-NWrZYBgmNx686aslxf4J8CuquMIFVcG3LnONkGWQ41agDAX2lqQUOa5pAtUqj1hvEtb+l3lNawvpWbqFuNYYzA==} + dependencies: + '@effection/core': 2.2.1 + cross-fetch: 3.1.5 + transitivePeerDependencies: + - encoding + dev: true + + /@effection/main@2.1.1: + resolution: {integrity: sha512-NwQ4hN+Crja/8At8QCr2vXyTkd5kDdwnl1UqqspSm88y3YdVH/B8yvw89Y3j+E0teo3COY/zu5NcS/VnxkMnLQ==} + dependencies: + '@effection/core': 2.2.1 + chalk: 4.1.2 + stacktrace-parser: 0.1.10 + dev: true + + /@effection/process@2.1.2: + resolution: {integrity: sha512-hwanPqnyA1fyQNDFwoRo6fqrbX7akgLPv4fXYEOETElDjaXuLA88FHBPaDm52IJv2KI49beq9krdEaobWmFmlA==} + dependencies: + cross-spawn: 7.0.3 + ctrlc-windows: 2.1.0 + effection: 2.0.6 + shellwords: 0.1.1 + transitivePeerDependencies: + - encoding + dev: true + + /@effection/stream@2.0.4: + resolution: {integrity: sha512-XXDiUbX+2zBAFlV6r5HfwLzm1Ko1Had13HUNTJFR+fmtkb5uG9Y6eJuViphaYg0VBbsZTJfgTAZWzN4PsBT9Lg==} + dependencies: + '@effection/core': 2.2.1 + '@effection/subscription': 2.0.4 + dev: true + + /@effection/subscription@2.0.4: + resolution: {integrity: sha512-flr7bu4a9t3WuDAXodH2Y2LId8pPb3UEUtwYsUaGBWNxLJJ51t3uCdPybf57L5h4/bqxAwJosd3gyhAhKzxk0Q==} + dependencies: + '@effection/core': 2.2.1 + dev: true + /@esbuild/android-arm64@0.17.18: resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==} engines: {node: '>=12'} @@ -667,6 +794,10 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@iarna/toml@2.2.5: + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + dev: true + /@iconify-json/codicon@1.1.10: resolution: {integrity: sha512-xx3nX5k4UeDQnpX9D1T6L1RCEwyLtqu3Lqk9plYK+SoBSQ/kR73bPy9WbYyDVOw2MDw50JCSpZZYlBC718k7Sg==} dependencies: @@ -1019,6 +1150,10 @@ packages: '@tauri-apps/cli-win32-x64-msvc': 2.0.0-alpha.8 dev: false + /@tauri-apps/toml@2.2.4: + resolution: {integrity: sha512-NJV/pdgJObDlDWi5+MTHZ2qyNvdL0dlHqQ72nzQYXWbW1LHMPXgCJYl0pLqL1XxxLtxtInYbtVCGVAcwhGxdkw==} + dev: true + /@types/cookie@0.5.1: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} dev: true @@ -1035,6 +1170,12 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true + /@types/mdast@3.0.11: + resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} + dependencies: + '@types/unist': 2.0.6 + dev: true + /@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} dev: true @@ -1047,6 +1188,10 @@ packages: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true + /@types/unist@2.0.6: + resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + dev: true + /@typescript-eslint/eslint-plugin@5.59.1(@typescript-eslint/parser@5.59.1)(eslint@8.39.0)(typescript@5.0.4): resolution: {integrity: sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1315,6 +1460,13 @@ packages: resolution: {integrity: sha512-yaLojLYTi08vccUKRg/XSRCCPoyzCZqrG+W8mVhJEGiOfFKAmWqNH6b+/il1gG3V1UaEe7amj2mzmo1mo4q1iA==} dev: false + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + /acorn-jsx@5.3.2(acorn@8.8.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1338,6 +1490,13 @@ packages: uri-js: 4.4.1 dev: true + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1398,15 +1557,31 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /bail@1.0.5: + resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1429,6 +1604,13 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -1472,6 +1654,22 @@ packages: supports-color: 7.2.0 dev: true + /character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + dev: true + + /character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + dev: true + + /character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + dev: true + + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -1487,6 +1685,37 @@ packages: fsevents: 2.3.2 dev: true + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-spinners@2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + engines: {node: '>=6'} + dev: true + + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1519,6 +1748,32 @@ packages: engines: {node: '>= 0.6'} dev: true + /covector@0.9.0: + resolution: {integrity: sha512-uGDdpb33ZOwThylB8GKWpygGrpbipt7YRGUtIKnS4EBLugXz7ZM+Aj3g+BXzvFJC87S0My1+y98ejcXAoQkwbQ==} + hasBin: true + dependencies: + '@covector/apply': 0.8.0 + '@covector/assemble': 0.10.0 + '@covector/changelog': 0.8.0 + '@covector/command': 0.6.1 + '@covector/files': 0.6.1 + effection: 2.0.6 + globby: 11.1.0 + inquirer: 8.2.5 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1536,6 +1791,10 @@ packages: source-map-js: 1.0.2 dev: true + /ctrlc-windows@2.1.0: + resolution: {integrity: sha512-OrX5KI+K+2NMN91QIhYZdW7VDO2YsSdTZW494pA7Nvw/wBdU2hz+MGP006bR978zOTrG6Q8EIeJvLJmLqc6MsQ==} + dev: true + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -1580,6 +1839,12 @@ packages: execa: 5.1.1 dev: true + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + /define-properties@1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} @@ -1630,6 +1895,24 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true + /effection@2.0.6: + resolution: {integrity: sha512-Bc8pXBrNQFumPLAmwj6mh7JeZFbLRoPYkqhU8WkVAuwHCQZh2xHE5zxaceL1nWR78ZuqFwwXlrTODDQLIkeQBw==} + dependencies: + '@effection/channel': 2.0.4 + '@effection/core': 2.2.1 + '@effection/events': 2.0.4 + '@effection/fetch': 2.0.5 + '@effection/main': 2.1.1 + '@effection/stream': 2.0.4 + '@effection/subscription': 2.0.4 + transitivePeerDependencies: + - encoding + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + /es-abstract@1.20.5: resolution: {integrity: sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==} engines: {node: '>= 0.4'} @@ -1919,6 +2202,16 @@ packages: '@esbuild/win32-x64': 0.17.18 dev: true + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2227,6 +2520,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2242,6 +2540,19 @@ packages: strip-final-newline: 2.0.0 dev: true + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -2271,6 +2582,19 @@ packages: reusify: 1.0.4 dev: true + /fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + dependencies: + format: 0.2.2 + dev: true + + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2305,6 +2629,11 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -2335,6 +2664,11 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + /get-intrinsic@1.1.3: resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} dependencies: @@ -2468,6 +2802,17 @@ packages: engines: {node: '>=10.17.0'} dev: true + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + /ignore@5.2.1: resolution: {integrity: sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==} engines: {node: '>= 4'} @@ -2501,6 +2846,27 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true + /inquirer@8.2.5: + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + /internal-ip@7.0.0: resolution: {integrity: sha512-qE4TeD4brqC45Vq/+VASeMiS1KRyfBkR6HT2sh9pZVVCzSjPkaCEfKFU+dL0PRv7NHJtvoKN2r82G6wTfzorkw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2530,6 +2896,17 @@ packages: engines: {node: '>= 10'} dev: true + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + dev: true + + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + dev: true + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: @@ -2551,6 +2928,11 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: true + /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -2576,11 +2958,20 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2588,6 +2979,15 @@ packages: is-extglob: 2.1.1 dev: true + /is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + dev: true + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true + /is-ip@3.1.0: resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} engines: {node: '>=8'} @@ -2621,6 +3021,11 @@ packages: engines: {node: '>=8'} dev: true + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -2654,6 +3059,11 @@ packages: has-symbols: 1.0.3 dev: true + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -2728,6 +3138,22 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /longest-streak@2.0.4: + resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -2756,6 +3182,39 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /mdast-util-from-markdown@0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + dependencies: + '@types/mdast': 3.0.11 + mdast-util-to-string: 2.0.0 + micromark: 2.11.4 + parse-entities: 2.0.0 + unist-util-stringify-position: 2.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-frontmatter@0.2.0: + resolution: {integrity: sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==} + dependencies: + micromark-extension-frontmatter: 0.2.2 + dev: true + + /mdast-util-to-markdown@0.6.5: + resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} + dependencies: + '@types/unist': 2.0.6 + longest-streak: 2.0.4 + mdast-util-to-string: 2.0.0 + parse-entities: 2.0.0 + repeat-string: 1.6.1 + zwitch: 1.0.5 + dev: true + + /mdast-util-to-string@2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + dev: true + /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true @@ -2769,6 +3228,21 @@ packages: engines: {node: '>= 8'} dev: true + /micromark-extension-frontmatter@0.2.2: + resolution: {integrity: sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==} + dependencies: + fault: 1.0.4 + dev: true + + /micromark@2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + dependencies: + debug: 4.3.4 + parse-entities: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -2828,6 +3302,10 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2846,6 +3324,18 @@ packages: resolution: {integrity: sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q==} dev: true + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -2920,6 +3410,26 @@ packages: word-wrap: 1.2.3 dev: true + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.0 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + /p-event@4.2.0: resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} engines: {node: '>=8'} @@ -2960,6 +3470,17 @@ packages: callsites: 3.1.0 dev: true + /parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3036,6 +3557,15 @@ packages: safe-buffer: 5.2.1 dev: true + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3062,6 +3592,37 @@ packages: engines: {node: '>=8'} dev: true + /remark-frontmatter@3.0.0: + resolution: {integrity: sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==} + dependencies: + mdast-util-frontmatter: 0.2.0 + micromark-extension-frontmatter: 0.2.2 + dev: true + + /remark-parse@9.0.0: + resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} + dependencies: + mdast-util-from-markdown: 0.8.5 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-stringify@9.0.1: + resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==} + dependencies: + mdast-util-to-markdown: 0.6.5 + dev: true + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3076,6 +3637,14 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3111,12 +3680,23 @@ packages: fsevents: 2.3.2 dev: true + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.5.0 + dev: true + /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -3142,6 +3722,10 @@ packages: regexp-tree: 0.1.27 dev: true + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + /sander@0.5.1: resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} dependencies: @@ -3186,6 +3770,10 @@ packages: engines: {node: '>=8'} dev: true + /shellwords@0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -3248,11 +3836,27 @@ packages: deprecated: Please use @jridgewell/sourcemap-codec instead dev: true + /stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: true + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: @@ -3269,6 +3873,12 @@ packages: es-abstract: 1.20.5 dev: true + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3427,6 +4037,10 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + /tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: @@ -3434,6 +4048,13 @@ packages: globrex: 0.1.2 dev: true + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3446,6 +4067,14 @@ packages: engines: {node: '>=6'} dev: true + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /trough@1.0.5: + resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + dev: true + /tsconfig-paths@3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: @@ -3489,6 +4118,16 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + dev: true + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} @@ -3523,6 +4162,24 @@ packages: busboy: 1.6.0 dev: true + /unified@9.2.2: + resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} + dependencies: + '@types/unist': 2.0.6 + bail: 1.0.5 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 2.1.0 + trough: 1.0.5 + vfile: 4.2.1 + dev: true + + /unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + dependencies: + '@types/unist': 2.0.6 + dev: true + /unocss@0.39.3(vite@3.0.9): resolution: {integrity: sha512-+BZazovI1A+jlW0+GuSSABHQjBLpu2sQkLXriBTdZiPYZAqJJdiWHuQ6VPzF4Al5WM4VPpOgX5mUYWusJ813qw==} engines: {node: '>=14'} @@ -3558,6 +4215,26 @@ packages: punycode: 2.1.1 dev: true + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /vfile-message@2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + dependencies: + '@types/unist': 2.0.6 + unist-util-stringify-position: 2.0.3 + dev: true + + /vfile@4.2.1: + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + dependencies: + '@types/unist': 2.0.6 + is-buffer: 2.0.5 + unist-util-stringify-position: 2.0.3 + vfile-message: 2.0.4 + dev: true + /vite@3.0.9: resolution: {integrity: sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3628,6 +4305,23 @@ packages: vite: 4.3.3 dev: true + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -3651,15 +4345,51 @@ packages: engines: {node: '>=0.10.0'} dev: true + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /zwitch@1.0.5: + resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} + dev: true diff --git a/shared/template/Cargo.toml b/shared/template/Cargo.toml index 20f4dd71..071f5654 100644 --- a/shared/template/Cargo.toml +++ b/shared/template/Cargo.toml @@ -1,19 +1,19 @@ [package] name = "tauri-plugin-{{name}}" -version = "0.0.0" -edition.workspace = true -authors.workspace = true -license.workspace = true +version = "1.0.0" +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } links = "tauri-plugin-{{name}}" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [build-dependencies] -tauri-build.workspace = true +tauri-build = { workspace = true } [dependencies] -serde.workspace = true -serde_json.workspace = true -tauri.workspace = true -log.workspace = true -thiserror.workspace = true \ No newline at end of file +serde = { workspace = true } +serde_json = { workspace = true } +tauri = { workspace = true } +log = { workspace = true } +thiserror = { workspace = true } \ No newline at end of file diff --git a/shared/template/package.json b/shared/template/package.json index 77b7a603..fc14f4db 100644 --- a/shared/template/package.json +++ b/shared/template/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-{{name}}", - "version": "0.0.0", + "version": "1.0.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" From 3c9771e28733d09278670efd476ef565af8260d0 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Thu, 18 May 2023 11:39:46 -0300 Subject: [PATCH 28/64] feat: update to tauri 2.0.0-alpha.9 (#372) --- Cargo.lock | 35 +-- Cargo.toml | 4 +- examples/api/package.json | 4 +- examples/api/src/views/Welcome.svelte | 2 +- plugins/app/package.json | 2 +- plugins/authenticator/package.json | 2 +- plugins/autostart/package.json | 2 +- plugins/cli/package.json | 2 +- plugins/clipboard/package.json | 2 +- plugins/dialog/package.json | 2 +- plugins/fs/guest-js/index.ts | 32 +-- plugins/fs/package.json | 2 +- plugins/global-shortcut/package.json | 2 +- plugins/http/package.json | 2 +- plugins/log/package.json | 2 +- plugins/notification/guest-js/index.ts | 57 +---- plugins/notification/package.json | 2 +- plugins/os/package.json | 2 +- plugins/positioner/package.json | 2 +- plugins/process/package.json | 2 +- plugins/shell/package.json | 2 +- .../examples/vanilla/package.json | 4 +- plugins/sql/package.json | 2 +- plugins/store/package.json | 2 +- plugins/stronghold/package.json | 2 +- plugins/updater/guest-js/index.ts | 30 +-- plugins/updater/package.json | 2 +- plugins/updater/tests/app-updater/src/main.rs | 1 - plugins/upload/guest-js/index.ts | 30 +-- plugins/upload/package.json | 2 +- .../examples/svelte-app/package.json | 3 +- plugins/websocket/package.json | 2 +- plugins/window-state/package.json | 2 +- plugins/window/package.json | 2 +- pnpm-lock.yaml | 201 +++++++++--------- shared/template/package.json | 2 +- 36 files changed, 163 insertions(+), 288 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 650b88bf..72e63f92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4959,8 +4959,9 @@ dependencies = [ [[package]] name = "tauri" -version = "2.0.0-alpha.8" -source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" +version = "2.0.0-alpha.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "695b6c1cdf861002bc2ea17a53cf0669e62da5def6ffcbff02fa00c7515d40b4" dependencies = [ "anyhow", "bytes 1.4.0", @@ -5009,8 +5010,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" +version = "2.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34a5b16abedfa53fdb6ad4c68c41612e097dbfac1c18390fe6e4ded18d9ec28d" dependencies = [ "anyhow", "cargo_toml", @@ -5029,8 +5031,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" +version = "2.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f03863ab7ecf1fea3a748c4a9ace7b0a6a2051b4ce10ae954ec546957fb529" dependencies = [ "base64 0.21.0", "brotli", @@ -5054,8 +5057,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" +version = "2.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f9a2623fed6b5bc04f2e1344c88df6415617bd223599c60a4171630b63fb74" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -5437,8 +5441,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" +version = "0.13.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de05147581dd8cfdac638455029eb06c57fa64eb17eb03d5d7f229c571941cd9" dependencies = [ "gtk", "http", @@ -5457,8 +5462,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" +version = "0.13.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7784048ef49a57ff32d55bf4ce89ec72fc97e3d4fdc68785d164b23965170e49" dependencies = [ "cocoa", "gtk", @@ -5477,8 +5483,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#8ce32e74b5573931c3bc81e8e893a6d3b9686b0e" +version = "2.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58eca5e3b6714c6bd87052182ebb7d5392d551f478f994878f136f49d4e6d640" dependencies = [ "aes-gcm 0.10.1", "brotli", diff --git a/Cargo.toml b/Cargo.toml index c70e53f1..7d05f86c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,8 +5,8 @@ resolver = "2" [workspace.dependencies] serde = { version = "1", features = ["derive"] } log = "0.4" -tauri = { git = "https://github.com/tauri-apps/tauri", branch = "next" } -tauri-build = { git = "https://github.com/tauri-apps/tauri", branch = "next" } +tauri = "2.0.0-alpha.9" +tauri-build = "2.0.0-alpha.5" serde_json = "1" thiserror = "1" diff --git a/examples/api/package.json b/examples/api/package.json index 56e9e165..bbfe9622 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -8,8 +8,7 @@ "serve": "vite preview" }, "dependencies": { - "@tauri-apps/api": "2.0.0-alpha.3", - "@tauri-apps/cli": "2.0.0-alpha.8", + "@tauri-apps/api": "2.0.0-alpha.4", "@zerodevx/svelte-json-view": "0.2.1", "@tauri-apps/plugin-app": "1.0.0", "@tauri-apps/plugin-cli": "1.0.0", @@ -29,6 +28,7 @@ "@iconify-json/codicon": "^1.1.10", "@iconify-json/ph": "^1.1.1", "@sveltejs/vite-plugin-svelte": "^1.0.1", + "@tauri-apps/cli": "2.0.0-alpha.9", "internal-ip": "^7.0.0", "svelte": "^3.49.0", "unocss": "^0.39.3", diff --git a/examples/api/src/views/Welcome.svelte b/examples/api/src/views/Welcome.svelte index 09eb1405..50048295 100644 --- a/examples/api/src/views/Welcome.svelte +++ b/examples/api/src/views/Welcome.svelte @@ -3,7 +3,7 @@ import { relaunch, exit } from "@tauri-apps/plugin-process"; let version = "1.0.0"; - let tauriversion = "1.0.0"; + let tauriVersion = "1.0.0"; let appName = "Unknown"; getName().then((n) => { diff --git a/plugins/app/package.json b/plugins/app/package.json index 5142e85a..6297bbe5 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/authenticator/package.json b/plugins/authenticator/package.json index 8402ac3f..51130faf 100644 --- a/plugins/authenticator/package.json +++ b/plugins/authenticator/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/autostart/package.json b/plugins/autostart/package.json index 60dbad28..6bb53385 100644 --- a/plugins/autostart/package.json +++ b/plugins/autostart/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/cli/package.json b/plugins/cli/package.json index ff10d73b..a4baf1a8 100644 --- a/plugins/cli/package.json +++ b/plugins/cli/package.json @@ -27,6 +27,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/clipboard/package.json b/plugins/clipboard/package.json index d77c8497..84b2c998 100644 --- a/plugins/clipboard/package.json +++ b/plugins/clipboard/package.json @@ -27,6 +27,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/dialog/package.json b/plugins/dialog/package.json index ad1b6523..1622c1c4 100644 --- a/plugins/dialog/package.json +++ b/plugins/dialog/package.json @@ -27,6 +27,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts index 8801ce11..93f4998c 100644 --- a/plugins/fs/guest-js/index.ts +++ b/plugins/fs/guest-js/index.ts @@ -74,6 +74,7 @@ */ import { invoke } from "@tauri-apps/api/tauri"; +import { BaseDirectory } from "@tauri-apps/api/path"; interface Permissions { /** @@ -182,37 +183,6 @@ interface BackendMetadata { blocks: number | undefined; } -// TODO: pull BaseDirectory from @tauri-apps/api/path -/** - * @since 1.0.0 - */ -enum BaseDirectory { - Audio = 1, - Cache, - Config, - Data, - LocalData, - Document, - Download, - Picture, - Public, - Video, - Resource, - Temp, - AppConfig, - AppData, - AppLocalData, - AppCache, - AppLog, - - Desktop, - Executable, - Font, - Home, - Runtime, - Template, -} - /** * @since 1.0.0 */ diff --git a/plugins/fs/package.json b/plugins/fs/package.json index 129a2b38..0b520585 100644 --- a/plugins/fs/package.json +++ b/plugins/fs/package.json @@ -28,6 +28,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/global-shortcut/package.json b/plugins/global-shortcut/package.json index 28574ff3..686cb64e 100644 --- a/plugins/global-shortcut/package.json +++ b/plugins/global-shortcut/package.json @@ -27,6 +27,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/http/package.json b/plugins/http/package.json index c349369b..a238bb68 100644 --- a/plugins/http/package.json +++ b/plugins/http/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/log/package.json b/plugins/log/package.json index e0c33dd5..575dcfb6 100644 --- a/plugins/log/package.json +++ b/plugins/log/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/notification/guest-js/index.ts b/plugins/notification/guest-js/index.ts index 78919356..b11127eb 100644 --- a/plugins/notification/guest-js/index.ts +++ b/plugins/notification/guest-js/index.ts @@ -24,7 +24,11 @@ * @module */ -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; +import { + invoke, + PluginListener, + addPluginListener, +} from "@tauri-apps/api/tauri"; /** * Options to send a notification. @@ -551,59 +555,16 @@ async function channels(): Promise { return invoke("plugin:notification|getActive"); } -class EventChannel { - id: number; - unregisterFn: (channel: EventChannel) => Promise; - - constructor( - id: number, - unregisterFn: (channel: EventChannel) => Promise - ) { - this.id = id; - this.unregisterFn = unregisterFn; - } - - toJSON(): string { - return `__CHANNEL__:${this.id}`; - } - - async unregister(): Promise { - return this.unregisterFn(this); - } -} - -// TODO: use addPluginListener API on @tauri-apps/api/tauri 2.0.0-alpha.4 async function onNotificationReceived( cb: (notification: Options) => void -): Promise { - const channelId = transformCallback(cb); - const handler = new EventChannel(channelId, (channel) => - invoke("plugin:notification|remove_listener", { - event: "notification", - channelId: channel.id, - }) - ); - return invoke("plugin:notification|register_listener", { - event: "notification", - handler, - }).then(() => handler); +): Promise { + return addPluginListener("notification", "notification", cb); } -// TODO: use addPluginListener API on @tauri-apps/api/tauri 2.0.0-alpha.4 async function onAction( cb: (notification: Options) => void -): Promise { - const channelId = transformCallback(cb); - const handler = new EventChannel(channelId, (channel) => - invoke("plugin:notification|remove_listener", { - event: "actionPerformed", - channelId: channel.id, - }) - ); - return invoke("plugin:notification|register_listener", { - event: "actionPerformed", - handler, - }).then(() => handler); +): Promise { + return addPluginListener("notification", "actionPerformed", cb); } export type { diff --git a/plugins/notification/package.json b/plugins/notification/package.json index 00bef173..f43df637 100644 --- a/plugins/notification/package.json +++ b/plugins/notification/package.json @@ -27,6 +27,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/os/package.json b/plugins/os/package.json index 5552fdd4..b6022045 100644 --- a/plugins/os/package.json +++ b/plugins/os/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/positioner/package.json b/plugins/positioner/package.json index c4709f8d..0dea96d4 100644 --- a/plugins/positioner/package.json +++ b/plugins/positioner/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/process/package.json b/plugins/process/package.json index aca539de..9f2542ec 100644 --- a/plugins/process/package.json +++ b/plugins/process/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/shell/package.json b/plugins/shell/package.json index 3fe86628..56aa7f66 100644 --- a/plugins/shell/package.json +++ b/plugins/shell/package.json @@ -27,6 +27,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/single-instance/examples/vanilla/package.json b/plugins/single-instance/examples/vanilla/package.json index a2967169..750f083e 100644 --- a/plugins/single-instance/examples/vanilla/package.json +++ b/plugins/single-instance/examples/vanilla/package.json @@ -8,7 +8,7 @@ }, "author": "", "license": "MIT", - "dependencies": { - "@tauri-apps/cli": "^2.0.0-alpha.8" + "devDependencies": { + "@tauri-apps/cli": "^2.0.0-alpha.9" } } diff --git a/plugins/sql/package.json b/plugins/sql/package.json index 907555b0..86342845 100644 --- a/plugins/sql/package.json +++ b/plugins/sql/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/store/package.json b/plugins/store/package.json index 1de3f640..00882a96 100644 --- a/plugins/store/package.json +++ b/plugins/store/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/stronghold/package.json b/plugins/stronghold/package.json index d6dc517a..04c0aacd 100644 --- a/plugins/stronghold/package.json +++ b/plugins/stronghold/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/updater/guest-js/index.ts b/plugins/updater/guest-js/index.ts index 6c2363c8..7fb766e0 100644 --- a/plugins/updater/guest-js/index.ts +++ b/plugins/updater/guest-js/index.ts @@ -1,4 +1,4 @@ -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; +import { invoke, Channel } from "@tauri-apps/api/tauri"; interface CheckOptions { /** @@ -23,34 +23,6 @@ interface UpdateResponse { body?: string; } -// TODO: use channel from @tauri-apps/api on v2 -class Channel { - id: number; - // @ts-expect-error field used by the IPC serializer - private readonly __TAURI_CHANNEL_MARKER__ = true; - #onmessage: (response: T) => void = () => { - // no-op - }; - - constructor() { - this.id = transformCallback((response: T) => { - this.#onmessage(response); - }); - } - - set onmessage(handler: (response: T) => void) { - this.#onmessage = handler; - } - - get onmessage(): (response: T) => void { - return this.#onmessage; - } - - toJSON(): string { - return `__CHANNEL__:${this.id}`; - } -} - type DownloadEvent = | { event: "Started"; data: { contentLength?: number } } | { event: "Progress"; data: { chunkLength: number } } diff --git a/plugins/updater/package.json b/plugins/updater/package.json index c995086c..7de4db59 100644 --- a/plugins/updater/package.json +++ b/plugins/updater/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/updater/tests/app-updater/src/main.rs b/plugins/updater/tests/app-updater/src/main.rs index 9efc9b0b..b08d8df9 100644 --- a/plugins/updater/tests/app-updater/src/main.rs +++ b/plugins/updater/tests/app-updater/src/main.rs @@ -17,7 +17,6 @@ fn main() { // It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. // Only absolute paths are supported. // NOTE: we only need this because this is an integration test and we don't want to install the app in the programs folder - // TODO mutate plugin config updater = updater.installer_args(vec![format!( "/D={}", tauri::utils::platform::current_exe() diff --git a/plugins/upload/guest-js/index.ts b/plugins/upload/guest-js/index.ts index f13a1627..96e34659 100644 --- a/plugins/upload/guest-js/index.ts +++ b/plugins/upload/guest-js/index.ts @@ -1,4 +1,4 @@ -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; +import { invoke, Channel } from "@tauri-apps/api/tauri"; interface ProgressPayload { progress: number; @@ -7,34 +7,6 @@ interface ProgressPayload { type ProgressHandler = (progress: ProgressPayload) => void; -// TODO: use channel from @tauri-apps/api on v2 -class Channel { - id: number; - // @ts-expect-error field used by the IPC serializer - private readonly __TAURI_CHANNEL_MARKER__ = true; - #onmessage: (response: T) => void = () => { - // no-op - }; - - constructor() { - this.id = transformCallback((response: T) => { - this.#onmessage(response); - }); - } - - set onmessage(handler: (response: T) => void) { - this.#onmessage = handler; - } - - get onmessage(): (response: T) => void { - return this.#onmessage; - } - - toJSON(): string { - return `__CHANNEL__:${this.id}`; - } -} - async function upload( url: string, filePath: string, diff --git a/plugins/upload/package.json b/plugins/upload/package.json index bf3233ac..6bc205bb 100644 --- a/plugins/upload/package.json +++ b/plugins/upload/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/websocket/examples/svelte-app/package.json b/plugins/websocket/examples/svelte-app/package.json index 5f1f5511..67d63a59 100644 --- a/plugins/websocket/examples/svelte-app/package.json +++ b/plugins/websocket/examples/svelte-app/package.json @@ -13,7 +13,7 @@ "devDependencies": { "@sveltejs/adapter-auto": "^2.0.0", "@sveltejs/kit": "^1.15.5", - "@tauri-apps/cli": "^1.2.3", + "@tauri-apps/cli": "2.0.0-alpha.9", "svelte": "^3.58.0", "svelte-check": "^3.2.0", "tslib": "^2.5.0", @@ -21,7 +21,6 @@ "vite": "^4.2.1" }, "dependencies": { - "@tauri-apps/cli": "^2.0.0-alpha.8", "@tauri-apps/plugin-websocket": "link:../../" }, "type": "module" diff --git a/plugins/websocket/package.json b/plugins/websocket/package.json index 7142f964..e2fc865c 100644 --- a/plugins/websocket/package.json +++ b/plugins/websocket/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/window-state/package.json b/plugins/window-state/package.json index 19f384a3..01f524d8 100644 --- a/plugins/window-state/package.json +++ b/plugins/window-state/package.json @@ -28,6 +28,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/plugins/window/package.json b/plugins/window/package.json index 578d58bf..2de9b3bb 100644 --- a/plugins/window/package.json +++ b/plugins/window/package.json @@ -27,6 +27,6 @@ "tslib": "^2.5.0" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 464bc7e9..96d380f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,11 +56,8 @@ importers: examples/api: dependencies: '@tauri-apps/api': - specifier: 2.0.0-alpha.3 - version: 2.0.0-alpha.3 - '@tauri-apps/cli': - specifier: 2.0.0-alpha.8 - version: 2.0.0-alpha.8 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 '@tauri-apps/plugin-app': specifier: 1.0.0 version: link:../../plugins/app @@ -113,6 +110,9 @@ importers: '@sveltejs/vite-plugin-svelte': specifier: ^1.0.1 version: 1.0.1(svelte@3.55.1)(vite@3.0.9) + '@tauri-apps/cli': + specifier: 2.0.0-alpha.9 + version: 2.0.0-alpha.9 internal-ip: specifier: ^7.0.0 version: 7.0.0 @@ -129,8 +129,8 @@ importers: plugins/app: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -139,8 +139,8 @@ importers: plugins/authenticator: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -149,8 +149,8 @@ importers: plugins/autostart: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -159,8 +159,8 @@ importers: plugins/cli: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.4.1 @@ -169,8 +169,8 @@ importers: plugins/clipboard: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.4.1 @@ -179,8 +179,8 @@ importers: plugins/dialog: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.4.1 @@ -189,8 +189,8 @@ importers: plugins/fs: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.4.1 @@ -199,8 +199,8 @@ importers: plugins/global-shortcut: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.4.1 @@ -209,8 +209,8 @@ importers: plugins/http: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -219,8 +219,8 @@ importers: plugins/log: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -229,8 +229,8 @@ importers: plugins/notification: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.4.1 @@ -239,8 +239,8 @@ importers: plugins/os: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -249,8 +249,8 @@ importers: plugins/positioner: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -259,8 +259,8 @@ importers: plugins/process: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -269,24 +269,24 @@ importers: plugins/shell: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.4.1 version: 2.4.1 plugins/single-instance/examples/vanilla: - dependencies: + devDependencies: '@tauri-apps/cli': - specifier: ^2.0.0-alpha.8 - version: 2.0.0-alpha.8 + specifier: ^2.0.0-alpha.9 + version: 2.0.0-alpha.9 plugins/sql: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -295,8 +295,8 @@ importers: plugins/store: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -305,8 +305,8 @@ importers: plugins/stronghold: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -315,8 +315,8 @@ importers: plugins/updater: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -325,8 +325,8 @@ importers: plugins/upload: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -335,8 +335,8 @@ importers: plugins/websocket: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -344,9 +344,6 @@ importers: plugins/websocket/examples/svelte-app: dependencies: - '@tauri-apps/cli': - specifier: ^2.0.0-alpha.8 - version: 2.0.0-alpha.8 '@tauri-apps/plugin-websocket': specifier: link:../../ version: link:../.. @@ -357,6 +354,9 @@ importers: '@sveltejs/kit': specifier: ^1.15.5 version: 1.15.8(svelte@3.58.0)(vite@4.3.3) + '@tauri-apps/cli': + specifier: 2.0.0-alpha.9 + version: 2.0.0-alpha.9 svelte: specifier: ^3.58.0 version: 3.58.0 @@ -376,8 +376,8 @@ importers: plugins/window: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -386,8 +386,8 @@ importers: plugins/window-state: dependencies: '@tauri-apps/api': - specifier: ^1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.4 + version: 2.0.0-alpha.4 devDependencies: tslib: specifier: ^2.5.0 @@ -1043,112 +1043,107 @@ packages: - supports-color dev: true - /@tauri-apps/api@1.2.0: - resolution: {integrity: sha512-lsI54KI6HGf7VImuf/T9pnoejfgkNoXveP14pVV7XarrQ46rOejIVJLFqHI9sRReJMGdh2YuCoI3cc/yCWCsrw==} + /@tauri-apps/api@2.0.0-alpha.4: + resolution: {integrity: sha512-gWe5fFHbwFM+dmdDPtlDvVDVtoMneGRM+S8mECevWhKpXYxId0yxznE56YGAvPSJXC3vgsXw16mOmkTnEVKnaw==} engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} dev: false - /@tauri-apps/api@2.0.0-alpha.3: - resolution: {integrity: sha512-F6seMDlcaxeCPy4gS0zJdp6Tet+0rd1qJi/fbKrOrhLM6Y5UtkiG1aSDnMPi+1udThSfadjhUwrLHINvfMCjzQ==} - engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - dev: false - - /@tauri-apps/cli-darwin-arm64@2.0.0-alpha.8: - resolution: {integrity: sha512-ZF9nkkYCDiAEKZFwjEbuqTcFVp+DBgem3edKjsZDYPQpWg0VcZOSYr0o3/RPC81T1/FAy1lq478mkcMe0efvEw==} + /@tauri-apps/cli-darwin-arm64@2.0.0-alpha.9: + resolution: {integrity: sha512-h7AQY4MbHyy7CLANfoegJyaypKQ3fYPlBA3mnhtF+zntrMxVTv+HO9sgn98jGnwlOak8y0NPPKJ6gZFu5GYiNg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-darwin-x64@2.0.0-alpha.8: - resolution: {integrity: sha512-N5V+tbP3qeAoXrrTZXvaLIeEWKCq11tqXoNFTkIZNGNC5yQdNpZSX0LqFqzmxVR1SHiOymebvcUlx+ADIpuXGw==} + /@tauri-apps/cli-darwin-x64@2.0.0-alpha.9: + resolution: {integrity: sha512-8RtvzZ4/1gZU8SvMaCygtjc9Q0bMnA0NuQKOMrehRfpvvy2gw/q8MMdw3WEawYGQHqEbr6YtNJmaR5wlsVk+IQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.8: - resolution: {integrity: sha512-7LHfZA99ncMDUO/wCGMtrqmDHt1uEKZiNmuzPljWLUwVvbAn0pNWNygnvPNVLEOyav5NnZSGPqT1Zmn+L6Fpyg==} + /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.9: + resolution: {integrity: sha512-nHAgFEJ2DXXEx96FLPnqZ9vfFGw7Hr2ZaY+xy28llXWljCOguWi8wdHv4OMnq0hbOkegVGplYPc4RSQ5uUia2Q==} engines: {node: '>= 10'} cpu: [arm] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.8: - resolution: {integrity: sha512-imq2MdhWdREvL2sqbU26mzH9sgSvfNWP0uvCPvPxUhK157xqdtGw+Gqm00hwnhTuT5bOFlsUNfnG2U19k1qMpA==} + /@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.9: + resolution: {integrity: sha512-ETmUoTp+UgHypPpsq3OYwbcmX8MqjCGIUAzDHoVFpYuj2oqHw0ZaCx2lQPTnqW5G5L9X9VXhMAcRB8OBZG5KFw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.8: - resolution: {integrity: sha512-7hXEyvCosBHIN6ahkbFOI5JoyWZAulc0sYd3hWh9V/MBfU+LlPiapsJi6fdde0zew5nnzwcCtfEKkoR737tAig==} + /@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.9: + resolution: {integrity: sha512-S55E2u4LsQajoxkpYqd2skPEVG5hp+Mkhhnixfi+87q87n9iIvIqcH+4ejDXAPUrWNMsRKIWVURV2ZzivqK5Kw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.8: - resolution: {integrity: sha512-S9T/trKpXcLc7hVIv7xFrRBlaivHD/HLUz0nYAkI2izNGFmbP3QpkqQDdwpWN/fxneodNgI2/mDFC3NULClj+A==} + /@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.9: + resolution: {integrity: sha512-/0J5sJDu+cSrj67L4Q4FVANe1ffpsz3LZMQRkbWmT2ggd2Mxg8LZBtg7y5ysMfJg8xjKvymi+1mS2yU1B7/k9Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.8: - resolution: {integrity: sha512-90mx6vSFNBbctaPaKhkH+um51gOoRJwLFOadOkklHS5Q6S6GjtSa1lmBEFyKUTAfFPtmiacuNYtoKx7nqm+z1Q==} + /@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.9: + resolution: {integrity: sha512-zjtf5H3c4amlBjIdDiQ3pmiMV/cmcPxaiH4KgyRD6NZXY9+gDk5dkzj3WAWegiD1ycz3bv5INO/tDxjk5ZSYlw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.8: - resolution: {integrity: sha512-VAMsLJYfp6iVI7oJ+uIkfe8DKPRMtWDiSEkfFqvDyFX0WMTQl23B0AzYyapVwZc+WkTkLuoMLpIWMQCgAoQWfQ==} + /@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.9: + resolution: {integrity: sha512-Hn0xDaEEMeXRzWCtew2MIYDky8hF+BOos0PP4qyCX14LfChpgSIT0aMYC8xbSfj9N9pwznhNBxgOtCADaTPWcg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.8: - resolution: {integrity: sha512-zvWd13hRfRM0AEJJZ4t4CeB/cyru8hvbB6c+sxYDS9GPRWfHSH5dIeKoHhnMwP5fEOPZLN7VaeEP6tC88trD6g==} + /@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.9: + resolution: {integrity: sha512-541nR7UoasX/fnEWhC14H4Ppj17Aa1fbCyFb9+zmWjupVkEGf/yQFvdWRHdmCkgOdGuxPahR5hbOPh+jvaklFw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] requiresBuild: true - dev: false + dev: true optional: true - /@tauri-apps/cli@2.0.0-alpha.8: - resolution: {integrity: sha512-cXt6pxh7oiV8Htz7eTPor7if4aN9f9emn10+5h2Y82YzST7I7wKXsrjuk0HIyzUiqiQjUgl3iT9gh791zgtI3w==} + /@tauri-apps/cli@2.0.0-alpha.9: + resolution: {integrity: sha512-roQNpFC3Ijni/c7TCkCpUg3gWKfxs1ftWSQJyCthqIPRM5J7I2vOfhcUXIZw9glrxDp5npyRW0xYyI7W/424uQ==} engines: {node: '>= 10'} hasBin: true optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.0.0-alpha.8 - '@tauri-apps/cli-darwin-x64': 2.0.0-alpha.8 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-alpha.8 - '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-alpha.8 - '@tauri-apps/cli-linux-arm64-musl': 2.0.0-alpha.8 - '@tauri-apps/cli-linux-x64-gnu': 2.0.0-alpha.8 - '@tauri-apps/cli-linux-x64-musl': 2.0.0-alpha.8 - '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-alpha.8 - '@tauri-apps/cli-win32-x64-msvc': 2.0.0-alpha.8 - dev: false + '@tauri-apps/cli-darwin-arm64': 2.0.0-alpha.9 + '@tauri-apps/cli-darwin-x64': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-arm64-musl': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-x64-gnu': 2.0.0-alpha.9 + '@tauri-apps/cli-linux-x64-musl': 2.0.0-alpha.9 + '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-alpha.9 + '@tauri-apps/cli-win32-x64-msvc': 2.0.0-alpha.9 + dev: true /@tauri-apps/toml@2.2.4: resolution: {integrity: sha512-NJV/pdgJObDlDWi5+MTHZ2qyNvdL0dlHqQ72nzQYXWbW1LHMPXgCJYl0pLqL1XxxLtxtInYbtVCGVAcwhGxdkw==} diff --git a/shared/template/package.json b/shared/template/package.json index fc14f4db..e39bca2a 100644 --- a/shared/template/package.json +++ b/shared/template/package.json @@ -27,6 +27,6 @@ "tslib": "^2.4.1" }, "dependencies": { - "@tauri-apps/api": "^1.2.0" + "@tauri-apps/api": "2.0.0-alpha.4" } } From ba4ef9a037d07e4a8490b539f8c7ad2e5507ba2c Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Thu, 18 May 2023 11:39:53 -0300 Subject: [PATCH 29/64] feat(ci): add workflow to run covector on v2 (#373) --- .../covector-version-or-publish-v2.yml | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/workflows/covector-version-or-publish-v2.yml diff --git a/.github/workflows/covector-version-or-publish-v2.yml b/.github/workflows/covector-version-or-publish-v2.yml new file mode 100644 index 00000000..104e0ef4 --- /dev/null +++ b/.github/workflows/covector-version-or-publish-v2.yml @@ -0,0 +1,59 @@ +name: version or publish + +on: + push: + branches: + - v2 + +jobs: + version-or-publish: + runs-on: ubuntu-latest + timeout-minutes: 65 + outputs: + change: ${{ steps.covector.outputs.change }} + commandRan: ${{ steps.covector.outputs.commandRan }} + successfulPublish: ${{ steps.covector.outputs.successfulPublish }} + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # required for use of git history + + - uses: actions/setup-node@v3 + with: + node-version: "lts/*" + registry-url: "https://registry.npmjs.org" + + - uses: pnpm/action-setup@v2 + with: + version: 7.x.x + run_install: true + + - name: cargo login + run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }} + + - name: git config + run: | + git config --global user.name "${{ github.event.pusher.name }}" + git config --global user.email "${{ github.event.pusher.email }}" + + - name: covector version or publish (publish when no change files present) + uses: jbolda/covector/packages/action@covector-v0.8 + id: covector + env: + NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + command: "version-or-publish" + createRelease: true + + - name: Create Pull Request With Versions Bumped + id: cpr + uses: tauri-apps/create-pull-request@v3 + if: steps.covector.outputs.commandRan == 'version' + with: + title: "Publish New Versions (v2)" + commit-message: "publish new versions" + labels: "version updates" + branch: "release" + body: ${{ steps.covector.outputs.change }} From fdec66c69f2eda1172eb4d8f4ab2d0be3fca5a9a Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Fri, 19 May 2023 06:59:26 -0700 Subject: [PATCH 30/64] fix: adjust Cargo features to fix android build (#375) --- .github/workflows/test-rust.yml | 2 +- Cargo.lock | 60 ++++++++++++++----- examples/api/src-tauri/Cargo.toml | 4 +- .../java/com/tauri/api/kotlin/RustPlugin.kt | 2 +- plugins/dialog/src/lib.rs | 1 + plugins/http/Cargo.toml | 1 - plugins/sql/Cargo.toml | 1 - plugins/updater/Cargo.toml | 1 - plugins/upload/Cargo.toml | 3 +- plugins/websocket/Cargo.toml | 3 +- 10 files changed, 53 insertions(+), 25 deletions(-) diff --git a/.github/workflows/test-rust.yml b/.github/workflows/test-rust.yml index a9a1067a..66254085 100644 --- a/.github/workflows/test-rust.yml +++ b/.github/workflows/test-rust.yml @@ -140,7 +140,7 @@ jobs: sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev - name: install openssl - if: ${{ matrix.platform == 'windows-latest' && matrix.package == 'tauri-plugin-authenticator' }} + if: ${{ matrix.platform == 'windows-latest' && contains(fromJSON('["tauri-plugin-http", "tauri-plugin-upload", "tauri-plugin-updater", "tauri-plugin-websocket", "tauri-plugin-authenticator"]'), matrix.package) }} run: | echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append vcpkg install openssl:x64-windows-static-md diff --git a/Cargo.lock b/Cargo.lock index 72e63f92..11300c86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2254,15 +2254,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" dependencies = [ "http", "hyper", - "rustls", + "rustls 0.21.1", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.0", ] [[package]] @@ -4013,9 +4013,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "reqwest" -version = "0.11.16" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ "base64 0.21.0", "bytes 1.4.0", @@ -4037,14 +4037,14 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", + "rustls 0.21.1", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-rustls", + "tokio-rustls 0.24.0", "tokio-util", "tower-service", "url", @@ -4169,6 +4169,18 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustls" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + [[package]] name = "rustls-pemfile" version = "1.0.2" @@ -4178,6 +4190,16 @@ dependencies = [ "base64 0.21.0", ] +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.12" @@ -4637,7 +4659,7 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "rsa", - "rustls", + "rustls 0.20.8", "rustls-pemfile", "serde", "serde_json", @@ -4683,7 +4705,7 @@ checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" dependencies = [ "once_cell", "tokio", - "tokio-rustls", + "tokio-rustls 0.23.4", ] [[package]] @@ -5725,11 +5747,21 @@ version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls", + "rustls 0.20.8", "tokio", "webpki", ] +[[package]] +name = "tokio-rustls" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5" +dependencies = [ + "rustls 0.21.1", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.12" @@ -5763,10 +5795,10 @@ dependencies = [ "futures-util", "log", "native-tls", - "rustls", + "rustls 0.20.8", "tokio", "tokio-native-tls", - "tokio-rustls", + "tokio-rustls 0.23.4", "tungstenite", "webpki", "webpki-roots", @@ -5926,7 +5958,7 @@ dependencies = [ "log", "native-tls", "rand 0.8.5", - "rustls", + "rustls 0.20.8", "sha1", "thiserror", "url", diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 9e98d669..e65c3044 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -22,7 +22,7 @@ tauri-plugin-log = { path = "../../../plugins/log", version = "1.0.0" } tauri-plugin-fs = { path = "../../../plugins/fs", version = "1.0.0" } tauri-plugin-clipboard = { path = "../../../plugins/clipboard", version = "1.0.0" } tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "1.0.0" } -tauri-plugin-http = { path = "../../../plugins/http", version = "1.0.0", features = [ "multipart" ] } +tauri-plugin-http = { path = "../../../plugins/http", features = [ "multipart" ], version = "1.0.0" } tauri-plugin-notification = { path = "../../../plugins/notification", version = "1.0.0", features = [ "windows7-compat" ] } tauri-plugin-os = { path = "../../../plugins/os", version = "1.0.0" } tauri-plugin-process = { path = "../../../plugins/process", version = "1.0.0" } @@ -37,7 +37,7 @@ features = [ "isolation", "macos-private-api", "system-tray", - "protocol-asset" + "protocol-asset", ] [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] diff --git a/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt b/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt index 2ea5ce5c..4aa7fcaf 100644 --- a/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt +++ b/examples/api/src-tauri/gen/android/buildSrc/src/main/java/com/tauri/api/kotlin/RustPlugin.kt @@ -21,7 +21,7 @@ open class RustPlugin : Plugin { val abiList = (findProperty("abiList") as? String)?.split(',') ?: defaultAbiList val defaultArchList = listOf("arm64", "arm", "x86", "x86_64"); - val archList = (findProperty("archList") as? String)?.split(',') ?: listOf("arm64", "arm", "x86", "x86_64") + val archList = (findProperty("archList") as? String)?.split(',') ?: defaultArchList val targetsList = (findProperty("targetList") as? String)?.split(',') ?: listOf("aarch64", "armv7", "i686", "x86_64") diff --git a/plugins/dialog/src/lib.rs b/plugins/dialog/src/lib.rs index 3349965b..2c07b591 100644 --- a/plugins/dialog/src/lib.rs +++ b/plugins/dialog/src/lib.rs @@ -69,6 +69,7 @@ impl Dialog { /// Initializes the plugin. pub fn init() -> TauriPlugin { + #[allow(unused_mut)] let mut builder = Builder::new("dialog"); // Dialogs are implemented natively on Android diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index 40863f17..cb67760d 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -19,7 +19,6 @@ http = "0.2" reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } [features] -default = [ "native-tls-vendored" ] multipart = [ "reqwest/multipart" ] native-tls = [ "reqwest/native-tls" ] native-tls-vendored = [ "reqwest/native-tls-vendored" ] diff --git a/plugins/sql/Cargo.toml b/plugins/sql/Cargo.toml index 00660c6e..da263e5f 100644 --- a/plugins/sql/Cargo.toml +++ b/plugins/sql/Cargo.toml @@ -21,7 +21,6 @@ time = "0.3" tokio = { version = "1", features = ["sync"] } [features] -default = [ "sqlite" ] sqlite = ["sqlx/sqlite"] mysql = ["sqlx/mysql"] postgres = ["sqlx/postgres"] \ No newline at end of file diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index a5cd01ed..3230da31 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -35,7 +35,6 @@ mockito = "0.31" tokio-test = "0.4.2" [features] -default = [ "native-tls-vendored" ] native-tls = [ "reqwest/native-tls" ] native-tls-vendored = [ "reqwest/native-tls-vendored" ] rustls-tls = [ "reqwest/rustls-tls" ] diff --git a/plugins/upload/Cargo.toml b/plugins/upload/Cargo.toml index e027968e..787a072c 100644 --- a/plugins/upload/Cargo.toml +++ b/plugins/upload/Cargo.toml @@ -17,12 +17,11 @@ log = { workspace = true } thiserror = { workspace = true } tokio = { version = "1", features = [ "fs" ] } tokio-util = { version = "0.7", features = [ "codec" ] } -reqwest = { version = "0.11", features = [ "json", "stream" ] } +reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } futures-util = "0.3" read-progress-stream = "1.0.0" [features] -default = [ "native-tls-vendored" ] native-tls = [ "reqwest/native-tls" ] native-tls-vendored = [ "reqwest/native-tls-vendored" ] rustls-tls = [ "reqwest/rustls-tls" ] \ No newline at end of file diff --git a/plugins/websocket/Cargo.toml b/plugins/websocket/Cargo.toml index b396bf27..3ab8ddb3 100644 --- a/plugins/websocket/Cargo.toml +++ b/plugins/websocket/Cargo.toml @@ -18,10 +18,9 @@ thiserror = { workspace = true } rand = "0.8" futures-util = "0.3" tokio = { version = "1", features = ["net", "sync"] } -tokio-tungstenite = { version = "0.18", features = ["native-tls"] } +tokio-tungstenite = { version = "0.18" } [features] -default = [ "native-tls-vendored" ] native-tls = [ "tokio-tungstenite/native-tls" ] native-tls-vendored = [ "tokio-tungstenite/native-tls-vendored" ] rustls-tls-webpki-roots = [ "tokio-tungstenite/rustls-tls-webpki-roots" ] From 8bd80eb65150390258d9ce0c9f30dd18a97b0c73 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Fri, 19 May 2023 09:22:30 -0700 Subject: [PATCH 31/64] fix(audit): update deps, ignore advisories (#379) --- .cargo/audit.toml | 11 +++++++++++ Cargo.lock | 16 ++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 .cargo/audit.toml diff --git a/.cargo/audit.toml b/.cargo/audit.toml new file mode 100644 index 00000000..23c3852b --- /dev/null +++ b/.cargo/audit.toml @@ -0,0 +1,11 @@ +[advisories] +ignore = [ + # time 0.1 + "RUSTSEC-2020-0071", + # needs sqlx 0.7 (still in alpha) + "RUSTSEC-2022-0090", + # wry needs kuchiki on Android + "RUSTSEC-2023-0019", + # atty is only used when the `colored` feature is enabled on tauri-plugin-log + "RUSTSEC-2021-0145" +] \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 11300c86..23b0f5f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1056,9 +1056,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -1427,9 +1427,9 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0044ebdf7fbb2a772e0c0233a9d3173c5cd8af8ae7078d4c5188af44ffffaa4b" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ "enumflags2_derive", "serde", @@ -1437,9 +1437,9 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d2c772ccdbdfd1967b4f5d79d17c98ebf92009fdcc838db7aa434462f600c26" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", @@ -2073,9 +2073,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.16" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" dependencies = [ "bytes 1.4.0", "fnv", From d677f73495b4a8dade5810255e1ece4b7d3f598a Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Fri, 19 May 2023 09:46:06 -0700 Subject: [PATCH 32/64] feat(ci): test mobile targets (#378) --- .github/workflows/test-rust.yml | 66 ++++++++++++++++--- plugins/authenticator/Cargo.toml | 2 + plugins/authenticator/src/lib.rs | 2 + plugins/autostart/src/lib.rs | 2 + .../ios/Sources/ClipboardPlugin.swift | 4 +- plugins/dialog/ios/Sources/DialogPlugin.swift | 6 +- plugins/global-shortcut/Cargo.toml | 2 + plugins/global-shortcut/src/lib.rs | 2 + plugins/positioner/src/lib.rs | 2 + plugins/single-instance/src/lib.rs | 2 + plugins/sql/src/lib.rs | 4 +- plugins/window-state/src/lib.rs | 2 + .../template/ios/Sources/ExamplePlugin.swift | 4 +- 13 files changed, 84 insertions(+), 16 deletions(-) diff --git a/.github/workflows/test-rust.yml b/.github/workflows/test-rust.yml index 66254085..254fb503 100644 --- a/.github/workflows/test-rust.yml +++ b/.github/workflows/test-rust.yml @@ -126,28 +126,62 @@ jobs: fail-fast: false matrix: package: ${{ fromJSON(needs.changes.outputs.packages) }} - platform: [ubuntu-latest, macos-latest, windows-latest] + platform: + - { + target: x86_64-pc-windows-msvc, + os: windows-latest, + cross: false, + command: "test", + } + - { + target: x86_64-unknown-linux-gnu, + os: ubuntu-latest, + cross: false, + command: "test", + } + - { + target: x86_64-apple-darwin, + os: macos-latest, + cross: false, + command: "test", + } + - { + target: aarch64-apple-ios, + os: macos-latest, + cross: false, + command: "build", + } + - { + target: aarch64-linux-android, + os: ubuntu-latest, + cross: true, + command: "build", + } - runs-on: ${{ matrix.platform }} + runs-on: ${{ matrix.platform.os }} steps: - uses: actions/checkout@v3 - name: install webkit2gtk and libudev for [authenticator] - if: matrix.platform == 'ubuntu-latest' + if: contains(matrix.platform.target, 'unknown-linux') run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev - name: install openssl - if: ${{ matrix.platform == 'windows-latest' && contains(fromJSON('["tauri-plugin-http", "tauri-plugin-upload", "tauri-plugin-updater", "tauri-plugin-websocket", "tauri-plugin-authenticator"]'), matrix.package) }} + if: ${{ matrix.platform.os == 'windows-latest' && matrix.package == 'tauri-plugin-authenticator' }} run: | echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" | Out-File -FilePath $env:GITHUB_ENV -Append vcpkg install openssl:x64-windows-static-md - uses: dtolnay/rust-toolchain@1.65.0 + with: + targets: ${{ matrix.platform.target }} - uses: Swatinem/rust-cache@v2 + with: + key: ${{ matrix.package }} - name: create dummy dist working-directory: examples/api @@ -155,16 +189,32 @@ jobs: - name: test ${{ matrix.package }} if: matrix.package != 'tauri-plugin-sql' - run: cargo test --package ${{ matrix.package }} --all-targets + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.platform.cross }} + command: ${{ matrix.platform.command }} + args: --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets - name: test ${{ matrix.package }} --all-features if: ${{ !contains(fromJSON('["tauri-plugin-http", "tauri-plugin-upload", "tauri-plugin-updater", "tauri-plugin-websocket", "tauri-plugin-sql"]'), matrix.package) }} - run: cargo test --package ${{ matrix.package }} --all-targets --all-features + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.platform.cross }} + command: ${{ matrix.platform.command }} + args: --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets --all-features - name: test ${{ matrix.package }} mysql if: matrix.package == 'tauri-plugin-sql' - run: cargo test --package ${{ matrix.package }} --all-targets --no-default-features --features mysql + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.platform.cross }} + command: ${{ matrix.platform.command }} + args: --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets --features mysql - name: test ${{ matrix.package }} postgres if: matrix.package == 'tauri-plugin-sql' - run: cargo test --package ${{ matrix.package }} --all-targets --no-default-features --features postgres + uses: actions-rs/cargo@v1 + with: + use-cross: ${{ matrix.platform.cross }} + command: ${{ matrix.platform.command }} + args: --package ${{ matrix.package }} --target ${{ matrix.platform.target }} --all-targets --features postgres diff --git a/plugins/authenticator/Cargo.toml b/plugins/authenticator/Cargo.toml index 7ee8fb22..c3ca03ca 100644 --- a/plugins/authenticator/Cargo.toml +++ b/plugins/authenticator/Cargo.toml @@ -15,6 +15,8 @@ serde_json = { workspace = true } tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } + +[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] authenticator = "0.3.1" once_cell = "1" sha2 = "0.10" diff --git a/plugins/authenticator/src/lib.rs b/plugins/authenticator/src/lib.rs index ef889e21..e1b488e0 100644 --- a/plugins/authenticator/src/lib.rs +++ b/plugins/authenticator/src/lib.rs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +#![cfg(not(any(target_os = "android", target_os = "ios")))] + mod auth; mod error; mod u2f; diff --git a/plugins/autostart/src/lib.rs b/plugins/autostart/src/lib.rs index 3a927782..cfdd5ccc 100644 --- a/plugins/autostart/src/lib.rs +++ b/plugins/autostart/src/lib.rs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +#![cfg(not(any(target_os = "android", target_os = "ios")))] + use auto_launch::{AutoLaunch, AutoLaunchBuilder}; #[cfg(target_os = "macos")] use log::info; diff --git a/plugins/clipboard/ios/Sources/ClipboardPlugin.swift b/plugins/clipboard/ios/Sources/ClipboardPlugin.swift index cde6fa52..dda6177b 100644 --- a/plugins/clipboard/ios/Sources/ClipboardPlugin.swift +++ b/plugins/clipboard/ios/Sources/ClipboardPlugin.swift @@ -37,6 +37,6 @@ class ClipboardPlugin: Plugin { } @_cdecl("init_plugin_clipboard") -func initPlugin(name: SRString, webview: WKWebView?) { - Tauri.registerPlugin(webview: webview, name: name.toString(), plugin: ClipboardPlugin()) +func initPlugin() -> Plugin { + return ClipboardPlugin() } diff --git a/plugins/dialog/ios/Sources/DialogPlugin.swift b/plugins/dialog/ios/Sources/DialogPlugin.swift index dd0756b3..0970c056 100644 --- a/plugins/dialog/ios/Sources/DialogPlugin.swift +++ b/plugins/dialog/ios/Sources/DialogPlugin.swift @@ -202,6 +202,6 @@ class DialogPlugin: Plugin { } @_cdecl("init_plugin_dialog") -func initPlugin(name: SRString, webview: WKWebView?) { - Tauri.registerPlugin(webview: webview, name: name.toString(), plugin: DialogPlugin()) -} \ No newline at end of file +func initPlugin() -> Plugin { + return DialogPlugin() +} diff --git a/plugins/global-shortcut/Cargo.toml b/plugins/global-shortcut/Cargo.toml index bf685739..927c4337 100644 --- a/plugins/global-shortcut/Cargo.toml +++ b/plugins/global-shortcut/Cargo.toml @@ -11,4 +11,6 @@ serde_json = { workspace = true } tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } + +[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] global-hotkey = "0.2.1" diff --git a/plugins/global-shortcut/src/lib.rs b/plugins/global-shortcut/src/lib.rs index 7c34fc21..4266de21 100644 --- a/plugins/global-shortcut/src/lib.rs +++ b/plugins/global-shortcut/src/lib.rs @@ -1,3 +1,5 @@ +#![cfg(not(any(target_os = "android", target_os = "ios")))] + use std::{ collections::HashMap, str::FromStr, diff --git a/plugins/positioner/src/lib.rs b/plugins/positioner/src/lib.rs index ab8cc922..34492a34 100644 --- a/plugins/positioner/src/lib.rs +++ b/plugins/positioner/src/lib.rs @@ -9,6 +9,8 @@ //! //! Note: This requires attaching the Tauri plugin, *even* when using the trait extension only. +#![cfg(not(any(target_os = "android", target_os = "ios")))] + mod ext; pub use ext::*; diff --git a/plugins/single-instance/src/lib.rs b/plugins/single-instance/src/lib.rs index a2ff71af..f2ceb458 100644 --- a/plugins/single-instance/src/lib.rs +++ b/plugins/single-instance/src/lib.rs @@ -1,3 +1,5 @@ +#![cfg(not(any(target_os = "android", target_os = "ios")))] + use tauri::{plugin::TauriPlugin, AppHandle, Manager, Runtime}; #[cfg(target_os = "windows")] diff --git a/plugins/sql/src/lib.rs b/plugins/sql/src/lib.rs index 378240b3..20153109 100644 --- a/plugins/sql/src/lib.rs +++ b/plugins/sql/src/lib.rs @@ -7,7 +7,9 @@ all(feature = "sqlite", feature = "postgres"), all(feature = "mysql", feature = "postgres") ))] -compile_error!("Only one database driver can be enabled. Use `default-features = false` and set the feature flag for the driver of your choice."); +compile_error!( + "Only one database driver can be enabled. Set the feature flag for the driver of your choice." +); #[cfg(not(any(feature = "sqlite", feature = "mysql", feature = "postgres")))] compile_error!( diff --git a/plugins/window-state/src/lib.rs b/plugins/window-state/src/lib.rs index 3eaf4c52..9fdb6d54 100644 --- a/plugins/window-state/src/lib.rs +++ b/plugins/window-state/src/lib.rs @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT +#![cfg(not(any(target_os = "android", target_os = "ios")))] + use bitflags::bitflags; use serde::{Deserialize, Serialize}; use tauri::{ diff --git a/shared/template/ios/Sources/ExamplePlugin.swift b/shared/template/ios/Sources/ExamplePlugin.swift index 86140b74..5544d3bc 100644 --- a/shared/template/ios/Sources/ExamplePlugin.swift +++ b/shared/template/ios/Sources/ExamplePlugin.swift @@ -11,6 +11,6 @@ class ExamplePlugin: Plugin { } @_cdecl("init_plugin_{{ plugin_name_snake_case }}") -func initPlugin(name: SRString, webview: WKWebView?) { - Tauri.registerPlugin(webview: webview, name: name.toString(), plugin: ExamplePlugin()) +func initPlugin() -> Plugin { + return ExamplePlugin() } From f4069f55887e90963b802640895c7c8f61aba04a Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sat, 20 May 2023 16:28:27 -0700 Subject: [PATCH 33/64] docs: update README.md and remove allowlist information (#381) --- plugins/app/README.md | 15 +++++++- plugins/app/guest-js/index.ts | 16 -------- plugins/authenticator/README.md | 25 ++++++++++-- plugins/autostart/README.md | 9 +++++ plugins/cli/README.md | 37 +++++++++++++++--- plugins/clipboard/README.md | 17 ++++++-- plugins/clipboard/guest-js/index.ts | 16 -------- plugins/dialog/README.md | 13 ++++++- plugins/dialog/guest-js/index.ts | 8 ++-- plugins/fs/README.md | 11 +++++- plugins/fs/banner.png | Bin 44501 -> 0 bytes plugins/fs/guest-js/index.ts | 34 ++-------------- plugins/fs/src/scope.rs | 2 +- plugins/global-shortcut/README.md | 30 +++++++++++---- plugins/global-shortcut/guest-js/index.ts | 13 ------- plugins/http/README.md | 19 +++++++-- plugins/http/guest-js/index.ts | 25 ++---------- plugins/http/src/scope.rs | 2 +- plugins/localhost/README.md | 23 +++++------ plugins/log/README.md | 9 +++++ plugins/notification/README.md | 23 +++++++---- plugins/notification/guest-js/index.ts | 15 -------- plugins/os/README.md | 14 ++++++- plugins/os/guest-js/index.ts | 13 ------- plugins/persisted-scope/README.md | 2 + plugins/positioner/README.md | 9 ++--- plugins/process/README.md | 17 +++++++- plugins/shell/README.md | 16 ++++++-- plugins/shell/guest-js/index.ts | 45 ++++++++-------------- plugins/shell/src/config.rs | 4 +- plugins/shell/src/open.rs | 2 +- plugins/shell/src/scope.rs | 2 +- plugins/single-instance/README.md | 2 + plugins/sql/README.md | 11 +++++- plugins/store/README.md | 9 +++++ plugins/stronghold/README.md | 9 +++++ plugins/updater/README.md | 30 +++++++++++++-- plugins/upload/README.md | 9 +++++ plugins/websocket/README.md | 11 +++++- plugins/window-state/README.md | 9 +++++ plugins/window/README.md | 26 ++++++++++++- plugins/window/guest-js/index.ts | 45 ---------------------- shared/template/README.md | 21 +++++++--- 43 files changed, 386 insertions(+), 282 deletions(-) delete mode 100644 plugins/fs/banner.png diff --git a/plugins/app/README.md b/plugins/app/README.md index 9b4bace2..96625b18 100644 --- a/plugins/app/README.md +++ b/plugins/app/README.md @@ -1,4 +1,4 @@ -# App plugin +# App This plugin provides APIs to read application metadata and macOS app visibility functions. @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-app = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-app = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-app +# or +npm add @tauri-apps/plugin-app +# or +yarn add @tauri-apps/plugin-app + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-app#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-app#v2 @@ -51,7 +60,9 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as app from "@tauri-apps/plugin-app"; +import { getVersion, hide } from "@tauri-apps/plugin-app"; +const appVersion = await getVersion(); +await hide(); ``` ## Contributing diff --git a/plugins/app/guest-js/index.ts b/plugins/app/guest-js/index.ts index d5e06aed..056f255e 100644 --- a/plugins/app/guest-js/index.ts +++ b/plugins/app/guest-js/index.ts @@ -5,22 +5,6 @@ /** * Get application metadata. * - * The APIs must be added to [`tauri.allowlist.app`](https://tauri.app/v1/api/config/#allowlistconfig.app) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "app": { - * "all": true, // enable all app APIs - * "show": true, - * "hide": true - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. - * * @module */ diff --git a/plugins/authenticator/README.md b/plugins/authenticator/README.md index c902bc23..bcdedeab 100644 --- a/plugins/authenticator/README.md +++ b/plugins/authenticator/README.md @@ -2,6 +2,8 @@ Use hardware security-keys in your Tauri App. +- Supported platforms: Windows, Linux, FreeBSD, NetBSD, OpenBSD, and macOS. + ## Install _This plugin requires a Rust version of at least **1.65**_ @@ -17,9 +19,10 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: `src-tauri/Cargo.toml` ```toml -[dependencies] -tauri-plugin-authenticator = "0.1" -# or through git +# you can add the dependencies on the `[dependencies]` section if you do not target mobile +[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] +tauri-plugin-authenticator = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-authenticator = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -27,6 +30,16 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. +```sh +pnpm add @tauri-apps/plugin-authenticator +# or +npm add @tauri-apps/plugin-authenticator +# or +yarn add @tauri-apps/plugin-authenticator +``` + +Alternatively with Git: + ```sh pnpm add https://github.com/tauri-apps/tauri-plugin-authenticator#v2 # or @@ -44,7 +57,11 @@ First you need to register the core plugin with Tauri: ```rust fn main() { tauri::Builder::default() - .plugin(tauri_plugin_authenticator::init()) + .setup(|app| { + #[cfg(desktop)] + app.handle().plugin(tauri_plugin_authenticator::init())?; + Ok(()) + }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/plugins/autostart/README.md b/plugins/autostart/README.md index d62d4c26..f14fd2c2 100644 --- a/plugins/autostart/README.md +++ b/plugins/autostart/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-autostart = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-autostart +# or +npm add @tauri-apps/plugin-autostart +# or +yarn add @tauri-apps/plugin-autostart + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-autostart#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-autostart#v2 diff --git a/plugins/cli/README.md b/plugins/cli/README.md index 983cf803..5de6c9e8 100644 --- a/plugins/cli/README.md +++ b/plugins/cli/README.md @@ -1,6 +1,8 @@ -![plugin-cli](banner.jpg) +# CLI - +Parse arguments from your Command Line Interface. + +- Supported platforms: Windows, Linux and macOS. ## Install @@ -17,7 +19,10 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: `src-tauri/Cargo.toml` ```toml -[dependencies] +# you can add the dependencies on the `[dependencies]` section if you do not target mobile +[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] +tauri-plugin-cli = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-cli = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +31,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-cli +# or +npm add @tauri-apps/plugin-cli +# or +yarn add @tauri-apps/plugin-cli + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-cli#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-cli#v2 @@ -42,7 +54,11 @@ First you need to register the core plugin with Tauri: ```rust fn main() { tauri::Builder::default() - .plugin(tauri_plugin_cli::init()) + .setup(|app| { + #[cfg(desktop)] + app.handle().plugin(tauri_plugin_cli::init())?; + Ok(()) + }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } @@ -51,7 +67,18 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript - +import { getMatches } from "@tauri-apps/plugin-cli"; +const matches = await getMatches(); +if (matches.subcommand?.name === "run") { + // `./your-app run $ARGS` was executed + const args = matches.subcommand?.matches.args; + if ("debug" in args) { + // `./your-app run --debug` was executed + } +} else { + const args = matches.args; + // `./your-app $ARGS` was executed +} ``` ## Contributing diff --git a/plugins/clipboard/README.md b/plugins/clipboard/README.md index 2b5df3e4..8ccb430b 100644 --- a/plugins/clipboard/README.md +++ b/plugins/clipboard/README.md @@ -1,6 +1,6 @@ -![plugin-clipboard](banner.jpg) +# Clipboard - +Read and write to the system clipboard. ## Install @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-clipboard = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-clipboard = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-clipboard +# or +npm add @tauri-apps/plugin-clipboard +# or +yarn add @tauri-apps/plugin-clipboard + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-clipboard#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-clipboard#v2 @@ -51,7 +60,9 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript - +import { writeText, readText } from "@tauri-apps/plugin-clipboard"; +await writeText("Tauri is awesome!"); +assert(await readText(), "Tauri is awesome!"); ``` ## Contributing diff --git a/plugins/clipboard/guest-js/index.ts b/plugins/clipboard/guest-js/index.ts index f9a40d30..67f519ee 100644 --- a/plugins/clipboard/guest-js/index.ts +++ b/plugins/clipboard/guest-js/index.ts @@ -5,22 +5,6 @@ /** * Read and write to the system clipboard. * - * The APIs must be added to [`tauri.allowlist.clipboard`](https://tauri.app/v1/api/config/#allowlistconfig.clipboard) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "clipboard": { - * "all": true, // enable all Clipboard APIs - * "writeText": true, - * "readText": true - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. - * * @module */ diff --git a/plugins/dialog/README.md b/plugins/dialog/README.md index 172ed55e..8e06ed2b 100644 --- a/plugins/dialog/README.md +++ b/plugins/dialog/README.md @@ -1,6 +1,6 @@ -![Dialog](banner.jpg) +# Dialog - +Native system dialogs for opening and saving files along with message dialogs. ## Install @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-dialog = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-dialog = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -31,6 +33,13 @@ pnpm add @tauri-apps/plugin-dialog npm add @tauri-apps/plugin-dialog # or yarn add @tauri-apps/plugin-dialog + +# alternatively with Git: +pnpm add https://github.com/tauri-apps/tauri-plugin-dialog#v2 +# or +npm add https://github.com/tauri-apps/tauri-plugin-dialog#v2 +# or +yarn add https://github.com/tauri-apps/tauri-plugin-dialog#v2 ``` ## Usage diff --git a/plugins/dialog/guest-js/index.ts b/plugins/dialog/guest-js/index.ts index 50c6e64c..3d94a61e 100644 --- a/plugins/dialog/guest-js/index.ts +++ b/plugins/dialog/guest-js/index.ts @@ -113,11 +113,11 @@ async function open( /** * Open a file/directory selection dialog. * - * The selected paths are added to the filesystem and asset protocol allowlist scopes. + * The selected paths are added to the filesystem and asset protocol scopes. * When security is more important than the easy of use of this API, * prefer writing a dedicated command instead. * - * Note that the allowlist scope change is not persisted, so the values are cleared when the application is restarted. + * Note that the scope change is not persisted, so the values are cleared when the application is restarted. * You can save it to the filesystem using [tauri-plugin-persisted-scope](https://github.com/tauri-apps/tauri-plugin-persisted-scope). * @example * ```typescript @@ -175,11 +175,11 @@ async function open( /** * Open a file/directory save dialog. * - * The selected path is added to the filesystem and asset protocol allowlist scopes. + * The selected path is added to the filesystem and asset protocol scopes. * When security is more important than the easy of use of this API, * prefer writing a dedicated command instead. * - * Note that the allowlist scope change is not persisted, so the values are cleared when the application is restarted. + * Note that the scope change is not persisted, so the values are cleared when the application is restarted. * You can save it to the filesystem using [tauri-plugin-persisted-scope](https://github.com/tauri-apps/tauri-plugin-persisted-scope). * @example * ```typescript diff --git a/plugins/fs/README.md b/plugins/fs/README.md index f411ca25..badc305d 100644 --- a/plugins/fs/README.md +++ b/plugins/fs/README.md @@ -1,4 +1,4 @@ -![tauri-plugin-fs](banner.png) +# File System Access the file system. @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-fs = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-fs = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-fs +# or +npm add @tauri-apps/plugin-fs +# or +yarn add @tauri-apps/plugin-fs + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-fs#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-fs#v2 diff --git a/plugins/fs/banner.png b/plugins/fs/banner.png deleted file mode 100644 index b860c3c827b07230dd20f524136ef2d8e687dfed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44501 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�U2idS*DqkZb*JHwQ%8Ck}nPHJPhu(EM^c4PC? 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 diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts index 93f4998c..bd16cd43 100644 --- a/plugins/fs/guest-js/index.ts +++ b/plugins/fs/guest-js/index.ts @@ -5,32 +5,6 @@ /** * Access the file system. * - * This package is also accessible with `window.__TAURI__.fs` when [`build.withGlobalTauri`](https://tauri.app/v1/api/config/#buildconfig.withglobaltauri) in `tauri.conf.json` is set to `true`. - * - * The APIs must be added to [`tauri.allowlist.fs`](https://tauri.app/v1/api/config/#allowlistconfig.fs) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "fs": { - * "all": true, // enable all FS APIs - * "readFile": true, - * "writeFile": true, - * "readDir": true, - * "copyFile": true, - * "createDir": true, - * "removeDir": true, - * "removeFile": true, - * "renameFile": true, - * "metadata": true, - * "exists": true - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. - * * ## Security * * This module prevents path traversal, not allowing absolute paths or parent dir components @@ -45,11 +19,9 @@ * *databases* folder of the {@link path.appDataDir | $APPDATA directory}: * ```json * { - * "tauri": { - * "allowlist": { - * "fs": { - * "scope": ["$APPDATA/databases/*"] - * } + * "plugins": { + * "fs": { + * "scope": ["$APPDATA/databases/*"] * } * } * } diff --git a/plugins/fs/src/scope.rs b/plugins/fs/src/scope.rs index c8958f2e..609506fc 100644 --- a/plugins/fs/src/scope.rs +++ b/plugins/fs/src/scope.rs @@ -80,7 +80,7 @@ fn push_pattern, F: Fn(&str) -> Result>( manager: &M, scope: &FsScope, diff --git a/plugins/global-shortcut/README.md b/plugins/global-shortcut/README.md index c2362ae4..7c151730 100644 --- a/plugins/global-shortcut/README.md +++ b/plugins/global-shortcut/README.md @@ -1,6 +1,8 @@ -![plugin-shortcut](banner.jpg) +# Global Shortcut - +Register global shortcuts. + +- Supported platforms: Windows, Linux and macOS. ## Install @@ -17,7 +19,10 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: `src-tauri/Cargo.toml` ```toml -[dependencies] +# you can add the dependencies on the `[dependencies]` section if you do not target mobile +[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] +tauri-plugin-global-shortcut = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-shortcut = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,11 +31,18 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh -pnpm add https://github.com/tauri-apps/tauri-plugin-shortcut#v2 +pnpm add @tauri-apps/plugin-global-shortcut +# or +npm add @tauri-apps/plugin-global-shortcut +# or +yarn add @tauri-apps/plugin-global-shortcut + +# alternatively with Git: +pnpm add https://github.com/tauri-apps/tauri-plugin-global-shortcut#v2 # or -npm add https://github.com/tauri-apps/tauri-plugin-shortcut#v2 +npm add https://github.com/tauri-apps/tauri-plugin-global-shortcut#v2 # or -yarn add https://github.com/tauri-apps/tauri-plugin-shortcut#v2 +yarn add https://github.com/tauri-apps/tauri-plugin-global-shortcut#v2 ``` ## Usage @@ -42,7 +54,11 @@ First you need to register the core plugin with Tauri: ```rust fn main() { tauri::Builder::default() - .plugin(tauri_plugin_shortcut::init()) + .setup(|app| { + #[cfg(desktop)] + app.handle().plugin(tauri_plugin_shortcut::init())?; + Ok(()) + }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/plugins/global-shortcut/guest-js/index.ts b/plugins/global-shortcut/guest-js/index.ts index f8686cff..ea105f25 100644 --- a/plugins/global-shortcut/guest-js/index.ts +++ b/plugins/global-shortcut/guest-js/index.ts @@ -5,19 +5,6 @@ /** * Register global shortcuts. * - * The APIs must be added to [`tauri.allowlist.globalShortcut`](https://tauri.app/v1/api/config/#allowlistconfig.globalshortcut) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "globalShortcut": { - * "all": true // enable all global shortcut APIs - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. * @module */ diff --git a/plugins/http/README.md b/plugins/http/README.md index 729cedfa..440e5a18 100644 --- a/plugins/http/README.md +++ b/plugins/http/README.md @@ -1,6 +1,6 @@ -![plugin-http](banner.jpg) +# HTTP - +Access the HTTP client written in Rust. ## Install @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-http = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-http = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-http +# or +npm add @tauri-apps/plugin-http +# or +yarn add @tauri-apps/plugin-http + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-http#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-http#v2 @@ -51,7 +60,11 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript - +import { fetch } from "@tauri-apps/plugin-http"; +const response = await fetch("http://localhost:3003/users/2", { + method: "GET", + timeout: 30, +}); ``` ## Contributing diff --git a/plugins/http/guest-js/index.ts b/plugins/http/guest-js/index.ts index 4f542b86..f2a8e2b2 100644 --- a/plugins/http/guest-js/index.ts +++ b/plugins/http/guest-js/index.ts @@ -5,21 +5,6 @@ /** * Access the HTTP client written in Rust. * - * The APIs must be allowlisted on `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "http": { - * "all": true, // enable all http APIs - * "request": true // enable HTTP request API - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. - * * ## Security * * This API has a scope configuration that forces you to restrict the URLs and paths that can be accessed using glob patterns. @@ -27,11 +12,9 @@ * For instance, this scope configuration only allows making HTTP requests to the GitHub API for the `tauri-apps` organization: * ```json * { - * "tauri": { - * "allowlist": { - * "http": { - * "scope": ["https://api.github.com/repos/tauri-apps/*"] - * } + * "plugins": { + * "http": { + * "scope": ["https://api.github.com/repos/tauri-apps/*"] * } * } * } @@ -105,7 +88,7 @@ class Body { * By default it sets the `application/x-www-form-urlencoded` Content-Type header, * but you can set it to `multipart/form-data` if the Cargo feature `multipart` is enabled. * - * Note that a file path must be allowed in the `fs` allowlist scope. + * Note that a file path must be allowed in the `fs` scope. * @example * ```typescript * import { Body } from "@tauri-apps/plugin-http" diff --git a/plugins/http/src/scope.rs b/plugins/http/src/scope.rs index 0c620a9b..1b802ace 100644 --- a/plugins/http/src/scope.rs +++ b/plugins/http/src/scope.rs @@ -13,7 +13,7 @@ pub struct Scope { } impl Scope { - /// Creates a new scope from the allowlist's `http` scope configuration. + /// Creates a new scope from the scope configuration. pub(crate) fn new(scope: &HttpAllowlistScope) -> Self { Self { allowed_urls: scope diff --git a/plugins/localhost/README.md b/plugins/localhost/README.md index 87919843..5b83bf4b 100644 --- a/plugins/localhost/README.md +++ b/plugins/localhost/README.md @@ -20,8 +20,10 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] -tauri-plugin-localhost = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } portpicker = "0.1" # used in the example to pick a random free port +tauri-plugin-localhost = "2.0.0-alpha" +# alternatively with Git: +tauri-plugin-localhost = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` ## Usage @@ -31,27 +33,26 @@ First you need to register the core plugin with Tauri: `src-tauri/src/main.rs` ```rust -use tauri::{utils::config::AppUrl, window::WindowBuilder, WindowUrl}; +use tauri::{Manager, window::WindowBuilder, WindowUrl}; fn main() { let port = portpicker::pick_unused_port().expect("failed to find unused port"); - let mut context = tauri::generate_context!(); - let url = format!("http://localhost:{}", port).parse().unwrap(); - let window_url = WindowUrl::External(url); - // rewrite the config so the IPC is enabled on this URL - context.config_mut().build.dist_dir = AppUrl::Url(window_url.clone()); - context.config_mut().build.dev_path = AppUrl::Url(window_url.clone()); - tauri::Builder::default() .plugin(tauri_plugin_localhost::Builder::new(port).build()) .setup(move |app| { - WindowBuilder::new(app, "main".to_string(), window_url) + app.ipc_scope().configure_remote_access( + RemoteDomainAccessScope::new(format!("localhost:{}", port)) + .add_window("main") + ); + + let url = format!("http://localhost:{}", port).parse().unwrap(); + WindowBuilder::new(app, "main".to_string(), WindowUrl::External(url)) .title("Localhost Example") .build()?; Ok(()) }) - .run(context) + .run(tauri::generate_context!()) .expect("error while running tauri application"); } ``` diff --git a/plugins/log/README.md b/plugins/log/README.md index b3cb6e8a..50aaecbf 100644 --- a/plugins/log/README.md +++ b/plugins/log/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-log = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-log +# or +npm add @tauri-apps/plugin-log +# or +yarn add @tauri-apps/plugin-log + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-log#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-log#v2 diff --git a/plugins/notification/README.md b/plugins/notification/README.md index 1387df60..08f9dfd3 100644 --- a/plugins/notification/README.md +++ b/plugins/notification/README.md @@ -1,6 +1,6 @@ -![{{plugin name}}](banner.jpg) +# Notification - +Send message notifications (brief auto-expiring OS window element) to your user. Can also be used with the Notification Web API. ## Install @@ -18,7 +18,9 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] - = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "dev" } +tauri-plugin-notification = "2.0.0-alpha" +# alternatively with Git: +tauri-plugin-notification = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` You can install the JavaScript Guest bindings using your preferred JavaScript package manager: @@ -26,11 +28,18 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh -pnpm add +pnpm add @tauri-apps/plugin-notification # or -npm add +npm add @tauri-apps/plugin-notification # or -yarn add +yarn add @tauri-apps/plugin-notification + +# alternatively with Git: +pnpm add https://github.com/tauri-apps/tauri-plugin-notification#v2 +# or +npm add https://github.com/tauri-apps/tauri-plugin-notification#v2 +# or +yarn add https://github.com/tauri-apps/tauri-plugin-notification#v2 ``` ## Usage @@ -42,7 +51,7 @@ First you need to register the core plugin with Tauri: ```rust fn main() { tauri::Builder::default() - .plugin() + .plugin(tauri_plugin_notification::init()) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/plugins/notification/guest-js/index.ts b/plugins/notification/guest-js/index.ts index b11127eb..ee157ecc 100644 --- a/plugins/notification/guest-js/index.ts +++ b/plugins/notification/guest-js/index.ts @@ -6,21 +6,6 @@ * Send toast notifications (brief auto-expiring OS window element) to your user. * Can also be used with the Notification Web API. * - * This package is also accessible with `window.__TAURI__.notification` when [`build.withGlobalTauri`](https://tauri.app/v1/api/config/#buildconfig.withglobaltauri) in `tauri.conf.json` is set to `true`. - * - * The APIs must be added to [`tauri.allowlist.notification`](https://tauri.app/v1/api/config/#allowlistconfig.notification) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "notification": { - * "all": true // enable all notification APIs - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. * @module */ diff --git a/plugins/os/README.md b/plugins/os/README.md index b16ea49f..27ed03ad 100644 --- a/plugins/os/README.md +++ b/plugins/os/README.md @@ -1,4 +1,4 @@ -# Operating system plugin +# Operating System Read information about the operating system. @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-os = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-os = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-os +# or +npm add @tauri-apps/plugin-os +# or +yarn add @tauri-apps/plugin-os + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-os#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-os#v2 @@ -51,7 +60,8 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as os from "@tauri-apps/plugin-os"; +import { version } from "@tauri-apps/plugin-os"; +const osVersion = await version(); ``` ## Contributing diff --git a/plugins/os/guest-js/index.ts b/plugins/os/guest-js/index.ts index 93147c0a..36c508f1 100644 --- a/plugins/os/guest-js/index.ts +++ b/plugins/os/guest-js/index.ts @@ -5,19 +5,6 @@ /** * Provides operating system-related utility methods and properties. * - * The APIs must be added to [`tauri.allowlist.os`](https://tauri.app/v1/api/config/#allowlistconfig.os) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "os": { - * "all": true, // enable all Os APIs - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. * @module */ diff --git a/plugins/persisted-scope/README.md b/plugins/persisted-scope/README.md index 01ac82b4..1a7e19bf 100644 --- a/plugins/persisted-scope/README.md +++ b/plugins/persisted-scope/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-persisted-scope = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-persisted-scope = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` diff --git a/plugins/positioner/README.md b/plugins/positioner/README.md index 0da5aaa9..e80eb516 100644 --- a/plugins/positioner/README.md +++ b/plugins/positioner/README.md @@ -20,8 +20,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] -tauri-plugin-positioner = "1.0" -# or through git +tauri-plugin-positioner = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-positioner = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -35,11 +35,8 @@ pnpm add @tauri-apps/plugin-positioner npm add @tauri-apps/plugin-positioner # or yarn add @tauri-apps/plugin-positioner -``` - -Or through git: -```sh +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-positioner#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-positioner#v2 diff --git a/plugins/process/README.md b/plugins/process/README.md index 01fc5d61..fad3e821 100644 --- a/plugins/process/README.md +++ b/plugins/process/README.md @@ -1,4 +1,4 @@ -# Process plugin +# Process This plugin provides APIs to access the current process. To spawn child processes, see the [`shell`](https://github.com/tauri-apps/tauri-plugin-shell) plugin. @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-process = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-process = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-process +# or +npm add @tauri-apps/plugin-process +# or +yarn add @tauri-apps/plugin-process + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-process#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-process#v2 @@ -51,7 +60,11 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as process from "@tauri-apps/plugin-process"; +import { exit, relaunch } from "@tauri-apps/plugin-process"; +// exit the app with the given status code +await exit(0); +// restart the app +await relaunch(); ``` ## Contributing diff --git a/plugins/shell/README.md b/plugins/shell/README.md index 80400eaa..4d06a1e9 100644 --- a/plugins/shell/README.md +++ b/plugins/shell/README.md @@ -1,6 +1,6 @@ -![plugin-shell](banner.jpg) +# Shell - +Access the system shell. Allows you to spawn child processes and manage files and URLs using their default application. ## Install @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-shell = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-shell = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-shell +# or +npm add @tauri-apps/plugin-shell +# or +yarn add @tauri-apps/plugin-shell + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-shell#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-shell#v2 @@ -51,7 +60,8 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript - +import { Command } from "@tauri-apps/plugin-shell"; +Command.create("git", ["commit", "-m", "the commit message"]); ``` ## Contributing diff --git a/plugins/shell/guest-js/index.ts b/plugins/shell/guest-js/index.ts index 979f51d1..9d5abb21 100644 --- a/plugins/shell/guest-js/index.ts +++ b/plugins/shell/guest-js/index.ts @@ -6,36 +6,19 @@ * Access the system shell. * Allows you to spawn child processes and manage files and URLs using their default application. * - * The APIs must be added to [`tauri.allowlist.shell`](https://tauri.app/v1/api/config/#allowlistconfig.shell) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "shell": { - * "all": true, // enable all shell APIs - * "execute": true, // enable process spawn APIs - * "sidecar": true, // enable spawning sidecars - * "open": true // enable opening files/URLs using the default program - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. - * * ## Security * * This API has a scope configuration that forces you to restrict the programs and arguments that can be used. * * ### Restricting access to the {@link open | `open`} API * - * On the allowlist, `open: true` means that the {@link open} API can be used with any URL, + * On the configuration object, `open: true` means that the {@link open} API can be used with any URL, * as the argument is validated with the `^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+` regex. * You can change that regex by changing the boolean value to a string, e.g. `open: ^https://github.com/`. * * ### Restricting access to the {@link Command | `Command`} APIs * - * The `shell` allowlist object has a `scope` field that defines an array of CLIs that can be used. + * The plugin configuration object has a `scope` field that defines an array of CLIs that can be used. * Each CLI is a configuration object `{ name: string, cmd: string, sidecar?: bool, args?: boolean | Arg[] }`. * * - `name`: the unique identifier of the command, passed to the {@link Command.create | Command.create function}. @@ -55,13 +38,17 @@ * Configuration: * ```json * { - * "scope": [ - * { - * "name": "run-git-commit", - * "cmd": "git", - * "args": ["commit", "-m", { "validator": "\\S+" }] + * "plugins": { + * "shell": { + * "scope": [ + * { + * "name": "run-git-commit", + * "cmd": "git", + * "args": ["commit", "-m", { "validator": "\\S+" }] + * } + * ] * } - * ] + * } * } * ``` * Usage: @@ -425,7 +412,7 @@ class Command extends EventEmitter { * Creates a new `Command` instance. * * @param program The program name to execute. - * It must be configured on `tauri.conf.json > tauri > allowlist > shell > scope`. + * It must be configured on `tauri.conf.json > plugins > shell > scope`. * @param args Program arguments. * @param options Spawn options. */ @@ -462,7 +449,7 @@ class Command extends EventEmitter { * ``` * * @param program The program to execute. - * It must be configured on `tauri.conf.json > tauri > allowlist > shell > scope`. + * It must be configured on `tauri.conf.json > plugins > shell > scope`. */ static create( program: string, @@ -494,7 +481,7 @@ class Command extends EventEmitter { * ``` * * @param program The program to execute. - * It must be configured on `tauri.conf.json > tauri > allowlist > shell > scope`. + * It must be configured on `tauri.conf.json > plugins > shell > scope`. */ static sidecar( program: string, @@ -634,7 +621,7 @@ type CommandEvent = * ``` * * @param path The path or URL to open. - * This value is matched against the string regex defined on `tauri.conf.json > tauri > allowlist > shell > open`, + * This value is matched against the string regex defined on `tauri.conf.json > plugins > shell > open`, * which defaults to `^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+`. * @param openWith The app to open the file or URL with. * Defaults to the system default application for the specified path type. diff --git a/plugins/shell/src/config.rs b/plugins/shell/src/config.rs index 1a35df4e..180de7f6 100644 --- a/plugins/shell/src/config.rs +++ b/plugins/shell/src/config.rs @@ -2,9 +2,7 @@ use std::path::PathBuf; use serde::{de::Error as DeError, Deserialize, Deserializer}; -/// Allowlist for the shell APIs. -/// -/// See more: https://tauri.app/v1/api/config#shellallowlistconfig +/// Configuration for the shell plugin. #[derive(Debug, Default, PartialEq, Eq, Clone, Deserialize)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct Config { diff --git a/plugins/shell/src/open.rs b/plugins/shell/src/open.rs index 5cc50927..a46d3f14 100644 --- a/plugins/shell/src/open.rs +++ b/plugins/shell/src/open.rs @@ -104,7 +104,7 @@ impl Program { /// Opens path or URL with the program specified in `with`, or system default if `None`. /// /// The path will be matched against the shell open validation regex, defaulting to `^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+`. -/// A custom validation regex may be supplied in the config in `tauri > allowlist > scope > open`. +/// A custom validation regex may be supplied in the config in `plugins > shell > scope > open`. /// /// # Examples /// diff --git a/plugins/shell/src/scope.rs b/plugins/shell/src/scope.rs index 871f3940..67ebde6a 100644 --- a/plugins/shell/src/scope.rs +++ b/plugins/shell/src/scope.rs @@ -248,7 +248,7 @@ impl Scope { /// Open a path in the default (or specified) browser. /// - /// The path is validated against the `tauri > allowlist > shell > open` validation regex, which + /// The path is validated against the `plugins > shell > open` validation regex, which /// defaults to `^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+`. pub fn open(&self, path: &str, with: Option) -> Result<(), Error> { // ensure we pass validation if the configuration has one diff --git a/plugins/single-instance/README.md b/plugins/single-instance/README.md index 6c72dc4e..2cb2d88e 100644 --- a/plugins/single-instance/README.md +++ b/plugins/single-instance/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-single-instance = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-single-instance = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` diff --git a/plugins/sql/README.md b/plugins/sql/README.md index f6658668..3901405e 100644 --- a/plugins/sql/README.md +++ b/plugins/sql/README.md @@ -18,9 +18,11 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies.tauri-plugin-sql] +features = ["sqlite"] # or "postgres", or "mysql" +version = "2.0.0-alpha" +# alternatively with Git git = "https://github.com/tauri-apps/plugins-workspace" branch = "v2" -features = ["sqlite"] # or "postgres", or "mysql" ``` You can install the JavaScript Guest bindings using your preferred JavaScript package manager: @@ -28,6 +30,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-sql +# or +npm add @tauri-apps/plugin-sql +# or +yarn add @tauri-apps/plugin-sql + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-sql#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-sql#v2 diff --git a/plugins/store/README.md b/plugins/store/README.md index c8411112..90b0b7ef 100644 --- a/plugins/store/README.md +++ b/plugins/store/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-store = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-store = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-store +# or +npm add @tauri-apps/plugin-store +# or +yarn add @tauri-apps/plugin-store + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-store#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-store#v2 diff --git a/plugins/stronghold/README.md b/plugins/stronghold/README.md index 52b22a87..7254b857 100644 --- a/plugins/stronghold/README.md +++ b/plugins/stronghold/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-stronghold = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-stronghold = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-stronghold +# or +npm add @tauri-apps/plugin-stronghold +# or +yarn add @tauri-apps/plugin-stronghold + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-stronghold#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-stronghold#v2 diff --git a/plugins/updater/README.md b/plugins/updater/README.md index 842af4d9..eb6f3642 100644 --- a/plugins/updater/README.md +++ b/plugins/updater/README.md @@ -1,7 +1,9 @@ -# Updater plugin +# Updater In-app updates for Tauri applications. +- Supported platforms: Windows, Linux and macOS. + ## Install _This plugin requires a Rust version of at least **1.65**_ @@ -17,7 +19,10 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: `src-tauri/Cargo.toml` ```toml -[dependencies] +# you can add the dependencies on the `[dependencies]` section if you do not target mobile +[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies] +tauri-plugin-updater = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-updater = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +31,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-updater +# or +npm add @tauri-apps/plugin-updater +# or +yarn add @tauri-apps/plugin-updater + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-updater#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-updater#v2 @@ -42,7 +54,11 @@ First you need to register the core plugin with Tauri: ```rust fn main() { tauri::Builder::default() - .plugin(tauri_plugin_updater::Builder::new().build()) + .setup(|app| { + #[cfg(desktop)] + app.handle().plugin(tauri_plugin_updater::Builder::new().build())?; + Ok(()) + }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } @@ -51,7 +67,13 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as updater from "@tauri-apps/plugin-updater"; +import { check } from "@tauri-apps/plugin-updater"; +import { relaunch } from "@tauri-apps/plugin-process"; +const update = await check(); +if (update.response.available) { + await update.downloadAndInstall(); + await relaunch(); +} ``` ## Contributing diff --git a/plugins/upload/README.md b/plugins/upload/README.md index d451a8d6..9796aa8a 100644 --- a/plugins/upload/README.md +++ b/plugins/upload/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-upload = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-upload = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-upload +# or +npm add @tauri-apps/plugin-upload +# or +yarn add @tauri-apps/plugin-upload + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-upload#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-upload#v2 diff --git a/plugins/websocket/README.md b/plugins/websocket/README.md index 0971d6ff..56943465 100644 --- a/plugins/websocket/README.md +++ b/plugins/websocket/README.md @@ -1,6 +1,6 @@ ![plugin-websocket](banner.png) - +Expose a WebSocket server to your Tauri frontend. ## Install @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-websocket = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-websocket = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-websocket +# or +npm add @tauri-apps/plugin-websocket +# or +yarn add @tauri-apps/plugin-websocket + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-websocket#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-websocket#v2 diff --git a/plugins/window-state/README.md b/plugins/window-state/README.md index 97848cd2..ea03f8e2 100644 --- a/plugins/window-state/README.md +++ b/plugins/window-state/README.md @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-window-state = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-window-state +# or +npm add @tauri-apps/plugin-window-state +# or +yarn add @tauri-apps/plugin-window-state + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-window-state#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-window-state#v2 diff --git a/plugins/window/README.md b/plugins/window/README.md index 1a47b706..14e7c8a8 100644 --- a/plugins/window/README.md +++ b/plugins/window/README.md @@ -1,4 +1,4 @@ -# Window plugin +# Window Interact with the Tauri window. @@ -18,6 +18,8 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] +tauri-plugin-window = "2.0.0-alpha" +# alternatively with Git: tauri-plugin-window = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` @@ -26,6 +28,13 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh +pnpm add @tauri-apps/plugin-window +# or +npm add @tauri-apps/plugin-window +# or +yarn add @tauri-apps/plugin-window + +# alternatively with Git: pnpm add https://github.com/tauri-apps/tauri-plugin-window#v2 # or npm add https://github.com/tauri-apps/tauri-plugin-window#v2 @@ -51,7 +60,20 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import * as tauriWindow from "@tauri-apps/plugin-window"; +import { appWindow, WebviewWindow } from "@tauri-apps/plugin-window"; + +// manipulating this window +await appWindow.setResizable(false); + +// Creating new windows: +// loading embedded asset: +const webview = new WebviewWindow("theUniqueLabel", { + url: "path/to/page.html", +}); +// alternatively, load a remote URL: +const webview = new WebviewWindow("theUniqueLabel", { + url: "https://github.com/tauri-apps/tauri", +}); ``` ## Contributing diff --git a/plugins/window/guest-js/index.ts b/plugins/window/guest-js/index.ts index b330314b..038fdc05 100644 --- a/plugins/window/guest-js/index.ts +++ b/plugins/window/guest-js/index.ts @@ -5,51 +5,6 @@ /** * Provides APIs to create windows, communicate with other windows and manipulate the current window. * - * The APIs must be added to [`tauri.allowlist.window`](https://tauri.app/v1/api/config/#allowlistconfig.window) in `tauri.conf.json`: - * ```json - * { - * "tauri": { - * "allowlist": { - * "window": { - * "all": true, // enable all window APIs - * "create": true, // enable window creation - * "center": true, - * "requestUserAttention": true, - * "setResizable": true, - * "setTitle": true, - * "maximize": true, - * "unmaximize": true, - * "minimize": true, - * "unminimize": true, - * "show": true, - * "hide": true, - * "close": true, - * "setDecorations": true, - * "setShadow": true, - * "setAlwaysOnTop": true, - * "setContentProtected": true, - * "setSize": true, - * "setMinSize": true, - * "setMaxSize": true, - * "setPosition": true, - * "setFullscreen": true, - * "setFocus": true, - * "setIcon": true, - * "setSkipTaskbar": true, - * "setCursorGrab": true, - * "setCursorVisible": true, - * "setCursorIcon": true, - * "setCursorPosition": true, - * "setIgnoreCursorEvents": true, - * "startDragging": true, - * "print": true - * } - * } - * } - * } - * ``` - * It is recommended to allowlist only the APIs you use for optimal bundle size and security. - * * ## Window events * * Events can be listened to using `appWindow.listen`: diff --git a/shared/template/README.md b/shared/template/README.md index f1641d84..1a839763 100644 --- a/shared/template/README.md +++ b/shared/template/README.md @@ -1,4 +1,4 @@ -![{{plugin name}}](banner.jpg) +![{{plugin-name}}](banner.png) @@ -18,7 +18,9 @@ Install the Core plugin by adding the following to your `Cargo.toml` file: ```toml [dependencies] - = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } +tauri-plugin-{{plugin-name}} = "2.0.0-alpha" +# alternatively with Git: +tauri-plugin-{{plugin-name}} = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" } ``` You can install the JavaScript Guest bindings using your preferred JavaScript package manager: @@ -26,11 +28,18 @@ You can install the JavaScript Guest bindings using your preferred JavaScript pa > Note: Since most JavaScript package managers are unable to install packages from git monorepos we provide read-only mirrors of each plugin. This makes installation option 2 more ergonomic to use. ```sh -pnpm add +pnpm add @tauri-apps/plugin-{{plugin-name}} # or -npm add +npm add @tauri-apps/plugin-{{plugin-name}} # or -yarn add +yarn add @tauri-apps/plugin-{{plugin-name}} + +# alternatively with Git: +pnpm add https://github.com/tauri-apps/tauri-plugin-{{plugin-name}}#v2 +# or +npm add https://github.com/tauri-apps/tauri-plugin-{{plugin-name}}#v2 +# or +yarn add https://github.com/tauri-apps/tauri-plugin-{{plugin-name}}#v2 ``` ## Usage @@ -42,7 +51,7 @@ First you need to register the core plugin with Tauri: ```rust fn main() { tauri::Builder::default() - .plugin() + .plugin(tauri_plugin_{{plugin-name}}::init()) .run(tauri::generate_context!()) .expect("error while running tauri application"); } From 95329dded120bd9362bd77900e0bb9febcc529d6 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sun, 21 May 2023 07:07:50 -0700 Subject: [PATCH 34/64] chore: add remaining mirrors (#382) Co-authored-by: Fabian-Lars --- plugins/mirrors.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/mirrors.txt b/plugins/mirrors.txt index c441d95e..c294bfe2 100644 --- a/plugins/mirrors.txt +++ b/plugins/mirrors.txt @@ -1,3 +1,4 @@ +app authenticator autostart cli @@ -6,14 +7,16 @@ dialog fs global-shortcut http -localhost log -persisted-scope +os positioner +process shell sql store stronghold +updater upload websocket +window window-state From 5914fb9f3666ff862518cf37a6d29e1f0641bb53 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sun, 21 May 2023 12:56:10 -0700 Subject: [PATCH 35/64] chore: add license headers (#384) * feat: check for license headers * add headers * format --- .github/sync-to-mirrors.sh | 3 + .github/workflows/audit-javascript.yml | 4 + .github/workflows/audit-rust.yml | 4 + .github/workflows/check-license-header.yml | 28 +++++ .github/workflows/covector-status.yml | 4 + .../covector-version-or-publish-v2.yml | 4 + .../workflows/covector-version-or-publish.yml | 4 + .github/workflows/lint-javascript.yml | 4 + .github/workflows/lint-rust.yml | 4 + .github/workflows/sync.yml | 4 + .github/workflows/test-rust.yml | 4 + .scripts/ci/check-license-header.js | 118 ++++++++++++++++++ examples/api/.setup-cross.sh | 3 + plugins/app/src/commands.rs | 4 + plugins/app/src/lib.rs | 4 + plugins/authenticator/guest-js/index.ts | 4 + plugins/authenticator/src/auth.rs | 2 +- plugins/authenticator/src/error.rs | 4 + plugins/authenticator/src/lib.rs | 2 +- plugins/authenticator/src/u2f.rs | 2 +- plugins/autostart/guest-js/index.ts | 2 +- plugins/autostart/src/lib.rs | 2 +- plugins/cli/src/config.rs | 4 + plugins/cli/src/error.rs | 4 + plugins/cli/src/lib.rs | 4 + .../java/ExampleInstrumentedTest.kt | 4 + .../android/src/main/java/ClipboardPlugin.kt | 4 + .../android/src/test/java/ExampleUnitTest.kt | 4 + plugins/clipboard/build.rs | 4 + plugins/clipboard/ios/Package.swift | 4 +- .../ios/Sources/ClipboardPlugin.swift | 4 + .../ios/Tests/PluginTests/PluginTests.swift | 4 + .../java/ExampleInstrumentedTest.kt | 4 + .../android/src/test/java/ExampleUnitTest.kt | 4 + plugins/dialog/build.rs | 4 + plugins/dialog/ios/Package.swift | 4 +- plugins/dialog/ios/Sources/DialogPlugin.swift | 4 + .../ios/Sources/FilePickerController.swift | 4 + .../ios/Tests/PluginTests/PluginTests.swift | 4 + plugins/fs/src/commands.rs | 4 + plugins/fs/src/config.rs | 4 + plugins/fs/src/error.rs | 4 + plugins/fs/src/watcher.rs | 4 + plugins/global-shortcut/src/error.rs | 4 + plugins/global-shortcut/src/lib.rs | 4 + plugins/http/src/commands/client.rs | 4 + plugins/http/src/commands/mod.rs | 4 + plugins/http/src/config.rs | 4 + plugins/http/src/error.rs | 4 + plugins/http/src/lib.rs | 4 + plugins/localhost/src/lib.rs | 2 +- plugins/log/guest-js/index.ts | 4 + plugins/log/ios/Package.swift | 4 +- plugins/log/ios/Sources/LogPlugin.swift | 4 + plugins/log/src/lib.rs | 2 +- .../java/ExampleInstrumentedTest.kt | 4 + .../android/src/main/java/AssetUtils.kt | 4 + .../android/src/main/java/ChannelManager.kt | 4 + .../android/src/main/java/Notification.kt | 4 + .../src/main/java/NotificationAction.kt | 4 + .../src/main/java/NotificationAttachment.kt | 4 + .../src/main/java/NotificationPlugin.kt | 4 + .../src/main/java/NotificationSchedule.kt | 4 + .../src/main/java/NotificationStorage.kt | 4 + .../src/main/java/TauriNotificationManager.kt | 4 + .../android/src/test/java/ExampleUnitTest.kt | 4 + plugins/notification/build.rs | 4 + plugins/notification/ios/Package.swift | 6 +- .../ios/Sources/Notification.swift | 4 + .../ios/Sources/NotificationCategory.swift | 4 + .../ios/Sources/NotificationHandler.swift | 4 + .../ios/Sources/NotificationManager.swift | 4 + .../ios/Sources/NotificationPlugin.swift | 4 + .../ios/Tests/PluginTests/PluginTests.swift | 4 + plugins/notification/src/init.js | 4 + plugins/os/src/commands.rs | 4 + plugins/os/src/error.rs | 4 + plugins/os/src/lib.rs | 4 + plugins/persisted-scope/src/lib.rs | 2 +- plugins/positioner/guest-js/index.ts | 2 + plugins/positioner/src/ext.rs | 2 + plugins/positioner/src/lib.rs | 2 + plugins/process/src/commands.rs | 4 + plugins/process/src/lib.rs | 4 + plugins/shell/src/commands.rs | 4 + plugins/shell/src/config.rs | 4 + plugins/shell/src/error.rs | 4 + plugins/shell/src/lib.rs | 4 + .../examples/vanilla/src-tauri/build.rs | 4 + .../examples/vanilla/src-tauri/src/main.rs | 4 + plugins/single-instance/src/lib.rs | 4 + .../src/platform_impl/linux.rs | 4 + .../src/platform_impl/macos.rs | 4 + .../src/platform_impl/windows.rs | 4 + plugins/sql/guest-js/index.ts | 4 + plugins/sql/src/decode/mod.rs | 4 + plugins/sql/src/decode/mysql.rs | 4 + plugins/sql/src/decode/postgres.rs | 4 + plugins/sql/src/decode/sqlite.rs | 4 + plugins/sql/src/lib.rs | 2 +- plugins/sql/src/plugin.rs | 2 +- plugins/store/guest-js/index.ts | 2 +- plugins/store/src/error.rs | 2 +- plugins/store/src/lib.rs | 2 +- plugins/store/src/store.rs | 2 +- plugins/stronghold/guest-js/index.ts | 4 + plugins/stronghold/src/lib.rs | 4 + plugins/stronghold/src/stronghold.rs | 4 + plugins/updater/build.rs | 4 + plugins/updater/guest-js/index.ts | 4 + plugins/updater/src/commands.rs | 4 + plugins/updater/src/config.rs | 4 + plugins/updater/src/lib.rs | 4 + plugins/upload/guest-js/index.ts | 4 + plugins/upload/src/lib.rs | 2 +- .../examples/svelte-app/src-tauri/build.rs | 4 + .../examples/svelte-app/src-tauri/src/main.rs | 4 + .../examples/svelte-app/src/app.d.ts | 4 + .../examples/svelte-app/svelte.config.js | 4 + .../examples/svelte-app/vite.config.ts | 4 + plugins/websocket/guest-js/index.ts | 4 + plugins/websocket/src/lib.rs | 4 + plugins/window-state/guest-js/index.ts | 4 + plugins/window-state/src/cmd.rs | 4 + plugins/window-state/src/lib.rs | 2 +- plugins/window/build.rs | 4 + plugins/window/src/desktop_commands.rs | 4 + plugins/window/src/lib.rs | 4 + shared/rollup.config.mjs | 4 + .../java/ExampleInstrumentedTest.kt | 4 + .../android/src/main/java/ExamplePlugin.kt | 4 + .../android/src/test/java/ExampleUnitTest.kt | 4 + shared/template/build.rs | 4 + shared/template/guest-js/index.ts | 3 + shared/template/ios/Package.swift | 4 +- .../template/ios/Sources/ExamplePlugin.swift | 4 + .../ios/Tests/PluginTests/PluginTests.swift | 4 + 137 files changed, 626 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/check-license-header.yml create mode 100644 .scripts/ci/check-license-header.js diff --git a/.github/sync-to-mirrors.sh b/.github/sync-to-mirrors.sh index 52d4c27f..4baf55d2 100755 --- a/.github/sync-to-mirrors.sh +++ b/.github/sync-to-mirrors.sh @@ -1,4 +1,7 @@ #!/bin/bash +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT ## Environment used by this script: # diff --git a/.github/workflows/audit-javascript.yml b/.github/workflows/audit-javascript.yml index 19a7f4c8..618ebf59 100644 --- a/.github/workflows/audit-javascript.yml +++ b/.github/workflows/audit-javascript.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: Audit JavaScript on: diff --git a/.github/workflows/audit-rust.yml b/.github/workflows/audit-rust.yml index 1ec0225e..c85d3712 100644 --- a/.github/workflows/audit-rust.yml +++ b/.github/workflows/audit-rust.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: Audit Rust on: diff --git a/.github/workflows/check-license-header.yml b/.github/workflows/check-license-header.yml new file mode 100644 index 00000000..15e9f2cb --- /dev/null +++ b/.github/workflows/check-license-header.yml @@ -0,0 +1,28 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + +name: Check generated files + +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: dorny/paths-filter@v2 + id: filter + with: + list-files: shell + filters: | + added: + - added: '**' + - name: check header license on new files + if: ${{ steps.filter.outputs.added == 'true' }} + run: node .scripts/ci/check-license-header.js ${{ steps.filter.outputs.added_files }} diff --git a/.github/workflows/covector-status.yml b/.github/workflows/covector-status.yml index cb5a344a..abe20e35 100644 --- a/.github/workflows/covector-status.yml +++ b/.github/workflows/covector-status.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: covector status on: [pull_request] diff --git a/.github/workflows/covector-version-or-publish-v2.yml b/.github/workflows/covector-version-or-publish-v2.yml index 104e0ef4..63b14e97 100644 --- a/.github/workflows/covector-version-or-publish-v2.yml +++ b/.github/workflows/covector-version-or-publish-v2.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: version or publish on: diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index b5c4ab7d..f10247e0 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: version or publish on: diff --git a/.github/workflows/lint-javascript.yml b/.github/workflows/lint-javascript.yml index c2c0a1d3..02b96541 100644 --- a/.github/workflows/lint-javascript.yml +++ b/.github/workflows/lint-javascript.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: Lint JavaScript on: diff --git a/.github/workflows/lint-rust.yml b/.github/workflows/lint-rust.yml index 0f51d2f7..db0a8cfb 100644 --- a/.github/workflows/lint-rust.yml +++ b/.github/workflows/lint-rust.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: Lint Rust on: diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 82da46fc..b34ccc7c 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: Sync on: diff --git a/.github/workflows/test-rust.yml b/.github/workflows/test-rust.yml index 254fb503..e0c49a85 100644 --- a/.github/workflows/test-rust.yml +++ b/.github/workflows/test-rust.yml @@ -1,3 +1,7 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + name: Test Rust on: diff --git a/.scripts/ci/check-license-header.js b/.scripts/ci/check-license-header.js new file mode 100644 index 00000000..5e629258 --- /dev/null +++ b/.scripts/ci/check-license-header.js @@ -0,0 +1,118 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +import fs from "fs"; +import path from "path"; +import readline from "readline"; + +const header = `Copyright 2019-2023 Tauri Programme within The Commons Conservancy +SPDX-License-Identifier: Apache-2.0 +SPDX-License-Identifier: MIT`; +const ignoredLicense = "// Copyright 2021 Jonas Kruckenberg"; + +const extensions = [".rs", ".js", ".ts", ".yml", ".swift", ".kt"]; +const ignore = [ + "target", + "templates", + "node_modules", + "gen", + "dist", + "dist-js", + ".svelte-kit", + "api-iife.js", +]; + +async function checkFile(file) { + if (extensions.some((e) => file.endsWith(e))) { + const fileStream = fs.createReadStream(file); + const rl = readline.createInterface({ + input: fileStream, + crlfDelay: Infinity, + }); + + let contents = ``; + let i = 0; + for await (let line of rl) { + // ignore empty lines, allow shebang, swift-tools-version and bundler license + if ( + line.length === 0 || + line.startsWith("#!") || + line.startsWith("// swift-tools-version:") || + line === ignoredLicense + ) { + continue; + } + + // strip comment marker + if (line.startsWith("// ")) { + line = line.substring(3); + } else if (line.startsWith("# ")) { + line = line.substring(2); + } + + contents += line; + if (++i === 3) { + break; + } + contents += "\n"; + } + if (contents !== header) { + return true; + } + } + return false; +} + +async function check(src) { + const missingHeader = []; + + for (const entry of fs.readdirSync(src, { withFileTypes: true })) { + const p = path.join(src, entry.name); + + if (entry.isSymbolicLink() || ignore.includes(entry.name)) { + continue; + } + + if (entry.isDirectory()) { + const missing = await check(p); + missingHeader.push(...missing); + } else { + const isMissing = await checkFile(p); + if (isMissing) { + missingHeader.push(p); + } + } + } + + return missingHeader; +} + +const [_bin, _script, ...files] = process.argv; + +if (files.length > 0) { + async function run() { + const missing = []; + for (const f of files) { + const isMissing = await checkFile(f); + if (isMissing) { + missing.push(f); + } + } + if (missing.length > 0) { + console.log(missing.join("\n")); + process.exit(1); + } + } + + run(); +} else { + check(path.resolve(new URL(import.meta.url).pathname, "../../..")).then( + (missing) => { + if (missing.length > 0) { + console.log(missing.join("\n")); + process.exit(1); + } + } + ); +} diff --git a/examples/api/.setup-cross.sh b/examples/api/.setup-cross.sh index cd563694..a9e4f867 100644 --- a/examples/api/.setup-cross.sh +++ b/examples/api/.setup-cross.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT export ICONS_VOLUME="$(realpath icons)" export DIST_VOLUME="$(realpath dist)" diff --git a/plugins/app/src/commands.rs b/plugins/app/src/commands.rs index 1871473b..ebe06f76 100644 --- a/plugins/app/src/commands.rs +++ b/plugins/app/src/commands.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{AppHandle, Runtime}; #[tauri::command] diff --git a/plugins/app/src/lib.rs b/plugins/app/src/lib.rs index 790ed9d2..fc97c050 100644 --- a/plugins/app/src/lib.rs +++ b/plugins/app/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{ plugin::{Builder, TauriPlugin}, Runtime, diff --git a/plugins/authenticator/guest-js/index.ts b/plugins/authenticator/guest-js/index.ts index 8b4a533c..f8db2008 100644 --- a/plugins/authenticator/guest-js/index.ts +++ b/plugins/authenticator/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke } from "@tauri-apps/api/tauri"; export class Authenticator { diff --git a/plugins/authenticator/src/auth.rs b/plugins/authenticator/src/auth.rs index c334173d..34bc332b 100644 --- a/plugins/authenticator/src/auth.rs +++ b/plugins/authenticator/src/auth.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/authenticator/src/error.rs b/plugins/authenticator/src/error.rs index 87a393d2..8cc5df00 100644 --- a/plugins/authenticator/src/error.rs +++ b/plugins/authenticator/src/error.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde::{Serialize, Serializer}; #[derive(Debug, thiserror::Error)] diff --git a/plugins/authenticator/src/lib.rs b/plugins/authenticator/src/lib.rs index e1b488e0..b46f44c6 100644 --- a/plugins/authenticator/src/lib.rs +++ b/plugins/authenticator/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/authenticator/src/u2f.rs b/plugins/authenticator/src/u2f.rs index e8bd5de9..12f1d6c3 100644 --- a/plugins/authenticator/src/u2f.rs +++ b/plugins/authenticator/src/u2f.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/autostart/guest-js/index.ts b/plugins/autostart/guest-js/index.ts index 0d43fe6e..b3100708 100644 --- a/plugins/autostart/guest-js/index.ts +++ b/plugins/autostart/guest-js/index.ts @@ -1,4 +1,4 @@ -// Copyright 2019-2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/autostart/src/lib.rs b/plugins/autostart/src/lib.rs index cfdd5ccc..2ecc4609 100644 --- a/plugins/autostart/src/lib.rs +++ b/plugins/autostart/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2019-2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/cli/src/config.rs b/plugins/cli/src/config.rs index f00b8370..f7f36a0e 100644 --- a/plugins/cli/src/config.rs +++ b/plugins/cli/src/config.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::collections::HashMap; use serde::Deserialize; diff --git a/plugins/cli/src/error.rs b/plugins/cli/src/error.rs index 8dee7f66..b4bd2872 100644 --- a/plugins/cli/src/error.rs +++ b/plugins/cli/src/error.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde::{Serialize, Serializer}; #[derive(Debug, thiserror::Error)] diff --git a/plugins/cli/src/lib.rs b/plugins/cli/src/lib.rs index 25795c01..8243dff3 100644 --- a/plugins/cli/src/lib.rs +++ b/plugins/cli/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{ plugin::{Builder, PluginApi, TauriPlugin}, AppHandle, Manager, Runtime, State, diff --git a/plugins/clipboard/android/src/androidTest/java/ExampleInstrumentedTest.kt b/plugins/clipboard/android/src/androidTest/java/ExampleInstrumentedTest.kt index 2938f836..02e6984b 100644 --- a/plugins/clipboard/android/src/androidTest/java/ExampleInstrumentedTest.kt +++ b/plugins/clipboard/android/src/androidTest/java/ExampleInstrumentedTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.clipboard import androidx.test.platform.app.InstrumentationRegistry diff --git a/plugins/clipboard/android/src/main/java/ClipboardPlugin.kt b/plugins/clipboard/android/src/main/java/ClipboardPlugin.kt index ece3e45e..8f622251 100644 --- a/plugins/clipboard/android/src/main/java/ClipboardPlugin.kt +++ b/plugins/clipboard/android/src/main/java/ClipboardPlugin.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.clipboard import android.R.attr.value diff --git a/plugins/clipboard/android/src/test/java/ExampleUnitTest.kt b/plugins/clipboard/android/src/test/java/ExampleUnitTest.kt index 6a889763..282700f2 100644 --- a/plugins/clipboard/android/src/test/java/ExampleUnitTest.kt +++ b/plugins/clipboard/android/src/test/java/ExampleUnitTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.clipboard import org.junit.Test diff --git a/plugins/clipboard/build.rs b/plugins/clipboard/build.rs index 86ac3f0a..743096a6 100644 --- a/plugins/clipboard/build.rs +++ b/plugins/clipboard/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::process::exit; fn main() { diff --git a/plugins/clipboard/ios/Package.swift b/plugins/clipboard/ios/Package.swift index e38a8bb6..42c3de03 100644 --- a/plugins/clipboard/ios/Package.swift +++ b/plugins/clipboard/ios/Package.swift @@ -1,5 +1,7 @@ // swift-tools-version:5.3 -// The swift-tools-version declares the minimum version of Swift required to build this package. +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT import PackageDescription diff --git a/plugins/clipboard/ios/Sources/ClipboardPlugin.swift b/plugins/clipboard/ios/Sources/ClipboardPlugin.swift index dda6177b..5f84aa65 100644 --- a/plugins/clipboard/ios/Sources/ClipboardPlugin.swift +++ b/plugins/clipboard/ios/Sources/ClipboardPlugin.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import UIKit import WebKit import Tauri diff --git a/plugins/clipboard/ios/Tests/PluginTests/PluginTests.swift b/plugins/clipboard/ios/Tests/PluginTests/PluginTests.swift index f1657dea..e5d54b38 100644 --- a/plugins/clipboard/ios/Tests/PluginTests/PluginTests.swift +++ b/plugins/clipboard/ios/Tests/PluginTests/PluginTests.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import XCTest @testable import ClipboardPlugin diff --git a/plugins/dialog/android/src/androidTest/java/ExampleInstrumentedTest.kt b/plugins/dialog/android/src/androidTest/java/ExampleInstrumentedTest.kt index cebbd46c..6c9d837e 100644 --- a/plugins/dialog/android/src/androidTest/java/ExampleInstrumentedTest.kt +++ b/plugins/dialog/android/src/androidTest/java/ExampleInstrumentedTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.dialog import androidx.test.platform.app.InstrumentationRegistry diff --git a/plugins/dialog/android/src/test/java/ExampleUnitTest.kt b/plugins/dialog/android/src/test/java/ExampleUnitTest.kt index b7d61c6a..00369a3f 100644 --- a/plugins/dialog/android/src/test/java/ExampleUnitTest.kt +++ b/plugins/dialog/android/src/test/java/ExampleUnitTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.dialog import org.junit.Test diff --git a/plugins/dialog/build.rs b/plugins/dialog/build.rs index 86ac3f0a..743096a6 100644 --- a/plugins/dialog/build.rs +++ b/plugins/dialog/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::process::exit; fn main() { diff --git a/plugins/dialog/ios/Package.swift b/plugins/dialog/ios/Package.swift index 6bc96852..45a58a43 100644 --- a/plugins/dialog/ios/Package.swift +++ b/plugins/dialog/ios/Package.swift @@ -1,5 +1,7 @@ // swift-tools-version:5.3 -// The swift-tools-version declares the minimum version of Swift required to build this package. +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT import PackageDescription diff --git a/plugins/dialog/ios/Sources/DialogPlugin.swift b/plugins/dialog/ios/Sources/DialogPlugin.swift index 0970c056..ef1dff71 100644 --- a/plugins/dialog/ios/Sources/DialogPlugin.swift +++ b/plugins/dialog/ios/Sources/DialogPlugin.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import UIKit import MobileCoreServices import PhotosUI diff --git a/plugins/dialog/ios/Sources/FilePickerController.swift b/plugins/dialog/ios/Sources/FilePickerController.swift index fc636473..b2752f0b 100644 --- a/plugins/dialog/ios/Sources/FilePickerController.swift +++ b/plugins/dialog/ios/Sources/FilePickerController.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import UIKit import MobileCoreServices import PhotosUI diff --git a/plugins/dialog/ios/Tests/PluginTests/PluginTests.swift b/plugins/dialog/ios/Tests/PluginTests/PluginTests.swift index 4f8e9ace..99992ce4 100644 --- a/plugins/dialog/ios/Tests/PluginTests/PluginTests.swift +++ b/plugins/dialog/ios/Tests/PluginTests/PluginTests.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import XCTest @testable import ExamplePlugin diff --git a/plugins/fs/src/commands.rs b/plugins/fs/src/commands.rs index 168f9629..59255796 100644 --- a/plugins/fs/src/commands.rs +++ b/plugins/fs/src/commands.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use crate::Scope; use anyhow::Context; use serde::{Deserialize, Serialize, Serializer}; diff --git a/plugins/fs/src/config.rs b/plugins/fs/src/config.rs index 837e3a40..f6c9b235 100644 --- a/plugins/fs/src/config.rs +++ b/plugins/fs/src/config.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::path::PathBuf; use serde::Deserialize; diff --git a/plugins/fs/src/error.rs b/plugins/fs/src/error.rs index e627b458..effc017f 100644 --- a/plugins/fs/src/error.rs +++ b/plugins/fs/src/error.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::path::PathBuf; use serde::{Serialize, Serializer}; diff --git a/plugins/fs/src/watcher.rs b/plugins/fs/src/watcher.rs index 79cb34a2..647342c7 100644 --- a/plugins/fs/src/watcher.rs +++ b/plugins/fs/src/watcher.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use notify::{Config, Event, RecommendedWatcher, RecursiveMode, Watcher}; use notify_debouncer_mini::{new_debouncer, DebounceEventResult, Debouncer}; use serde::Deserialize; diff --git a/plugins/global-shortcut/src/error.rs b/plugins/global-shortcut/src/error.rs index f9bf2460..8157000c 100644 --- a/plugins/global-shortcut/src/error.rs +++ b/plugins/global-shortcut/src/error.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde::{Serialize, Serializer}; #[derive(Debug, thiserror::Error)] diff --git a/plugins/global-shortcut/src/lib.rs b/plugins/global-shortcut/src/lib.rs index 4266de21..6ac38f45 100644 --- a/plugins/global-shortcut/src/lib.rs +++ b/plugins/global-shortcut/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #![cfg(not(any(target_os = "android", target_os = "ios")))] use std::{ diff --git a/plugins/http/src/commands/client.rs b/plugins/http/src/commands/client.rs index 997dee05..07614a53 100644 --- a/plugins/http/src/commands/client.rs +++ b/plugins/http/src/commands/client.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::{collections::HashMap, path::PathBuf, time::Duration}; use reqwest::{header, Method, Url}; diff --git a/plugins/http/src/commands/mod.rs b/plugins/http/src/commands/mod.rs index 5e9d4c58..94c71324 100644 --- a/plugins/http/src/commands/mod.rs +++ b/plugins/http/src/commands/mod.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{path::SafePathBuf, AppHandle, Runtime, State}; use tauri_plugin_fs::FsExt; diff --git a/plugins/http/src/config.rs b/plugins/http/src/config.rs index d6b5eba0..4e9d7317 100644 --- a/plugins/http/src/config.rs +++ b/plugins/http/src/config.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use reqwest::Url; use serde::Deserialize; diff --git a/plugins/http/src/error.rs b/plugins/http/src/error.rs index f1234cbb..8b49b0f7 100644 --- a/plugins/http/src/error.rs +++ b/plugins/http/src/error.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::path::PathBuf; use reqwest::Url; diff --git a/plugins/http/src/lib.rs b/plugins/http/src/lib.rs index 348d26a2..afee9b54 100644 --- a/plugins/http/src/lib.rs +++ b/plugins/http/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use config::{Config, HttpAllowlistScope}; pub use reqwest as client; use tauri::{ diff --git a/plugins/localhost/src/lib.rs b/plugins/localhost/src/lib.rs index 11a0b75c..e34a9ace 100644 --- a/plugins/localhost/src/lib.rs +++ b/plugins/localhost/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2019-2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/log/guest-js/index.ts b/plugins/log/guest-js/index.ts index f7b8e7ef..54fb6e28 100644 --- a/plugins/log/guest-js/index.ts +++ b/plugins/log/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke } from "@tauri-apps/api/tauri"; import { listen, UnlistenFn } from "@tauri-apps/api/event"; diff --git a/plugins/log/ios/Package.swift b/plugins/log/ios/Package.swift index 4f736418..4afbbbdb 100644 --- a/plugins/log/ios/Package.swift +++ b/plugins/log/ios/Package.swift @@ -1,5 +1,7 @@ // swift-tools-version:5.3 -// The swift-tools-version declares the minimum version of Swift required to build this package. +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT import PackageDescription diff --git a/plugins/log/ios/Sources/LogPlugin.swift b/plugins/log/ios/Sources/LogPlugin.swift index 954f357e..cefdc858 100644 --- a/plugins/log/ios/Sources/LogPlugin.swift +++ b/plugins/log/ios/Sources/LogPlugin.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import UIKit import Tauri import SwiftRs diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs index cbb6dd29..64489f46 100644 --- a/plugins/log/src/lib.rs +++ b/plugins/log/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/notification/android/src/androidTest/java/ExampleInstrumentedTest.kt b/plugins/notification/android/src/androidTest/java/ExampleInstrumentedTest.kt index 814a39af..88ede7f4 100644 --- a/plugins/notification/android/src/androidTest/java/ExampleInstrumentedTest.kt +++ b/plugins/notification/android/src/androidTest/java/ExampleInstrumentedTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import androidx.test.platform.app.InstrumentationRegistry diff --git a/plugins/notification/android/src/main/java/AssetUtils.kt b/plugins/notification/android/src/main/java/AssetUtils.kt index c97cd528..fafccf7a 100644 --- a/plugins/notification/android/src/main/java/AssetUtils.kt +++ b/plugins/notification/android/src/main/java/AssetUtils.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import android.annotation.SuppressLint diff --git a/plugins/notification/android/src/main/java/ChannelManager.kt b/plugins/notification/android/src/main/java/ChannelManager.kt index cf68e666..2ae740e5 100644 --- a/plugins/notification/android/src/main/java/ChannelManager.kt +++ b/plugins/notification/android/src/main/java/ChannelManager.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import android.app.NotificationChannel diff --git a/plugins/notification/android/src/main/java/Notification.kt b/plugins/notification/android/src/main/java/Notification.kt index 3839807b..9076fa8f 100644 --- a/plugins/notification/android/src/main/java/Notification.kt +++ b/plugins/notification/android/src/main/java/Notification.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import android.content.ContentResolver diff --git a/plugins/notification/android/src/main/java/NotificationAction.kt b/plugins/notification/android/src/main/java/NotificationAction.kt index c1a964b4..d50d0fe9 100644 --- a/plugins/notification/android/src/main/java/NotificationAction.kt +++ b/plugins/notification/android/src/main/java/NotificationAction.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import app.tauri.Logger diff --git a/plugins/notification/android/src/main/java/NotificationAttachment.kt b/plugins/notification/android/src/main/java/NotificationAttachment.kt index 1cc35e89..56a13818 100644 --- a/plugins/notification/android/src/main/java/NotificationAttachment.kt +++ b/plugins/notification/android/src/main/java/NotificationAttachment.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import app.tauri.plugin.JSObject diff --git a/plugins/notification/android/src/main/java/NotificationPlugin.kt b/plugins/notification/android/src/main/java/NotificationPlugin.kt index f87bcf17..2b6043dc 100644 --- a/plugins/notification/android/src/main/java/NotificationPlugin.kt +++ b/plugins/notification/android/src/main/java/NotificationPlugin.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import android.Manifest diff --git a/plugins/notification/android/src/main/java/NotificationSchedule.kt b/plugins/notification/android/src/main/java/NotificationSchedule.kt index 89edbc9d..64c83486 100644 --- a/plugins/notification/android/src/main/java/NotificationSchedule.kt +++ b/plugins/notification/android/src/main/java/NotificationSchedule.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import android.annotation.SuppressLint diff --git a/plugins/notification/android/src/main/java/NotificationStorage.kt b/plugins/notification/android/src/main/java/NotificationStorage.kt index bfddfcc2..4d55a9a4 100644 --- a/plugins/notification/android/src/main/java/NotificationStorage.kt +++ b/plugins/notification/android/src/main/java/NotificationStorage.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import android.content.Context diff --git a/plugins/notification/android/src/main/java/TauriNotificationManager.kt b/plugins/notification/android/src/main/java/TauriNotificationManager.kt index 79e67908..2f948069 100644 --- a/plugins/notification/android/src/main/java/TauriNotificationManager.kt +++ b/plugins/notification/android/src/main/java/TauriNotificationManager.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import android.annotation.SuppressLint diff --git a/plugins/notification/android/src/test/java/ExampleUnitTest.kt b/plugins/notification/android/src/test/java/ExampleUnitTest.kt index 46693a0f..134a27d4 100644 --- a/plugins/notification/android/src/test/java/ExampleUnitTest.kt +++ b/plugins/notification/android/src/test/java/ExampleUnitTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package app.tauri.notification import org.junit.Test diff --git a/plugins/notification/build.rs b/plugins/notification/build.rs index 86ac3f0a..743096a6 100644 --- a/plugins/notification/build.rs +++ b/plugins/notification/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::process::exit; fn main() { diff --git a/plugins/notification/ios/Package.swift b/plugins/notification/ios/Package.swift index bfcaf338..1a2c4801 100644 --- a/plugins/notification/ios/Package.swift +++ b/plugins/notification/ios/Package.swift @@ -1,5 +1,9 @@ // swift-tools-version:5.3 -// The swift-tools-version declares the minimum version of Swift required to build this package. +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + + import PackageDescription diff --git a/plugins/notification/ios/Sources/Notification.swift b/plugins/notification/ios/Sources/Notification.swift index 52b1016f..e6f0d077 100644 --- a/plugins/notification/ios/Sources/Notification.swift +++ b/plugins/notification/ios/Sources/Notification.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import Tauri import UserNotifications diff --git a/plugins/notification/ios/Sources/NotificationCategory.swift b/plugins/notification/ios/Sources/NotificationCategory.swift index 74a1e194..ae37ffc3 100644 --- a/plugins/notification/ios/Sources/NotificationCategory.swift +++ b/plugins/notification/ios/Sources/NotificationCategory.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import Tauri import UserNotifications diff --git a/plugins/notification/ios/Sources/NotificationHandler.swift b/plugins/notification/ios/Sources/NotificationHandler.swift index 1f7cb8ba..ac569bdf 100644 --- a/plugins/notification/ios/Sources/NotificationHandler.swift +++ b/plugins/notification/ios/Sources/NotificationHandler.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import Tauri import UserNotifications diff --git a/plugins/notification/ios/Sources/NotificationManager.swift b/plugins/notification/ios/Sources/NotificationManager.swift index 857636fb..183b4dd5 100644 --- a/plugins/notification/ios/Sources/NotificationManager.swift +++ b/plugins/notification/ios/Sources/NotificationManager.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import Foundation import UserNotifications diff --git a/plugins/notification/ios/Sources/NotificationPlugin.swift b/plugins/notification/ios/Sources/NotificationPlugin.swift index 217c999d..29e01865 100644 --- a/plugins/notification/ios/Sources/NotificationPlugin.swift +++ b/plugins/notification/ios/Sources/NotificationPlugin.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import SwiftRs import Tauri import UIKit diff --git a/plugins/notification/ios/Tests/PluginTests/PluginTests.swift b/plugins/notification/ios/Tests/PluginTests/PluginTests.swift index 4f8e9ace..99992ce4 100644 --- a/plugins/notification/ios/Tests/PluginTests/PluginTests.swift +++ b/plugins/notification/ios/Tests/PluginTests/PluginTests.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import XCTest @testable import ExamplePlugin diff --git a/plugins/notification/src/init.js b/plugins/notification/src/init.js index d69acf61..53de9586 100644 --- a/plugins/notification/src/init.js +++ b/plugins/notification/src/init.js @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + (function () { let permissionSettable = false; let permissionValue = "default"; diff --git a/plugins/os/src/commands.rs b/plugins/os/src/commands.rs index 348a1715..314d10df 100644 --- a/plugins/os/src/commands.rs +++ b/plugins/os/src/commands.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::path::PathBuf; #[tauri::command] diff --git a/plugins/os/src/error.rs b/plugins/os/src/error.rs index 4ce7207a..f5d8816a 100644 --- a/plugins/os/src/error.rs +++ b/plugins/os/src/error.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde::{Serialize, Serializer}; #[derive(Debug, thiserror::Error)] diff --git a/plugins/os/src/lib.rs b/plugins/os/src/lib.rs index 13436d2f..1b51eaea 100644 --- a/plugins/os/src/lib.rs +++ b/plugins/os/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::{fmt::Display, path::PathBuf}; pub use os_info::Version; diff --git a/plugins/persisted-scope/src/lib.rs b/plugins/persisted-scope/src/lib.rs index 6fb9d0f9..f1e02c18 100644 --- a/plugins/persisted-scope/src/lib.rs +++ b/plugins/persisted-scope/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/positioner/guest-js/index.ts b/plugins/positioner/guest-js/index.ts index dffbf54e..14bad9e9 100644 --- a/plugins/positioner/guest-js/index.ts +++ b/plugins/positioner/guest-js/index.ts @@ -1,4 +1,6 @@ // Copyright 2021 Jonas Kruckenberg +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT import { invoke } from "@tauri-apps/api/tauri"; diff --git a/plugins/positioner/src/ext.rs b/plugins/positioner/src/ext.rs index 01d34cf5..196209ad 100644 --- a/plugins/positioner/src/ext.rs +++ b/plugins/positioner/src/ext.rs @@ -1,4 +1,6 @@ // Copyright 2021 Jonas Kruckenberg +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT #[cfg(feature = "system-tray")] diff --git a/plugins/positioner/src/lib.rs b/plugins/positioner/src/lib.rs index 34492a34..fd0140a4 100644 --- a/plugins/positioner/src/lib.rs +++ b/plugins/positioner/src/lib.rs @@ -1,4 +1,6 @@ // Copyright 2021 Jonas Kruckenberg +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT //! A plugin for Tauri that helps position your windows at well-known locations. diff --git a/plugins/process/src/commands.rs b/plugins/process/src/commands.rs index de2e7302..2c27a3d2 100644 --- a/plugins/process/src/commands.rs +++ b/plugins/process/src/commands.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{AppHandle, Runtime}; #[tauri::command] diff --git a/plugins/process/src/lib.rs b/plugins/process/src/lib.rs index e38a4edc..d3d48cac 100644 --- a/plugins/process/src/lib.rs +++ b/plugins/process/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{ plugin::{Builder, TauriPlugin}, Runtime, diff --git a/plugins/shell/src/commands.rs b/plugins/shell/src/commands.rs index 226022d5..e4b63e24 100644 --- a/plugins/shell/src/commands.rs +++ b/plugins/shell/src/commands.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::{collections::HashMap, path::PathBuf, string::FromUtf8Error}; use encoding_rs::Encoding; diff --git a/plugins/shell/src/config.rs b/plugins/shell/src/config.rs index 180de7f6..5dd32862 100644 --- a/plugins/shell/src/config.rs +++ b/plugins/shell/src/config.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::path::PathBuf; use serde::{de::Error as DeError, Deserialize, Deserializer}; diff --git a/plugins/shell/src/error.rs b/plugins/shell/src/error.rs index 968e70a6..0a673e8a 100644 --- a/plugins/shell/src/error.rs +++ b/plugins/shell/src/error.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::path::PathBuf; use serde::{Serialize, Serializer}; diff --git a/plugins/shell/src/lib.rs b/plugins/shell/src/lib.rs index 5453b15b..43bf006c 100644 --- a/plugins/shell/src/lib.rs +++ b/plugins/shell/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::{ collections::HashMap, sync::{Arc, Mutex}, diff --git a/plugins/single-instance/examples/vanilla/src-tauri/build.rs b/plugins/single-instance/examples/vanilla/src-tauri/build.rs index 795b9b7c..b055ec37 100644 --- a/plugins/single-instance/examples/vanilla/src-tauri/build.rs +++ b/plugins/single-instance/examples/vanilla/src-tauri/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + fn main() { tauri_build::build() } diff --git a/plugins/single-instance/examples/vanilla/src-tauri/src/main.rs b/plugins/single-instance/examples/vanilla/src-tauri/src/main.rs index a6260a7f..0b93460d 100644 --- a/plugins/single-instance/examples/vanilla/src-tauri/src/main.rs +++ b/plugins/single-instance/examples/vanilla/src-tauri/src/main.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #![cfg_attr( all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" diff --git a/plugins/single-instance/src/lib.rs b/plugins/single-instance/src/lib.rs index f2ceb458..6b20956e 100644 --- a/plugins/single-instance/src/lib.rs +++ b/plugins/single-instance/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #![cfg(not(any(target_os = "android", target_os = "ios")))] use tauri::{plugin::TauriPlugin, AppHandle, Manager, Runtime}; diff --git a/plugins/single-instance/src/platform_impl/linux.rs b/plugins/single-instance/src/platform_impl/linux.rs index 42557e5a..3ad8585f 100644 --- a/plugins/single-instance/src/platform_impl/linux.rs +++ b/plugins/single-instance/src/platform_impl/linux.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #![cfg(target_os = "linux")] use std::sync::Arc; diff --git a/plugins/single-instance/src/platform_impl/macos.rs b/plugins/single-instance/src/platform_impl/macos.rs index 1b408c66..170ff0e0 100644 --- a/plugins/single-instance/src/platform_impl/macos.rs +++ b/plugins/single-instance/src/platform_impl/macos.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #![cfg(target_os = "macos")] use crate::SingleInstanceCallback; diff --git a/plugins/single-instance/src/platform_impl/windows.rs b/plugins/single-instance/src/platform_impl/windows.rs index 69036f58..31c4f229 100644 --- a/plugins/single-instance/src/platform_impl/windows.rs +++ b/plugins/single-instance/src/platform_impl/windows.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #![cfg(target_os = "windows")] use crate::SingleInstanceCallback; diff --git a/plugins/sql/guest-js/index.ts b/plugins/sql/guest-js/index.ts index a574e72e..687f6321 100644 --- a/plugins/sql/guest-js/index.ts +++ b/plugins/sql/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke } from "@tauri-apps/api/tauri"; export interface QueryResult { diff --git a/plugins/sql/src/decode/mod.rs b/plugins/sql/src/decode/mod.rs index 415c99b8..50fb3c78 100644 --- a/plugins/sql/src/decode/mod.rs +++ b/plugins/sql/src/decode/mod.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #[cfg(feature = "mysql")] mod mysql; #[cfg(feature = "postgres")] diff --git a/plugins/sql/src/decode/mysql.rs b/plugins/sql/src/decode/mysql.rs index e68bd1ac..6ca7e403 100644 --- a/plugins/sql/src/decode/mysql.rs +++ b/plugins/sql/src/decode/mysql.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde_json::Value as JsonValue; use sqlx::{mysql::MySqlValueRef, TypeInfo, Value, ValueRef}; use time::{Date, OffsetDateTime, PrimitiveDateTime, Time}; diff --git a/plugins/sql/src/decode/postgres.rs b/plugins/sql/src/decode/postgres.rs index 39c9acfd..bd77aff0 100644 --- a/plugins/sql/src/decode/postgres.rs +++ b/plugins/sql/src/decode/postgres.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde_json::Value as JsonValue; use sqlx::{postgres::PgValueRef, TypeInfo, Value, ValueRef}; use time::{Date, OffsetDateTime, PrimitiveDateTime, Time}; diff --git a/plugins/sql/src/decode/sqlite.rs b/plugins/sql/src/decode/sqlite.rs index 65d378cb..1f0808ae 100644 --- a/plugins/sql/src/decode/sqlite.rs +++ b/plugins/sql/src/decode/sqlite.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde_json::Value as JsonValue; use sqlx::{sqlite::SqliteValueRef, TypeInfo, Value, ValueRef}; use time::{Date, PrimitiveDateTime, Time}; diff --git a/plugins/sql/src/lib.rs b/plugins/sql/src/lib.rs index 20153109..4bc87324 100644 --- a/plugins/sql/src/lib.rs +++ b/plugins/sql/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/sql/src/plugin.rs b/plugins/sql/src/plugin.rs index 6d682bda..460b2442 100644 --- a/plugins/sql/src/plugin.rs +++ b/plugins/sql/src/plugin.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/store/guest-js/index.ts b/plugins/store/guest-js/index.ts index cc6058d8..966e371d 100644 --- a/plugins/store/guest-js/index.ts +++ b/plugins/store/guest-js/index.ts @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/store/src/error.rs b/plugins/store/src/error.rs index 03d29182..0a04bb09 100644 --- a/plugins/store/src/error.rs +++ b/plugins/store/src/error.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/store/src/lib.rs b/plugins/store/src/lib.rs index 7c7918f4..968cdc05 100644 --- a/plugins/store/src/lib.rs +++ b/plugins/store/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/store/src/store.rs b/plugins/store/src/store.rs index f8cba4e0..41e9ff54 100644 --- a/plugins/store/src/store.rs +++ b/plugins/store/src/store.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/stronghold/guest-js/index.ts b/plugins/stronghold/guest-js/index.ts index 3339f87f..8bd4e894 100644 --- a/plugins/stronghold/guest-js/index.ts +++ b/plugins/stronghold/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke } from "@tauri-apps/api/tauri"; type BytesDto = string | number[]; diff --git a/plugins/stronghold/src/lib.rs b/plugins/stronghold/src/lib.rs index b35f61bd..87bedc92 100644 --- a/plugins/stronghold/src/lib.rs +++ b/plugins/stronghold/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::{ collections::HashMap, fmt, diff --git a/plugins/stronghold/src/stronghold.rs b/plugins/stronghold/src/stronghold.rs index 8e065c44..7da521bd 100644 --- a/plugins/stronghold/src/stronghold.rs +++ b/plugins/stronghold/src/stronghold.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::{convert::TryFrom, ops::Deref, path::Path}; use iota_stronghold::{KeyProvider, SnapshotPath}; diff --git a/plugins/updater/build.rs b/plugins/updater/build.rs index 74bf430b..0b339c43 100644 --- a/plugins/updater/build.rs +++ b/plugins/updater/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + fn main() { let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let mobile = target_os == "ios" || target_os == "android"; diff --git a/plugins/updater/guest-js/index.ts b/plugins/updater/guest-js/index.ts index 7fb766e0..269b0f18 100644 --- a/plugins/updater/guest-js/index.ts +++ b/plugins/updater/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke, Channel } from "@tauri-apps/api/tauri"; interface CheckOptions { diff --git a/plugins/updater/src/commands.rs b/plugins/updater/src/commands.rs index 8de387dc..75d78288 100644 --- a/plugins/updater/src/commands.rs +++ b/plugins/updater/src/commands.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use crate::{PendingUpdate, Result, UpdaterExt}; use http::header; diff --git a/plugins/updater/src/config.rs b/plugins/updater/src/config.rs index 458cc58d..9361ea00 100644 --- a/plugins/updater/src/config.rs +++ b/plugins/updater/src/config.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde::{Deserialize, Deserializer}; use url::Url; diff --git a/plugins/updater/src/lib.rs b/plugins/updater/src/lib.rs index 7d4818b3..711fc742 100644 --- a/plugins/updater/src/lib.rs +++ b/plugins/updater/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{ plugin::{Builder as PluginBuilder, TauriPlugin}, Manager, Runtime, diff --git a/plugins/upload/guest-js/index.ts b/plugins/upload/guest-js/index.ts index 96e34659..d220af04 100644 --- a/plugins/upload/guest-js/index.ts +++ b/plugins/upload/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke, Channel } from "@tauri-apps/api/tauri"; interface ProgressPayload { diff --git a/plugins/upload/src/lib.rs b/plugins/upload/src/lib.rs index 714fd1ca..0930efd9 100644 --- a/plugins/upload/src/lib.rs +++ b/plugins/upload/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/websocket/examples/svelte-app/src-tauri/build.rs b/plugins/websocket/examples/svelte-app/src-tauri/build.rs index 795b9b7c..b055ec37 100644 --- a/plugins/websocket/examples/svelte-app/src-tauri/build.rs +++ b/plugins/websocket/examples/svelte-app/src-tauri/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + fn main() { tauri_build::build() } diff --git a/plugins/websocket/examples/svelte-app/src-tauri/src/main.rs b/plugins/websocket/examples/svelte-app/src-tauri/src/main.rs index d71d3109..8858da82 100644 --- a/plugins/websocket/examples/svelte-app/src-tauri/src/main.rs +++ b/plugins/websocket/examples/svelte-app/src-tauri/src/main.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + #![cfg_attr( all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" diff --git a/plugins/websocket/examples/svelte-app/src/app.d.ts b/plugins/websocket/examples/svelte-app/src/app.d.ts index 1cea0dcf..caf34f1d 100644 --- a/plugins/websocket/examples/svelte-app/src/app.d.ts +++ b/plugins/websocket/examples/svelte-app/src/app.d.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + // See https://kit.svelte.dev/docs/types#app // for information about these interfaces // and what to do when importing types diff --git a/plugins/websocket/examples/svelte-app/svelte.config.js b/plugins/websocket/examples/svelte-app/svelte.config.js index 998c3647..af7cb8a9 100644 --- a/plugins/websocket/examples/svelte-app/svelte.config.js +++ b/plugins/websocket/examples/svelte-app/svelte.config.js @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import adapter from "@sveltejs/adapter-auto"; import { vitePreprocess } from "@sveltejs/kit/vite"; diff --git a/plugins/websocket/examples/svelte-app/vite.config.ts b/plugins/websocket/examples/svelte-app/vite.config.ts index efc8757f..2b08f961 100644 --- a/plugins/websocket/examples/svelte-app/vite.config.ts +++ b/plugins/websocket/examples/svelte-app/vite.config.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { sveltekit } from "@sveltejs/kit/vite"; import type { UserConfig } from "vite"; diff --git a/plugins/websocket/guest-js/index.ts b/plugins/websocket/guest-js/index.ts index 9dc5b4d8..5678f7e0 100644 --- a/plugins/websocket/guest-js/index.ts +++ b/plugins/websocket/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke, transformCallback } from "@tauri-apps/api/tauri"; export interface MessageKind { diff --git a/plugins/websocket/src/lib.rs b/plugins/websocket/src/lib.rs index b61f2537..66a0a90e 100644 --- a/plugins/websocket/src/lib.rs +++ b/plugins/websocket/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use futures_util::{stream::SplitSink, SinkExt, StreamExt}; use serde::{ser::Serializer, Deserialize, Serialize}; use tauri::{ diff --git a/plugins/window-state/guest-js/index.ts b/plugins/window-state/guest-js/index.ts index 2d303112..4fed384f 100644 --- a/plugins/window-state/guest-js/index.ts +++ b/plugins/window-state/guest-js/index.ts @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { invoke } from "@tauri-apps/api/tauri"; interface WindowDef { diff --git a/plugins/window-state/src/cmd.rs b/plugins/window-state/src/cmd.rs index 65690db4..17486505 100644 --- a/plugins/window-state/src/cmd.rs +++ b/plugins/window-state/src/cmd.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use crate::{AppHandleExt, StateFlags, WindowExt}; use tauri::{command, AppHandle, Manager, Runtime}; diff --git a/plugins/window-state/src/lib.rs b/plugins/window-state/src/lib.rs index 9fdb6d54..32345fee 100644 --- a/plugins/window-state/src/lib.rs +++ b/plugins/window-state/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2021 Tauri Programme within The Commons Conservancy +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT diff --git a/plugins/window/build.rs b/plugins/window/build.rs index 74bf430b..0b339c43 100644 --- a/plugins/window/build.rs +++ b/plugins/window/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + fn main() { let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap(); let mobile = target_os == "ios" || target_os == "android"; diff --git a/plugins/window/src/desktop_commands.rs b/plugins/window/src/desktop_commands.rs index 63ef037b..98fb60c0 100644 --- a/plugins/window/src/desktop_commands.rs +++ b/plugins/window/src/desktop_commands.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use serde::{Deserialize, Serialize, Serializer}; use tauri::{ utils::config::WindowConfig, AppHandle, CursorIcon, Icon, Manager, Monitor, PhysicalPosition, diff --git a/plugins/window/src/lib.rs b/plugins/window/src/lib.rs index 0f4c2dda..b34fccbc 100644 --- a/plugins/window/src/lib.rs +++ b/plugins/window/src/lib.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use tauri::{ plugin::{Builder, TauriPlugin}, Runtime, diff --git a/shared/rollup.config.mjs b/shared/rollup.config.mjs index 9595b929..0fec516e 100644 --- a/shared/rollup.config.mjs +++ b/shared/rollup.config.mjs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import { builtinModules } from "module"; import typescript from "@rollup/plugin-typescript"; diff --git a/shared/template/android/src/androidTest/java/ExampleInstrumentedTest.kt b/shared/template/android/src/androidTest/java/ExampleInstrumentedTest.kt index 24e699cc..b7ca3f66 100644 --- a/shared/template/android/src/androidTest/java/ExampleInstrumentedTest.kt +++ b/shared/template/android/src/androidTest/java/ExampleInstrumentedTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package {{android_package_id}} import androidx.test.platform.app.InstrumentationRegistry diff --git a/shared/template/android/src/main/java/ExamplePlugin.kt b/shared/template/android/src/main/java/ExamplePlugin.kt index 8ac527d8..9fed811c 100644 --- a/shared/template/android/src/main/java/ExamplePlugin.kt +++ b/shared/template/android/src/main/java/ExamplePlugin.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package {{android_package_id}} import android.app.Activity diff --git a/shared/template/android/src/test/java/ExampleUnitTest.kt b/shared/template/android/src/test/java/ExampleUnitTest.kt index 50792fe6..71cee3c2 100644 --- a/shared/template/android/src/test/java/ExampleUnitTest.kt +++ b/shared/template/android/src/test/java/ExampleUnitTest.kt @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + package {{android_package_id}} import org.junit.Test diff --git a/shared/template/build.rs b/shared/template/build.rs index 86ac3f0a..743096a6 100644 --- a/shared/template/build.rs +++ b/shared/template/build.rs @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + use std::process::exit; fn main() { diff --git a/shared/template/guest-js/index.ts b/shared/template/guest-js/index.ts index e69de29b..a0560385 100644 --- a/shared/template/guest-js/index.ts +++ b/shared/template/guest-js/index.ts @@ -0,0 +1,3 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT diff --git a/shared/template/ios/Package.swift b/shared/template/ios/Package.swift index ff9991fa..e4f53f0b 100644 --- a/shared/template/ios/Package.swift +++ b/shared/template/ios/Package.swift @@ -1,5 +1,7 @@ // swift-tools-version:5.3 -// The swift-tools-version declares the minimum version of Swift required to build this package. +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT import PackageDescription diff --git a/shared/template/ios/Sources/ExamplePlugin.swift b/shared/template/ios/Sources/ExamplePlugin.swift index 5544d3bc..7a36b76b 100644 --- a/shared/template/ios/Sources/ExamplePlugin.swift +++ b/shared/template/ios/Sources/ExamplePlugin.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import UIKit import WebKit import Tauri diff --git a/shared/template/ios/Tests/PluginTests/PluginTests.swift b/shared/template/ios/Tests/PluginTests/PluginTests.swift index 4f8e9ace..99992ce4 100644 --- a/shared/template/ios/Tests/PluginTests/PluginTests.swift +++ b/shared/template/ios/Tests/PluginTests/PluginTests.swift @@ -1,3 +1,7 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + import XCTest @testable import ExamplePlugin From f3f92a6ff6a00109694dbc6bc0e56356a8832f35 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sun, 21 May 2023 13:08:39 -0700 Subject: [PATCH 36/64] fix(window): change commands to async (#385) --- plugins/window/src/desktop_commands.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/window/src/desktop_commands.rs b/plugins/window/src/desktop_commands.rs index 98fb60c0..135e8d80 100644 --- a/plugins/window/src/desktop_commands.rs +++ b/plugins/window/src/desktop_commands.rs @@ -62,7 +62,7 @@ impl From for Icon { } #[tauri::command] -pub fn create(app: AppHandle, options: WindowConfig) -> Result<()> { +pub async fn create(app: AppHandle, options: WindowConfig) -> Result<()> { tauri::window::WindowBuilder::from_config(&app, options).build()?; Ok(()) } @@ -77,7 +77,7 @@ fn get_window(window: Window, label: Option) -> Result { #[tauri::command] - pub fn $cmd(window: Window, label: Option) -> Result<$ret> { + pub async fn $cmd(window: Window, label: Option) -> Result<$ret> { get_window(window, label)?.$cmd().map_err(Into::into) } }; @@ -86,14 +86,14 @@ macro_rules! getter { macro_rules! setter { ($cmd: ident) => { #[tauri::command] - pub fn $cmd(window: Window, label: Option) -> Result<()> { + pub async fn $cmd(window: Window, label: Option) -> Result<()> { get_window(window, label)?.$cmd().map_err(Into::into) } }; ($cmd: ident, $input: ty) => { #[tauri::command] - pub fn $cmd( + pub async fn $cmd( window: Window, label: Option, value: $input, @@ -151,7 +151,7 @@ setter!(start_dragging); setter!(print); #[tauri::command] -pub fn set_icon( +pub async fn set_icon( window: Window, label: Option, value: IconDto, @@ -162,7 +162,7 @@ pub fn set_icon( } #[tauri::command] -pub fn toggle_maximize(window: Window, label: Option) -> Result<()> { +pub async fn toggle_maximize(window: Window, label: Option) -> Result<()> { let window = get_window(window, label)?; match window.is_maximized()? { true => window.unmaximize()?, @@ -172,7 +172,7 @@ pub fn toggle_maximize(window: Window, label: Option) -> } #[tauri::command] -pub fn internal_toggle_maximize( +pub async fn internal_toggle_maximize( window: Window, label: Option, ) -> Result<()> { @@ -188,7 +188,7 @@ pub fn internal_toggle_maximize( #[cfg(any(debug_assertions, feature = "devtools"))] #[tauri::command] -pub fn internal_toggle_devtools( +pub async fn internal_toggle_devtools( window: Window, label: Option, ) -> Result<()> { From a0133cb5b3ed5f129290042e6d5010010a6e33f3 Mon Sep 17 00:00:00 2001 From: Simon Hyll Date: Mon, 22 May 2023 20:02:06 +0200 Subject: [PATCH 37/64] fix: exclude debug only function in release mode (#387) --- plugins/window/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/window/src/lib.rs b/plugins/window/src/lib.rs index b34fccbc..e1af0ebd 100644 --- a/plugins/window/src/lib.rs +++ b/plugins/window/src/lib.rs @@ -79,6 +79,7 @@ pub fn init() -> TauriPlugin { desktop_commands::set_icon, desktop_commands::toggle_maximize, desktop_commands::internal_toggle_maximize, + #[cfg(any(debug_assertions, feature = "devtools"))] desktop_commands::internal_toggle_devtools, ]); #[allow(clippy::needless_return)] From e2a54e9cf40345d80662899a5dc732fbadcd7ac6 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 22 May 2023 12:07:32 -0700 Subject: [PATCH 38/64] feat: remove localhost and persisted-scope from mirror list (#390) --- plugins/mirrors.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/mirrors.txt b/plugins/mirrors.txt index 4ad29c51..e981fdcb 100644 --- a/plugins/mirrors.txt +++ b/plugins/mirrors.txt @@ -2,9 +2,7 @@ authenticator autostart fs-extra fs-watch -localhost log -persisted-scope positioner sql store From 6adcedc0c2d8412d027864fa33a8cea2e97747d3 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 22 May 2023 12:30:43 -0700 Subject: [PATCH 39/64] fix(localhost): adjust documentation to work on dev, closes #388 (#389) --- plugins/localhost/README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/plugins/localhost/README.md b/plugins/localhost/README.md index 3fd7797a..410f8deb 100644 --- a/plugins/localhost/README.md +++ b/plugins/localhost/README.md @@ -41,14 +41,21 @@ fn main() { let window_url = WindowUrl::External(url); // rewrite the config so the IPC is enabled on this URL context.config_mut().build.dist_dir = AppUrl::Url(window_url.clone()); - context.config_mut().build.dev_path = AppUrl::Url(window_url.clone()); tauri::Builder::default() .plugin(tauri_plugin_localhost::Builder::new(port).build()) .setup(move |app| { - WindowBuilder::new(app, "main".to_string(), window_url) - .title("Localhost Example") - .build()?; + WindowBuilder::new( + app, + "main".to_string(), + if cfg!(dev) { + Default::default() + } else { + window_url + } + ) + .title("Localhost Example") + .build()?; Ok(()) }) .run(context) From 3c8577bc9aed3c5ed3a0adf42be3f8b16696fdc4 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 22 May 2023 15:04:34 -0700 Subject: [PATCH 40/64] refactor(log): extend target with filter fn and file name, closes #123 (#386) --- plugins/log/src/lib.rs | 128 ++++++++++++++++++++++++++++++++--------- 1 file changed, 102 insertions(+), 26 deletions(-) diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs index 64489f46..e8d548c0 100644 --- a/plugins/log/src/lib.rs +++ b/plugins/log/src/lib.rs @@ -2,7 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -use fern::FormatCallback; +//! Logging for Tauri applications. + +use fern::{Filter, FormatCallback}; use log::{logger, RecordBuilder}; use log::{LevelFilter, Record}; use serde::Serialize; @@ -23,6 +25,8 @@ use tauri::{ pub use fern; use time::OffsetDateTime; +pub const WEBVIEW_TARGET: &str = "Webview"; + #[cfg(target_os = "ios")] mod ios { use cocoa::base::id; @@ -58,7 +62,10 @@ mod ios { const DEFAULT_MAX_FILE_SIZE: u128 = 40000; const DEFAULT_ROTATION_STRATEGY: RotationStrategy = RotationStrategy::KeepOne; const DEFAULT_TIMEZONE_STRATEGY: TimezoneStrategy = TimezoneStrategy::UseUtc; -const DEFAULT_LOG_TARGETS: [LogTarget; 2] = [LogTarget::Stdout, LogTarget::LogDir]; +const DEFAULT_LOG_TARGETS: [Target; 2] = [ + Target::new(TargetKind::Stdout), + Target::new(TargetKind::LogDir { file_name: None }), +]; /// An enum representing the available verbosity levels of the logger. /// @@ -141,7 +148,7 @@ struct RecordPayload { } /// An enum representing the available targets of the logger. -pub enum LogTarget { +pub enum TargetKind { /// Print logs to stdout. Stdout, /// Print logs to stderr. @@ -149,7 +156,10 @@ pub enum LogTarget { /// Write logs to the given directory. /// /// The plugin will ensure the directory exists before writing logs. - Folder(PathBuf), + Folder { + path: PathBuf, + file_name: Option, + }, /// Write logs to the OS specififc logs directory. /// /// ### Platform-specific @@ -159,13 +169,38 @@ pub enum LogTarget { /// | Linux | `{configDir}/{bundleIdentifier}` | `/home/alice/.config/com.tauri.dev` | /// | macOS | `{homeDir}/Library/Logs/{bundleIdentifier}` | `/Users/Alice/Library/Logs/com.tauri.dev` | /// | Windows | `{configDir}/{bundleIdentifier}` | `C:\Users\Alice\AppData\Roaming\com.tauri.dev` | - LogDir, + LogDir { file_name: Option }, /// Forward logs to the webview (via the `log://log` event). /// /// This requires the webview to subscribe to log events, via this plugins `attachConsole` function. Webview, } +/// A log target. +pub struct Target { + kind: TargetKind, + filters: Vec>, +} + +impl Target { + #[inline] + pub const fn new(kind: TargetKind) -> Self { + Self { + kind, + filters: Vec::new(), + } + } + + #[inline] + pub fn filter(mut self, filter: F) -> Self + where + F: Fn(&log::Metadata) -> bool + Send + Sync + 'static, + { + self.filters.push(Box::new(filter)); + self + } +} + #[tauri::command] fn log( level: LogLevel, @@ -176,9 +211,18 @@ fn log( key_values: Option>, ) { let location = location.unwrap_or("webview"); + + let level = log::Level::from(level); + + let metadata = log::MetadataBuilder::new() + .level(level) + .target(WEBVIEW_TARGET) + .build(); + let mut builder = RecordBuilder::new(); builder - .level(level.into()) + .level(level) + .metadata(metadata) .target(location) .file(file) .line(line); @@ -198,7 +242,7 @@ pub struct Builder { rotation_strategy: RotationStrategy, timezone_strategy: TimezoneStrategy, max_file_size: u128, - targets: Vec, + targets: Vec, } impl Default for Builder { @@ -290,12 +334,37 @@ impl Builder { self } - pub fn target(mut self, target: LogTarget) -> Self { + /// Removes all targets. Useful to ignore the default targets and reconfigure them. + pub fn clear_targets(mut self) -> Self { + self.targets.clear(); + self + } + + /// Adds a log target to the logger. + /// + /// ```rust + /// use tauri_plugin_log::{Target, TargetKind}; + /// tauri_plugin_log::Builder::new() + /// .target(Target::new(TargetKind::Webview)); + /// ``` + pub fn target(mut self, target: Target) -> Self { self.targets.push(target); self } - pub fn targets(mut self, targets: impl IntoIterator) -> Self { + /// Adds a collection of targets to the logger. + /// + /// ```rust + /// use tauri_plugin_log::{Target, TargetKind, WEBVIEW_TARGET}; + /// tauri_plugin_log::Builder::new() + /// .clear_targets() + /// .targets([ + /// Target::new(TargetKind::Webview), + /// Target::new(TargetKind::LogDir { file_name: Some("webview".into()) }).filter(|metadata| metadata.target() == WEBVIEW_TARGET), + /// Target::new(TargetKind::LogDir { file_name: Some("rust".into()) }).filter(|metadata| metadata.target() != WEBVIEW_TARGET), + /// ]); + /// ``` + pub fn targets(mut self, targets: impl IntoIterator) -> Self { self.targets = Vec::from_iter(targets); self } @@ -325,14 +394,19 @@ impl Builder { let app_name = &app_handle.package_info().name; // setup targets - for target in &self.targets { - let logger = match target { + for target in self.targets { + let mut target_dispatch = fern::Dispatch::new(); + for filter in target.filters { + target_dispatch = target_dispatch.filter(filter); + } + + let logger = match target.kind { #[cfg(target_os = "android")] - LogTarget::Stdout | LogTarget::Stderr => { + TargetKind::Stdout | TargetKind::Stderr => { fern::Output::call(android_logger::log) } #[cfg(target_os = "ios")] - LogTarget::Stdout | LogTarget::Stderr => { + TargetKind::Stdout | TargetKind::Stderr => { fern::Output::call(move |record| { let message = format!("{}", record.args()); unsafe { @@ -348,17 +422,17 @@ impl Builder { }) } #[cfg(desktop)] - LogTarget::Stdout => std::io::stdout().into(), + TargetKind::Stdout => std::io::stdout().into(), #[cfg(desktop)] - LogTarget::Stderr => std::io::stderr().into(), - LogTarget::Folder(path) => { + TargetKind::Stderr => std::io::stderr().into(), + TargetKind::Folder { path, file_name } => { if !path.exists() { - fs::create_dir_all(path).unwrap(); + fs::create_dir_all(&path).unwrap(); } fern::log_file(get_log_file_path( &path, - app_name, + file_name.as_deref().unwrap_or(app_name), &self.rotation_strategy, &self.timezone_strategy, self.max_file_size, @@ -366,9 +440,9 @@ impl Builder { .into() } #[cfg(mobile)] - LogTarget::LogDir => continue, + TargetKind::LogDir { .. } => continue, #[cfg(desktop)] - LogTarget::LogDir => { + TargetKind::LogDir { file_name } => { let path = app_handle.path().app_log_dir().unwrap(); if !path.exists() { fs::create_dir_all(&path).unwrap(); @@ -376,14 +450,14 @@ impl Builder { fern::log_file(get_log_file_path( &path, - app_name, + file_name.as_deref().unwrap_or(app_name), &self.rotation_strategy, &self.timezone_strategy, self.max_file_size, )?)? .into() } - LogTarget::Webview => { + TargetKind::Webview => { let app_handle = app_handle.clone(); fern::Output::call(move |record| { @@ -398,7 +472,9 @@ impl Builder { }) } }; - self.dispatch = self.dispatch.chain(logger); + target_dispatch = target_dispatch.chain(logger); + + self.dispatch = self.dispatch.chain(target_dispatch); } self.dispatch.apply()?; @@ -411,12 +487,12 @@ impl Builder { fn get_log_file_path( dir: &impl AsRef, - app_name: &str, + file_name: &str, rotation_strategy: &RotationStrategy, timezone_strategy: &TimezoneStrategy, max_file_size: u128, ) -> plugin::Result { - let path = dir.as_ref().join(format!("{app_name}.log")); + let path = dir.as_ref().join(format!("{file_name}.log")); if path.exists() { let log_size = File::open(&path)?.metadata()?.len() as u128; @@ -425,7 +501,7 @@ fn get_log_file_path( RotationStrategy::KeepAll => { let to = dir.as_ref().join(format!( "{}_{}.log", - app_name, + file_name, timezone_strategy .get_now() .format( From b131bc8f7c9eba3b871c999d5c5ccff70bf34540 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 23 May 2023 10:20:14 -0700 Subject: [PATCH 41/64] feat(plugins): inject API on window.__TAURI__ (#383) --- .eslintignore | 1 + .github/workflows/check-generated-files.yml | 155 +++++++++++++++ .github/workflows/check-license-header.yml | 2 +- .github/workflows/lint-rust.yml | 2 + .github/workflows/test-rust.yml | 2 + .prettierignore | 4 +- .scripts/ci/check-license-header.js | 5 +- .scripts/ci/has-diff.sh | 9 + plugins/app/guest-js/index.ts | 16 +- plugins/app/src/api-iife.js | 1 + plugins/app/src/lib.rs | 1 + plugins/authenticator/guest-js/index.ts | 46 +++-- plugins/authenticator/src/api-iife.js | 1 + plugins/authenticator/src/lib.rs | 1 + plugins/autostart/guest-js/index.ts | 12 +- plugins/autostart/src/api-iife.js | 1 + plugins/autostart/src/lib.rs | 1 + plugins/cli/guest-js/index.ts | 8 +- plugins/cli/src/api-iife.js | 1 + plugins/cli/src/lib.rs | 1 + plugins/clipboard/guest-js/index.ts | 12 +- plugins/clipboard/src/api-iife.js | 1 + plugins/clipboard/src/lib.rs | 1 + plugins/dialog/guest-js/index.ts | 16 +- plugins/dialog/src/api-iife.js | 1 + plugins/dialog/src/lib.rs | 8 +- plugins/fs/guest-js/index.ts | 53 ++--- plugins/fs/src/api-iife.js | 1 + plugins/fs/src/lib.rs | 1 + plugins/global-shortcut/guest-js/index.ts | 23 ++- plugins/global-shortcut/src/api-iife.js | 1 + plugins/global-shortcut/src/lib.rs | 1 + plugins/http/guest-js/index.ts | 58 +++--- plugins/http/src/api-iife.js | 1 + plugins/http/src/lib.rs | 1 + plugins/log/guest-js/index.ts | 9 +- plugins/log/src/api-iife.js | 1 + plugins/log/src/lib.rs | 1 + plugins/notification/src/api-iife.js | 1 + plugins/notification/src/lib.rs | 4 +- plugins/os/guest-js/index.ts | 16 +- plugins/os/src/api-iife.js | 1 + plugins/os/src/lib.rs | 1 + plugins/positioner/guest-js/index.ts | 8 +- plugins/positioner/src/api-iife.js | 1 + plugins/positioner/src/lib.rs | 5 +- plugins/process/guest-js/index.ts | 10 +- plugins/process/src/api-iife.js | 1 + plugins/process/src/lib.rs | 1 + plugins/shell/guest-js/index.ts | 19 +- plugins/shell/src/api-iife.js | 1 + plugins/shell/src/lib.rs | 5 +- plugins/sql/guest-js/index.ts | 27 +-- plugins/sql/src/api-iife.js | 1 + plugins/sql/src/plugin.rs | 1 + plugins/store/guest-js/index.ts | 31 +-- plugins/store/src/api-iife.js | 1 + plugins/store/src/lib.rs | 1 + plugins/stronghold/guest-js/index.ts | 207 +++++++++++--------- plugins/stronghold/src/api-iife.js | 1 + plugins/stronghold/src/lib.rs | 1 + plugins/updater/guest-js/index.ts | 4 +- plugins/updater/src/api-iife.js | 1 + plugins/updater/src/lib.rs | 1 + plugins/upload/src/api-iife.js | 1 + plugins/upload/src/lib.rs | 1 + plugins/websocket/guest-js/index.ts | 23 ++- plugins/websocket/src/api-iife.js | 1 + plugins/websocket/src/lib.rs | 1 + plugins/window-state/guest-js/index.ts | 13 +- plugins/window-state/src/api-iife.js | 1 + plugins/window-state/src/lib.rs | 1 + plugins/window/guest-js/event.ts | 29 ++- plugins/window/guest-js/index.ts | 166 +++++++++------- plugins/window/src/api-iife.js | 1 + plugins/window/src/lib.rs | 12 +- shared/rollup.config.mjs | 29 ++- shared/template/src/lib.rs | 1 + 78 files changed, 754 insertions(+), 337 deletions(-) create mode 100644 .github/workflows/check-generated-files.yml create mode 100755 .scripts/ci/has-diff.sh create mode 100644 plugins/app/src/api-iife.js create mode 100644 plugins/authenticator/src/api-iife.js create mode 100644 plugins/autostart/src/api-iife.js create mode 100644 plugins/cli/src/api-iife.js create mode 100644 plugins/clipboard/src/api-iife.js create mode 100644 plugins/dialog/src/api-iife.js create mode 100644 plugins/fs/src/api-iife.js create mode 100644 plugins/global-shortcut/src/api-iife.js create mode 100644 plugins/http/src/api-iife.js create mode 100644 plugins/log/src/api-iife.js create mode 100644 plugins/notification/src/api-iife.js create mode 100644 plugins/os/src/api-iife.js create mode 100644 plugins/positioner/src/api-iife.js create mode 100644 plugins/process/src/api-iife.js create mode 100644 plugins/shell/src/api-iife.js create mode 100644 plugins/sql/src/api-iife.js create mode 100644 plugins/store/src/api-iife.js create mode 100644 plugins/stronghold/src/api-iife.js create mode 100644 plugins/updater/src/api-iife.js create mode 100644 plugins/upload/src/api-iife.js create mode 100644 plugins/websocket/src/api-iife.js create mode 100644 plugins/window-state/src/api-iife.js create mode 100644 plugins/window/src/api-iife.js diff --git a/.eslintignore b/.eslintignore index 1c120ff5..efef8f77 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,3 +2,4 @@ target node_modules dist dist-js +api-iife.js \ No newline at end of file diff --git a/.github/workflows/check-generated-files.yml b/.github/workflows/check-generated-files.yml new file mode 100644 index 00000000..86502340 --- /dev/null +++ b/.github/workflows/check-generated-files.yml @@ -0,0 +1,155 @@ +# Copyright 2019-2023 Tauri Programme within The Commons Conservancy +# SPDX-License-Identifier: Apache-2.0 +# SPDX-License-Identifier: MIT + +name: check generated files + +on: + pull_request: + paths: + - ".github/workflows/check-generated-files.yml" + - "**/guest-js/**" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest + outputs: + packages: ${{ steps.filter.outputs.changes }} + steps: + - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + app: + - .github/workflows/check-generated-files.yml + - plugins/app/guest-js/** + - plugins/app/src/api-iife.js + authenticator: + - .github/workflows/check-generated-files.yml + - plugins/authenticator/guest-js/** + - plugins/authenticator/src/api-iife.js + autostart: + - .github/workflows/check-generated-files.yml + - plugins/autostart/guest-js/** + - plugins/autostart/src/api-iife.js + cli: + - .github/workflows/check-generated-files.yml + - plugins/cli/guest-js/** + - plugins/cli/src/api-iife.js + clipboard: + - .github/workflows/check-generated-files.yml + - plugins/clipboard/guest-js/** + - plugins/clipboard/src/api-iife.js + dialog: + - .github/workflows/check-generated-files.yml + - plugins/dialog/guest-js/** + - plugins/dialog/src/api-iife.js + fs: + - .github/workflows/check-generated-files.yml + - plugins/fs/guest-js/** + - plugins/fs/src/api-iife.js + global-shortcut: + - .github/workflows/check-generated-files.yml + - plugins/global-shortcut/guest-js/** + - plugins/global-shortcut/src/api-iife.js + http: + - .github/workflows/check-generated-files.yml + - plugins/http/guest-js/** + - plugins/http/src/api-iife.js + log: + - .github/workflows/check-generated-files.yml + - plugins/log/guest-js/** + - plugins/log/src/api-iife.js + notification: + - .github/workflows/check-generated-files.yml + - plugins/notification/guest-js/** + - plugins/notification/src/api-iife.js + os: + - .github/workflows/check-generated-files.yml + - plugins/os/guest-js/** + - plugins/os/src/api-iife.js + positioner: + - .github/workflows/check-generated-files.yml + - plugins/positioner/guest-js/** + - plugins/positioner/src/api-iife.js + process: + - .github/workflows/check-generated-files.yml + - plugins/process/guest-js/** + - plugins/process/src/api-iife.js + shell: + - .github/workflows/check-generated-files.yml + - plugins/shell/guest-js/** + - plugins/shell/src/api-iife.js + sql: + - .github/workflows/check-generated-files.yml + - plugins/sql/guest-js/** + - plugins/sql/src/api-iife.js + store: + - .github/workflows/check-generated-files.yml + - plugins/store/guest-js/** + - plugins/store/src/api-iife.js + stronghold: + - .github/workflows/check-generated-files.yml + - plugins/stronghold/guest-js/** + - plugins/stronghold/src/api-iife.js + updater: + - .github/workflows/check-generated-files.yml + - plugins/updater/guest-js/** + - plugins/updater/src/api-iife.js + upload: + - .github/workflows/check-generated-files.yml + - plugins/upload/guest-js/** + - plugins/upload/src/api-iife.js + websocket: + - .github/workflows/check-generated-files.yml + - plugins/websocket/guest-js/** + - plugins/websocket/src/api-iife.js + window: + - .github/workflows/check-generated-files.yml + - plugins/window/guest-js/** + - plugins/window/src/api-iife.js + window-state: + - .github/workflows/check-generated-files.yml + - plugins/window-state/guest-js/** + - plugins/window-state/src/api-iife.js + + test: + needs: changes + if: ${{ needs.changes.outputs.packages != '[]' && needs.changes.outputs.packages != '' }} + strategy: + fail-fast: false + matrix: + package: ${{ fromJSON(needs.changes.outputs.packages) }} + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache pnpm modules + uses: actions/cache@v3 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}- + - uses: actions/setup-node@v3 + with: + node-version: 18 + - uses: pnpm/action-setup@v2 + with: + version: 7.x.x + run_install: true + + - name: build api + working-directory: plugins/${{ matrix.package }} + run: pnpm install && pnpm build + + - name: check diff + run: | + ./.scripts/ci/has-diff.sh diff --git a/.github/workflows/check-license-header.yml b/.github/workflows/check-license-header.yml index 15e9f2cb..011a1780 100644 --- a/.github/workflows/check-license-header.yml +++ b/.github/workflows/check-license-header.yml @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: MIT -name: Check generated files +name: check license header on: pull_request: diff --git a/.github/workflows/lint-rust.yml b/.github/workflows/lint-rust.yml index db0a8cfb..77ade591 100644 --- a/.github/workflows/lint-rust.yml +++ b/.github/workflows/lint-rust.yml @@ -12,6 +12,7 @@ on: paths: - ".github/workflows/lint-rust.yml" - "plugins/*/src/**" + - "!plugins/*/src/api-iife.js" - "**/Cargo.toml" pull_request: branches: @@ -20,6 +21,7 @@ on: paths: - ".github/workflows/lint-rust.yml" - "plugins/*/src/**" + - "!plugins/*/src/api-iife.js" - "**/Cargo.toml" concurrency: diff --git a/.github/workflows/test-rust.yml b/.github/workflows/test-rust.yml index e0c49a85..6d4458ee 100644 --- a/.github/workflows/test-rust.yml +++ b/.github/workflows/test-rust.yml @@ -12,6 +12,7 @@ on: paths: - ".github/workflows/test-rust.yml" - "plugins/*/src/**" + - "!plugins/*/src/api-iife.js" - "**/Cargo.toml" - "**/Cargo.lock" pull_request: @@ -21,6 +22,7 @@ on: paths: - ".github/workflows/test-rust.yml" - "plugins/*/src/**" + - "!plugins/*/src/api-iife.js" - "**/Cargo.toml" - "**/Cargo.lock" diff --git a/.prettierignore b/.prettierignore index 7435af0c..af351877 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,8 @@ target node_modules dist +dist-js pnpm-lock.yaml Cargo.lock -.build \ No newline at end of file +.build +api-iife.js \ No newline at end of file diff --git a/.scripts/ci/check-license-header.js b/.scripts/ci/check-license-header.js index 5e629258..d8a64650 100644 --- a/.scripts/ci/check-license-header.js +++ b/.scripts/ci/check-license-header.js @@ -24,7 +24,10 @@ const ignore = [ ]; async function checkFile(file) { - if (extensions.some((e) => file.endsWith(e))) { + if ( + extensions.some((e) => file.endsWith(e)) && + !ignore.some((i) => file.endsWith(i)) + ) { const fileStream = fs.createReadStream(file); const rl = readline.createInterface({ input: fileStream, diff --git a/.scripts/ci/has-diff.sh b/.scripts/ci/has-diff.sh new file mode 100755 index 00000000..dd40c06f --- /dev/null +++ b/.scripts/ci/has-diff.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if git diff --quiet --ignore-submodules HEAD +then + echo "working directory is clean" +else + echo "found diff" + exit 1 +fi diff --git a/plugins/app/guest-js/index.ts b/plugins/app/guest-js/index.ts index 056f255e..111a7ef7 100644 --- a/plugins/app/guest-js/index.ts +++ b/plugins/app/guest-js/index.ts @@ -8,7 +8,11 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} /** * Gets the application version. @@ -21,7 +25,7 @@ import { invoke } from "@tauri-apps/api/tauri"; * @since 1.0.0 */ async function getVersion(): Promise { - return invoke("plugin:app|version"); + return window.__TAURI_INVOKE__("plugin:app|version"); } /** @@ -35,7 +39,7 @@ async function getVersion(): Promise { * @since 1.0.0 */ async function getName(): Promise { - return invoke("plugin:app|name"); + return window.__TAURI_INVOKE__("plugin:app|name"); } /** @@ -50,7 +54,7 @@ async function getName(): Promise { * @since 1.0.0 */ async function getTauriVersion(): Promise { - return invoke("plugin:app|tauri_version"); + return window.__TAURI_INVOKE__("plugin:app|tauri_version"); } /** @@ -65,7 +69,7 @@ async function getTauriVersion(): Promise { * @since 1.2.0 */ async function show(): Promise { - return invoke("plugin:app|show"); + return window.__TAURI_INVOKE__("plugin:app|show"); } /** @@ -80,7 +84,7 @@ async function show(): Promise { * @since 1.2.0 */ async function hide(): Promise { - return invoke("plugin:app|hide"); + return window.__TAURI_INVOKE__("plugin:app|hide"); } export { getName, getVersion, getTauriVersion, show, hide }; diff --git a/plugins/app/src/api-iife.js b/plugins/app/src/api-iife.js new file mode 100644 index 00000000..a9e45a48 --- /dev/null +++ b/plugins/app/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_APP__=function(_){"use strict";return _.getName=async function(){return window.__TAURI_INVOKE__("plugin:app|name")},_.getTauriVersion=async function(){return window.__TAURI_INVOKE__("plugin:app|tauri_version")},_.getVersion=async function(){return window.__TAURI_INVOKE__("plugin:app|version")},_.hide=async function(){return window.__TAURI_INVOKE__("plugin:app|hide")},_.show=async function(){return window.__TAURI_INVOKE__("plugin:app|show")},_}({});Object.defineProperty(window.__TAURI__,"app",{value:__TAURI_APP__})} diff --git a/plugins/app/src/lib.rs b/plugins/app/src/lib.rs index fc97c050..aa6fb802 100644 --- a/plugins/app/src/lib.rs +++ b/plugins/app/src/lib.rs @@ -11,6 +11,7 @@ mod commands; pub fn init() -> TauriPlugin { Builder::new("app") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ commands::version, commands::name, diff --git a/plugins/authenticator/guest-js/index.ts b/plugins/authenticator/guest-js/index.ts index f8db2008..c7bb51a1 100644 --- a/plugins/authenticator/guest-js/index.ts +++ b/plugins/authenticator/guest-js/index.ts @@ -2,15 +2,19 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} export class Authenticator { async init(): Promise { - return await invoke("plugin:authenticator|init_auth"); + return await window.__TAURI_INVOKE__("plugin:authenticator|init_auth"); } async register(challenge: string, application: string): Promise { - return await invoke("plugin:authenticator|register", { + return await window.__TAURI_INVOKE__("plugin:authenticator|register", { timeout: 10000, challenge, application, @@ -23,12 +27,15 @@ export class Authenticator { registerData: string, clientData: string ): Promise { - return await invoke("plugin:authenticator|verify_registration", { - challenge, - application, - registerData, - clientData, - }); + return await window.__TAURI_INVOKE__( + "plugin:authenticator|verify_registration", + { + challenge, + application, + registerData, + clientData, + } + ); } async sign( @@ -36,7 +43,7 @@ export class Authenticator { application: string, keyHandle: string ): Promise { - return await invoke("plugin:authenticator|sign", { + return await window.__TAURI_INVOKE__("plugin:authenticator|sign", { timeout: 10000, challenge, application, @@ -52,13 +59,16 @@ export class Authenticator { keyHandle: string, pubkey: string ): Promise { - return await invoke("plugin:authenticator|verify_signature", { - challenge, - application, - signData, - clientData, - keyHandle, - pubkey, - }); + return await window.__TAURI_INVOKE__( + "plugin:authenticator|verify_signature", + { + challenge, + application, + signData, + clientData, + keyHandle, + pubkey, + } + ); } } diff --git a/plugins/authenticator/src/api-iife.js b/plugins/authenticator/src/api-iife.js new file mode 100644 index 00000000..07f75f70 --- /dev/null +++ b/plugins/authenticator/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_AUTHENTICATOR__=function(t){"use strict";return t.Authenticator=class{async init(){return await window.__TAURI_INVOKE__("plugin:authenticator|init_auth")}async register(t,i){return await window.__TAURI_INVOKE__("plugin:authenticator|register",{timeout:1e4,challenge:t,application:i})}async verifyRegistration(t,i,a,n){return await window.__TAURI_INVOKE__("plugin:authenticator|verify_registration",{challenge:t,application:i,registerData:a,clientData:n})}async sign(t,i,a){return await window.__TAURI_INVOKE__("plugin:authenticator|sign",{timeout:1e4,challenge:t,application:i,keyHandle:a})}async verifySignature(t,i,a,n,e,_){return await window.__TAURI_INVOKE__("plugin:authenticator|verify_signature",{challenge:t,application:i,signData:a,clientData:n,keyHandle:e,pubkey:_})}},t}({});Object.defineProperty(window.__TAURI__,"authenticator",{value:__TAURI_AUTHENTICATOR__})} diff --git a/plugins/authenticator/src/lib.rs b/plugins/authenticator/src/lib.rs index b46f44c6..9e6785d0 100644 --- a/plugins/authenticator/src/lib.rs +++ b/plugins/authenticator/src/lib.rs @@ -67,6 +67,7 @@ fn verify_signature( pub fn init() -> TauriPlugin { PluginBuilder::new("authenticator") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ init_auth, register, diff --git a/plugins/autostart/guest-js/index.ts b/plugins/autostart/guest-js/index.ts index b3100708..66d71a57 100644 --- a/plugins/autostart/guest-js/index.ts +++ b/plugins/autostart/guest-js/index.ts @@ -2,16 +2,20 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} export async function isEnabled(): Promise { - return await invoke("plugin:autostart|is_enabled"); + return await window.__TAURI_INVOKE__("plugin:autostart|is_enabled"); } export async function enable(): Promise { - await invoke("plugin:autostart|enable"); + await window.__TAURI_INVOKE__("plugin:autostart|enable"); } export async function disable(): Promise { - await invoke("plugin:autostart|disable"); + await window.__TAURI_INVOKE__("plugin:autostart|disable"); } diff --git a/plugins/autostart/src/api-iife.js b/plugins/autostart/src/api-iife.js new file mode 100644 index 00000000..468886f4 --- /dev/null +++ b/plugins/autostart/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_AUTOSTART__=function(_){"use strict";return _.disable=async function(){await window.__TAURI_INVOKE__("plugin:autostart|disable")},_.enable=async function(){await window.__TAURI_INVOKE__("plugin:autostart|enable")},_.isEnabled=async function(){return await window.__TAURI_INVOKE__("plugin:autostart|is_enabled")},_}({});Object.defineProperty(window.__TAURI__,"autostart",{value:__TAURI_AUTOSTART__})} diff --git a/plugins/autostart/src/lib.rs b/plugins/autostart/src/lib.rs index 2ecc4609..91c6e4ec 100644 --- a/plugins/autostart/src/lib.rs +++ b/plugins/autostart/src/lib.rs @@ -99,6 +99,7 @@ pub fn init( args: Option>, ) -> TauriPlugin { Builder::new("autostart") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![enable, disable, is_enabled]) .setup(move |app, _api| { let mut builder = AutoLaunchBuilder::new(); diff --git a/plugins/cli/guest-js/index.ts b/plugins/cli/guest-js/index.ts index 49f0cba7..ea6ce67a 100644 --- a/plugins/cli/guest-js/index.ts +++ b/plugins/cli/guest-js/index.ts @@ -8,7 +8,11 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} /** * @since 1.0.0 @@ -64,7 +68,7 @@ interface CliMatches { * @since 1.0.0 */ async function getMatches(): Promise { - return await invoke("plugin:cli|cli_matches"); + return await window.__TAURI_INVOKE__("plugin:cli|cli_matches"); } export type { ArgMatch, SubcommandMatch, CliMatches }; diff --git a/plugins/cli/src/api-iife.js b/plugins/cli/src/api-iife.js new file mode 100644 index 00000000..79da44bb --- /dev/null +++ b/plugins/cli/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_CLI__=function(_){"use strict";return _.getMatches=async function(){return await window.__TAURI_INVOKE__("plugin:cli|cli_matches")},_}({});Object.defineProperty(window.__TAURI__,"cli",{value:__TAURI_CLI__})} diff --git a/plugins/cli/src/lib.rs b/plugins/cli/src/lib.rs index 8243dff3..096b62a2 100644 --- a/plugins/cli/src/lib.rs +++ b/plugins/cli/src/lib.rs @@ -40,6 +40,7 @@ fn cli_matches(_app: AppHandle, cli: State<'_, Cli>) -> Result pub fn init() -> TauriPlugin { Builder::new("cli") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![cli_matches]) .setup(|app, api| { app.manage(Cli(api)); diff --git a/plugins/clipboard/guest-js/index.ts b/plugins/clipboard/guest-js/index.ts index 67f519ee..495371bc 100644 --- a/plugins/clipboard/guest-js/index.ts +++ b/plugins/clipboard/guest-js/index.ts @@ -8,7 +8,11 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} interface Clip { kind: K; @@ -34,7 +38,7 @@ async function writeText( text: string, opts?: { label?: string } ): Promise { - return invoke("plugin:clipboard|write", { + return window.__TAURI_INVOKE__("plugin:clipboard|write", { data: { kind: "PlainText", options: { @@ -55,7 +59,9 @@ async function writeText( * @since 1.0.0. */ async function readText(): Promise { - const kind: ClipResponse = await invoke("plugin:clipboard|read"); + const kind: ClipResponse = await window.__TAURI_INVOKE__( + "plugin:clipboard|read" + ); return kind.options; } diff --git a/plugins/clipboard/src/api-iife.js b/plugins/clipboard/src/api-iife.js new file mode 100644 index 00000000..d04126a5 --- /dev/null +++ b/plugins/clipboard/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_CLIPBOARD__=function(_){"use strict";return _.readText=async function(){return(await window.__TAURI_INVOKE__("plugin:clipboard|read")).options},_.writeText=async function(_,i){return window.__TAURI_INVOKE__("plugin:clipboard|write",{data:{kind:"PlainText",options:{label:null==i?void 0:i.label,text:_}}})},_}({});Object.defineProperty(window.__TAURI__,"clipboard",{value:__TAURI_CLIPBOARD__})} diff --git a/plugins/clipboard/src/lib.rs b/plugins/clipboard/src/lib.rs index a655d93e..7fc05348 100644 --- a/plugins/clipboard/src/lib.rs +++ b/plugins/clipboard/src/lib.rs @@ -39,6 +39,7 @@ impl> crate::ClipboardExt for T { /// Initializes the plugin. pub fn init() -> TauriPlugin { Builder::new("clipboard") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![commands::write, commands::read]) .setup(|app, api| { #[cfg(mobile)] diff --git a/plugins/dialog/guest-js/index.ts b/plugins/dialog/guest-js/index.ts index 3d94a61e..5300b7cc 100644 --- a/plugins/dialog/guest-js/index.ts +++ b/plugins/dialog/guest-js/index.ts @@ -2,7 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} interface FileResponse { base64Data?: string; @@ -169,7 +173,7 @@ async function open( Object.freeze(options); } - return invoke("plugin:dialog|open", { options }); + return window.__TAURI_INVOKE__("plugin:dialog|open", { options }); } /** @@ -201,7 +205,7 @@ async function save(options: SaveDialogOptions = {}): Promise { Object.freeze(options); } - return invoke("plugin:dialog|save", { options }); + return window.__TAURI_INVOKE__("plugin:dialog|save", { options }); } /** @@ -226,7 +230,7 @@ async function message( options?: string | MessageDialogOptions ): Promise { const opts = typeof options === "string" ? { title: options } : options; - return invoke("plugin:dialog|message", { + return window.__TAURI_INVOKE__("plugin:dialog|message", { message: message.toString(), title: opts?.title?.toString(), type_: opts?.type, @@ -255,7 +259,7 @@ async function ask( options?: string | ConfirmDialogOptions ): Promise { const opts = typeof options === "string" ? { title: options } : options; - return invoke("plugin:dialog|ask", { + return window.__TAURI_INVOKE__("plugin:dialog|ask", { message: message.toString(), title: opts?.title?.toString(), type_: opts?.type, @@ -285,7 +289,7 @@ async function confirm( options?: string | ConfirmDialogOptions ): Promise { const opts = typeof options === "string" ? { title: options } : options; - return invoke("plugin:dialog|confirm", { + return window.__TAURI_INVOKE__("plugin:dialog|confirm", { message: message.toString(), title: opts?.title?.toString(), type_: opts?.type, diff --git a/plugins/dialog/src/api-iife.js b/plugins/dialog/src/api-iife.js new file mode 100644 index 00000000..b5a74860 --- /dev/null +++ b/plugins/dialog/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_DIALOG__=function(n){"use strict";return n.ask=async function(n,o){var t,i,l,e,u;const _="string"==typeof o?{title:o}:o;return window.__TAURI_INVOKE__("plugin:dialog|ask",{message:n.toString(),title:null===(t=null==_?void 0:_.title)||void 0===t?void 0:t.toString(),type_:null==_?void 0:_.type,okButtonLabel:null!==(l=null===(i=null==_?void 0:_.okLabel)||void 0===i?void 0:i.toString())&&void 0!==l?l:"Yes",cancelButtonLabel:null!==(u=null===(e=null==_?void 0:_.cancelLabel)||void 0===e?void 0:e.toString())&&void 0!==u?u:"No"})},n.confirm=async function(n,o){var t,i,l,e,u;const _="string"==typeof o?{title:o}:o;return window.__TAURI_INVOKE__("plugin:dialog|confirm",{message:n.toString(),title:null===(t=null==_?void 0:_.title)||void 0===t?void 0:t.toString(),type_:null==_?void 0:_.type,okButtonLabel:null!==(l=null===(i=null==_?void 0:_.okLabel)||void 0===i?void 0:i.toString())&&void 0!==l?l:"Ok",cancelButtonLabel:null!==(u=null===(e=null==_?void 0:_.cancelLabel)||void 0===e?void 0:e.toString())&&void 0!==u?u:"Cancel"})},n.message=async function(n,o){var t,i;const l="string"==typeof o?{title:o}:o;return window.__TAURI_INVOKE__("plugin:dialog|message",{message:n.toString(),title:null===(t=null==l?void 0:l.title)||void 0===t?void 0:t.toString(),type_:null==l?void 0:l.type,okButtonLabel:null===(i=null==l?void 0:l.okLabel)||void 0===i?void 0:i.toString()})},n.open=async function(n={}){return"object"==typeof n&&Object.freeze(n),window.__TAURI_INVOKE__("plugin:dialog|open",{options:n})},n.save=async function(n={}){return"object"==typeof n&&Object.freeze(n),window.__TAURI_INVOKE__("plugin:dialog|save",{options:n})},n}({});Object.defineProperty(window.__TAURI__,"dialog",{value:__TAURI_DIALOG__})} diff --git a/plugins/dialog/src/lib.rs b/plugins/dialog/src/lib.rs index 2c07b591..8353b71c 100644 --- a/plugins/dialog/src/lib.rs +++ b/plugins/dialog/src/lib.rs @@ -75,7 +75,13 @@ pub fn init() -> TauriPlugin { // Dialogs are implemented natively on Android #[cfg(not(target_os = "android"))] { - builder = builder.js_init_script(include_str!("init.js").to_string()); + let mut init_script = include_str!("init.js").to_string(); + init_script.push_str(include_str!("api-iife.js")); + builder = builder.js_init_script(init_script); + } + #[cfg(target_os = "android")] + { + builder = builder.js_init_script(include_str!("api-iife.js").to_string()); } builder diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts index bd16cd43..2d1ecf37 100644 --- a/plugins/fs/guest-js/index.ts +++ b/plugins/fs/guest-js/index.ts @@ -45,9 +45,14 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; import { BaseDirectory } from "@tauri-apps/api/path"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} + interface Permissions { /** * `true` if these permissions describe a readonly (unwritable) file. @@ -226,7 +231,7 @@ async function readTextFile( filePath: string, options: FsOptions = {} ): Promise { - return await invoke("plugin:fs|read_text_file", { + return await window.__TAURI_INVOKE__("plugin:fs|read_text_file", { path: filePath, options, }); @@ -247,7 +252,7 @@ async function readBinaryFile( filePath: string, options: FsOptions = {} ): Promise { - const arr = await invoke("plugin:fs|read_file", { + const arr = await window.__TAURI_INVOKE__("plugin:fs|read_file", { path: filePath, options, }); @@ -323,7 +328,7 @@ async function writeTextFile( fileOptions = contents; } - return await invoke("plugin:fs|write_file", { + return await window.__TAURI_INVOKE__("plugin:fs|write_file", { path: file.path, contents: Array.from(new TextEncoder().encode(file.contents)), options: fileOptions, @@ -405,7 +410,7 @@ async function writeBinaryFile( file.contents = contents ?? []; } - return await invoke("plugin:fs|write_binary_file", { + return await window.__TAURI_INVOKE__("plugin:fs|write_binary_file", { path: file.path, contents: Array.from( file.contents instanceof ArrayBuffer @@ -440,7 +445,7 @@ async function readDir( dir: string, options: FsDirOptions = {} ): Promise { - return await invoke("plugin:fs|read_dir", { + return await window.__TAURI_INVOKE__("plugin:fs|read_dir", { path: dir, options, }); @@ -465,7 +470,7 @@ async function createDir( dir: string, options: FsDirOptions = {} ): Promise { - return await invoke("plugin:fs|create_dir", { + return await window.__TAURI_INVOKE__("plugin:fs|create_dir", { path: dir, options, }); @@ -489,7 +494,7 @@ async function removeDir( dir: string, options: FsDirOptions = {} ): Promise { - return await invoke("plugin:fs|remove_dir", { + return await window.__TAURI_INVOKE__("plugin:fs|remove_dir", { path: dir, options, }); @@ -513,7 +518,7 @@ async function copyFile( destination: string, options: FsOptions = {} ): Promise { - return await invoke("plugin:fs|copy_file", { + return await window.__TAURI_INVOKE__("plugin:fs|copy_file", { source, destination, options, @@ -537,7 +542,7 @@ async function removeFile( file: string, options: FsOptions = {} ): Promise { - return await invoke("plugin:fs|remove_file", { + return await window.__TAURI_INVOKE__("plugin:fs|remove_file", { path: file, options, }); @@ -561,7 +566,7 @@ async function renameFile( newPath: string, options: FsOptions = {} ): Promise { - return await invoke("plugin:fs|rename_file", { + return await window.__TAURI_INVOKE__("plugin:fs|rename_file", { oldPath, newPath, options, @@ -580,7 +585,7 @@ async function renameFile( * @since 1.0.0 */ async function exists(path: string): Promise { - return await invoke("plugin:fs|exists", { path }); + return await window.__TAURI_INVOKE__("plugin:fs|exists", { path }); } /** @@ -589,17 +594,19 @@ async function exists(path: string): Promise { * @since 1.0.0 */ async function metadata(path: string): Promise { - return await invoke("plugin:fs|metadata", { - path, - }).then((metadata) => { - const { accessedAtMs, createdAtMs, modifiedAtMs, ...data } = metadata; - return { - accessedAt: new Date(accessedAtMs), - createdAt: new Date(createdAtMs), - modifiedAt: new Date(modifiedAtMs), - ...data, - }; - }); + return await window + .__TAURI_INVOKE__("plugin:fs|metadata", { + path, + }) + .then((metadata) => { + const { accessedAtMs, createdAtMs, modifiedAtMs, ...data } = metadata; + return { + accessedAt: new Date(accessedAtMs), + createdAt: new Date(createdAtMs), + modifiedAt: new Date(modifiedAtMs), + ...data, + }; + }); } export type { diff --git a/plugins/fs/src/api-iife.js b/plugins/fs/src/api-iife.js new file mode 100644 index 00000000..c87b63b8 --- /dev/null +++ b/plugins/fs/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_FS__=function(e){"use strict";var t=Object.defineProperty,n=(e,n)=>{for(var r in n)t(e,r,{get:n[r],enumerable:!0})},r=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},i=(e,t,n)=>(r(e,t,"read from private field"),n?n.call(e):t.get(e));function o(e,t=!1){let n=window.crypto.getRandomValues(new Uint32Array(1))[0],r=`_${n}`;return Object.defineProperty(window,r,{value:n=>(t&&Reflect.deleteProperty(window,r),e?.(n)),writable:!1,configurable:!0}),n}n({},{Channel:()=>c,PluginListener:()=>s,addPluginListener:()=>u,convertFileSrc:()=>l,invoke:()=>p,transformCallback:()=>o});var a,c=class{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,((e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)})(this,a,(()=>{})),this.id=o((e=>{i(this,a).call(this,e)}))}set onmessage(e){((e,t,n,i)=>{r(e,t,"write to private field"),i?i.call(e,n):t.set(e,n)})(this,a,e)}get onmessage(){return i(this,a)}toJSON(){return`__CHANNEL__:${this.id}`}};a=new WeakMap;var s=class{constructor(e,t,n){this.plugin=e,this.event=t,this.channelId=n}async unregister(){return p(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}};async function u(e,t,n){let r=new c;return r.onmessage=n,p(`plugin:${e}|register_listener`,{event:t,handler:r}).then((()=>new s(e,t,r.id)))}async function p(e,t={}){return new Promise(((n,r)=>{let i=o((e=>{n(e),Reflect.deleteProperty(window,`_${a}`)}),!0),a=o((e=>{r(e),Reflect.deleteProperty(window,`_${i}`)}),!0);window.__TAURI_IPC__({cmd:e,callback:i,error:a,...t})}))}function l(e,t="asset"){let n=encodeURIComponent(e);return navigator.userAgent.includes("Windows")?`https://${t}.localhost/${n}`:`${t}://localhost/${n}`}function d(){return navigator.appVersion.includes("Win")}n({},{BaseDirectory:()=>y,appCacheDir:()=>g,appConfigDir:()=>f,appDataDir:()=>h,appLocalDataDir:()=>w,appLogDir:()=>x,audioDir:()=>v,basename:()=>H,cacheDir:()=>m,configDir:()=>A,dataDir:()=>D,delimiter:()=>$,desktopDir:()=>I,dirname:()=>M,documentDir:()=>R,downloadDir:()=>b,executableDir:()=>T,extname:()=>S,fontDir:()=>U,homeDir:()=>E,isAbsolute:()=>W,join:()=>B,localDataDir:()=>O,normalize:()=>z,pictureDir:()=>C,publicDir:()=>N,resolve:()=>k,resolveResource:()=>V,resourceDir:()=>P,runtimeDir:()=>j,sep:()=>L,templateDir:()=>F,videoDir:()=>K});var _,y=((_=y||{})[_.Audio=1]="Audio",_[_.Cache=2]="Cache",_[_.Config=3]="Config",_[_.Data=4]="Data",_[_.LocalData=5]="LocalData",_[_.Document=6]="Document",_[_.Download=7]="Download",_[_.Picture=8]="Picture",_[_.Public=9]="Public",_[_.Video=10]="Video",_[_.Resource=11]="Resource",_[_.Temp=12]="Temp",_[_.AppConfig=13]="AppConfig",_[_.AppData=14]="AppData",_[_.AppLocalData=15]="AppLocalData",_[_.AppCache=16]="AppCache",_[_.AppLog=17]="AppLog",_[_.Desktop=18]="Desktop",_[_.Executable=19]="Executable",_[_.Font=20]="Font",_[_.Home=21]="Home",_[_.Runtime=22]="Runtime",_[_.Template=23]="Template",_);async function f(){return p("plugin:path|resolve_directory",{directory:13})}async function h(){return p("plugin:path|resolve_directory",{directory:14})}async function w(){return p("plugin:path|resolve_directory",{directory:15})}async function g(){return p("plugin:path|resolve_directory",{directory:16})}async function v(){return p("plugin:path|resolve_directory",{directory:1})}async function m(){return p("plugin:path|resolve_directory",{directory:2})}async function A(){return p("plugin:path|resolve_directory",{directory:3})}async function D(){return p("plugin:path|resolve_directory",{directory:4})}async function I(){return p("plugin:path|resolve_directory",{directory:18})}async function R(){return p("plugin:path|resolve_directory",{directory:6})}async function b(){return p("plugin:path|resolve_directory",{directory:7})}async function T(){return p("plugin:path|resolve_directory",{directory:19})}async function U(){return p("plugin:path|resolve_directory",{directory:20})}async function E(){return p("plugin:path|resolve_directory",{directory:21})}async function O(){return p("plugin:path|resolve_directory",{directory:5})}async function C(){return p("plugin:path|resolve_directory",{directory:8})}async function N(){return p("plugin:path|resolve_directory",{directory:9})}async function P(){return p("plugin:path|resolve_directory",{directory:11})}async function V(e){return p("plugin:path|resolve_directory",{directory:11,path:e})}async function j(){return p("plugin:path|resolve_directory",{directory:22})}async function F(){return p("plugin:path|resolve_directory",{directory:23})}async function K(){return p("plugin:path|resolve_directory",{directory:10})}async function x(){return p("plugin:path|resolve_directory",{directory:17})}var L=d()?"\\":"/",$=d()?";":":";async function k(...e){return p("plugin:path|resolve",{paths:e})}async function z(e){return p("plugin:path|normalize",{path:e})}async function B(...e){return p("plugin:path|join",{paths:e})}async function M(e){return p("plugin:path|dirname",{path:e})}async function S(e){return p("plugin:path|extname",{path:e})}async function H(e,t){return p("plugin:path|basename",{path:e,ext:t})}async function W(e){return p("plugin:path|isAbsolute",{path:e})}async function J(e,t,n){"object"==typeof n&&Object.freeze(n),"object"==typeof e&&Object.freeze(e);const r={path:"",contents:""};let i=n;return"string"==typeof e?r.path=e:(r.path=e.path,r.contents=e.contents),"string"==typeof t?r.contents=null!=t?t:"":i=t,await window.__TAURI_INVOKE__("plugin:fs|write_file",{path:r.path,contents:Array.from((new TextEncoder).encode(r.contents)),options:i})}return e.BaseDirectory=y,e.Dir=y,e.copyFile=async function(e,t,n={}){return await window.__TAURI_INVOKE__("plugin:fs|copy_file",{source:e,destination:t,options:n})},e.createDir=async function(e,t={}){return await window.__TAURI_INVOKE__("plugin:fs|create_dir",{path:e,options:t})},e.exists=async function(e){return await window.__TAURI_INVOKE__("plugin:fs|exists",{path:e})},e.metadata=async function(e){return await window.__TAURI_INVOKE__("plugin:fs|metadata",{path:e}).then((e=>{const{accessedAtMs:t,createdAtMs:n,modifiedAtMs:r,...i}=e;return{accessedAt:new Date(t),createdAt:new Date(n),modifiedAt:new Date(r),...i}}))},e.readBinaryFile=async function(e,t={}){const n=await window.__TAURI_INVOKE__("plugin:fs|read_file",{path:e,options:t});return Uint8Array.from(n)},e.readDir=async function(e,t={}){return await window.__TAURI_INVOKE__("plugin:fs|read_dir",{path:e,options:t})},e.readTextFile=async function(e,t={}){return await window.__TAURI_INVOKE__("plugin:fs|read_text_file",{path:e,options:t})},e.removeDir=async function(e,t={}){return await window.__TAURI_INVOKE__("plugin:fs|remove_dir",{path:e,options:t})},e.removeFile=async function(e,t={}){return await window.__TAURI_INVOKE__("plugin:fs|remove_file",{path:e,options:t})},e.renameFile=async function(e,t,n={}){return await window.__TAURI_INVOKE__("plugin:fs|rename_file",{oldPath:e,newPath:t,options:n})},e.writeBinaryFile=async function(e,t,n){"object"==typeof n&&Object.freeze(n),"object"==typeof e&&Object.freeze(e);const r={path:"",contents:[]};let i=n;return"string"==typeof e?r.path=e:(r.path=e.path,r.contents=e.contents),t&&"dir"in t?i=t:"string"==typeof e&&(r.contents=null!=t?t:[]),await window.__TAURI_INVOKE__("plugin:fs|write_binary_file",{path:r.path,contents:Array.from(r.contents instanceof ArrayBuffer?new Uint8Array(r.contents):r.contents),options:i})},e.writeFile=J,e.writeTextFile=J,e}({});Object.defineProperty(window.__TAURI__,"fs",{value:__TAURI_FS__})} diff --git a/plugins/fs/src/lib.rs b/plugins/fs/src/lib.rs index 023d04e6..9156661f 100644 --- a/plugins/fs/src/lib.rs +++ b/plugins/fs/src/lib.rs @@ -38,6 +38,7 @@ impl> FsExt for T { pub fn init() -> TauriPlugin> { PluginBuilder::>::new("fs") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ commands::read_file, commands::read_text_file, diff --git a/plugins/global-shortcut/guest-js/index.ts b/plugins/global-shortcut/guest-js/index.ts index ea105f25..4c1c02c8 100644 --- a/plugins/global-shortcut/guest-js/index.ts +++ b/plugins/global-shortcut/guest-js/index.ts @@ -8,7 +8,14 @@ * @module */ -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + __TAURI__: { + transformCallback: (cb: (payload: T) => void) => number; + }; + } +} export type ShortcutHandler = (shortcut: string) => void; @@ -31,9 +38,9 @@ async function register( shortcut: string, handler: ShortcutHandler ): Promise { - return await invoke("plugin:globalShortcut|register", { + return await window.__TAURI_INVOKE__("plugin:globalShortcut|register", { shortcut, - handler: transformCallback(handler), + handler: window.__TAURI__.transformCallback(handler), }); } @@ -56,9 +63,9 @@ async function registerAll( shortcuts: string[], handler: ShortcutHandler ): Promise { - return await invoke("plugin:globalShortcut|register_all", { + return await window.__TAURI_INVOKE__("plugin:globalShortcut|register_all", { shortcuts, - handler: transformCallback(handler), + handler: window.__TAURI__.transformCallback(handler), }); } @@ -78,7 +85,7 @@ async function registerAll( * @since 1.0.0 */ async function isRegistered(shortcut: string): Promise { - return await invoke("plugin:globalShortcut|is_registered", { + return await window.__TAURI_INVOKE__("plugin:globalShortcut|is_registered", { shortcut, }); } @@ -96,7 +103,7 @@ async function isRegistered(shortcut: string): Promise { * @since 1.0.0 */ async function unregister(shortcut: string): Promise { - return await invoke("plugin:globalShortcut|unregister", { + return await window.__TAURI_INVOKE__("plugin:globalShortcut|unregister", { shortcut, }); } @@ -112,7 +119,7 @@ async function unregister(shortcut: string): Promise { * @since 1.0.0 */ async function unregisterAll(): Promise { - return await invoke("plugin:globalShortcut|unregister_all"); + return await window.__TAURI_INVOKE__("plugin:globalShortcut|unregister_all"); } export { register, registerAll, isRegistered, unregister, unregisterAll }; diff --git a/plugins/global-shortcut/src/api-iife.js b/plugins/global-shortcut/src/api-iife.js new file mode 100644 index 00000000..542aa04f --- /dev/null +++ b/plugins/global-shortcut/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_GLOBALSHORTCUT__=function(_){"use strict";return _.isRegistered=async function(_){return await window.__TAURI_INVOKE__("plugin:globalShortcut|is_registered",{shortcut:_})},_.register=async function(_,t){return await window.__TAURI_INVOKE__("plugin:globalShortcut|register",{shortcut:_,handler:window.__TAURI__.transformCallback(t)})},_.registerAll=async function(_,t){return await window.__TAURI_INVOKE__("plugin:globalShortcut|register_all",{shortcuts:_,handler:window.__TAURI__.transformCallback(t)})},_.unregister=async function(_){return await window.__TAURI_INVOKE__("plugin:globalShortcut|unregister",{shortcut:_})},_.unregisterAll=async function(){return await window.__TAURI_INVOKE__("plugin:globalShortcut|unregister_all")},_}({});Object.defineProperty(window.__TAURI__,"globalShortcut",{value:__TAURI_GLOBALSHORTCUT__})} diff --git a/plugins/global-shortcut/src/lib.rs b/plugins/global-shortcut/src/lib.rs index 6ac38f45..86fb28dd 100644 --- a/plugins/global-shortcut/src/lib.rs +++ b/plugins/global-shortcut/src/lib.rs @@ -283,6 +283,7 @@ impl Builder { pub fn build(self) -> TauriPlugin { let handler = self.handler; PluginBuilder::new("globalShortcut") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ register, register_all, diff --git a/plugins/http/guest-js/index.ts b/plugins/http/guest-js/index.ts index f2a8e2b2..9cc07ac1 100644 --- a/plugins/http/guest-js/index.ts +++ b/plugins/http/guest-js/index.ts @@ -24,7 +24,11 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} /** * @since 1.0.0 @@ -297,7 +301,7 @@ class Client { * ``` */ async drop(): Promise { - return invoke("plugin:http|drop_client", { + return window.__TAURI_INVOKE__("plugin:http|drop_client", { client: this.id, }); } @@ -320,30 +324,32 @@ class Client { if (jsonResponse) { options.responseType = ResponseType.Text; } - return invoke>("plugin:http|request", { - clientId: this.id, - options, - }).then((res) => { - const response = new Response(res); - if (jsonResponse) { - /* eslint-disable */ - try { - response.data = JSON.parse(response.data as string); - } catch (e) { - if (response.ok && (response.data as unknown as string) === "") { - response.data = {} as T; - } else if (response.ok) { - throw Error( - `Failed to parse response \`${response.data}\` as JSON: ${e}; + return window + .__TAURI_INVOKE__>("plugin:http|request", { + clientId: this.id, + options, + }) + .then((res) => { + const response = new Response(res); + if (jsonResponse) { + /* eslint-disable */ + try { + response.data = JSON.parse(response.data as string); + } catch (e) { + if (response.ok && (response.data as unknown as string) === "") { + response.data = {} as T; + } else if (response.ok) { + throw Error( + `Failed to parse response \`${response.data}\` as JSON: ${e}; try setting the \`responseType\` option to \`ResponseType.Text\` or \`ResponseType.Binary\` if the API does not return a JSON response.` - ); + ); + } } + /* eslint-enable */ + return response; } - /* eslint-enable */ return response; - } - return response; - }); + }); } /** @@ -478,9 +484,11 @@ class Client { * @since 1.0.0 */ async function getClient(options?: ClientOptions): Promise { - return invoke("plugin:http|create_client", { - options, - }).then((id) => new Client(id)); + return window + .__TAURI_INVOKE__("plugin:http|create_client", { + options, + }) + .then((id) => new Client(id)); } /** @internal */ diff --git a/plugins/http/src/api-iife.js b/plugins/http/src/api-iife.js new file mode 100644 index 00000000..e99aa35b --- /dev/null +++ b/plugins/http/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_HTTP__=function(e){"use strict";var t;e.ResponseType=void 0,(t=e.ResponseType||(e.ResponseType={}))[t.JSON=1]="JSON",t[t.Text=2]="Text",t[t.Binary=3]="Binary";class r{constructor(e,t){this.type=e,this.payload=t}static form(e){const t={},s=(e,r)=>{if(null!==r){let s;s="string"==typeof r?r:r instanceof Uint8Array||Array.isArray(r)?Array.from(r):r instanceof File?{file:r.name,mime:r.type,fileName:r.name}:"string"==typeof r.file?{file:r.file,mime:r.mime,fileName:r.fileName}:{file:Array.from(r.file),mime:r.mime,fileName:r.fileName},t[String(e)]=s}};if(e instanceof FormData)for(const[t,r]of e)s(t,r);else for(const[t,r]of Object.entries(e))s(t,r);return new r("Form",t)}static json(e){return new r("Json",e)}static text(e){return new r("Text",e)}static bytes(e){return new r("Bytes",Array.from(e instanceof ArrayBuffer?new Uint8Array(e):e))}}class s{constructor(e){this.url=e.url,this.status=e.status,this.ok=this.status>=200&&this.status<300,this.headers=e.headers,this.rawHeaders=e.rawHeaders,this.data=e.data}}class n{constructor(e){this.id=e}async drop(){return window.__TAURI_INVOKE__("plugin:http|drop_client",{client:this.id})}async request(t){const r=!t.responseType||t.responseType===e.ResponseType.JSON;return r&&(t.responseType=e.ResponseType.Text),window.__TAURI_INVOKE__("plugin:http|request",{clientId:this.id,options:t}).then((e=>{const t=new s(e);if(r){try{t.data=JSON.parse(t.data)}catch(e){if(t.ok&&""===t.data)t.data={};else if(t.ok)throw Error(`Failed to parse response \`${t.data}\` as JSON: ${e};\n try setting the \`responseType\` option to \`ResponseType.Text\` or \`ResponseType.Binary\` if the API does not return a JSON response.`)}return t}return t}))}async get(e,t){return this.request({method:"GET",url:e,...t})}async post(e,t,r){return this.request({method:"POST",url:e,body:t,...r})}async put(e,t,r){return this.request({method:"PUT",url:e,body:t,...r})}async patch(e,t){return this.request({method:"PATCH",url:e,...t})}async delete(e,t){return this.request({method:"DELETE",url:e,...t})}}async function i(e){return window.__TAURI_INVOKE__("plugin:http|create_client",{options:e}).then((e=>new n(e)))}let o=null;return e.Body=r,e.Client=n,e.Response=s,e.fetch=async function(e,t){var r;return null===o&&(o=await i()),o.request({url:e,method:null!==(r=null==t?void 0:t.method)&&void 0!==r?r:"GET",...t})},e.getClient=i,e}({});Object.defineProperty(window.__TAURI__,"http",{value:__TAURI_HTTP__})} diff --git a/plugins/http/src/lib.rs b/plugins/http/src/lib.rs index afee9b54..d63107cc 100644 --- a/plugins/http/src/lib.rs +++ b/plugins/http/src/lib.rs @@ -41,6 +41,7 @@ impl> HttpExt for T { pub fn init() -> TauriPlugin> { Builder::>::new("http") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ commands::create_client, commands::drop_client, diff --git a/plugins/log/guest-js/index.ts b/plugins/log/guest-js/index.ts index 54fb6e28..4b3761eb 100644 --- a/plugins/log/guest-js/index.ts +++ b/plugins/log/guest-js/index.ts @@ -2,9 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; import { listen, UnlistenFn } from "@tauri-apps/api/event"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} + export type LogOptions = { file?: string; line?: number; @@ -61,7 +66,7 @@ async function log( location = "webview::unknown"; } - await invoke("plugin:log|log", { + await window.__TAURI_INVOKE__("plugin:log|log", { level, message, location, diff --git a/plugins/log/src/api-iife.js b/plugins/log/src/api-iife.js new file mode 100644 index 00000000..7abc7bb7 --- /dev/null +++ b/plugins/log/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_LOG__=function(e){"use strict";var n=Object.defineProperty,t=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})},r=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)},a=(e,n,t)=>(r(e,n,"read from private field"),t?t.call(e):n.get(e)),i=(e,n,t,a)=>(r(e,n,"write to private field"),a?a.call(e,t):n.set(e,t),t);function o(e,n=!1){let t=window.crypto.getRandomValues(new Uint32Array(1))[0],r=`_${t}`;return Object.defineProperty(window,r,{value:t=>(n&&Reflect.deleteProperty(window,r),e?.(t)),writable:!1,configurable:!0}),t}t({},{Channel:()=>c,PluginListener:()=>s,addPluginListener:()=>u,convertFileSrc:()=>_,invoke:()=>d,transformCallback:()=>o});var l,c=class{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,((e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)})(this,l,(()=>{})),this.id=o((e=>{a(this,l).call(this,e)}))}set onmessage(e){i(this,l,e)}get onmessage(){return a(this,l)}toJSON(){return`__CHANNEL__:${this.id}`}};l=new WeakMap;var s=class{constructor(e,n,t){this.plugin=e,this.event=n,this.channelId=t}async unregister(){return d(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}};async function u(e,n,t){let r=new c;return r.onmessage=t,d(`plugin:${e}|register_listener`,{event:n,handler:r}).then((()=>new s(e,n,r.id)))}async function d(e,n={}){return new Promise(((t,r)=>{let a=o((e=>{t(e),Reflect.deleteProperty(window,`_${i}`)}),!0),i=o((e=>{r(e),Reflect.deleteProperty(window,`_${a}`)}),!0);window.__TAURI_IPC__({cmd:e,callback:a,error:i,...n})}))}function _(e,n="asset"){let t=encodeURIComponent(e);return navigator.userAgent.includes("Windows")?`https://${n}.localhost/${t}`:`${n}://localhost/${t}`}async function w(e,n){await d("plugin:event|unlisten",{event:e,eventId:n})}async function f(e,n,t){return d("plugin:event|listen",{event:e,windowLabel:n,handler:o(t)}).then((n=>async()=>w(e,n)))}t({},{TauriEvent:()=>h,emit:()=>y,listen:()=>E,once:()=>I});var v,g,h=((v=h||{}).WINDOW_RESIZED="tauri://resize",v.WINDOW_MOVED="tauri://move",v.WINDOW_CLOSE_REQUESTED="tauri://close-requested",v.WINDOW_CREATED="tauri://window-created",v.WINDOW_DESTROYED="tauri://destroyed",v.WINDOW_FOCUS="tauri://focus",v.WINDOW_BLUR="tauri://blur",v.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",v.WINDOW_THEME_CHANGED="tauri://theme-changed",v.WINDOW_FILE_DROP="tauri://file-drop",v.WINDOW_FILE_DROP_HOVER="tauri://file-drop-hover",v.WINDOW_FILE_DROP_CANCELLED="tauri://file-drop-cancelled",v.MENU="tauri://menu",v);async function E(e,n){return f(e,null,n)}async function I(e,n){return async function(e,n,t){return f(e,n,(n=>{t(n),w(e,n.id).catch((()=>{}))}))}(e,null,n)}async function y(e,n){return async function(e,n,t){await d("plugin:event|emit",{event:e,windowLabel:n,payload:t})}(e,void 0,n)}async function p(e,n,t){var r,a;const i=null===(r=(new Error).stack)||void 0===r?void 0:r.split("\n").map((e=>e.split("@"))),o=null==i?void 0:i.filter((([e,n])=>e.length>0&&"[native code]"!==n)),{file:l,line:c,...s}=null!=t?t:{};let u=null===(a=null==o?void 0:o[0])||void 0===a?void 0:a.filter((e=>e.length>0)).join("@");"Error"===u&&(u="webview::unknown"),await window.__TAURI_INVOKE__("plugin:log|log",{level:e,message:n,location:u,file:l,line:c,keyValues:s})}return function(e){e[e.Trace=1]="Trace",e[e.Debug=2]="Debug",e[e.Info=3]="Info",e[e.Warn=4]="Warn",e[e.Error=5]="Error"}(g||(g={})),e.attachConsole=async function(){return await E("log://log",(e=>{const n=e.payload,t=n.message.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,"");switch(n.level){case g.Trace:console.log(t);break;case g.Debug:console.debug(t);break;case g.Info:console.info(t);break;case g.Warn:console.warn(t);break;case g.Error:console.error(t);break;default:throw new Error(`unknown log level ${n.level}`)}}))},e.debug=async function(e,n){await p(g.Debug,e,n)},e.error=async function(e,n){await p(g.Error,e,n)},e.info=async function(e,n){await p(g.Info,e,n)},e.trace=async function(e,n){await p(g.Trace,e,n)},e.warn=async function(e,n){await p(g.Warn,e,n)},e}({});Object.defineProperty(window.__TAURI__,"log",{value:__TAURI_LOG__})} diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs index e8d548c0..05794dd7 100644 --- a/plugins/log/src/lib.rs +++ b/plugins/log/src/lib.rs @@ -389,6 +389,7 @@ impl Builder { pub fn build(mut self) -> TauriPlugin { plugin::Builder::new("log") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![log]) .setup(move |app_handle, _api| { let app_name = &app_handle.package_info().name; diff --git a/plugins/notification/src/api-iife.js b/plugins/notification/src/api-iife.js new file mode 100644 index 00000000..4ef6d877 --- /dev/null +++ b/plugins/notification/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_NOTIFICATION__=function(n){"use strict";var e=Object.defineProperty,i=(n,e,i)=>{if(!e.has(n))throw TypeError("Cannot "+i)},t=(n,e,t)=>(i(n,e,"read from private field"),t?t.call(n):e.get(n)),o=(n,e,t,o)=>(i(n,e,"write to private field"),o?o.call(n,t):e.set(n,t),t);function r(n,e=!1){let i=window.crypto.getRandomValues(new Uint32Array(1))[0],t=`_${i}`;return Object.defineProperty(window,t,{value:i=>(e&&Reflect.deleteProperty(window,t),n?.(i)),writable:!1,configurable:!0}),i}((n,i)=>{for(var t in i)e(n,t,{get:i[t],enumerable:!0})})({},{Channel:()=>a,PluginListener:()=>f,addPluginListener:()=>d,convertFileSrc:()=>p,invoke:()=>_,transformCallback:()=>r});var c,a=class{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,((n,e,i)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,i)})(this,c,(()=>{})),this.id=r((n=>{t(this,c).call(this,n)}))}set onmessage(n){o(this,c,n)}get onmessage(){return t(this,c)}toJSON(){return`__CHANNEL__:${this.id}`}};c=new WeakMap;var s,l,u,f=class{constructor(n,e,i){this.plugin=n,this.event=e,this.channelId=i}async unregister(){return _(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}};async function d(n,e,i){let t=new a;return t.onmessage=i,_(`plugin:${n}|register_listener`,{event:e,handler:t}).then((()=>new f(n,e,t.id)))}async function _(n,e={}){return new Promise(((i,t)=>{let o=r((n=>{i(n),Reflect.deleteProperty(window,`_${c}`)}),!0),c=r((n=>{t(n),Reflect.deleteProperty(window,`_${o}`)}),!0);window.__TAURI_IPC__({cmd:n,callback:o,error:c,...e})}))}function p(n,e="asset"){let i=encodeURIComponent(n);return navigator.userAgent.includes("Windows")?`https://${e}.localhost/${i}`:`${e}://localhost/${i}`}return function(n){n.Year="Year",n.Month="Month",n.TwoWeeks="TwoWeeks",n.Week="Week",n.Day="Day",n.Hour="Hour",n.Minute="Minute",n.Second="Second"}(s||(s={})),n.Importance=void 0,(l=n.Importance||(n.Importance={}))[l.None=0]="None",l[l.Min=1]="Min",l[l.Low=2]="Low",l[l.Default=3]="Default",l[l.High=4]="High",n.Visibility=void 0,(u=n.Visibility||(n.Visibility={}))[u.Secret=-1]="Secret",u[u.Private=0]="Private",u[u.Public=1]="Public",n.active=async function(){return _("plugin:notification|get_active")},n.cancel=async function(n){return _("plugin:notification|cancel",{notifications:n})},n.cancelAll=async function(){return _("plugin:notification|cancel")},n.channels=async function(){return _("plugin:notification|getActive")},n.createChannel=async function(n){return _("plugin:notification|create_channel",{...n})},n.isPermissionGranted=async function(){return"default"!==window.Notification.permission?Promise.resolve("granted"===window.Notification.permission):_("plugin:notification|is_permission_granted")},n.onAction=async function(n){return d("notification","actionPerformed",n)},n.onNotificationReceived=async function(n){return d("notification","notification",n)},n.pending=async function(){return _("plugin:notification|get_pending")},n.registerActionTypes=async function(n){return _("plugin:notification|register_action_types",{types:n})},n.removeActive=async function(n){return _("plugin:notification|remove_active",{notifications:n})},n.removeAllActive=async function(){return _("plugin:notification|remove_active")},n.removeChannel=async function(n){return _("plugin:notification|delete_channel",{id:n})},n.requestPermission=async function(){return window.Notification.requestPermission()},n.sendNotification=function(n){"string"==typeof n?new window.Notification(n):new window.Notification(n.title,n)},n}({});Object.defineProperty(window.__TAURI__,"notification",{value:__TAURI_NOTIFICATION__})} diff --git a/plugins/notification/src/lib.rs b/plugins/notification/src/lib.rs index 6e566fe2..03f6db09 100644 --- a/plugins/notification/src/lib.rs +++ b/plugins/notification/src/lib.rs @@ -212,13 +212,15 @@ impl> crate::NotificationExt for T { /// Initializes the plugin. pub fn init() -> TauriPlugin { + let mut init_script = include_str!("init.js").to_string(); + init_script.push_str(include_str!("api-iife.js")); Builder::new("notification") .invoke_handler(tauri::generate_handler![ commands::notify, commands::request_permission, commands::is_permission_granted ]) - .js_init_script(include_str!("init.js").into()) + .js_init_script(init_script) .setup(|app, api| { #[cfg(mobile)] let notification = mobile::init(app, api)?; diff --git a/plugins/os/guest-js/index.ts b/plugins/os/guest-js/index.ts index 36c508f1..9bac01cc 100644 --- a/plugins/os/guest-js/index.ts +++ b/plugins/os/guest-js/index.ts @@ -8,7 +8,11 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} type Platform = | "linux" @@ -63,7 +67,7 @@ const EOL = isWindows() ? "\r\n" : "\n"; * */ async function platform(): Promise { - return invoke("plugin:os|platform"); + return window.__TAURI_INVOKE__("plugin:os|platform"); } /** @@ -77,7 +81,7 @@ async function platform(): Promise { * @since 1.0.0 */ async function version(): Promise { - return invoke("plugin:os|version"); + return window.__TAURI_INVOKE__("plugin:os|version"); } /** @@ -91,7 +95,7 @@ async function version(): Promise { * @since 1.0.0 */ async function type(): Promise { - return invoke("plugin:os|kind"); + return window.__TAURI_INVOKE__("plugin:os|kind"); } /** @@ -106,7 +110,7 @@ async function type(): Promise { * @since 1.0.0 */ async function arch(): Promise { - return invoke("plugin:os|arch"); + return window.__TAURI_INVOKE__("plugin:os|arch"); } /** @@ -120,7 +124,7 @@ async function arch(): Promise { * @since 1.0.0 */ async function tempdir(): Promise { - return invoke("plugin:os|tempdir"); + return window.__TAURI_INVOKE__("plugin:os|tempdir"); } export { EOL, platform, version, type, arch, tempdir }; diff --git a/plugins/os/src/api-iife.js b/plugins/os/src/api-iife.js new file mode 100644 index 00000000..8223ce89 --- /dev/null +++ b/plugins/os/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_OS__=function(n){"use strict";const _=navigator.appVersion.includes("Win")?"\r\n":"\n";return n.EOL=_,n.arch=async function(){return window.__TAURI_INVOKE__("plugin:os|arch")},n.platform=async function(){return window.__TAURI_INVOKE__("plugin:os|platform")},n.tempdir=async function(){return window.__TAURI_INVOKE__("plugin:os|tempdir")},n.type=async function(){return window.__TAURI_INVOKE__("plugin:os|kind")},n.version=async function(){return window.__TAURI_INVOKE__("plugin:os|version")},n}({});Object.defineProperty(window.__TAURI__,"os",{value:__TAURI_OS__})} diff --git a/plugins/os/src/lib.rs b/plugins/os/src/lib.rs index 1b51eaea..488107a4 100644 --- a/plugins/os/src/lib.rs +++ b/plugins/os/src/lib.rs @@ -70,6 +70,7 @@ pub fn tempdir() -> PathBuf { pub fn init() -> TauriPlugin { Builder::new("os") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ commands::platform, commands::version, diff --git a/plugins/positioner/guest-js/index.ts b/plugins/positioner/guest-js/index.ts index 14bad9e9..cf6d0f24 100644 --- a/plugins/positioner/guest-js/index.ts +++ b/plugins/positioner/guest-js/index.ts @@ -3,7 +3,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} /** * Well known window positions. @@ -33,7 +37,7 @@ export enum Position { * @param to The {@link Position} to move to. */ export async function moveWindow(to: Position): Promise { - await invoke("plugin:positioner|move_window", { + await window.__TAURI_INVOKE__("plugin:positioner|move_window", { position: to, }); } diff --git a/plugins/positioner/src/api-iife.js b/plugins/positioner/src/api-iife.js new file mode 100644 index 00000000..47be9b4d --- /dev/null +++ b/plugins/positioner/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_POSITIONER__=function(t){"use strict";var o;return t.Position=void 0,(o=t.Position||(t.Position={}))[o.TopLeft=0]="TopLeft",o[o.TopRight=1]="TopRight",o[o.BottomLeft=2]="BottomLeft",o[o.BottomRight=3]="BottomRight",o[o.TopCenter=4]="TopCenter",o[o.BottomCenter=5]="BottomCenter",o[o.LeftCenter=6]="LeftCenter",o[o.RightCenter=7]="RightCenter",o[o.Center=8]="Center",o[o.TrayLeft=9]="TrayLeft",o[o.TrayBottomLeft=10]="TrayBottomLeft",o[o.TrayRight=11]="TrayRight",o[o.TrayBottomRight=12]="TrayBottomRight",o[o.TrayCenter=13]="TrayCenter",o[o.TrayBottomCenter=14]="TrayBottomCenter",t.moveWindow=async function(t){await window.__TAURI_INVOKE__("plugin:positioner|move_window",{position:t})},t}({});Object.defineProperty(window.__TAURI__,"positioner",{value:__TAURI_POSITIONER__})} diff --git a/plugins/positioner/src/lib.rs b/plugins/positioner/src/lib.rs index fd0140a4..b7f83c41 100644 --- a/plugins/positioner/src/lib.rs +++ b/plugins/positioner/src/lib.rs @@ -62,8 +62,9 @@ async fn move_window(window: tauri::Window, position: Position) - /// The Tauri plugin that exposes [`WindowExt::move_window`] to the webview. pub fn init() -> TauriPlugin { - let plugin = - plugin::Builder::new("positioner").invoke_handler(tauri::generate_handler![move_window]); + let plugin = plugin::Builder::new("positioner") + .js_init_script(include_str!("api-iife.js").to_string()) + .invoke_handler(tauri::generate_handler![move_window]); #[cfg(feature = "system-tray")] let plugin = plugin.setup(|app_handle, _api| { diff --git a/plugins/process/guest-js/index.ts b/plugins/process/guest-js/index.ts index 403dbc92..b66ad837 100644 --- a/plugins/process/guest-js/index.ts +++ b/plugins/process/guest-js/index.ts @@ -7,7 +7,11 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} /** * Exits immediately with the given `exitCode`. @@ -23,7 +27,7 @@ import { invoke } from "@tauri-apps/api/tauri"; * @since 1.0.0 */ async function exit(code = 0): Promise { - return invoke("plugin:process|exit", { code }); + return window.__TAURI_INVOKE__("plugin:process|exit", { code }); } /** @@ -39,7 +43,7 @@ async function exit(code = 0): Promise { * @since 1.0.0 */ async function relaunch(): Promise { - return invoke("plugin:process|restart"); + return window.__TAURI_INVOKE__("plugin:process|restart"); } export { exit, relaunch }; diff --git a/plugins/process/src/api-iife.js b/plugins/process/src/api-iife.js new file mode 100644 index 00000000..89dfd475 --- /dev/null +++ b/plugins/process/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_PROCESS__=function(_){"use strict";return _.exit=async function(_=0){return window.__TAURI_INVOKE__("plugin:process|exit",{code:_})},_.relaunch=async function(){return window.__TAURI_INVOKE__("plugin:process|restart")},_}({});Object.defineProperty(window.__TAURI__,"process",{value:__TAURI_PROCESS__})} diff --git a/plugins/process/src/lib.rs b/plugins/process/src/lib.rs index d3d48cac..d6c327b3 100644 --- a/plugins/process/src/lib.rs +++ b/plugins/process/src/lib.rs @@ -11,6 +11,7 @@ mod commands; pub fn init() -> TauriPlugin { Builder::new("process") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![commands::exit, commands::restart]) .build() } diff --git a/plugins/shell/guest-js/index.ts b/plugins/shell/guest-js/index.ts index 9d5abb21..da964f9d 100644 --- a/plugins/shell/guest-js/index.ts +++ b/plugins/shell/guest-js/index.ts @@ -62,7 +62,14 @@ * @module */ -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + __TAURI__: { + transformCallback: (cb: (payload: T) => void) => number; + }; + } +} /** * @since 1.0.0 @@ -119,11 +126,11 @@ async function execute( Object.freeze(args); } - return invoke("plugin:shell|execute", { + return window.__TAURI_INVOKE__("plugin:shell|execute", { program, args, options, - onEventFn: transformCallback(onEvent), + onEventFn: window.__TAURI__.transformCallback(onEvent), }); } @@ -345,7 +352,7 @@ class Child { * @returns A promise indicating the success or failure of the operation. */ async write(data: IOPayload): Promise { - return invoke("plugin:shell|stdin_write", { + return window.__TAURI_INVOKE__("plugin:shell|stdin_write", { pid: this.pid, // correctly serialize Uint8Arrays buffer: typeof data === "string" ? data : Array.from(data), @@ -358,7 +365,7 @@ class Child { * @returns A promise indicating the success or failure of the operation. */ async kill(): Promise { - return invoke("plugin:shell|kill", { + return window.__TAURI_INVOKE__("plugin:shell|kill", { cmd: "killChild", pid: this.pid, }); @@ -629,7 +636,7 @@ type CommandEvent = * @since 1.0.0 */ async function open(path: string, openWith?: string): Promise { - return invoke("plugin:shell|open", { + return window.__TAURI_INVOKE__("plugin:shell|open", { path, with: openWith, }); diff --git a/plugins/shell/src/api-iife.js b/plugins/shell/src/api-iife.js new file mode 100644 index 00000000..cb6b28ac --- /dev/null +++ b/plugins/shell/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_SHELL__=function(e){"use strict";class t{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){const s=n=>{this.removeListener(e,s),t(n)};return this.addListener(e,s)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter((e=>e!==t))),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,t){if(e in this.eventListeners){const s=this.eventListeners[e];for(const e of s)e(t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){const s=n=>{this.removeListener(e,s),t(n)};return this.prependListener(e,s)}}class s{constructor(e){this.pid=e}async write(e){return window.__TAURI_INVOKE__("plugin:shell|stdin_write",{pid:this.pid,buffer:"string"==typeof e?e:Array.from(e)})}async kill(){return window.__TAURI_INVOKE__("plugin:shell|kill",{cmd:"killChild",pid:this.pid})}}class n extends t{constructor(e,s=[],n){super(),this.stdout=new t,this.stderr=new t,this.program=e,this.args="string"==typeof s?[s]:s,this.options=null!=n?n:{}}static create(e,t=[],s){return new n(e,t,s)}static sidecar(e,t=[],s){const r=new n(e,t,s);return r.options.sidecar=!0,r}async spawn(){return async function(e,t,s=[],n){return"object"==typeof s&&Object.freeze(s),window.__TAURI_INVOKE__("plugin:shell|execute",{program:t,args:s,options:n,onEventFn:window.__TAURI__.transformCallback(e)})}((e=>{switch(e.event){case"Error":this.emit("error",e.payload);break;case"Terminated":this.emit("close",e.payload);break;case"Stdout":this.stdout.emit("data",e.payload);break;case"Stderr":this.stderr.emit("data",e.payload)}}),this.program,this.args,this.options).then((e=>new s(e)))}async execute(){return new Promise(((e,t)=>{this.on("error",t);const s=[],n=[];this.stdout.on("data",(e=>{s.push(e)})),this.stderr.on("data",(e=>{n.push(e)})),this.on("close",(t=>{e({code:t.code,signal:t.signal,stdout:this.collectOutput(s),stderr:this.collectOutput(n)})})),this.spawn().catch(t)}))}collectOutput(e){return"raw"===this.options.encoding?e.reduce(((e,t)=>new Uint8Array([...e,...t,10])),new Uint8Array):e.join("\n")}}return e.Child=s,e.Command=n,e.EventEmitter=t,e.open=async function(e,t){return window.__TAURI_INVOKE__("plugin:shell|open",{path:e,with:t})},e}({});Object.defineProperty(window.__TAURI__,"shell",{value:__TAURI_SHELL__})} diff --git a/plugins/shell/src/lib.rs b/plugins/shell/src/lib.rs index 43bf006c..d7637ea5 100644 --- a/plugins/shell/src/lib.rs +++ b/plugins/shell/src/lib.rs @@ -67,8 +67,11 @@ impl> ShellExt for T { } pub fn init() -> TauriPlugin> { + let mut init_script = include_str!("init.js").to_string(); + init_script.push_str(include_str!("api-iife.js")); + Builder::>::new("shell") - .js_init_script(include_str!("init.js").to_string()) + .js_init_script(init_script) .invoke_handler(tauri::generate_handler![ commands::execute, commands::stdin_write, diff --git a/plugins/sql/guest-js/index.ts b/plugins/sql/guest-js/index.ts index 687f6321..24f35ec9 100644 --- a/plugins/sql/guest-js/index.ts +++ b/plugins/sql/guest-js/index.ts @@ -2,7 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} export interface QueryResult { /** The number of rows affected by the query. */ @@ -46,7 +50,7 @@ export default class Database { * ``` */ static async load(path: string): Promise { - const _path = await invoke("plugin:sql|load", { + const _path = await window.__TAURI_INVOKE__("plugin:sql|load", { db: path, }); @@ -87,14 +91,13 @@ export default class Database { * ``` */ async execute(query: string, bindValues?: unknown[]): Promise { - const [rowsAffected, lastInsertId] = await invoke<[number, number]>( - "plugin:sql|execute", - { - db: this.path, - query, - values: bindValues ?? [], - } - ); + const [rowsAffected, lastInsertId] = await window.__TAURI_INVOKE__< + [number, number] + >("plugin:sql|execute", { + db: this.path, + query, + values: bindValues ?? [], + }); return { lastInsertId, @@ -115,7 +118,7 @@ export default class Database { * ``` */ async select(query: string, bindValues?: unknown[]): Promise { - const result = await invoke("plugin:sql|select", { + const result = await window.__TAURI_INVOKE__("plugin:sql|select", { db: this.path, query, values: bindValues ?? [], @@ -136,7 +139,7 @@ export default class Database { * @param db - Optionally state the name of a database if you are managing more than one. Otherwise, all database pools will be in scope. */ async close(db?: string): Promise { - const success = await invoke("plugin:sql|close", { + const success = await window.__TAURI_INVOKE__("plugin:sql|close", { db, }); return success; diff --git a/plugins/sql/src/api-iife.js b/plugins/sql/src/api-iife.js new file mode 100644 index 00000000..e43792cd --- /dev/null +++ b/plugins/sql/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_SQL__=function(){"use strict";class _{constructor(_){this.path=_}static async load(t){const e=await window.__TAURI_INVOKE__("plugin:sql|load",{db:t});return new _(e)}static get(t){return new _(t)}async execute(_,t){const[e,n]=await window.__TAURI_INVOKE__("plugin:sql|execute",{db:this.path,query:_,values:null!=t?t:[]});return{lastInsertId:n,rowsAffected:e}}async select(_,t){return await window.__TAURI_INVOKE__("plugin:sql|select",{db:this.path,query:_,values:null!=t?t:[]})}async close(_){return await window.__TAURI_INVOKE__("plugin:sql|close",{db:_})}}return _}();Object.defineProperty(window.__TAURI__,"sql",{value:__TAURI_SQL__})} diff --git a/plugins/sql/src/plugin.rs b/plugins/sql/src/plugin.rs index 460b2442..8d524345 100644 --- a/plugins/sql/src/plugin.rs +++ b/plugins/sql/src/plugin.rs @@ -280,6 +280,7 @@ impl Builder { pub fn build(mut self) -> TauriPlugin> { PluginBuilder::>::new("sql") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![load, execute, select, close]) .setup(|app, api| { let config = api.config().clone().unwrap_or_default(); diff --git a/plugins/store/guest-js/index.ts b/plugins/store/guest-js/index.ts index 966e371d..49c452ca 100644 --- a/plugins/store/guest-js/index.ts +++ b/plugins/store/guest-js/index.ts @@ -2,9 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; import { listen, UnlistenFn } from "@tauri-apps/api/event"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} + interface ChangePayload { path: string; key: string; @@ -28,7 +33,7 @@ export class Store { * @returns */ async set(key: string, value: unknown): Promise { - return await invoke("plugin:store|set", { + return await window.__TAURI_INVOKE__("plugin:store|set", { path: this.path, key, value, @@ -42,7 +47,7 @@ export class Store { * @returns */ async get(key: string): Promise { - return await invoke("plugin:store|get", { + return await window.__TAURI_INVOKE__("plugin:store|get", { path: this.path, key, }); @@ -55,7 +60,7 @@ export class Store { * @returns */ async has(key: string): Promise { - return await invoke("plugin:store|has", { + return await window.__TAURI_INVOKE__("plugin:store|has", { path: this.path, key, }); @@ -68,7 +73,7 @@ export class Store { * @returns */ async delete(key: string): Promise { - return await invoke("plugin:store|delete", { + return await window.__TAURI_INVOKE__("plugin:store|delete", { path: this.path, key, }); @@ -81,7 +86,7 @@ export class Store { * @returns */ async clear(): Promise { - return await invoke("plugin:store|clear", { + return await window.__TAURI_INVOKE__("plugin:store|clear", { path: this.path, }); } @@ -93,7 +98,7 @@ export class Store { * @returns */ async reset(): Promise { - return await invoke("plugin:store|reset", { + return await window.__TAURI_INVOKE__("plugin:store|reset", { path: this.path, }); } @@ -104,7 +109,7 @@ export class Store { * @returns */ async keys(): Promise { - return await invoke("plugin:store|keys", { + return await window.__TAURI_INVOKE__("plugin:store|keys", { path: this.path, }); } @@ -115,7 +120,7 @@ export class Store { * @returns */ async values(): Promise { - return await invoke("plugin:store|values", { + return await window.__TAURI_INVOKE__("plugin:store|values", { path: this.path, }); } @@ -126,7 +131,7 @@ export class Store { * @returns */ async entries(): Promise> { - return await invoke("plugin:store|entries", { + return await window.__TAURI_INVOKE__("plugin:store|entries", { path: this.path, }); } @@ -137,7 +142,7 @@ export class Store { * @returns */ async length(): Promise { - return await invoke("plugin:store|length", { + return await window.__TAURI_INVOKE__("plugin:store|length", { path: this.path, }); } @@ -151,7 +156,7 @@ export class Store { * @returns */ async load(): Promise { - return await invoke("plugin:store|load", { + return await window.__TAURI_INVOKE__("plugin:store|load", { path: this.path, }); } @@ -164,7 +169,7 @@ export class Store { * @returns */ async save(): Promise { - return await invoke("plugin:store|save", { + return await window.__TAURI_INVOKE__("plugin:store|save", { path: this.path, }); } diff --git a/plugins/store/src/api-iife.js b/plugins/store/src/api-iife.js new file mode 100644 index 00000000..df38427d --- /dev/null +++ b/plugins/store/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_STORE__=function(e){"use strict";var t=Object.defineProperty,n=(e,n)=>{for(var a in n)t(e,a,{get:n[a],enumerable:!0})},a=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)},r=(e,t,n)=>(a(e,t,"read from private field"),n?n.call(e):t.get(e)),i=(e,t,n,r)=>(a(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n);function s(e,t=!1){let n=window.crypto.getRandomValues(new Uint32Array(1))[0],a=`_${n}`;return Object.defineProperty(window,a,{value:n=>(t&&Reflect.deleteProperty(window,a),e?.(n)),writable:!1,configurable:!0}),n}n({},{Channel:()=>o,PluginListener:()=>l,addPluginListener:()=>u,convertFileSrc:()=>h,invoke:()=>c,transformCallback:()=>s});var _,o=class{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,((e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)})(this,_,(()=>{})),this.id=s((e=>{r(this,_).call(this,e)}))}set onmessage(e){i(this,_,e)}get onmessage(){return r(this,_)}toJSON(){return`__CHANNEL__:${this.id}`}};_=new WeakMap;var l=class{constructor(e,t,n){this.plugin=e,this.event=t,this.channelId=n}async unregister(){return c(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}};async function u(e,t,n){let a=new o;return a.onmessage=n,c(`plugin:${e}|register_listener`,{event:t,handler:a}).then((()=>new l(e,t,a.id)))}async function c(e,t={}){return new Promise(((n,a)=>{let r=s((e=>{n(e),Reflect.deleteProperty(window,`_${i}`)}),!0),i=s((e=>{a(e),Reflect.deleteProperty(window,`_${r}`)}),!0);window.__TAURI_IPC__({cmd:e,callback:r,error:i,...t})}))}function h(e,t="asset"){let n=encodeURIComponent(e);return navigator.userAgent.includes("Windows")?`https://${t}.localhost/${n}`:`${t}://localhost/${n}`}async function d(e,t){await c("plugin:event|unlisten",{event:e,eventId:t})}async function p(e,t,n){return c("plugin:event|listen",{event:e,windowLabel:t,handler:s(n)}).then((t=>async()=>d(e,t)))}n({},{TauriEvent:()=>y,emit:()=>E,listen:()=>I,once:()=>g});var w,y=((w=y||{}).WINDOW_RESIZED="tauri://resize",w.WINDOW_MOVED="tauri://move",w.WINDOW_CLOSE_REQUESTED="tauri://close-requested",w.WINDOW_CREATED="tauri://window-created",w.WINDOW_DESTROYED="tauri://destroyed",w.WINDOW_FOCUS="tauri://focus",w.WINDOW_BLUR="tauri://blur",w.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",w.WINDOW_THEME_CHANGED="tauri://theme-changed",w.WINDOW_FILE_DROP="tauri://file-drop",w.WINDOW_FILE_DROP_HOVER="tauri://file-drop-hover",w.WINDOW_FILE_DROP_CANCELLED="tauri://file-drop-cancelled",w.MENU="tauri://menu",w);async function I(e,t){return p(e,null,t)}async function g(e,t){return async function(e,t,n){return p(e,t,(t=>{n(t),d(e,t.id).catch((()=>{}))}))}(e,null,t)}async function E(e,t){return async function(e,t,n){await c("plugin:event|emit",{event:e,windowLabel:t,payload:n})}(e,void 0,t)}return e.Store=class{constructor(e){this.path=e}async set(e,t){return await window.__TAURI_INVOKE__("plugin:store|set",{path:this.path,key:e,value:t})}async get(e){return await window.__TAURI_INVOKE__("plugin:store|get",{path:this.path,key:e})}async has(e){return await window.__TAURI_INVOKE__("plugin:store|has",{path:this.path,key:e})}async delete(e){return await window.__TAURI_INVOKE__("plugin:store|delete",{path:this.path,key:e})}async clear(){return await window.__TAURI_INVOKE__("plugin:store|clear",{path:this.path})}async reset(){return await window.__TAURI_INVOKE__("plugin:store|reset",{path:this.path})}async keys(){return await window.__TAURI_INVOKE__("plugin:store|keys",{path:this.path})}async values(){return await window.__TAURI_INVOKE__("plugin:store|values",{path:this.path})}async entries(){return await window.__TAURI_INVOKE__("plugin:store|entries",{path:this.path})}async length(){return await window.__TAURI_INVOKE__("plugin:store|length",{path:this.path})}async load(){return await window.__TAURI_INVOKE__("plugin:store|load",{path:this.path})}async save(){return await window.__TAURI_INVOKE__("plugin:store|save",{path:this.path})}async onKeyChange(e,t){return await I("store://change",(n=>{n.payload.path===this.path&&n.payload.key===e&&t(n.payload.value)}))}async onChange(e){return await I("store://change",(t=>{t.payload.path===this.path&&e(t.payload.key,t.payload.value)}))}},e}({});Object.defineProperty(window.__TAURI__,"store",{value:__TAURI_STORE__})} diff --git a/plugins/store/src/lib.rs b/plugins/store/src/lib.rs index 968cdc05..1ce2885e 100644 --- a/plugins/store/src/lib.rs +++ b/plugins/store/src/lib.rs @@ -278,6 +278,7 @@ impl Builder { /// ``` pub fn build(mut self) -> TauriPlugin { plugin::Builder::new("store") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ set, get, has, delete, clear, reset, keys, values, length, entries, load, save ]) diff --git a/plugins/stronghold/guest-js/index.ts b/plugins/stronghold/guest-js/index.ts index 8bd4e894..568a281b 100644 --- a/plugins/stronghold/guest-js/index.ts +++ b/plugins/stronghold/guest-js/index.ts @@ -2,7 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} type BytesDto = string | number[]; export type ClientPath = @@ -131,16 +135,18 @@ class ProcedureExecutor { outputLocation: Location, sizeBytes?: number ): Promise { - return await invoke("plugin:stronghold|execute_procedure", { - ...this.procedureArgs, - procedure: { - type: "SLIP10Generate", - payload: { - output: outputLocation, - sizeBytes, + return await window + .__TAURI_INVOKE__("plugin:stronghold|execute_procedure", { + ...this.procedureArgs, + procedure: { + type: "SLIP10Generate", + payload: { + output: outputLocation, + sizeBytes, + }, }, - }, - }).then((n) => Uint8Array.from(n)); + }) + .then((n) => Uint8Array.from(n)); } /** @@ -158,20 +164,22 @@ class ProcedureExecutor { sourceLocation: Location, outputLocation: Location ): Promise { - return await invoke("plugin:stronghold|execute_procedure", { - ...this.procedureArgs, - procedure: { - type: "SLIP10Derive", - payload: { - chain, - input: { - type: source, - payload: sourceLocation, + return await window + .__TAURI_INVOKE__("plugin:stronghold|execute_procedure", { + ...this.procedureArgs, + procedure: { + type: "SLIP10Derive", + payload: { + chain, + input: { + type: source, + payload: sourceLocation, + }, + output: outputLocation, }, - output: outputLocation, }, - }, - }).then((n) => Uint8Array.from(n)); + }) + .then((n) => Uint8Array.from(n)); } /** @@ -187,17 +195,19 @@ class ProcedureExecutor { outputLocation: Location, passphrase?: string ): Promise { - return await invoke("plugin:stronghold|execute_procedure", { - ...this.procedureArgs, - procedure: { - type: "BIP39Recover", - payload: { - mnemonic, - passphrase, - output: outputLocation, + return await window + .__TAURI_INVOKE__("plugin:stronghold|execute_procedure", { + ...this.procedureArgs, + procedure: { + type: "BIP39Recover", + payload: { + mnemonic, + passphrase, + output: outputLocation, + }, }, - }, - }).then((n) => Uint8Array.from(n)); + }) + .then((n) => Uint8Array.from(n)); } /** @@ -211,16 +221,18 @@ class ProcedureExecutor { outputLocation: Location, passphrase?: string ): Promise { - return await invoke("plugin:stronghold|execute_procedure", { - ...this.procedureArgs, - procedure: { - type: "BIP39Generate", - payload: { - output: outputLocation, - passphrase, + return await window + .__TAURI_INVOKE__("plugin:stronghold|execute_procedure", { + ...this.procedureArgs, + procedure: { + type: "BIP39Generate", + payload: { + output: outputLocation, + passphrase, + }, }, - }, - }).then((n) => Uint8Array.from(n)); + }) + .then((n) => Uint8Array.from(n)); } /** @@ -229,16 +241,18 @@ class ProcedureExecutor { * @returns A promise resolving to the public key hex string. */ async getEd25519PublicKey(privateKeyLocation: Location): Promise { - return await invoke("plugin:stronghold|execute_procedure", { - ...this.procedureArgs, - procedure: { - type: "PublicKey", - payload: { - type: "Ed25519", - privateKey: privateKeyLocation, + return await window + .__TAURI_INVOKE__("plugin:stronghold|execute_procedure", { + ...this.procedureArgs, + procedure: { + type: "PublicKey", + payload: { + type: "Ed25519", + privateKey: privateKeyLocation, + }, }, - }, - }).then((n) => Uint8Array.from(n)); + }) + .then((n) => Uint8Array.from(n)); } /** @@ -251,16 +265,18 @@ class ProcedureExecutor { privateKeyLocation: Location, msg: string ): Promise { - return await invoke("plugin:stronghold|execute_procedure", { - ...this.procedureArgs, - procedure: { - type: "Ed25519Sign", - payload: { - privateKey: privateKeyLocation, - msg, + return await window + .__TAURI_INVOKE__("plugin:stronghold|execute_procedure", { + ...this.procedureArgs, + procedure: { + type: "Ed25519Sign", + payload: { + privateKey: privateKeyLocation, + msg, + }, }, - }, - }).then((n) => Uint8Array.from(n)); + }) + .then((n) => Uint8Array.from(n)); } } @@ -298,11 +314,13 @@ export class Store { } async get(key: StoreKey): Promise { - return await invoke("plugin:stronghold|get_store_record", { - snapshotPath: this.path, - client: this.client, - key: toBytesDto(key), - }).then((v) => Uint8Array.from(v)); + return await window + .__TAURI_INVOKE__("plugin:stronghold|get_store_record", { + snapshotPath: this.path, + client: this.client, + key: toBytesDto(key), + }) + .then((v) => Uint8Array.from(v)); } async insert( @@ -310,24 +328,29 @@ export class Store { value: number[], lifetime?: Duration ): Promise { - return await invoke("plugin:stronghold|save_store_record", { - snapshotPath: this.path, - client: this.client, - key: toBytesDto(key), - value, - lifetime, - }); - } - - async remove(key: StoreKey): Promise { - return await invoke( - "plugin:stronghold|remove_store_record", + return await window.__TAURI_INVOKE__( + "plugin:stronghold|save_store_record", { snapshotPath: this.path, client: this.client, key: toBytesDto(key), + value, + lifetime, } - ).then((v) => (v != null ? Uint8Array.from(v) : null)); + ); + } + + async remove(key: StoreKey): Promise { + return await window + .__TAURI_INVOKE__( + "plugin:stronghold|remove_store_record", + { + snapshotPath: this.path, + client: this.client, + key: toBytesDto(key), + } + ) + .then((v) => (v != null ? Uint8Array.from(v) : null)); } } @@ -362,7 +385,7 @@ export class Vault extends ProcedureExecutor { * @returns */ async insert(recordPath: RecordPath, secret: number[]): Promise { - return await invoke("plugin:stronghold|save_secret", { + return await window.__TAURI_INVOKE__("plugin:stronghold|save_secret", { snapshotPath: this.path, client: this.client, vault: this.name, @@ -378,7 +401,7 @@ export class Vault extends ProcedureExecutor { * @returns */ async remove(location: Location): Promise { - return await invoke("plugin:stronghold|remove_secret", { + return await window.__TAURI_INVOKE__("plugin:stronghold|remove_secret", { snapshotPath: this.path, client: this.client, vault: this.name, @@ -410,7 +433,7 @@ export class Stronghold { * @returns */ private async reload(password: string): Promise { - return await invoke("plugin:stronghold|initialize", { + return await window.__TAURI_INVOKE__("plugin:stronghold|initialize", { snapshotPath: this.path, password, }); @@ -420,23 +443,27 @@ export class Stronghold { * Remove this instance from the cache. */ async unload(): Promise { - return await invoke("plugin:stronghold|destroy", { + return await window.__TAURI_INVOKE__("plugin:stronghold|destroy", { snapshotPath: this.path, }); } async loadClient(client: ClientPath): Promise { - return await invoke("plugin:stronghold|load_client", { - snapshotPath: this.path, - client: toBytesDto(client), - }).then(() => new Client(this.path, client)); + return await window + .__TAURI_INVOKE__("plugin:stronghold|load_client", { + snapshotPath: this.path, + client: toBytesDto(client), + }) + .then(() => new Client(this.path, client)); } async createClient(client: ClientPath): Promise { - return await invoke("plugin:stronghold|create_client", { - snapshotPath: this.path, - client: toBytesDto(client), - }).then(() => new Client(this.path, client)); + return await window + .__TAURI_INVOKE__("plugin:stronghold|create_client", { + snapshotPath: this.path, + client: toBytesDto(client), + }) + .then(() => new Client(this.path, client)); } /** @@ -444,7 +471,7 @@ export class Stronghold { * @returns */ async save(): Promise { - return await invoke("plugin:stronghold|save", { + return await window.__TAURI_INVOKE__("plugin:stronghold|save", { snapshotPath: this.path, }); } diff --git a/plugins/stronghold/src/api-iife.js b/plugins/stronghold/src/api-iife.js new file mode 100644 index 00000000..5fbafd86 --- /dev/null +++ b/plugins/stronghold/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_STRONGHOLD__=function(t){"use strict";function e(t){return"string"==typeof t?t:Array.from(t instanceof ArrayBuffer?new Uint8Array(t):t)}class r{constructor(t,e){this.type=t,this.payload=e}static generic(t,n){return new r("Generic",{vault:e(t),record:e(n)})}static counter(t,n){return new r("Counter",{vault:e(t),counter:n})}}class n{constructor(t){this.procedureArgs=t}async generateSLIP10Seed(t,e){return await window.__TAURI_INVOKE__("plugin:stronghold|execute_procedure",{...this.procedureArgs,procedure:{type:"SLIP10Generate",payload:{output:t,sizeBytes:e}}}).then((t=>Uint8Array.from(t)))}async deriveSLIP10(t,e,r,n){return await window.__TAURI_INVOKE__("plugin:stronghold|execute_procedure",{...this.procedureArgs,procedure:{type:"SLIP10Derive",payload:{chain:t,input:{type:e,payload:r},output:n}}}).then((t=>Uint8Array.from(t)))}async recoverBIP39(t,e,r){return await window.__TAURI_INVOKE__("plugin:stronghold|execute_procedure",{...this.procedureArgs,procedure:{type:"BIP39Recover",payload:{mnemonic:t,passphrase:r,output:e}}}).then((t=>Uint8Array.from(t)))}async generateBIP39(t,e){return await window.__TAURI_INVOKE__("plugin:stronghold|execute_procedure",{...this.procedureArgs,procedure:{type:"BIP39Generate",payload:{output:t,passphrase:e}}}).then((t=>Uint8Array.from(t)))}async getEd25519PublicKey(t){return await window.__TAURI_INVOKE__("plugin:stronghold|execute_procedure",{...this.procedureArgs,procedure:{type:"PublicKey",payload:{type:"Ed25519",privateKey:t}}}).then((t=>Uint8Array.from(t)))}async signEd25519(t,e){return await window.__TAURI_INVOKE__("plugin:stronghold|execute_procedure",{...this.procedureArgs,procedure:{type:"Ed25519Sign",payload:{privateKey:t,msg:e}}}).then((t=>Uint8Array.from(t)))}}class a{constructor(t,r){this.path=t,this.name=e(r)}getVault(t){return new s(this.path,this.name,e(t))}getStore(){return new i(this.path,this.name)}}class i{constructor(t,e){this.path=t,this.client=e}async get(t){return await window.__TAURI_INVOKE__("plugin:stronghold|get_store_record",{snapshotPath:this.path,client:this.client,key:e(t)}).then((t=>Uint8Array.from(t)))}async insert(t,r,n){return await window.__TAURI_INVOKE__("plugin:stronghold|save_store_record",{snapshotPath:this.path,client:this.client,key:e(t),value:r,lifetime:n})}async remove(t){return await window.__TAURI_INVOKE__("plugin:stronghold|remove_store_record",{snapshotPath:this.path,client:this.client,key:e(t)}).then((t=>null!=t?Uint8Array.from(t):null))}}class s extends n{constructor(t,r,n){super({snapshotPath:t,client:r,vault:n}),this.path=t,this.client=e(r),this.name=e(n)}async insert(t,r){return await window.__TAURI_INVOKE__("plugin:stronghold|save_secret",{snapshotPath:this.path,client:this.client,vault:this.name,recordPath:e(t),secret:r})}async remove(t){return await window.__TAURI_INVOKE__("plugin:stronghold|remove_secret",{snapshotPath:this.path,client:this.client,vault:this.name,location:t})}}return t.Client=a,t.Location=r,t.Store=i,t.Stronghold=class{constructor(t,e){this.path=t,this.reload(e)}async reload(t){return await window.__TAURI_INVOKE__("plugin:stronghold|initialize",{snapshotPath:this.path,password:t})}async unload(){return await window.__TAURI_INVOKE__("plugin:stronghold|destroy",{snapshotPath:this.path})}async loadClient(t){return await window.__TAURI_INVOKE__("plugin:stronghold|load_client",{snapshotPath:this.path,client:e(t)}).then((()=>new a(this.path,t)))}async createClient(t){return await window.__TAURI_INVOKE__("plugin:stronghold|create_client",{snapshotPath:this.path,client:e(t)}).then((()=>new a(this.path,t)))}async save(){return await window.__TAURI_INVOKE__("plugin:stronghold|save",{snapshotPath:this.path})}},t.Vault=s,t}({});Object.defineProperty(window.__TAURI__,"stronghold",{value:__TAURI_STRONGHOLD__})} diff --git a/plugins/stronghold/src/lib.rs b/plugins/stronghold/src/lib.rs index 87bedc92..37322cc6 100644 --- a/plugins/stronghold/src/lib.rs +++ b/plugins/stronghold/src/lib.rs @@ -413,6 +413,7 @@ impl Builder { let password_hash_function = self.password_hash_function; PluginBuilder::new("stronghold") + .js_init_script(include_str!("api-iife.js").to_string()) .setup(move |app, _api| { app.manage(StrongholdCollection::default()); app.manage(PasswordHashFunction(password_hash_function)); diff --git a/plugins/updater/guest-js/index.ts b/plugins/updater/guest-js/index.ts index 269b0f18..0124caf8 100644 --- a/plugins/updater/guest-js/index.ts +++ b/plugins/updater/guest-js/index.ts @@ -46,7 +46,9 @@ class Update { if (onEvent != null) { channel.onmessage = onEvent; } - return invoke("plugin:updater|download_and_install", { onEvent: channel }); + return invoke("plugin:updater|download_and_install", { + onEvent: channel, + }); } } diff --git a/plugins/updater/src/api-iife.js b/plugins/updater/src/api-iife.js new file mode 100644 index 00000000..98b55689 --- /dev/null +++ b/plugins/updater/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_UPDATER__=function(e){"use strict";var n=Object.defineProperty,t=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)},r=(e,n,r)=>(t(e,n,"read from private field"),r?r.call(e):n.get(e)),i=(e,n,r,i)=>(t(e,n,"write to private field"),i?i.call(e,r):n.set(e,r),r);function a(e,n=!1){let t=window.crypto.getRandomValues(new Uint32Array(1))[0],r=`_${t}`;return Object.defineProperty(window,r,{value:t=>(n&&Reflect.deleteProperty(window,r),e?.(t)),writable:!1,configurable:!0}),t}((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})({},{Channel:()=>s,PluginListener:()=>l,addPluginListener:()=>c,convertFileSrc:()=>u,invoke:()=>d,transformCallback:()=>a});var o,s=class{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,((e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)})(this,o,(()=>{})),this.id=a((e=>{r(this,o).call(this,e)}))}set onmessage(e){i(this,o,e)}get onmessage(){return r(this,o)}toJSON(){return`__CHANNEL__:${this.id}`}};o=new WeakMap;var l=class{constructor(e,n,t){this.plugin=e,this.event=n,this.channelId=t}async unregister(){return d(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}};async function c(e,n,t){let r=new s;return r.onmessage=t,d(`plugin:${e}|register_listener`,{event:n,handler:r}).then((()=>new l(e,n,r.id)))}async function d(e,n={}){return new Promise(((t,r)=>{let i=a((e=>{t(e),Reflect.deleteProperty(window,`_${o}`)}),!0),o=a((e=>{r(e),Reflect.deleteProperty(window,`_${i}`)}),!0);window.__TAURI_IPC__({cmd:e,callback:i,error:o,...n})}))}function u(e,n="asset"){let t=encodeURIComponent(e);return navigator.userAgent.includes("Windows")?`https://${n}.localhost/${t}`:`${n}://localhost/${t}`}class _{constructor(e){this.response=e}async downloadAndInstall(e){const n=new s;return null!=e&&(n.onmessage=e),d("plugin:updater|download_and_install",{onEvent:n})}}return e.Update=_,e.check=async function(e){return d("plugin:updater|check",{...e}).then((e=>new _(e)))},e}({});Object.defineProperty(window.__TAURI__,"updater",{value:__TAURI_UPDATER__})} diff --git a/plugins/updater/src/lib.rs b/plugins/updater/src/lib.rs index 711fc742..3b511ca4 100644 --- a/plugins/updater/src/lib.rs +++ b/plugins/updater/src/lib.rs @@ -82,6 +82,7 @@ impl Builder { let target = self.target; let installer_args = self.installer_args; PluginBuilder::::new("updater") + .js_init_script(include_str!("api-iife.js").to_string()) .setup(move |app, api| { let mut config = api.config().clone(); if let Some(installer_args) = installer_args { diff --git a/plugins/upload/src/api-iife.js b/plugins/upload/src/api-iife.js new file mode 100644 index 00000000..b42588ae --- /dev/null +++ b/plugins/upload/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_UPLOAD__=function(e){"use strict";var n=Object.defineProperty,t=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)},r=(e,n,r)=>(t(e,n,"read from private field"),r?r.call(e):n.get(e)),o=(e,n,r,o)=>(t(e,n,"write to private field"),o?o.call(e,r):n.set(e,r),r);function a(e,n=!1){let t=window.crypto.getRandomValues(new Uint32Array(1))[0],r=`_${t}`;return Object.defineProperty(window,r,{value:t=>(n&&Reflect.deleteProperty(window,r),e?.(t)),writable:!1,configurable:!0}),t}((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})({},{Channel:()=>l,PluginListener:()=>s,addPluginListener:()=>d,convertFileSrc:()=>u,invoke:()=>c,transformCallback:()=>a});var i,l=class{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,((e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)})(this,i,(()=>{})),this.id=a((e=>{r(this,i).call(this,e)}))}set onmessage(e){o(this,i,e)}get onmessage(){return r(this,i)}toJSON(){return`__CHANNEL__:${this.id}`}};i=new WeakMap;var s=class{constructor(e,n,t){this.plugin=e,this.event=n,this.channelId=t}async unregister(){return c(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}};async function d(e,n,t){let r=new l;return r.onmessage=t,c(`plugin:${e}|register_listener`,{event:n,handler:r}).then((()=>new s(e,n,r.id)))}async function c(e,n={}){return new Promise(((t,r)=>{let o=a((e=>{t(e),Reflect.deleteProperty(window,`_${i}`)}),!0),i=a((e=>{r(e),Reflect.deleteProperty(window,`_${o}`)}),!0);window.__TAURI_IPC__({cmd:e,callback:o,error:i,...n})}))}function u(e,n="asset"){let t=encodeURIComponent(e);return navigator.userAgent.includes("Windows")?`https://${n}.localhost/${t}`:`${n}://localhost/${t}`}async function _(e,n,t,r){const o=new Uint32Array(1);window.crypto.getRandomValues(o);const a=o[0],i=new l;null!=t&&(i.onmessage=t),await c("plugin:upload|upload",{id:a,url:e,filePath:n,headers:null!=r?r:{},onProgress:i})}return e.default=_,e.download=async function(e,n,t,r){const o=new Uint32Array(1);window.crypto.getRandomValues(o);const a=o[0],i=new l;null!=t&&(i.onmessage=t),await c("plugin:upload|download",{id:a,url:e,filePath:n,headers:null!=r?r:{},onProgress:i})},e.upload=_,Object.defineProperty(e,"__esModule",{value:!0}),e}({});Object.defineProperty(window.__TAURI__,"upload",{value:__TAURI_UPLOAD__})} diff --git a/plugins/upload/src/lib.rs b/plugins/upload/src/lib.rs index 0930efd9..698549af 100644 --- a/plugins/upload/src/lib.rs +++ b/plugins/upload/src/lib.rs @@ -115,6 +115,7 @@ fn file_to_body(channel: Channel, file: File) -> reqwest::Body { pub fn init() -> TauriPlugin { PluginBuilder::new("upload") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![download, upload]) .build() } diff --git a/plugins/websocket/guest-js/index.ts b/plugins/websocket/guest-js/index.ts index 5678f7e0..5fd967b4 100644 --- a/plugins/websocket/guest-js/index.ts +++ b/plugins/websocket/guest-js/index.ts @@ -2,7 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + __TAURI__: { + transformCallback: (cb: (payload: T) => void) => number; + }; + } +} export interface MessageKind { type: T; @@ -36,11 +43,13 @@ export default class WebSocket { listeners.forEach((l) => l(message)); }; - return await invoke("plugin:websocket|connect", { - url, - callbackFunction: transformCallback(handler), - options, - }).then((id) => new WebSocket(id, listeners)); + return await window + .__TAURI_INVOKE__("plugin:websocket|connect", { + url, + callbackFunction: window.__TAURI__.transformCallback(handler), + options, + }) + .then((id) => new WebSocket(id, listeners)); } addListener(cb: (arg: Message) => void): void { @@ -60,7 +69,7 @@ export default class WebSocket { "invalid `message` type, expected a `{ type: string, data: any }` object, a string or a numeric array" ); } - return await invoke("plugin:websocket|send", { + return await window.__TAURI_INVOKE__("plugin:websocket|send", { id: this.id, message: m, }); diff --git a/plugins/websocket/src/api-iife.js b/plugins/websocket/src/api-iife.js new file mode 100644 index 00000000..cea3c830 --- /dev/null +++ b/plugins/websocket/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_WEBSOCKET__=function(){"use strict";class e{constructor(e,t){this.id=e,this.listeners=t}static async connect(t,n){const i=[];return await window.__TAURI_INVOKE__("plugin:websocket|connect",{url:t,callbackFunction:window.__TAURI__.transformCallback((e=>{i.forEach((t=>t(e)))})),options:n}).then((t=>new e(t,i)))}addListener(e){this.listeners.push(e)}async send(e){let t;if("string"==typeof e)t={type:"Text",data:e};else if("object"==typeof e&&"type"in e)t=e;else{if(!Array.isArray(e))throw new Error("invalid `message` type, expected a `{ type: string, data: any }` object, a string or a numeric array");t={type:"Binary",data:e}}return await window.__TAURI_INVOKE__("plugin:websocket|send",{id:this.id,message:t})}async disconnect(){return await this.send({type:"Close",data:{code:1e3,reason:"Disconnected by client"}})}}return e}();Object.defineProperty(window.__TAURI__,"websocket",{value:__TAURI_WEBSOCKET__})} diff --git a/plugins/websocket/src/lib.rs b/plugins/websocket/src/lib.rs index 66a0a90e..9f2205f6 100644 --- a/plugins/websocket/src/lib.rs +++ b/plugins/websocket/src/lib.rs @@ -165,6 +165,7 @@ async fn send( pub fn init() -> TauriPlugin { PluginBuilder::new("websocket") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![connect, send]) .setup(|app, _api| { app.manage(ConnectionManager::default()); diff --git a/plugins/window-state/guest-js/index.ts b/plugins/window-state/guest-js/index.ts index 4fed384f..706e3cbf 100644 --- a/plugins/window-state/guest-js/index.ts +++ b/plugins/window-state/guest-js/index.ts @@ -2,7 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} interface WindowDef { label: string; @@ -31,14 +35,17 @@ export enum StateFlags { * Save the state of all open windows to disk. */ async function saveWindowState(flags: StateFlags) { - invoke("plugin:window-state|save_window_state", { flags }); + window.__TAURI_INVOKE__("plugin:window-state|save_window_state", { flags }); } /** * Restore the state for the specified window from disk. */ async function restoreState(label: string, flags: StateFlags) { - invoke("plugin:window-state|restore_state", { label, flags }); + window.__TAURI_INVOKE__("plugin:window-state|restore_state", { + label, + flags, + }); } /** diff --git a/plugins/window-state/src/api-iife.js b/plugins/window-state/src/api-iife.js new file mode 100644 index 00000000..86c310f8 --- /dev/null +++ b/plugins/window-state/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_WINDOWSTATE__=function(_){"use strict";var t;async function e(_,t){window.__TAURI_INVOKE__("plugin:window-state|restore_state",{label:_,flags:t})}return _.StateFlags=void 0,(t=_.StateFlags||(_.StateFlags={}))[t.SIZE=1]="SIZE",t[t.POSITION=2]="POSITION",t[t.MAXIMIZED=4]="MAXIMIZED",t[t.VISIBLE=8]="VISIBLE",t[t.DECORATIONS=16]="DECORATIONS",t[t.FULLSCREEN=32]="FULLSCREEN",t[t.ALL=63]="ALL",_.restoreState=e,_.restoreStateCurrent=async function(_){e(window.__TAURI_METADATA__.__currentWindow.label,_)},_.saveWindowState=async function(_){window.__TAURI_INVOKE__("plugin:window-state|save_window_state",{flags:_})},_}({});Object.defineProperty(window.__TAURI__,"windowState",{value:__TAURI_WINDOWSTATE__})} diff --git a/plugins/window-state/src/lib.rs b/plugins/window-state/src/lib.rs index 32345fee..28e00b35 100644 --- a/plugins/window-state/src/lib.rs +++ b/plugins/window-state/src/lib.rs @@ -282,6 +282,7 @@ impl Builder { pub fn build(self) -> TauriPlugin { let flags = self.state_flags; PluginBuilder::new("window-state") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![ cmd::save_window_state, cmd::restore_state diff --git a/plugins/window/guest-js/event.ts b/plugins/window/guest-js/event.ts index 798b4fb4..9ff16f1d 100644 --- a/plugins/window/guest-js/event.ts +++ b/plugins/window/guest-js/event.ts @@ -2,7 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: MIT -import { invoke, transformCallback } from "@tauri-apps/api/tauri"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + __TAURI__: { + transformCallback: (cb: (payload: T) => void) => number; + }; + } +} export interface Event { /** Event name */ @@ -28,7 +35,7 @@ export type UnlistenFn = () => void; * @returns */ async function _unlisten(event: string, eventId: number): Promise { - await invoke("plugin:event|unlisten", { + await window.__TAURI_INVOKE__("plugin:event|unlisten", { event, eventId, }); @@ -47,7 +54,7 @@ async function emit( windowLabel?: string, payload?: unknown ): Promise { - await invoke("plugin:event|emit", { + await window.__TAURI_INVOKE__("plugin:event|emit", { event, windowLabel, payload, @@ -66,13 +73,15 @@ async function listen( windowLabel: string | null, handler: EventCallback ): Promise { - return invoke("plugin:event|listen", { - event, - windowLabel, - handler: transformCallback(handler), - }).then((eventId) => { - return async () => _unlisten(event, eventId); - }); + return window + .__TAURI_INVOKE__("plugin:event|listen", { + event, + windowLabel, + handler: window.__TAURI__.transformCallback(handler), + }) + .then((eventId) => { + return async () => _unlisten(event, eventId); + }); } /** diff --git a/plugins/window/guest-js/index.ts b/plugins/window/guest-js/index.ts index 038fdc05..2cf7eb8f 100644 --- a/plugins/window/guest-js/index.ts +++ b/plugins/window/guest-js/index.ts @@ -16,7 +16,6 @@ * @module */ -import { invoke } from "@tauri-apps/api/tauri"; import type { Event, EventName, @@ -27,6 +26,12 @@ import { TauriEvent } from "@tauri-apps/api/event"; // TODO: use from @tauri-apps/api v2 import { emit, listen, once } from "./event"; +declare global { + interface Window { + __TAURI_INVOKE__: (cmd: string, args?: unknown) => Promise; + } +} + type Theme = "light" | "dark"; type TitleBarStyle = "visible" | "transparent" | "overlay"; @@ -403,7 +408,7 @@ class WindowManager extends WebviewWindowHandle { * @returns The window's monitor scale factor. * */ async scaleFactor(): Promise { - return invoke("plugin:window|scale_factor", { + return window.__TAURI_INVOKE__("plugin:window|scale_factor", { label: this.label, }); } @@ -419,9 +424,14 @@ class WindowManager extends WebviewWindowHandle { * @returns The window's inner position. * */ async innerPosition(): Promise { - return invoke<{ x: number; y: number }>("plugin:window|inner_position", { - label: this.label, - }).then(({ x, y }) => new PhysicalPosition(x, y)); + return window + .__TAURI_INVOKE__<{ x: number; y: number }>( + "plugin:window|inner_position", + { + label: this.label, + } + ) + .then(({ x, y }) => new PhysicalPosition(x, y)); } /** @@ -435,9 +445,14 @@ class WindowManager extends WebviewWindowHandle { * @returns The window's outer position. * */ async outerPosition(): Promise { - return invoke<{ x: number; y: number }>("plugin:window|outer_position", { - label: this.label, - }).then(({ x, y }) => new PhysicalPosition(x, y)); + return window + .__TAURI_INVOKE__<{ x: number; y: number }>( + "plugin:window|outer_position", + { + label: this.label, + } + ) + .then(({ x, y }) => new PhysicalPosition(x, y)); } /** @@ -452,12 +467,14 @@ class WindowManager extends WebviewWindowHandle { * @returns The window's inner size. */ async innerSize(): Promise { - return invoke<{ width: number; height: number }>( - "plugin:window|inner_size", - { - label: this.label, - } - ).then(({ width, height }) => new PhysicalSize(width, height)); + return window + .__TAURI_INVOKE__<{ width: number; height: number }>( + "plugin:window|inner_size", + { + label: this.label, + } + ) + .then(({ width, height }) => new PhysicalSize(width, height)); } /** @@ -472,12 +489,14 @@ class WindowManager extends WebviewWindowHandle { * @returns The window's outer size. */ async outerSize(): Promise { - return invoke<{ width: number; height: number }>( - "plugin:window|outer_size", - { - label: this.label, - } - ).then(({ width, height }) => new PhysicalSize(width, height)); + return window + .__TAURI_INVOKE__<{ width: number; height: number }>( + "plugin:window|outer_size", + { + label: this.label, + } + ) + .then(({ width, height }) => new PhysicalSize(width, height)); } /** @@ -491,7 +510,7 @@ class WindowManager extends WebviewWindowHandle { * @returns Whether the window is in fullscreen mode or not. * */ async isFullscreen(): Promise { - return invoke("plugin:window|is_fullscreen", { + return window.__TAURI_INVOKE__("plugin:window|is_fullscreen", { label: this.label, }); } @@ -507,7 +526,7 @@ class WindowManager extends WebviewWindowHandle { * @since 1.3.0 * */ async isMinimized(): Promise { - return invoke("plugin:window|is_minimized", { + return window.__TAURI_INVOKE__("plugin:window|is_minimized", { label: this.label, }); } @@ -523,7 +542,7 @@ class WindowManager extends WebviewWindowHandle { * @returns Whether the window is maximized or not. * */ async isMaximized(): Promise { - return invoke("plugin:window|is_maximized", { + return window.__TAURI_INVOKE__("plugin:window|is_maximized", { label: this.label, }); } @@ -539,7 +558,7 @@ class WindowManager extends WebviewWindowHandle { * @returns Whether the window is decorated or not. * */ async isDecorated(): Promise { - return invoke("plugin:window|is_decorated", { + return window.__TAURI_INVOKE__("plugin:window|is_decorated", { label: this.label, }); } @@ -555,7 +574,7 @@ class WindowManager extends WebviewWindowHandle { * @returns Whether the window is resizable or not. * */ async isResizable(): Promise { - return invoke("plugin:window|is_resizable", { + return window.__TAURI_INVOKE__("plugin:window|is_resizable", { label: this.label, }); } @@ -571,7 +590,7 @@ class WindowManager extends WebviewWindowHandle { * @returns Whether the window is visible or not. * */ async isVisible(): Promise { - return invoke("plugin:window|is_visible", { + return window.__TAURI_INVOKE__("plugin:window|is_visible", { label: this.label, }); } @@ -587,7 +606,7 @@ class WindowManager extends WebviewWindowHandle { * @since 1.3.0 * */ async title(): Promise { - return invoke("plugin:window|title", { + return window.__TAURI_INVOKE__("plugin:window|title", { label: this.label, }); } @@ -608,7 +627,7 @@ class WindowManager extends WebviewWindowHandle { * @returns The window theme. * */ async theme(): Promise { - return invoke("plugin:window|theme", { + return window.__TAURI_INVOKE__("plugin:window|theme", { label: this.label, }); } @@ -627,7 +646,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async center(): Promise { - return invoke("plugin:window|center", { + return window.__TAURI_INVOKE__("plugin:window|center", { label: this.label, }); } @@ -665,7 +684,7 @@ class WindowManager extends WebviewWindowHandle { } } - return invoke("plugin:window|request_user_attention", { + return window.__TAURI_INVOKE__("plugin:window|request_user_attention", { label: this.label, value: requestType_, }); @@ -683,7 +702,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setResizable(resizable: boolean): Promise { - return invoke("plugin:window|set_resizable", { + return window.__TAURI_INVOKE__("plugin:window|set_resizable", { label: this.label, value: resizable, }); @@ -701,7 +720,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setTitle(title: string): Promise { - return invoke("plugin:window|set_title", { + return window.__TAURI_INVOKE__("plugin:window|set_title", { label: this.label, value: title, }); @@ -718,7 +737,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async maximize(): Promise { - return invoke("plugin:window|maximize", { + return window.__TAURI_INVOKE__("plugin:window|maximize", { label: this.label, }); } @@ -734,7 +753,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async unmaximize(): Promise { - return invoke("plugin:window|unmaximize", { + return window.__TAURI_INVOKE__("plugin:window|unmaximize", { label: this.label, }); } @@ -750,7 +769,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async toggleMaximize(): Promise { - return invoke("plugin:window|toggle_maximize", { + return window.__TAURI_INVOKE__("plugin:window|toggle_maximize", { label: this.label, }); } @@ -766,7 +785,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async minimize(): Promise { - return invoke("plugin:window|minimize", { + return window.__TAURI_INVOKE__("plugin:window|minimize", { label: this.label, }); } @@ -782,7 +801,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async unminimize(): Promise { - return invoke("plugin:window|unminimize", { + return window.__TAURI_INVOKE__("plugin:window|unminimize", { label: this.label, }); } @@ -798,7 +817,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async show(): Promise { - return invoke("plugin:window|show", { + return window.__TAURI_INVOKE__("plugin:window|show", { label: this.label, }); } @@ -814,7 +833,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async hide(): Promise { - return invoke("plugin:window|hide", { + return window.__TAURI_INVOKE__("plugin:window|hide", { label: this.label, }); } @@ -830,7 +849,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async close(): Promise { - return invoke("plugin:window|close", { + return window.__TAURI_INVOKE__("plugin:window|close", { label: this.label, }); } @@ -847,7 +866,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setDecorations(decorations: boolean): Promise { - return invoke("plugin:window|set_decorations", { + return window.__TAURI_INVOKE__("plugin:window|set_decorations", { label: this.label, value: decorations, }); @@ -875,7 +894,7 @@ class WindowManager extends WebviewWindowHandle { * @since 2.0 */ async setShadow(enable: boolean): Promise { - return invoke("plugin:window|set_shadow", { + return window.__TAURI_INVOKE__("plugin:window|set_shadow", { label: this.label, value: enable, }); @@ -893,7 +912,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setAlwaysOnTop(alwaysOnTop: boolean): Promise { - return invoke("plugin:window|set_always_on_top", { + return window.__TAURI_INVOKE__("plugin:window|set_always_on_top", { label: this.label, value: alwaysOnTop, }); @@ -912,7 +931,7 @@ class WindowManager extends WebviewWindowHandle { * @since 1.2.0 */ async setContentProtected(protected_: boolean): Promise { - return invoke("plugin:window|set_content_protected", { + return window.__TAURI_INVOKE__("plugin:window|set_content_protected", { label: this.label, value: protected_, }); @@ -936,7 +955,7 @@ class WindowManager extends WebviewWindowHandle { ); } - return invoke("plugin:window|set_size", { + return window.__TAURI_INVOKE__("plugin:window|set_size", { label: this.label, value: { type: size.type, @@ -968,7 +987,7 @@ class WindowManager extends WebviewWindowHandle { ); } - return invoke("plugin:window|set_min_size", { + return window.__TAURI_INVOKE__("plugin:window|set_min_size", { label: this.label, value: size ? { @@ -1002,7 +1021,7 @@ class WindowManager extends WebviewWindowHandle { ); } - return invoke("plugin:window|set_max_size", { + return window.__TAURI_INVOKE__("plugin:window|set_max_size", { label: this.label, value: size ? { @@ -1039,7 +1058,7 @@ class WindowManager extends WebviewWindowHandle { ); } - return invoke("plugin:window|set_position", { + return window.__TAURI_INVOKE__("plugin:window|set_position", { label: this.label, value: { type: position.type, @@ -1063,7 +1082,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setFullscreen(fullscreen: boolean): Promise { - return invoke("plugin:window|set_fullscreen", { + return window.__TAURI_INVOKE__("plugin:window|set_fullscreen", { label: this.label, value: fullscreen, }); @@ -1080,7 +1099,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setFocus(): Promise { - return invoke("plugin:window|set_focus", { + return window.__TAURI_INVOKE__("plugin:window|set_focus", { label: this.label, }); } @@ -1104,7 +1123,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setIcon(icon: string | Uint8Array): Promise { - return invoke("plugin:window|set_icon", { + return window.__TAURI_INVOKE__("plugin:window|set_icon", { label: this.label, value: typeof icon === "string" ? icon : Array.from(icon), }); @@ -1126,7 +1145,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setSkipTaskbar(skip: boolean): Promise { - return invoke("plugin:window|set_skip_taskbar", { + return window.__TAURI_INVOKE__("plugin:window|set_skip_taskbar", { label: this.label, value: skip, }); @@ -1152,7 +1171,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setCursorGrab(grab: boolean): Promise { - return invoke("plugin:window|set_cursor_grab", { + return window.__TAURI_INVOKE__("plugin:window|set_cursor_grab", { label: this.label, value: grab, }); @@ -1176,7 +1195,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setCursorVisible(visible: boolean): Promise { - return invoke("plugin:window|set_cursor_visible", { + return window.__TAURI_INVOKE__("plugin:window|set_cursor_visible", { label: this.label, value: visible, }); @@ -1194,7 +1213,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setCursorIcon(icon: CursorIcon): Promise { - return invoke("plugin:window|set_cursor_icon", { + return window.__TAURI_INVOKE__("plugin:window|set_cursor_icon", { label: this.label, value: icon, }); @@ -1223,7 +1242,7 @@ class WindowManager extends WebviewWindowHandle { ); } - return invoke("plugin:window|set_cursor_position", { + return window.__TAURI_INVOKE__("plugin:window|set_cursor_position", { label: this.label, value: { type: position.type, @@ -1248,7 +1267,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise indicating the success or failure of the operation. */ async setIgnoreCursorEvents(ignore: boolean): Promise { - return invoke("plugin:window|set_ignore_cursor_events", { + return window.__TAURI_INVOKE__("plugin:window|set_ignore_cursor_events", { label: this.label, value: ignore, }); @@ -1265,7 +1284,7 @@ class WindowManager extends WebviewWindowHandle { * @return A promise indicating the success or failure of the operation. */ async startDragging(): Promise { - return invoke("plugin:window|start_dragging", { + return window.__TAURI_INVOKE__("plugin:window|start_dragging", { label: this.label, }); } @@ -1622,12 +1641,13 @@ class WebviewWindow extends WindowManager { super(label); // @ts-expect-error `skip` is not a public API so it is not defined in WindowOptions if (!options?.skip) { - invoke("plugin:window|create", { - options: { - ...options, - label, - }, - }) + window + .__TAURI_INVOKE__("plugin:window|create", { + options: { + ...options, + label, + }, + }) .then(async () => this.emit("tauri://created")) .catch(async (e: string) => this.emit("tauri://error", e)); } @@ -1813,9 +1833,9 @@ function mapPhysicalSize(m: PhysicalSize): PhysicalSize { * @since 1.0.0 */ async function currentMonitor(): Promise { - return invoke("plugin:window|current_monitor").then( - mapMonitor - ); + return window + .__TAURI_INVOKE__("plugin:window|current_monitor") + .then(mapMonitor); } /** @@ -1830,9 +1850,9 @@ async function currentMonitor(): Promise { * @since 1.0.0 */ async function primaryMonitor(): Promise { - return invoke("plugin:window|primary_monitor").then( - mapMonitor - ); + return window + .__TAURI_INVOKE__("plugin:window|primary_monitor") + .then(mapMonitor); } /** @@ -1846,9 +1866,9 @@ async function primaryMonitor(): Promise { * @since 1.0.0 */ async function availableMonitors(): Promise { - return invoke("plugin:window|available_monitors").then( - (ms) => ms.map(mapMonitor) as Monitor[] - ); + return window + .__TAURI_INVOKE__("plugin:window|available_monitors") + .then((ms) => ms.map(mapMonitor) as Monitor[]); } export { diff --git a/plugins/window/src/api-iife.js b/plugins/window/src/api-iife.js new file mode 100644 index 00000000..ffa35ae0 --- /dev/null +++ b/plugins/window/src/api-iife.js @@ -0,0 +1 @@ +if("__TAURI__"in window){var __TAURI_WINDOW__=function(e){"use strict";var n=Object.defineProperty,i=(e,i)=>{for(var t in i)n(e,t,{get:i[t],enumerable:!0})},t=(e,n,i)=>{if(!n.has(e))throw TypeError("Cannot "+i)},l=(e,n,i)=>(t(e,n,"read from private field"),i?i.call(e):n.get(e)),a=(e,n,i,l)=>(t(e,n,"write to private field"),l?l.call(e,i):n.set(e,i),i);function s(e,n=!1){let i=window.crypto.getRandomValues(new Uint32Array(1))[0],t=`_${i}`;return Object.defineProperty(window,t,{value:i=>(n&&Reflect.deleteProperty(window,t),e?.(i)),writable:!1,configurable:!0}),i}i({},{Channel:()=>o,PluginListener:()=>_,addPluginListener:()=>w,convertFileSrc:()=>c,invoke:()=>u,transformCallback:()=>s});var r,o=class{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,((e,n,i)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,i)})(this,r,(()=>{})),this.id=s((e=>{l(this,r).call(this,e)}))}set onmessage(e){a(this,r,e)}get onmessage(){return l(this,r)}toJSON(){return`__CHANNEL__:${this.id}`}};r=new WeakMap;var _=class{constructor(e,n,i){this.plugin=e,this.event=n,this.channelId=i}async unregister(){return u(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}};async function w(e,n,i){let t=new o;return t.onmessage=i,u(`plugin:${e}|register_listener`,{event:n,handler:t}).then((()=>new _(e,n,t.id)))}async function u(e,n={}){return new Promise(((i,t)=>{let l=s((e=>{i(e),Reflect.deleteProperty(window,`_${a}`)}),!0),a=s((e=>{t(e),Reflect.deleteProperty(window,`_${l}`)}),!0);window.__TAURI_IPC__({cmd:e,callback:l,error:a,...n})}))}function c(e,n="asset"){let i=encodeURIComponent(e);return navigator.userAgent.includes("Windows")?`https://${n}.localhost/${i}`:`${n}://localhost/${i}`}async function d(e,n){await u("plugin:event|unlisten",{event:e,eventId:n})}async function h(e,n,i){return u("plugin:event|listen",{event:e,windowLabel:n,handler:s(i)}).then((n=>async()=>d(e,n)))}i({},{TauriEvent:()=>I,emit:()=>E,listen:()=>b,once:()=>g});var p,y,I=((p=I||{}).WINDOW_RESIZED="tauri://resize",p.WINDOW_MOVED="tauri://move",p.WINDOW_CLOSE_REQUESTED="tauri://close-requested",p.WINDOW_CREATED="tauri://window-created",p.WINDOW_DESTROYED="tauri://destroyed",p.WINDOW_FOCUS="tauri://focus",p.WINDOW_BLUR="tauri://blur",p.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",p.WINDOW_THEME_CHANGED="tauri://theme-changed",p.WINDOW_FILE_DROP="tauri://file-drop",p.WINDOW_FILE_DROP_HOVER="tauri://file-drop-hover",p.WINDOW_FILE_DROP_CANCELLED="tauri://file-drop-cancelled",p.MENU="tauri://menu",p);async function b(e,n){return h(e,null,n)}async function g(e,n){return async function(e,n,i){return h(e,n,(n=>{i(n),d(e,n.id).catch((()=>{}))}))}(e,null,n)}async function E(e,n){return async function(e,n,i){await u("plugin:event|emit",{event:e,windowLabel:n,payload:i})}(e,void 0,n)}async function A(e,n){await window.__TAURI_INVOKE__("plugin:event|unlisten",{event:e,eventId:n})}async function O(e,n,i){return window.__TAURI_INVOKE__("plugin:event|listen",{event:e,windowLabel:n,handler:window.__TAURI__.transformCallback(i)}).then((n=>async()=>A(e,n)))}class T{constructor(e,n){this.type="Logical",this.width=e,this.height=n}}class R{constructor(e,n){this.type="Physical",this.width=e,this.height=n}toLogical(e){return new T(this.width/e,this.height/e)}}class v{constructor(e,n){this.type="Logical",this.x=e,this.y=n}}class N{constructor(e,n){this.type="Physical",this.x=e,this.y=n}toLogical(e){return new v(this.x/e,this.y/e)}}function m(){return window.__TAURI_METADATA__.__windows.map((e=>new V(e.label,{skip:!0})))}e.UserAttentionType=void 0,(y=e.UserAttentionType||(e.UserAttentionType={}))[y.Critical=1]="Critical",y[y.Informational=2]="Informational";const U=["tauri://created","tauri://error"];class f{constructor(e){this.label=e,this.listeners=Object.create(null)}async listen(e,n){return this._handleTauriEvent(e,n)?Promise.resolve((()=>{const i=this.listeners[e];i.splice(i.indexOf(n),1)})):O(e,this.label,n)}async once(e,n){return this._handleTauriEvent(e,n)?Promise.resolve((()=>{const i=this.listeners[e];i.splice(i.indexOf(n),1)})):async function(e,n,i){return O(e,n,(n=>{i(n),A(e,n.id).catch((()=>{}))}))}(e,this.label,n)}async emit(e,n){if(U.includes(e)){for(const i of this.listeners[e]||[])i({event:e,id:-1,windowLabel:this.label,payload:n});return Promise.resolve()}return async function(e,n,i){await window.__TAURI_INVOKE__("plugin:event|emit",{event:e,windowLabel:n,payload:i})}(e,this.label,n)}_handleTauriEvent(e,n){return!!U.includes(e)&&(e in this.listeners?this.listeners[e].push(n):this.listeners[e]=[n],!0)}}class W extends f{async scaleFactor(){return window.__TAURI_INVOKE__("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return window.__TAURI_INVOKE__("plugin:window|inner_position",{label:this.label}).then((({x:e,y:n})=>new N(e,n)))}async outerPosition(){return window.__TAURI_INVOKE__("plugin:window|outer_position",{label:this.label}).then((({x:e,y:n})=>new N(e,n)))}async innerSize(){return window.__TAURI_INVOKE__("plugin:window|inner_size",{label:this.label}).then((({width:e,height:n})=>new R(e,n)))}async outerSize(){return window.__TAURI_INVOKE__("plugin:window|outer_size",{label:this.label}).then((({width:e,height:n})=>new R(e,n)))}async isFullscreen(){return window.__TAURI_INVOKE__("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return window.__TAURI_INVOKE__("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return window.__TAURI_INVOKE__("plugin:window|is_maximized",{label:this.label})}async isDecorated(){return window.__TAURI_INVOKE__("plugin:window|is_decorated",{label:this.label})}async isResizable(){return window.__TAURI_INVOKE__("plugin:window|is_resizable",{label:this.label})}async isVisible(){return window.__TAURI_INVOKE__("plugin:window|is_visible",{label:this.label})}async title(){return window.__TAURI_INVOKE__("plugin:window|title",{label:this.label})}async theme(){return window.__TAURI_INVOKE__("plugin:window|theme",{label:this.label})}async center(){return window.__TAURI_INVOKE__("plugin:window|center",{label:this.label})}async requestUserAttention(n){let i=null;return n&&(i=n===e.UserAttentionType.Critical?{type:"Critical"}:{type:"Informational"}),window.__TAURI_INVOKE__("plugin:window|request_user_attention",{label:this.label,value:i})}async setResizable(e){return window.__TAURI_INVOKE__("plugin:window|set_resizable",{label:this.label,value:e})}async setTitle(e){return window.__TAURI_INVOKE__("plugin:window|set_title",{label:this.label,value:e})}async maximize(){return window.__TAURI_INVOKE__("plugin:window|maximize",{label:this.label})}async unmaximize(){return window.__TAURI_INVOKE__("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return window.__TAURI_INVOKE__("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return window.__TAURI_INVOKE__("plugin:window|minimize",{label:this.label})}async unminimize(){return window.__TAURI_INVOKE__("plugin:window|unminimize",{label:this.label})}async show(){return window.__TAURI_INVOKE__("plugin:window|show",{label:this.label})}async hide(){return window.__TAURI_INVOKE__("plugin:window|hide",{label:this.label})}async close(){return window.__TAURI_INVOKE__("plugin:window|close",{label:this.label})}async setDecorations(e){return window.__TAURI_INVOKE__("plugin:window|set_decorations",{label:this.label,value:e})}async setShadow(e){return window.__TAURI_INVOKE__("plugin:window|set_shadow",{label:this.label,value:e})}async setAlwaysOnTop(e){return window.__TAURI_INVOKE__("plugin:window|set_always_on_top",{label:this.label,value:e})}async setContentProtected(e){return window.__TAURI_INVOKE__("plugin:window|set_content_protected",{label:this.label,value:e})}async setSize(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return window.__TAURI_INVOKE__("plugin:window|set_size",{label:this.label,value:{type:e.type,data:{width:e.width,height:e.height}}})}async setMinSize(e){if(e&&"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return window.__TAURI_INVOKE__("plugin:window|set_min_size",{label:this.label,value:e?{type:e.type,data:{width:e.width,height:e.height}}:null})}async setMaxSize(e){if(e&&"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return window.__TAURI_INVOKE__("plugin:window|set_max_size",{label:this.label,value:e?{type:e.type,data:{width:e.width,height:e.height}}:null})}async setPosition(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return window.__TAURI_INVOKE__("plugin:window|set_position",{label:this.label,value:{type:e.type,data:{x:e.x,y:e.y}}})}async setFullscreen(e){return window.__TAURI_INVOKE__("plugin:window|set_fullscreen",{label:this.label,value:e})}async setFocus(){return window.__TAURI_INVOKE__("plugin:window|set_focus",{label:this.label})}async setIcon(e){return window.__TAURI_INVOKE__("plugin:window|set_icon",{label:this.label,value:"string"==typeof e?e:Array.from(e)})}async setSkipTaskbar(e){return window.__TAURI_INVOKE__("plugin:window|set_skip_taskbar",{label:this.label,value:e})}async setCursorGrab(e){return window.__TAURI_INVOKE__("plugin:window|set_cursor_grab",{label:this.label,value:e})}async setCursorVisible(e){return window.__TAURI_INVOKE__("plugin:window|set_cursor_visible",{label:this.label,value:e})}async setCursorIcon(e){return window.__TAURI_INVOKE__("plugin:window|set_cursor_icon",{label:this.label,value:e})}async setCursorPosition(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return window.__TAURI_INVOKE__("plugin:window|set_cursor_position",{label:this.label,value:{type:e.type,data:{x:e.x,y:e.y}}})}async setIgnoreCursorEvents(e){return window.__TAURI_INVOKE__("plugin:window|set_ignore_cursor_events",{label:this.label,value:e})}async startDragging(){return window.__TAURI_INVOKE__("plugin:window|start_dragging",{label:this.label})}async onResized(e){return this.listen(I.WINDOW_RESIZED,(n=>{n.payload=C(n.payload),e(n)}))}async onMoved(e){return this.listen(I.WINDOW_MOVED,(n=>{n.payload=P(n.payload),e(n)}))}async onCloseRequested(e){return this.listen(I.WINDOW_CLOSE_REQUESTED,(n=>{const i=new D(n);Promise.resolve(e(i)).then((()=>{if(!i.isPreventDefault())return this.close()}))}))}async onFocusChanged(e){const n=await this.listen(I.WINDOW_FOCUS,(n=>{e({...n,payload:!0})})),i=await this.listen(I.WINDOW_BLUR,(n=>{e({...n,payload:!1})}));return()=>{n(),i()}}async onScaleChanged(e){return this.listen(I.WINDOW_SCALE_FACTOR_CHANGED,e)}async onMenuClicked(e){return this.listen(I.MENU,e)}async onFileDropEvent(e){const n=await this.listen(I.WINDOW_FILE_DROP,(n=>{e({...n,payload:{type:"drop",paths:n.payload}})})),i=await this.listen(I.WINDOW_FILE_DROP_HOVER,(n=>{e({...n,payload:{type:"hover",paths:n.payload}})})),t=await this.listen(I.WINDOW_FILE_DROP_CANCELLED,(n=>{e({...n,payload:{type:"cancel"}})}));return()=>{n(),i(),t()}}async onThemeChanged(e){return this.listen(I.WINDOW_THEME_CHANGED,e)}}class D{constructor(e){this._preventDefault=!1,this.event=e.event,this.windowLabel=e.windowLabel,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}class V extends W{constructor(e,n={}){super(e),(null==n?void 0:n.skip)||window.__TAURI_INVOKE__("plugin:window|create",{options:{...n,label:e}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static getByLabel(e){return m().some((n=>n.label===e))?new V(e,{skip:!0}):null}}function K(e){return null===e?null:{name:e.name,scaleFactor:e.scaleFactor,position:P(e.position),size:C(e.size)}}function P(e){return new N(e.x,e.y)}function C(e){return new R(e.width,e.height)}return e.appWindow=void 0,"__TAURI_METADATA__"in window?e.appWindow=new V(window.__TAURI_METADATA__.__currentWindow.label,{skip:!0}):(console.warn('Could not find "window.__TAURI_METADATA__". The "appWindow" value will reference the "main" window label.\nNote that this is not an issue if running this frontend on a browser instead of a Tauri window.'),e.appWindow=new V("main",{skip:!0})),e.CloseRequestedEvent=D,e.LogicalPosition=v,e.LogicalSize=T,e.PhysicalPosition=N,e.PhysicalSize=R,e.WebviewWindow=V,e.WebviewWindowHandle=f,e.WindowManager=W,e.availableMonitors=async function(){return window.__TAURI_INVOKE__("plugin:window|available_monitors").then((e=>e.map(K)))},e.currentMonitor=async function(){return window.__TAURI_INVOKE__("plugin:window|current_monitor").then(K)},e.getAll=m,e.getCurrent=function(){return new V(window.__TAURI_METADATA__.__currentWindow.label,{skip:!0})},e.primaryMonitor=async function(){return window.__TAURI_INVOKE__("plugin:window|primary_monitor").then(K)},e}({});Object.defineProperty(window.__TAURI__,"window",{value:__TAURI_WINDOW__})} diff --git a/plugins/window/src/lib.rs b/plugins/window/src/lib.rs index e1af0ebd..1efeae15 100644 --- a/plugins/window/src/lib.rs +++ b/plugins/window/src/lib.rs @@ -11,18 +11,20 @@ use tauri::{ mod desktop_commands; pub fn init() -> TauriPlugin { - let mut init_js = String::new(); + let mut init_script = String::new(); // window.print works on Linux/Windows; need to use the API on macOS #[cfg(any(target_os = "macos", target_os = "ios"))] { - init_js.push_str(include_str!("./scripts/print.js")); + init_script.push_str(include_str!("./scripts/print.js")); } - init_js.push_str(include_str!("./scripts/drag.js")); + init_script.push_str(include_str!("./scripts/drag.js")); #[cfg(any(debug_assertions, feature = "devtools"))] - init_js.push_str(include_str!("./scripts/toggle-devtools.js")); + init_script.push_str(include_str!("./scripts/toggle-devtools.js")); + + init_script.push_str(include_str!("api-iife.js")); Builder::new("window") - .js_init_script(init_js) + .js_init_script(init_script) .invoke_handler(|invoke| { #[cfg(desktop)] { diff --git a/shared/rollup.config.mjs b/shared/rollup.config.mjs index 0fec516e..95042f8c 100644 --- a/shared/rollup.config.mjs +++ b/shared/rollup.config.mjs @@ -6,7 +6,7 @@ import { builtinModules } from "module"; import typescript from "@rollup/plugin-typescript"; import resolve from "@rollup/plugin-node-resolve"; -// import terser from "@rollup/plugin-terser"; +import terser from "@rollup/plugin-terser"; /** * Create a base rollup config @@ -15,6 +15,10 @@ import resolve from "@rollup/plugin-node-resolve"; * @returns {import('rollup').RollupOptions} */ export function createConfig({ input = "index.ts", pkg, external = [] }) { + const pluginJsName = pkg.name + .replace("@tauri-apps/plugin-", "") + .replace(/-./g, (x) => x[1].toUpperCase()); + const iifeVarName = `__TAURI_${pluginJsName.toUpperCase()}__`; return [ { input, @@ -51,5 +55,28 @@ export function createConfig({ input = "index.ts", pkg, external = [] }) { typescript({ sourceMap: true }), ], }, + { + input, + output: { + file: "src/api-iife.js", + format: "iife", + name: iifeVarName, + // IIFE is in the format `var ${iifeVarName} = (() => {})()` + // we check if __TAURI__ exists and inject the API object + banner: "if ('__TAURI__' in window) {", + // the last `}` closes the if in the banner + footer: `Object.defineProperty(window.__TAURI__, '${pluginJsName}', { value: ${iifeVarName} }) }`, + }, + // and var is not guaranteed to assign to the global `window` object so we make sure to assign it + plugins: [ + resolve(), + typescript({ + sourceMap: false, + declaration: false, + declarationDir: undefined, + }), + terser(), + ], + }, ]; } diff --git a/shared/template/src/lib.rs b/shared/template/src/lib.rs index 77861b7f..3e0f7618 100644 --- a/shared/template/src/lib.rs +++ b/shared/template/src/lib.rs @@ -39,6 +39,7 @@ impl> crate::{{ plugin_name_pascal_case }}Ext for T /// Initializes the plugin. pub fn init() -> TauriPlugin { Builder::new("{{ plugin_name }}") + .js_init_script(include_str!("api-iife.js").to_string()) .invoke_handler(tauri::generate_handler![commands::execute]) .setup(|app, api| { #[cfg(mobile)] From 5676e7720993a15b30006b61642dbac1f68ecc01 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 23 May 2023 17:36:39 -0700 Subject: [PATCH 42/64] feat: update covector (#393) --- .github/workflows/covector-status.yml | 2 +- .github/workflows/covector-version-or-publish-v2.yml | 2 +- .github/workflows/covector-version-or-publish.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/covector-status.yml b/.github/workflows/covector-status.yml index abe20e35..562dd70a 100644 --- a/.github/workflows/covector-status.yml +++ b/.github/workflows/covector-status.yml @@ -14,7 +14,7 @@ jobs: with: fetch-depth: 0 # required for use of git history - name: covector status - uses: jbolda/covector/packages/action@covector-v0.8 + uses: jbolda/covector/packages/action@covector-v0 id: covector with: command: "status" diff --git a/.github/workflows/covector-version-or-publish-v2.yml b/.github/workflows/covector-version-or-publish-v2.yml index 63b14e97..2b41de66 100644 --- a/.github/workflows/covector-version-or-publish-v2.yml +++ b/.github/workflows/covector-version-or-publish-v2.yml @@ -42,7 +42,7 @@ jobs: git config --global user.email "${{ github.event.pusher.email }}" - name: covector version or publish (publish when no change files present) - uses: jbolda/covector/packages/action@covector-v0.8 + uses: jbolda/covector/packages/action@covector-v0 id: covector env: NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }} diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index f10247e0..e5986443 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -42,7 +42,7 @@ jobs: git config --global user.email "${{ github.event.pusher.email }}" - name: covector version or publish (publish when no change files present) - uses: jbolda/covector/packages/action@covector-v0.8 + uses: jbolda/covector/packages/action@covector-v0 id: covector env: NODE_AUTH_TOKEN: ${{ secrets.ORG_NPM_TOKEN }} From 7e3034904cc990b96e7a3fb519f4e343b710e26b Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 23 May 2023 18:29:57 -0700 Subject: [PATCH 43/64] feat(os): add `locale` API (#391) --- Cargo.lock | 11 +++++++++++ plugins/os/Cargo.toml | 1 + plugins/os/guest-js/index.ts | 19 ++++++++++++++++++- plugins/os/src/api-iife.js | 2 +- plugins/os/src/commands.rs | 5 +++++ plugins/os/src/lib.rs | 8 +++++++- 6 files changed, 43 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 23b0f5f5..a5eef68e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4895,6 +4895,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sys-locale" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea0b9eefabb91675082b41eb94c3ecd91af7656caee3fb4961a07c0ec8c7ca6f" +dependencies = [ + "libc", + "windows-sys 0.45.0", +] + [[package]] name = "system-deps" version = "6.0.4" @@ -5271,6 +5281,7 @@ dependencies = [ "os_info", "serde", "serde_json", + "sys-locale", "tauri", "thiserror", ] diff --git a/plugins/os/Cargo.toml b/plugins/os/Cargo.toml index 3dfc669c..5db78b58 100644 --- a/plugins/os/Cargo.toml +++ b/plugins/os/Cargo.toml @@ -12,3 +12,4 @@ tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } os_info = "3" +sys-locale = "0.3" diff --git a/plugins/os/guest-js/index.ts b/plugins/os/guest-js/index.ts index 9bac01cc..b35813c9 100644 --- a/plugins/os/guest-js/index.ts +++ b/plugins/os/guest-js/index.ts @@ -127,5 +127,22 @@ async function tempdir(): Promise { return window.__TAURI_INVOKE__("plugin:os|tempdir"); } -export { EOL, platform, version, type, arch, tempdir }; +/** + * Returns a String with a `BCP-47` language tag inside. If the locale couldn’t be obtained, `null` is returned instead. + * @example + * ```typescript + * import { locale } from '@tauri-apps/plugin-os'; + * const locale = await locale(); + * if (locale) { + * // use the locale string here + * } + * ``` + * + * @since 2.0.0 + */ +async function locale(): Promise { + return window.__TAURI_INVOKE__("plugin:os|locale"); +} + +export { EOL, platform, version, type, arch, tempdir, locale }; export type { Platform, OsType, Arch }; diff --git a/plugins/os/src/api-iife.js b/plugins/os/src/api-iife.js index 8223ce89..3e754051 100644 --- a/plugins/os/src/api-iife.js +++ b/plugins/os/src/api-iife.js @@ -1 +1 @@ -if("__TAURI__"in window){var __TAURI_OS__=function(n){"use strict";const _=navigator.appVersion.includes("Win")?"\r\n":"\n";return n.EOL=_,n.arch=async function(){return window.__TAURI_INVOKE__("plugin:os|arch")},n.platform=async function(){return window.__TAURI_INVOKE__("plugin:os|platform")},n.tempdir=async function(){return window.__TAURI_INVOKE__("plugin:os|tempdir")},n.type=async function(){return window.__TAURI_INVOKE__("plugin:os|kind")},n.version=async function(){return window.__TAURI_INVOKE__("plugin:os|version")},n}({});Object.defineProperty(window.__TAURI__,"os",{value:__TAURI_OS__})} +if("__TAURI__"in window){var __TAURI_OS__=function(n){"use strict";const _=navigator.appVersion.includes("Win")?"\r\n":"\n";return n.EOL=_,n.arch=async function(){return window.__TAURI_INVOKE__("plugin:os|arch")},n.locale=async function(){return window.__TAURI_INVOKE__("plugin:os|locale")},n.platform=async function(){return window.__TAURI_INVOKE__("plugin:os|platform")},n.tempdir=async function(){return window.__TAURI_INVOKE__("plugin:os|tempdir")},n.type=async function(){return window.__TAURI_INVOKE__("plugin:os|kind")},n.version=async function(){return window.__TAURI_INVOKE__("plugin:os|version")},n}({});Object.defineProperty(window.__TAURI__,"os",{value:__TAURI_OS__})} diff --git a/plugins/os/src/commands.rs b/plugins/os/src/commands.rs index 314d10df..668fa82a 100644 --- a/plugins/os/src/commands.rs +++ b/plugins/os/src/commands.rs @@ -28,3 +28,8 @@ pub fn arch() -> &'static str { pub fn tempdir() -> PathBuf { crate::tempdir() } + +#[tauri::command] +pub fn locale() -> Option { + crate::locale() +} diff --git a/plugins/os/src/lib.rs b/plugins/os/src/lib.rs index 488107a4..4060c679 100644 --- a/plugins/os/src/lib.rs +++ b/plugins/os/src/lib.rs @@ -68,6 +68,11 @@ pub fn tempdir() -> PathBuf { std::env::temp_dir() } +/// Returns the locale with the `BCP-47` language tag. If the locale couldn’t be obtained, `None` is returned instead. +pub fn locale() -> Option { + sys_locale::get_locale() +} + pub fn init() -> TauriPlugin { Builder::new("os") .js_init_script(include_str!("api-iife.js").to_string()) @@ -76,7 +81,8 @@ pub fn init() -> TauriPlugin { commands::version, commands::kind, commands::arch, - commands::tempdir + commands::tempdir, + commands::locale ]) .build() } From 9bf98f68e704ed6ad955a5aafb56690cd36d7370 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 23 May 2023 19:44:05 -0700 Subject: [PATCH 44/64] chore(api): update @since tag to 2.0.0 (#395) --- plugins/app/guest-js/index.ts | 10 +- plugins/cli/guest-js/index.ts | 8 +- plugins/clipboard/guest-js/index.ts | 4 +- plugins/dialog/guest-js/index.ts | 18 +-- plugins/fs/guest-js/index.ts | 42 +++---- plugins/global-shortcut/guest-js/index.ts | 10 +- plugins/http/guest-js/index.ts | 26 ++-- plugins/notification/guest-js/index.ts | 8 +- plugins/os/guest-js/index.ts | 12 +- plugins/process/guest-js/index.ts | 4 +- plugins/shell/guest-js/index.ts | 44 ++++--- plugins/store/guest-js/index.ts | 4 + plugins/stronghold/guest-js/index.ts | 4 + plugins/window/guest-js/index.ts | 146 +++++++++++++++++----- 14 files changed, 227 insertions(+), 113 deletions(-) diff --git a/plugins/app/guest-js/index.ts b/plugins/app/guest-js/index.ts index 111a7ef7..b2420ad7 100644 --- a/plugins/app/guest-js/index.ts +++ b/plugins/app/guest-js/index.ts @@ -22,7 +22,7 @@ declare global { * const appVersion = await getVersion(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function getVersion(): Promise { return window.__TAURI_INVOKE__("plugin:app|version"); @@ -36,7 +36,7 @@ async function getVersion(): Promise { * const appName = await getName(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function getName(): Promise { return window.__TAURI_INVOKE__("plugin:app|name"); @@ -51,7 +51,7 @@ async function getName(): Promise { * const tauriVersion = await getTauriVersion(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function getTauriVersion(): Promise { return window.__TAURI_INVOKE__("plugin:app|tauri_version"); @@ -66,7 +66,7 @@ async function getTauriVersion(): Promise { * await show(); * ``` * - * @since 1.2.0 + * @since 2.0.0 */ async function show(): Promise { return window.__TAURI_INVOKE__("plugin:app|show"); @@ -81,7 +81,7 @@ async function show(): Promise { * await hide(); * ``` * - * @since 1.2.0 + * @since 2.0.0 */ async function hide(): Promise { return window.__TAURI_INVOKE__("plugin:app|hide"); diff --git a/plugins/cli/guest-js/index.ts b/plugins/cli/guest-js/index.ts index ea6ce67a..87c1a97e 100644 --- a/plugins/cli/guest-js/index.ts +++ b/plugins/cli/guest-js/index.ts @@ -15,7 +15,7 @@ declare global { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface ArgMatch { /** @@ -31,7 +31,7 @@ interface ArgMatch { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface SubcommandMatch { name: string; @@ -39,7 +39,7 @@ interface SubcommandMatch { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface CliMatches { args: Record; @@ -65,7 +65,7 @@ interface CliMatches { * } * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function getMatches(): Promise { return await window.__TAURI_INVOKE__("plugin:cli|cli_matches"); diff --git a/plugins/clipboard/guest-js/index.ts b/plugins/clipboard/guest-js/index.ts index 495371bc..fb8b38e1 100644 --- a/plugins/clipboard/guest-js/index.ts +++ b/plugins/clipboard/guest-js/index.ts @@ -32,7 +32,7 @@ type ClipResponse = Clip<"PlainText", string>; * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0. + * @since 2.0.0 */ async function writeText( text: string, @@ -56,7 +56,7 @@ async function writeText( * import { readText } from '@tauri-apps/plugin-clipboard'; * const clipboardText = await readText(); * ``` - * @since 1.0.0. + * @since 2.0.0 */ async function readText(): Promise { const kind: ClipResponse = await window.__TAURI_INVOKE__( diff --git a/plugins/dialog/guest-js/index.ts b/plugins/dialog/guest-js/index.ts index 5300b7cc..de74217f 100644 --- a/plugins/dialog/guest-js/index.ts +++ b/plugins/dialog/guest-js/index.ts @@ -23,7 +23,7 @@ interface FileResponse { /** * Extension filters for the file dialog. * - * @since 1.0.0 + * @since 2.0.0 */ interface DialogFilter { /** Filter name. */ @@ -41,7 +41,7 @@ interface DialogFilter { /** * Options for the open dialog. * - * @since 1.0.0 + * @since 2.0.0 */ interface OpenDialogOptions { /** The title of the dialog window. */ @@ -64,7 +64,7 @@ interface OpenDialogOptions { /** * Options for the save dialog. * - * @since 1.0.0 + * @since 2.0.0 */ interface SaveDialogOptions { /** The title of the dialog window. */ @@ -80,7 +80,7 @@ interface SaveDialogOptions { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface MessageDialogOptions { /** The title of the dialog. Defaults to the app name. */ @@ -164,7 +164,7 @@ async function open( * * @returns A promise resolving to the selected path(s) * - * @since 1.0.0 + * @since 2.0.0 */ async function open( options: OpenDialogOptions = {} @@ -198,7 +198,7 @@ async function open( * * @returns A promise resolving to the selected path. * - * @since 1.0.0 + * @since 2.0.0 */ async function save(options: SaveDialogOptions = {}): Promise { if (typeof options === "object") { @@ -222,7 +222,7 @@ async function save(options: SaveDialogOptions = {}): Promise { * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 * */ async function message( @@ -252,7 +252,7 @@ async function message( * * @returns A promise resolving to a boolean indicating whether `Yes` was clicked or not. * - * @since 1.0.0 + * @since 2.0.0 */ async function ask( message: string, @@ -282,7 +282,7 @@ async function ask( * * @returns A promise resolving to a boolean indicating whether `Ok` was clicked or not. * - * @since 1.0.0 + * @since 2.0.0 */ async function confirm( message: string, diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts index 2d1ecf37..af4d2e84 100644 --- a/plugins/fs/guest-js/index.ts +++ b/plugins/fs/guest-js/index.ts @@ -161,7 +161,7 @@ interface BackendMetadata { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface FsOptions { dir?: BaseDirectory; @@ -169,7 +169,7 @@ interface FsOptions { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface FsDirOptions { dir?: BaseDirectory; @@ -179,7 +179,7 @@ interface FsDirOptions { /** * Options object used to write a UTF-8 string to a file. * - * @since 1.0.0 + * @since 2.0.0 */ interface FsTextFileOption { /** Path to the file to write. */ @@ -193,7 +193,7 @@ type BinaryFileContents = Iterable | ArrayLike | ArrayBuffer; /** * Options object used to write a binary data to a file. * - * @since 1.0.0 + * @since 2.0.0 */ interface FsBinaryFileOption { /** Path to the file to write. */ @@ -203,7 +203,7 @@ interface FsBinaryFileOption { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface FileEntry { path: string; @@ -225,7 +225,7 @@ interface FileEntry { * const contents = await readTextFile('app.conf', { dir: BaseDirectory.AppConfig }); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function readTextFile( filePath: string, @@ -246,7 +246,7 @@ async function readTextFile( * const contents = await readBinaryFile('avatar.png', { dir: BaseDirectory.Resource }); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function readBinaryFile( filePath: string, @@ -269,7 +269,7 @@ async function readBinaryFile( * await writeTextFile('app.conf', 'file contents', { dir: BaseDirectory.AppConfig }); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function writeTextFile( path: string, @@ -287,7 +287,7 @@ async function writeTextFile( * ``` * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function writeTextFile( file: FsTextFileOption, @@ -299,7 +299,7 @@ async function writeTextFile( * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function writeTextFile( path: string | FsTextFileOption, @@ -347,7 +347,7 @@ async function writeTextFile( * @param options Configuration object. * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function writeBinaryFile( path: string, @@ -368,7 +368,7 @@ async function writeBinaryFile( * @param options Configuration object. * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function writeBinaryFile( file: FsBinaryFileOption, @@ -380,7 +380,7 @@ async function writeBinaryFile( * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function writeBinaryFile( path: string | FsBinaryFileOption, @@ -439,7 +439,7 @@ async function writeBinaryFile( * } * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function readDir( dir: string, @@ -464,7 +464,7 @@ async function readDir( * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function createDir( dir: string, @@ -488,7 +488,7 @@ async function createDir( * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function removeDir( dir: string, @@ -511,7 +511,7 @@ async function removeDir( * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function copyFile( source: string, @@ -536,7 +536,7 @@ async function copyFile( * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function removeFile( file: string, @@ -559,7 +559,7 @@ async function removeFile( * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function renameFile( oldPath: string, @@ -582,7 +582,7 @@ async function renameFile( * await exists('avatar.png', { dir: BaseDirectory.AppData }); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function exists(path: string): Promise { return await window.__TAURI_INVOKE__("plugin:fs|exists", { path }); @@ -591,7 +591,7 @@ async function exists(path: string): Promise { /** * Returns the metadata for the given path. * - * @since 1.0.0 + * @since 2.0.0 */ async function metadata(path: string): Promise { return await window diff --git a/plugins/global-shortcut/guest-js/index.ts b/plugins/global-shortcut/guest-js/index.ts index 4c1c02c8..16ef0055 100644 --- a/plugins/global-shortcut/guest-js/index.ts +++ b/plugins/global-shortcut/guest-js/index.ts @@ -32,7 +32,7 @@ export type ShortcutHandler = (shortcut: string) => void; * @param shortcut Shortcut definition, modifiers and key separated by "+" e.g. CmdOrControl+Q * @param handler Shortcut handler callback - takes the triggered shortcut as argument * - * @since 1.0.0 + * @since 2.0.0 */ async function register( shortcut: string, @@ -57,7 +57,7 @@ async function register( * @param shortcuts Array of shortcut definitions, modifiers and key separated by "+" e.g. CmdOrControl+Q * @param handler Shortcut handler callback - takes the triggered shortcut as argument * - * @since 1.0.0 + * @since 2.0.0 */ async function registerAll( shortcuts: string[], @@ -82,7 +82,7 @@ async function registerAll( * * @param shortcut shortcut definition, modifiers and key separated by "+" e.g. CmdOrControl+Q * - * @since 1.0.0 + * @since 2.0.0 */ async function isRegistered(shortcut: string): Promise { return await window.__TAURI_INVOKE__("plugin:globalShortcut|is_registered", { @@ -100,7 +100,7 @@ async function isRegistered(shortcut: string): Promise { * * @param shortcut shortcut definition, modifiers and key separated by "+" e.g. CmdOrControl+Q * - * @since 1.0.0 + * @since 2.0.0 */ async function unregister(shortcut: string): Promise { return await window.__TAURI_INVOKE__("plugin:globalShortcut|unregister", { @@ -116,7 +116,7 @@ async function unregister(shortcut: string): Promise { * await unregisterAll(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function unregisterAll(): Promise { return await window.__TAURI_INVOKE__("plugin:globalShortcut|unregister_all"); diff --git a/plugins/http/guest-js/index.ts b/plugins/http/guest-js/index.ts index 9cc07ac1..60378402 100644 --- a/plugins/http/guest-js/index.ts +++ b/plugins/http/guest-js/index.ts @@ -31,7 +31,7 @@ declare global { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface Duration { secs: number; @@ -39,7 +39,7 @@ interface Duration { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface ClientOptions { /** @@ -51,7 +51,7 @@ interface ClientOptions { } /** - * @since 1.0.0 + * @since 2.0.0 */ enum ResponseType { JSON = 1, @@ -60,7 +60,7 @@ enum ResponseType { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface FilePart { file: string | T; @@ -73,7 +73,7 @@ type Part = string | Uint8Array | FilePart; /** * The body object to be used on POST and PUT requests. * - * @since 1.0.0 + * @since 2.0.0 */ class Body { type: string; @@ -115,6 +115,8 @@ class Body { * @param data The body data. * * @returns The body object ready to be used on the POST and PUT requests. + * + * @since 2.0.0 */ static form(data: Record | FormData): Body { const form: Record> = {}; @@ -166,6 +168,8 @@ class Body { * @param data The body JSON object. * * @returns The body object ready to be used on the POST and PUT requests. + * + * @since 2.0.0 */ static json(data: Record): Body { return new Body("Json", data); @@ -182,6 +186,8 @@ class Body { * @param value The body string. * * @returns The body object ready to be used on the POST and PUT requests. + * + * @since 2.0.0 */ static text(value: string): Body { return new Body("Text", value); @@ -198,6 +204,8 @@ class Body { * @param bytes The body byte array. * * @returns The body object ready to be used on the POST and PUT requests. + * + * @since 2.0.0 */ static bytes( bytes: Iterable | ArrayLike | ArrayBuffer @@ -225,7 +233,7 @@ type HttpVerb = /** * Options object sent to the backend. * - * @since 1.0.0 + * @since 2.0.0 */ interface HttpOptions { method: HttpVerb; @@ -254,7 +262,7 @@ interface IResponse { /** * Response object. * - * @since 1.0.0 + * @since 2.0.0 * */ class Response { /** The request URL. */ @@ -282,7 +290,7 @@ class Response { } /** - * @since 1.0.0 + * @since 2.0.0 */ class Client { id: number; @@ -481,7 +489,7 @@ class Client { * * @returns A promise resolving to the client instance. * - * @since 1.0.0 + * @since 2.0.0 */ async function getClient(options?: ClientOptions): Promise { return window diff --git a/plugins/notification/guest-js/index.ts b/plugins/notification/guest-js/index.ts index ee157ecc..7de70375 100644 --- a/plugins/notification/guest-js/index.ts +++ b/plugins/notification/guest-js/index.ts @@ -18,7 +18,7 @@ import { /** * Options to send a notification. * - * @since 1.0.0 + * @since 2.0.0 */ interface Options { /** @@ -300,7 +300,7 @@ type Permission = "granted" | "denied" | "default"; * const permissionGranted = await isPermissionGranted(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function isPermissionGranted(): Promise { if (window.Notification.permission !== "default") { @@ -323,7 +323,7 @@ async function isPermissionGranted(): Promise { * * @returns A promise resolving to whether the user granted the permission or not. * - * @since 1.0.0 + * @since 2.0.0 */ async function requestPermission(): Promise { return window.Notification.requestPermission(); @@ -345,7 +345,7 @@ async function requestPermission(): Promise { * } * ``` * - * @since 1.0.0 + * @since 2.0.0 */ function sendNotification(options: Options | string): void { if (typeof options === "string") { diff --git a/plugins/os/guest-js/index.ts b/plugins/os/guest-js/index.ts index b35813c9..2b4806b2 100644 --- a/plugins/os/guest-js/index.ts +++ b/plugins/os/guest-js/index.ts @@ -50,7 +50,7 @@ function isWindows(): boolean { * - `\n` on POSIX * - `\r\n` on Windows * - * @since 1.0.0 + * @since 2.0.0 * */ const EOL = isWindows() ? "\r\n" : "\n"; @@ -63,7 +63,7 @@ const EOL = isWindows() ? "\r\n" : "\n"; * const platformName = await platform(); * ``` * - * @since 1.0.0 + * @since 2.0.0 * */ async function platform(): Promise { @@ -78,7 +78,7 @@ async function platform(): Promise { * const osVersion = await version(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function version(): Promise { return window.__TAURI_INVOKE__("plugin:os|version"); @@ -92,7 +92,7 @@ async function version(): Promise { * const osType = await type(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function type(): Promise { return window.__TAURI_INVOKE__("plugin:os|kind"); @@ -107,7 +107,7 @@ async function type(): Promise { * const archName = await arch(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function arch(): Promise { return window.__TAURI_INVOKE__("plugin:os|arch"); @@ -121,7 +121,7 @@ async function arch(): Promise { * const tempdirPath = await tempdir(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function tempdir(): Promise { return window.__TAURI_INVOKE__("plugin:os|tempdir"); diff --git a/plugins/process/guest-js/index.ts b/plugins/process/guest-js/index.ts index b66ad837..853e0d29 100644 --- a/plugins/process/guest-js/index.ts +++ b/plugins/process/guest-js/index.ts @@ -24,7 +24,7 @@ declare global { * @param code The exit code to use. * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function exit(code = 0): Promise { return window.__TAURI_INVOKE__("plugin:process|exit", { code }); @@ -40,7 +40,7 @@ async function exit(code = 0): Promise { * * @returns A promise indicating the success or failure of the operation. * - * @since 1.0.0 + * @since 2.0.0 */ async function relaunch(): Promise { return window.__TAURI_INVOKE__("plugin:process|restart"); diff --git a/plugins/shell/guest-js/index.ts b/plugins/shell/guest-js/index.ts index da964f9d..32c34f6e 100644 --- a/plugins/shell/guest-js/index.ts +++ b/plugins/shell/guest-js/index.ts @@ -72,7 +72,7 @@ declare global { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface SpawnOptions { /** Current working directory. */ @@ -82,7 +82,7 @@ interface SpawnOptions { /** * Character encoding for stdout/stderr * - * @since 1.1.0 + * @since 2.0.0 * */ encoding?: string; } @@ -93,7 +93,7 @@ interface InternalSpawnOptions extends SpawnOptions { } /** - * @since 1.0.0 + * @since 2.0.0 */ interface ChildProcess { /** Exit code of the process. `null` if the process was terminated by a signal on Unix. */ @@ -115,6 +115,8 @@ interface ChildProcess { * @param args Program arguments. * @param options Configuration for the process spawn. * @returns A promise resolving to the process id. + * + * @since 2.0.0 */ async function execute( onEvent: (event: CommandEvent) => void, @@ -135,7 +137,7 @@ async function execute( } /** - * @since 1.0.0 + * @since 2.0.0 */ // eslint-disable-next-line @typescript-eslint/no-explicit-any class EventEmitter> { @@ -147,7 +149,7 @@ class EventEmitter> { /** * Alias for `emitter.on(eventName, listener)`. * - * @since 1.1.0 + * @since 2.0.0 */ addListener( eventName: N, @@ -159,7 +161,7 @@ class EventEmitter> { /** * Alias for `emitter.off(eventName, listener)`. * - * @since 1.1.0 + * @since 2.0.0 */ removeListener( eventName: N, @@ -176,7 +178,7 @@ class EventEmitter> { * * Returns a reference to the `EventEmitter`, so that calls can be chained. * - * @since 1.0.0 + * @since 2.0.0 */ on( eventName: N, @@ -198,7 +200,7 @@ class EventEmitter> { * * Returns a reference to the `EventEmitter`, so that calls can be chained. * - * @since 1.1.0 + * @since 2.0.0 */ once( eventName: N, @@ -216,7 +218,7 @@ class EventEmitter> { * Removes the all specified listener from the listener array for the event eventName * Returns a reference to the `EventEmitter`, so that calls can be chained. * - * @since 1.1.0 + * @since 2.0.0 */ off( eventName: N, @@ -236,7 +238,7 @@ class EventEmitter> { * * Returns a reference to the `EventEmitter`, so that calls can be chained. * - * @since 1.1.0 + * @since 2.0.0 */ removeAllListeners(event?: N): this { if (event) { @@ -255,6 +257,8 @@ class EventEmitter> { * to each. * * @returns `true` if the event had listeners, `false` otherwise. + * + * @since 2.0.0 */ emit(eventName: N, arg: E[typeof eventName]): boolean { if (eventName in this.eventListeners) { @@ -270,7 +274,7 @@ class EventEmitter> { /** * Returns the number of listeners listening to the event named `eventName`. * - * @since 1.1.0 + * @since 2.0.0 */ listenerCount(eventName: N): number { if (eventName in this.eventListeners) @@ -287,7 +291,7 @@ class EventEmitter> { * * Returns a reference to the `EventEmitter`, so that calls can be chained. * - * @since 1.1.0 + * @since 2.0.0 */ prependListener( eventName: N, @@ -309,7 +313,7 @@ class EventEmitter> { * * Returns a reference to the `EventEmitter`, so that calls can be chained. * - * @since 1.1.0 + * @since 2.0.0 */ prependOnceListener( eventName: N, @@ -326,7 +330,7 @@ class EventEmitter> { } /** - * @since 1.1.0 + * @since 2.0.0 */ class Child { /** The child process `pid`. */ @@ -350,6 +354,8 @@ class Child { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async write(data: IOPayload): Promise { return window.__TAURI_INVOKE__("plugin:shell|stdin_write", { @@ -363,6 +369,8 @@ class Child { * Kills the child process. * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async kill(): Promise { return window.__TAURI_INVOKE__("plugin:shell|kill", { @@ -399,7 +407,7 @@ interface OutputEvents { * console.log('pid:', child.pid); * ``` * - * @since 1.1.0 + * @since 2.0.0 * */ class Command extends EventEmitter { @@ -504,6 +512,8 @@ class Command extends EventEmitter { * Executes the command as a child process, returning a handle to it. * * @returns A promise resolving to the child process handle. + * + * @since 2.0.0 */ async spawn(): Promise { return execute( @@ -542,6 +552,8 @@ class Command extends EventEmitter { * ``` * * @returns A promise resolving to the child process output. + * + * @since 2.0.0 */ async execute(): Promise> { return new Promise((resolve, reject) => { @@ -633,7 +645,7 @@ type CommandEvent = * @param openWith The app to open the file or URL with. * Defaults to the system default application for the specified path type. * - * @since 1.0.0 + * @since 2.0.0 */ async function open(path: string, openWith?: string): Promise { return window.__TAURI_INVOKE__("plugin:shell|open", { diff --git a/plugins/store/guest-js/index.ts b/plugins/store/guest-js/index.ts index 49c452ca..4df455f8 100644 --- a/plugins/store/guest-js/index.ts +++ b/plugins/store/guest-js/index.ts @@ -179,6 +179,8 @@ export class Store { * @param key * @param cb * @returns A promise resolving to a function to unlisten to the event. + * + * @since 2.0.0 */ async onKeyChange( key: string, @@ -195,6 +197,8 @@ export class Store { * Listen to changes on the store. * @param cb * @returns A promise resolving to a function to unlisten to the event. + * + * @since 2.0.0 */ async onChange( cb: (key: string, value: T | null) => void diff --git a/plugins/stronghold/guest-js/index.ts b/plugins/stronghold/guest-js/index.ts index 568a281b..1a87a4b0 100644 --- a/plugins/stronghold/guest-js/index.ts +++ b/plugins/stronghold/guest-js/index.ts @@ -239,6 +239,8 @@ class ProcedureExecutor { * Gets the Ed25519 public key of a SLIP10 private key. * @param privateKeyLocation The location of the private key. Must be the `outputLocation` of a previous call to `deriveSLIP10`. * @returns A promise resolving to the public key hex string. + * + * @since 2.0.0 */ async getEd25519PublicKey(privateKeyLocation: Location): Promise { return await window @@ -260,6 +262,8 @@ class ProcedureExecutor { * @param privateKeyLocation The location of the record where the private key is stored. Must be the `outputLocation` of a previous call to `deriveSLIP10`. * @param msg The message to sign. * @returns A promise resolving to the signature hex string. + * + * @since 2.0.0 */ async signEd25519( privateKeyLocation: Location, diff --git a/plugins/window/guest-js/index.ts b/plugins/window/guest-js/index.ts index 2cf7eb8f..4b88f194 100644 --- a/plugins/window/guest-js/index.ts +++ b/plugins/window/guest-js/index.ts @@ -38,7 +38,7 @@ type TitleBarStyle = "visible" | "transparent" | "overlay"; /** * Allows you to retrieve information about a given monitor. * - * @since 1.0.0 + * @since 2.0.0 */ interface Monitor { /** Human-readable name of the monitor */ @@ -54,7 +54,7 @@ interface Monitor { /** * The payload for the `scaleChange` event. * - * @since 1.0.2 + * @since 2.0.0 */ interface ScaleFactorChanged { /** The new window scale factor. */ @@ -72,7 +72,7 @@ type FileDropEvent = /** * A size represented in logical pixels. * - * @since 1.0.0 + * @since 2.0.0 */ class LogicalSize { type = "Logical"; @@ -88,7 +88,7 @@ class LogicalSize { /** * A size represented in physical pixels. * - * @since 1.0.0 + * @since 2.0.0 */ class PhysicalSize { type = "Physical"; @@ -118,7 +118,7 @@ class PhysicalSize { /** * A position represented in logical pixels. * - * @since 1.0.0 + * @since 2.0.0 */ class LogicalPosition { type = "Logical"; @@ -134,7 +134,7 @@ class LogicalPosition { /** * A position represented in physical pixels. * - * @since 1.0.0 + * @since 2.0.0 */ class PhysicalPosition { type = "Physical"; @@ -179,7 +179,7 @@ declare global { /** * Attention type to request on a window. * - * @since 1.0.0 + * @since 2.0.0 */ enum UserAttentionType { /** @@ -240,7 +240,7 @@ export type CursorIcon = /** * Get an instance of `WebviewWindow` for the current webview window. * - * @since 1.0.0 + * @since 2.0.0 */ function getCurrent(): WebviewWindow { return new WebviewWindow(window.__TAURI_METADATA__.__currentWindow.label, { @@ -252,7 +252,7 @@ function getCurrent(): WebviewWindow { /** * Gets a list of instances of `WebviewWindow` for all available webview windows. * - * @since 1.0.0 + * @since 2.0.0 */ function getAll(): WebviewWindow[] { return window.__TAURI_METADATA__.__windows.map( @@ -273,7 +273,7 @@ export type WindowLabel = string; * A webview window handle allows emitting and listening to events from the backend that are tied to the window. * * @ignore - * @since 1.0.0 + * @since 2.0.0 */ class WebviewWindowHandle { /** The window label. It is a unique identifier for the window, can be used to reference it later. */ @@ -306,6 +306,8 @@ class WebviewWindowHandle { * @param handler Event handler. * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 2.0.0 */ async listen( event: EventName, @@ -339,6 +341,8 @@ class WebviewWindowHandle { * @param handler Event handler. * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. + * + * @since 2.0.0 */ async once(event: string, handler: EventCallback): Promise { if (this._handleTauriEvent(event, handler)) { @@ -393,7 +397,7 @@ class WebviewWindowHandle { * Manage the current window object. * * @ignore - * @since 1.0.0 + * @since 2.0.0 */ class WindowManager extends WebviewWindowHandle { // Getters @@ -406,6 +410,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns The window's monitor scale factor. + * + * @since 2.0.0 * */ async scaleFactor(): Promise { return window.__TAURI_INVOKE__("plugin:window|scale_factor", { @@ -422,6 +428,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns The window's inner position. + * + * @since 2.0.0 * */ async innerPosition(): Promise { return window @@ -443,6 +451,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns The window's outer position. + * + * @since 2.0.0 * */ async outerPosition(): Promise { return window @@ -465,6 +475,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns The window's inner size. + * + * @since 2.0.0 */ async innerSize(): Promise { return window @@ -487,6 +499,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns The window's outer size. + * + * @since 2.0.0 */ async outerSize(): Promise { return window @@ -508,6 +522,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns Whether the window is in fullscreen mode or not. + * + * @since 2.0.0 * */ async isFullscreen(): Promise { return window.__TAURI_INVOKE__("plugin:window|is_fullscreen", { @@ -523,7 +539,7 @@ class WindowManager extends WebviewWindowHandle { * const minimized = await appWindow.isMinimized(); * ``` * - * @since 1.3.0 + * @since 2.0.0 * */ async isMinimized(): Promise { return window.__TAURI_INVOKE__("plugin:window|is_minimized", { @@ -540,6 +556,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns Whether the window is maximized or not. + * + * @since 2.0.0 * */ async isMaximized(): Promise { return window.__TAURI_INVOKE__("plugin:window|is_maximized", { @@ -556,6 +574,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns Whether the window is decorated or not. + * + * @since 2.0.0 * */ async isDecorated(): Promise { return window.__TAURI_INVOKE__("plugin:window|is_decorated", { @@ -572,6 +592,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns Whether the window is resizable or not. + * + * @since 2.0.0 * */ async isResizable(): Promise { return window.__TAURI_INVOKE__("plugin:window|is_resizable", { @@ -588,6 +610,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns Whether the window is visible or not. + * + * @since 2.0.0 * */ async isVisible(): Promise { return window.__TAURI_INVOKE__("plugin:window|is_visible", { @@ -603,7 +627,7 @@ class WindowManager extends WebviewWindowHandle { * const title = await appWindow.title(); * ``` * - * @since 1.3.0 + * @since 2.0.0 * */ async title(): Promise { return window.__TAURI_INVOKE__("plugin:window|title", { @@ -625,6 +649,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns The window theme. + * + * @since 2.0.0 * */ async theme(): Promise { return window.__TAURI_INVOKE__("plugin:window|theme", { @@ -644,6 +670,8 @@ class WindowManager extends WebviewWindowHandle { * * @param resizable * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async center(): Promise { return window.__TAURI_INVOKE__("plugin:window|center", { @@ -671,6 +699,8 @@ class WindowManager extends WebviewWindowHandle { * * @param resizable * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async requestUserAttention( requestType: UserAttentionType | null @@ -700,6 +730,8 @@ class WindowManager extends WebviewWindowHandle { * * @param resizable * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setResizable(resizable: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_resizable", { @@ -718,6 +750,8 @@ class WindowManager extends WebviewWindowHandle { * * @param title The new title * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setTitle(title: string): Promise { return window.__TAURI_INVOKE__("plugin:window|set_title", { @@ -735,6 +769,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async maximize(): Promise { return window.__TAURI_INVOKE__("plugin:window|maximize", { @@ -751,6 +787,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async unmaximize(): Promise { return window.__TAURI_INVOKE__("plugin:window|unmaximize", { @@ -767,6 +805,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async toggleMaximize(): Promise { return window.__TAURI_INVOKE__("plugin:window|toggle_maximize", { @@ -783,6 +823,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async minimize(): Promise { return window.__TAURI_INVOKE__("plugin:window|minimize", { @@ -799,6 +841,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async unminimize(): Promise { return window.__TAURI_INVOKE__("plugin:window|unminimize", { @@ -815,6 +859,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async show(): Promise { return window.__TAURI_INVOKE__("plugin:window|show", { @@ -831,6 +877,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async hide(): Promise { return window.__TAURI_INVOKE__("plugin:window|hide", { @@ -847,6 +895,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async close(): Promise { return window.__TAURI_INVOKE__("plugin:window|close", { @@ -864,6 +914,8 @@ class WindowManager extends WebviewWindowHandle { * * @param decorations Whether the window should have borders and bars. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setDecorations(decorations: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_decorations", { @@ -891,7 +943,7 @@ class WindowManager extends WebviewWindowHandle { * * @returns A promise indicating the success or failure of the operation. * - * @since 2.0 + * @since 2.0.0 */ async setShadow(enable: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_shadow", { @@ -910,6 +962,8 @@ class WindowManager extends WebviewWindowHandle { * * @param alwaysOnTop Whether the window should always be on top of other windows or not. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setAlwaysOnTop(alwaysOnTop: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_always_on_top", { @@ -928,7 +982,7 @@ class WindowManager extends WebviewWindowHandle { * * @returns A promise indicating the success or failure of the operation. * - * @since 1.2.0 + * @since 2.0.0 */ async setContentProtected(protected_: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_content_protected", { @@ -947,6 +1001,8 @@ class WindowManager extends WebviewWindowHandle { * * @param size The logical or physical inner size. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setSize(size: LogicalSize | PhysicalSize): Promise { if (!size || (size.type !== "Logical" && size.type !== "Physical")) { @@ -977,6 +1033,8 @@ class WindowManager extends WebviewWindowHandle { * * @param size The logical or physical inner size, or `null` to unset the constraint. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setMinSize( size: LogicalSize | PhysicalSize | null | undefined @@ -1011,6 +1069,8 @@ class WindowManager extends WebviewWindowHandle { * * @param size The logical or physical inner size, or `null` to unset the constraint. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setMaxSize( size: LogicalSize | PhysicalSize | null | undefined @@ -1045,6 +1105,8 @@ class WindowManager extends WebviewWindowHandle { * * @param position The new position, in logical or physical pixels. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setPosition( position: LogicalPosition | PhysicalPosition @@ -1080,6 +1142,8 @@ class WindowManager extends WebviewWindowHandle { * * @param fullscreen Whether the window should go to fullscreen or not. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setFullscreen(fullscreen: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_fullscreen", { @@ -1097,6 +1161,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setFocus(): Promise { return window.__TAURI_INVOKE__("plugin:window|set_focus", { @@ -1121,6 +1187,8 @@ class WindowManager extends WebviewWindowHandle { * * @param icon Icon bytes or path to the icon file. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setIcon(icon: string | Uint8Array): Promise { return window.__TAURI_INVOKE__("plugin:window|set_icon", { @@ -1143,6 +1211,8 @@ class WindowManager extends WebviewWindowHandle { * * @param skip true to hide window icon, false to show it. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setSkipTaskbar(skip: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_skip_taskbar", { @@ -1169,6 +1239,8 @@ class WindowManager extends WebviewWindowHandle { * * @param grab `true` to grab the cursor icon, `false` to release it. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setCursorGrab(grab: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_cursor_grab", { @@ -1193,6 +1265,8 @@ class WindowManager extends WebviewWindowHandle { * * @param visible If `false`, this will hide the cursor. If `true`, this will show the cursor. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setCursorVisible(visible: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_cursor_visible", { @@ -1211,6 +1285,8 @@ class WindowManager extends WebviewWindowHandle { * * @param icon The new cursor icon. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setCursorIcon(icon: CursorIcon): Promise { return window.__TAURI_INVOKE__("plugin:window|set_cursor_icon", { @@ -1229,6 +1305,8 @@ class WindowManager extends WebviewWindowHandle { * * @param position The new cursor position. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setCursorPosition( position: LogicalPosition | PhysicalPosition @@ -1265,6 +1343,8 @@ class WindowManager extends WebviewWindowHandle { * * @param ignore `true` to ignore the cursor events; `false` to process them as usual. * @returns A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async setIgnoreCursorEvents(ignore: boolean): Promise { return window.__TAURI_INVOKE__("plugin:window|set_ignore_cursor_events", { @@ -1282,6 +1362,8 @@ class WindowManager extends WebviewWindowHandle { * ``` * * @return A promise indicating the success or failure of the operation. + * + * @since 2.0.0 */ async startDragging(): Promise { return window.__TAURI_INVOKE__("plugin:window|start_dragging", { @@ -1308,7 +1390,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ async onResized(handler: EventCallback): Promise { return this.listen(TauriEvent.WINDOW_RESIZED, (e) => { @@ -1334,7 +1416,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ async onMoved(handler: EventCallback): Promise { return this.listen(TauriEvent.WINDOW_MOVED, (e) => { @@ -1365,7 +1447,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ /* eslint-disable @typescript-eslint/promise-function-async */ async onCloseRequested( @@ -1399,7 +1481,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ async onFocusChanged(handler: EventCallback): Promise { const unlistenFocus = await this.listen( @@ -1441,7 +1523,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ async onScaleChanged( handler: EventCallback @@ -1469,7 +1551,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ async onMenuClicked(handler: EventCallback): Promise { return this.listen(TauriEvent.MENU, handler); @@ -1500,7 +1582,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ async onFileDropEvent( handler: EventCallback @@ -1550,7 +1632,7 @@ class WindowManager extends WebviewWindowHandle { * @returns A promise resolving to a function to unlisten to the event. * Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted. * - * @since 1.0.2 + * @since 2.0.0 */ async onThemeChanged(handler: EventCallback): Promise { return this.listen(TauriEvent.WINDOW_THEME_CHANGED, handler); @@ -1558,7 +1640,7 @@ class WindowManager extends WebviewWindowHandle { } /** - * @since 1.0.2 + * @since 2.0.0 */ class CloseRequestedEvent { /** Event name */ @@ -1615,7 +1697,7 @@ class CloseRequestedEvent { * unlisten(); * ``` * - * @since 1.0.2 + * @since 2.0.0 */ class WebviewWindow extends WindowManager { /** @@ -1636,6 +1718,8 @@ class WebviewWindow extends WindowManager { * * * @param label The unique webview window label. Must be alphanumeric: `a-zA-Z-/:_`. * @returns The WebviewWindow instance to communicate with the webview. + * + * @since 2.0.0 */ constructor(label: WindowLabel, options: WindowOptions = {}) { super(label); @@ -1663,6 +1747,8 @@ class WebviewWindow extends WindowManager { * * @param label The webview window label. * @returns The WebviewWindow instance to communicate with the webview or null if the webview doesn't exist. + * + * @since 2.0.0 */ static getByLabel(label: string): WebviewWindow | null { if (getAll().some((w) => w.label === label)) { @@ -1696,7 +1782,7 @@ if ("__TAURI_METADATA__" in window) { /** * Configuration for the window to create. * - * @since 1.0.0 + * @since 2.0.0 */ interface WindowOptions { /** @@ -1762,7 +1848,7 @@ interface WindowOptions { * and on Windows 11, it will have a rounded corners. * - **Linux:** Unsupported. * - * @since 2.0 + * @since 2.0.0 */ shadow?: boolean; /** @@ -1830,7 +1916,7 @@ function mapPhysicalSize(m: PhysicalSize): PhysicalSize { * const monitor = currentMonitor(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function currentMonitor(): Promise { return window @@ -1847,7 +1933,7 @@ async function currentMonitor(): Promise { * const monitor = primaryMonitor(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function primaryMonitor(): Promise { return window @@ -1863,7 +1949,7 @@ async function primaryMonitor(): Promise { * const monitors = availableMonitors(); * ``` * - * @since 1.0.0 + * @since 2.0.0 */ async function availableMonitors(): Promise { return window From 07406f1c9d7817c95dc9ebf4bfe2cdb1ea352045 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 10:44:48 +0200 Subject: [PATCH 45/64] fix(deps): update rust crate iota-crypto to 0.20 (#394) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- plugins/stronghold/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 28de7d51..3b180e48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2009,9 +2009,9 @@ dependencies = [ [[package]] name = "iota-crypto" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67d2bc02591d8a0427a8650204c259d0cad04d6cde0b6a4683906dc0b6dd3887" +checksum = "0180a2a7939b4b0ae68e651bbec130b27fd5882ef552df5bb55e0320e78bacbc" dependencies = [ "autocfg", ] @@ -4392,7 +4392,7 @@ dependencies = [ [[package]] name = "tauri-plugin-persisted-scope" -version = "0.1.0" +version = "0.1.1" dependencies = [ "aho-corasick 1.0.1", "bincode", @@ -4459,7 +4459,7 @@ name = "tauri-plugin-stronghold" version = "0.0.0" dependencies = [ "hex", - "iota-crypto 0.19.0", + "iota-crypto 0.20.0", "iota_stronghold", "log", "rand 0.8.5", diff --git a/plugins/stronghold/Cargo.toml b/plugins/stronghold/Cargo.toml index 09b3fd59..0ef6436a 100644 --- a/plugins/stronghold/Cargo.toml +++ b/plugins/stronghold/Cargo.toml @@ -16,7 +16,7 @@ tauri.workspace = true log.workspace = true thiserror.workspace = true iota_stronghold = "1" -iota-crypto = "0.19" +iota-crypto = "0.20" hex = "0.4" zeroize = { version = "1", features = ["zeroize_derive"] } From 37d65620f1d990f557f11e31c3a5af5259b53eb8 Mon Sep 17 00:00:00 2001 From: Fabian-Lars Date: Wed, 24 May 2023 12:36:41 +0200 Subject: [PATCH 46/64] chore: Add mirror for notification plugin (#397) --- plugins/mirrors.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/mirrors.txt b/plugins/mirrors.txt index c294bfe2..03fc3108 100644 --- a/plugins/mirrors.txt +++ b/plugins/mirrors.txt @@ -8,6 +8,7 @@ fs global-shortcut http log +notification os positioner process From a2d68e04a1eb88ea0d74e1bb64bb8d18e762131d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 10:33:37 -0300 Subject: [PATCH 47/64] Publish New Versions (v2) (#374) Co-authored-by: FabianLars Co-authored-by: Lucas Nogueira --- .changes/pre.json | 5 +- .../workflows/covector-version-or-publish.yml | 5 ++ Cargo.lock | 54 +++++++++---------- examples/api/CHANGELOG.md | 7 +++ examples/api/package.json | 29 +++++----- examples/api/src-tauri/CHANGELOG.md | 7 +++ examples/api/src-tauri/Cargo.toml | 43 +++++++-------- plugins/app/CHANGELOG.md | 5 ++ plugins/app/Cargo.toml | 2 +- plugins/app/package.json | 2 +- plugins/authenticator/CHANGELOG.md | 5 ++ plugins/authenticator/Cargo.toml | 4 +- plugins/authenticator/package.json | 2 +- plugins/autostart/CHANGELOG.md | 5 ++ plugins/autostart/Cargo.toml | 6 +-- plugins/autostart/package.json | 2 +- plugins/cli/CHANGELOG.md | 5 ++ plugins/cli/Cargo.toml | 4 +- plugins/cli/package.json | 2 +- plugins/clipboard/CHANGELOG.md | 5 ++ plugins/clipboard/Cargo.toml | 2 +- plugins/clipboard/package.json | 2 +- plugins/dialog/CHANGELOG.md | 5 ++ plugins/dialog/Cargo.toml | 6 +-- plugins/dialog/package.json | 2 +- plugins/fs/CHANGELOG.md | 5 ++ plugins/fs/Cargo.toml | 12 ++--- plugins/fs/package.json | 2 +- plugins/global-shortcut/CHANGELOG.md | 5 ++ plugins/global-shortcut/Cargo.toml | 2 +- plugins/global-shortcut/package.json | 2 +- plugins/http/CHANGELOG.md | 5 ++ plugins/http/Cargo.toml | 4 +- plugins/http/package.json | 2 +- plugins/localhost/CHANGELOG.md | 5 ++ plugins/localhost/Cargo.toml | 6 +-- plugins/log/CHANGELOG.md | 5 ++ plugins/log/Cargo.toml | 10 ++-- plugins/log/package.json | 2 +- plugins/notification/CHANGELOG.md | 5 ++ plugins/notification/Cargo.toml | 8 ++- plugins/notification/package.json | 2 +- plugins/os/CHANGELOG.md | 5 ++ plugins/os/Cargo.toml | 2 +- plugins/os/package.json | 2 +- plugins/persisted-scope/CHANGELOG.md | 6 +++ plugins/persisted-scope/Cargo.toml | 6 +-- plugins/positioner/CHANGELOG.md | 4 ++ plugins/positioner/Cargo.toml | 6 +-- plugins/positioner/package.json | 2 +- plugins/process/CHANGELOG.md | 5 ++ plugins/process/Cargo.toml | 2 +- plugins/process/package.json | 2 +- plugins/shell/CHANGELOG.md | 5 ++ plugins/shell/Cargo.toml | 4 +- plugins/shell/package.json | 2 +- plugins/single-instance/CHANGELOG.md | 5 ++ plugins/single-instance/Cargo.toml | 24 ++++----- plugins/sql/CHANGELOG.md | 5 ++ plugins/sql/Cargo.toml | 14 +++-- plugins/sql/package.json | 2 +- plugins/store/CHANGELOG.md | 5 ++ plugins/store/Cargo.toml | 6 +-- plugins/store/package.json | 2 +- plugins/stronghold/CHANGELOG.md | 5 ++ plugins/stronghold/Cargo.toml | 8 ++- plugins/stronghold/package.json | 2 +- plugins/updater/CHANGELOG.md | 5 ++ plugins/updater/Cargo.toml | 3 +- plugins/updater/package.json | 2 +- plugins/upload/CHANGELOG.md | 5 ++ plugins/upload/Cargo.toml | 6 +-- plugins/upload/package.json | 2 +- plugins/websocket/CHANGELOG.md | 5 ++ plugins/websocket/Cargo.toml | 8 ++- plugins/websocket/package.json | 2 +- plugins/window-state/CHANGELOG.md | 5 ++ plugins/window-state/Cargo.toml | 4 +- plugins/window-state/package.json | 2 +- plugins/window/CHANGELOG.md | 5 ++ plugins/window/Cargo.toml | 8 +-- plugins/window/package.json | 2 +- pnpm-lock.yaml | 26 ++++----- 83 files changed, 320 insertions(+), 199 deletions(-) create mode 100644 examples/api/CHANGELOG.md create mode 100644 examples/api/src-tauri/CHANGELOG.md create mode 100644 plugins/app/CHANGELOG.md create mode 100644 plugins/authenticator/CHANGELOG.md create mode 100644 plugins/autostart/CHANGELOG.md create mode 100644 plugins/cli/CHANGELOG.md create mode 100644 plugins/clipboard/CHANGELOG.md create mode 100644 plugins/dialog/CHANGELOG.md create mode 100644 plugins/fs/CHANGELOG.md create mode 100644 plugins/global-shortcut/CHANGELOG.md create mode 100644 plugins/http/CHANGELOG.md create mode 100644 plugins/localhost/CHANGELOG.md create mode 100644 plugins/log/CHANGELOG.md create mode 100644 plugins/notification/CHANGELOG.md create mode 100644 plugins/os/CHANGELOG.md create mode 100644 plugins/persisted-scope/CHANGELOG.md create mode 100644 plugins/process/CHANGELOG.md create mode 100644 plugins/shell/CHANGELOG.md create mode 100644 plugins/single-instance/CHANGELOG.md create mode 100644 plugins/sql/CHANGELOG.md create mode 100644 plugins/store/CHANGELOG.md create mode 100644 plugins/stronghold/CHANGELOG.md create mode 100644 plugins/updater/CHANGELOG.md create mode 100644 plugins/upload/CHANGELOG.md create mode 100644 plugins/websocket/CHANGELOG.md create mode 100644 plugins/window-state/CHANGELOG.md create mode 100644 plugins/window/CHANGELOG.md diff --git a/.changes/pre.json b/.changes/pre.json index 5914ed91..dd8471fa 100644 --- a/.changes/pre.json +++ b/.changes/pre.json @@ -1,4 +1,7 @@ { "tag": "alpha", - "changes": [] + "changes": [ + ".changes/persisted-scope-fix-oom.md", + ".changes/v2-alpha.md" + ] } diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index e5986443..c5ef8161 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -33,6 +33,11 @@ jobs: version: 7.x.x run_install: true + - name: install webkit2gtk and libudev for [authenticator] + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev + - name: cargo login run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }} diff --git a/Cargo.lock b/Cargo.lock index a5eef68e..8cc31251 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -206,7 +206,7 @@ checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "api" -version = "0.1.0" +version = "2.0.0-alpha.0" dependencies = [ "log", "serde", @@ -5103,14 +5103,14 @@ dependencies = [ [[package]] name = "tauri-plugin-app" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "tauri", ] [[package]] name = "tauri-plugin-authenticator" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "authenticator", "base64 0.21.0", @@ -5129,7 +5129,7 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "auto-launch", "log", @@ -5141,7 +5141,7 @@ dependencies = [ [[package]] name = "tauri-plugin-cli" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "clap", "log", @@ -5153,7 +5153,7 @@ dependencies = [ [[package]] name = "tauri-plugin-clipboard" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "arboard", "log", @@ -5166,7 +5166,7 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "glib", "log", @@ -5182,7 +5182,7 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "anyhow", "glob", @@ -5196,7 +5196,7 @@ dependencies = [ [[package]] name = "tauri-plugin-global-shortcut" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "global-hotkey", "log", @@ -5208,7 +5208,7 @@ dependencies = [ [[package]] name = "tauri-plugin-http" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "bytes 1.4.0", "glob", @@ -5225,7 +5225,7 @@ dependencies = [ [[package]] name = "tauri-plugin-localhost" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "http", "log", @@ -5238,7 +5238,7 @@ dependencies = [ [[package]] name = "tauri-plugin-log" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "android_logger", "byte-unit", @@ -5257,7 +5257,7 @@ dependencies = [ [[package]] name = "tauri-plugin-notification" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "log", "notify-rust", @@ -5275,7 +5275,7 @@ dependencies = [ [[package]] name = "tauri-plugin-os" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "log", "os_info", @@ -5288,7 +5288,7 @@ dependencies = [ [[package]] name = "tauri-plugin-persisted-scope" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "aho-corasick 1.0.1", "bincode", @@ -5302,7 +5302,7 @@ dependencies = [ [[package]] name = "tauri-plugin-positioner" -version = "1.0.4" +version = "2.0.0-alpha.0" dependencies = [ "log", "serde", @@ -5314,14 +5314,14 @@ dependencies = [ [[package]] name = "tauri-plugin-process" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "tauri", ] [[package]] name = "tauri-plugin-shell" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "encoding_rs", "log", @@ -5337,7 +5337,7 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "log", "serde", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "tauri-plugin-sql" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "futures-core", "log", @@ -5365,7 +5365,7 @@ dependencies = [ [[package]] name = "tauri-plugin-store" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "log", "serde", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "tauri-plugin-stronghold" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "hex", "iota-crypto 0.17.1", @@ -5393,7 +5393,7 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "base64 0.21.0", "dirs-next", @@ -5421,7 +5421,7 @@ dependencies = [ [[package]] name = "tauri-plugin-upload" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "futures-util", "log", @@ -5437,7 +5437,7 @@ dependencies = [ [[package]] name = "tauri-plugin-websocket" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "futures-util", "log", @@ -5452,7 +5452,7 @@ dependencies = [ [[package]] name = "tauri-plugin-window" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "serde", "tauri", @@ -5461,7 +5461,7 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "1.0.0" +version = "2.0.0-alpha.0" dependencies = [ "bincode", "bitflags 2.2.1", diff --git a/examples/api/CHANGELOG.md b/examples/api/CHANGELOG.md new file mode 100644 index 00000000..4da28c4f --- /dev/null +++ b/examples/api/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +## \[2.0.0-alpha.0] + +### Dependencies + +- Plugins v2 alpha. diff --git a/examples/api/package.json b/examples/api/package.json index bbfe9622..a47f5a82 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -1,6 +1,7 @@ { "name": "svelte-app", - "version": "1.0.0", + "private": true, + "version": "2.0.0-alpha.0", "type": "module", "scripts": { "dev": "vite --clearScreen false", @@ -10,19 +11,19 @@ "dependencies": { "@tauri-apps/api": "2.0.0-alpha.4", "@zerodevx/svelte-json-view": "0.2.1", - "@tauri-apps/plugin-app": "1.0.0", - "@tauri-apps/plugin-cli": "1.0.0", - "@tauri-apps/plugin-clipboard": "1.0.0", - "@tauri-apps/plugin-dialog": "1.0.0", - "@tauri-apps/plugin-fs": "1.0.0", - "@tauri-apps/plugin-global-shortcut": "1.0.0", - "@tauri-apps/plugin-http": "1.0.0", - "@tauri-apps/plugin-notification": "1.0.0", - "@tauri-apps/plugin-os": "1.0.0", - "@tauri-apps/plugin-process": "1.0.0", - "@tauri-apps/plugin-shell": "1.0.0", - "@tauri-apps/plugin-updater": "1.0.0", - "@tauri-apps/plugin-window": "1.0.0" + "@tauri-apps/plugin-app": "2.0.0-alpha.0", + "@tauri-apps/plugin-cli": "2.0.0-alpha.0", + "@tauri-apps/plugin-clipboard": "2.0.0-alpha.0", + "@tauri-apps/plugin-dialog": "2.0.0-alpha.0", + "@tauri-apps/plugin-fs": "2.0.0-alpha.0", + "@tauri-apps/plugin-global-shortcut": "2.0.0-alpha.0", + "@tauri-apps/plugin-http": "2.0.0-alpha.0", + "@tauri-apps/plugin-notification": "2.0.0-alpha.0", + "@tauri-apps/plugin-os": "2.0.0-alpha.0", + "@tauri-apps/plugin-process": "2.0.0-alpha.0", + "@tauri-apps/plugin-shell": "2.0.0-alpha.0", + "@tauri-apps/plugin-updater": "2.0.0-alpha.0", + "@tauri-apps/plugin-window": "2.0.0-alpha.0" }, "devDependencies": { "@iconify-json/codicon": "^1.1.10", diff --git a/examples/api/src-tauri/CHANGELOG.md b/examples/api/src-tauri/CHANGELOG.md new file mode 100644 index 00000000..4da28c4f --- /dev/null +++ b/examples/api/src-tauri/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +## \[2.0.0-alpha.0] + +### Dependencies + +- Plugins v2 alpha. diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index e65c3044..f7ec0eec 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -1,49 +1,50 @@ [package] name = "api" -version = "0.1.0" +publish = false +version = "2.0.0-alpha.0" description = "An example Tauri Application showcasing the api" edition = "2021" rust-version = "1.65" license = "Apache-2.0 OR MIT" [lib] -crate-type = ["staticlib", "cdylib", "rlib"] +crate-type = [ "staticlib", "cdylib", "rlib" ] [build-dependencies] -tauri-build = { workspace = true, features = ["codegen", "isolation"] } +tauri-build = { workspace = true, features = [ "codegen", "isolation" ] } [dependencies] serde_json = { workspace = true } serde = { workspace = true } tiny_http = "0.11" log = { workspace = true } -tauri-plugin-app = { path = "../../../plugins/app", version = "1.0.0" } -tauri-plugin-log = { path = "../../../plugins/log", version = "1.0.0" } -tauri-plugin-fs = { path = "../../../plugins/fs", version = "1.0.0" } -tauri-plugin-clipboard = { path = "../../../plugins/clipboard", version = "1.0.0" } -tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "1.0.0" } -tauri-plugin-http = { path = "../../../plugins/http", features = [ "multipart" ], version = "1.0.0" } -tauri-plugin-notification = { path = "../../../plugins/notification", version = "1.0.0", features = [ "windows7-compat" ] } -tauri-plugin-os = { path = "../../../plugins/os", version = "1.0.0" } -tauri-plugin-process = { path = "../../../plugins/process", version = "1.0.0" } -tauri-plugin-shell = { path = "../../../plugins/shell", version = "1.0.0" } -tauri-plugin-window = { path = "../../../plugins/window", version = "1.0.0", features = ["devtools", "icon-ico", "icon-png"] } +tauri-plugin-app = { path = "../../../plugins/app", version = "2.0.0-alpha.0" } +tauri-plugin-log = { path = "../../../plugins/log", version = "2.0.0-alpha.0" } +tauri-plugin-fs = { path = "../../../plugins/fs", version = "2.0.0-alpha.0" } +tauri-plugin-clipboard = { path = "../../../plugins/clipboard", version = "2.0.0-alpha.0" } +tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "2.0.0-alpha.0" } +tauri-plugin-http = { path = "../../../plugins/http", features = [ "multipart" ], version = "2.0.0-alpha.0" } +tauri-plugin-notification = { path = "../../../plugins/notification", version = "2.0.0-alpha.0", features = [ "windows7-compat" ] } +tauri-plugin-os = { path = "../../../plugins/os", version = "2.0.0-alpha.0" } +tauri-plugin-process = { path = "../../../plugins/process", version = "2.0.0-alpha.0" } +tauri-plugin-shell = { path = "../../../plugins/shell", version = "2.0.0-alpha.0" } +tauri-plugin-window = { path = "../../../plugins/window", version = "2.0.0-alpha.0", features = [ "devtools", "icon-ico", "icon-png" ] } -[dependencies.tauri] -workspace = true -features = [ + [dependencies.tauri] + workspace = true + features = [ "icon-ico", "icon-png", "isolation", "macos-private-api", "system-tray", - "protocol-asset", + "protocol-asset" ] [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] -tauri-plugin-cli = { path = "../../../plugins/cli", version = "1.0.0" } -tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut", version = "1.0.0" } -tauri-plugin-updater = { path = "../../../plugins/updater", version = "1.0.0" } +tauri-plugin-cli = { path = "../../../plugins/cli", version = "2.0.0-alpha.0" } +tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut", version = "2.0.0-alpha.0" } +tauri-plugin-updater = { path = "../../../plugins/updater", version = "2.0.0-alpha.0" } [target."cfg(target_os = \"windows\")".dependencies] window-shadows = "0.2" diff --git a/plugins/app/CHANGELOG.md b/plugins/app/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/app/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/app/Cargo.toml b/plugins/app/Cargo.toml index 521ce69c..4984ae28 100644 --- a/plugins/app/Cargo.toml +++ b/plugins/app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-app" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/app/package.json b/plugins/app/package.json index 6297bbe5..f875fdb0 100644 --- a/plugins/app/package.json +++ b/plugins/app/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-app", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/authenticator/CHANGELOG.md b/plugins/authenticator/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/authenticator/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/authenticator/Cargo.toml b/plugins/authenticator/Cargo.toml index c3ca03ca..4ce3b98e 100644 --- a/plugins/authenticator/Cargo.toml +++ b/plugins/authenticator/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-authenticator" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Use hardware security-keys in your Tauri App." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } diff --git a/plugins/authenticator/package.json b/plugins/authenticator/package.json index 51130faf..08c5a25a 100644 --- a/plugins/authenticator/package.json +++ b/plugins/authenticator/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-authenticator", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Use hardware security-keys in your Tauri App.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/autostart/CHANGELOG.md b/plugins/autostart/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/autostart/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/autostart/Cargo.toml b/plugins/autostart/Cargo.toml index 5ff1f3b9..15e757bd 100644 --- a/plugins/autostart/Cargo.toml +++ b/plugins/autostart/Cargo.toml @@ -1,18 +1,16 @@ [package] name = "tauri-plugin-autostart" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Automatically launch your application at startup." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } -auto-launch = "0.4" \ No newline at end of file +auto-launch = "0.4" diff --git a/plugins/autostart/package.json b/plugins/autostart/package.json index 6bb53385..5557933d 100644 --- a/plugins/autostart/package.json +++ b/plugins/autostart/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-autostart", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/cli/CHANGELOG.md b/plugins/cli/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/cli/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/cli/Cargo.toml b/plugins/cli/Cargo.toml index 2988a077..ac5035a8 100644 --- a/plugins/cli/Cargo.toml +++ b/plugins/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-cli" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } @@ -11,4 +11,4 @@ serde_json = { workspace = true } tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } -clap = { version = "4", features = ["string"] } +clap = { version = "4", features = [ "string" ] } diff --git a/plugins/cli/package.json b/plugins/cli/package.json index a4baf1a8..c47c63e4 100644 --- a/plugins/cli/package.json +++ b/plugins/cli/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-cli", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/clipboard/CHANGELOG.md b/plugins/clipboard/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/clipboard/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/clipboard/Cargo.toml b/plugins/clipboard/Cargo.toml index 0d3b1e5e..ab7f5f7a 100644 --- a/plugins/clipboard/Cargo.toml +++ b/plugins/clipboard/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-clipboard" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/clipboard/package.json b/plugins/clipboard/package.json index 84b2c998..265fe33b 100644 --- a/plugins/clipboard/package.json +++ b/plugins/clipboard/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-clipboard", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/dialog/CHANGELOG.md b/plugins/dialog/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/dialog/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/dialog/Cargo.toml b/plugins/dialog/Cargo.toml index 60f31dfc..1159ff55 100644 --- a/plugins/dialog/Cargo.toml +++ b/plugins/dialog/Cargo.toml @@ -1,20 +1,18 @@ [package] name = "tauri-plugin-dialog" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } links = "tauri-plugin-dialog" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } -tauri-plugin-fs = { path = "../fs", version = "1.0.0" } +tauri-plugin-fs = { path = "../fs", version = "2.0.0-alpha.0" } [target."cfg(any(target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] glib = "0.16" diff --git a/plugins/dialog/package.json b/plugins/dialog/package.json index 1622c1c4..5d83f64d 100644 --- a/plugins/dialog/package.json +++ b/plugins/dialog/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-dialog", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/fs/CHANGELOG.md b/plugins/fs/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/fs/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/fs/Cargo.toml b/plugins/fs/Cargo.toml index 59b24d61..e355ff6c 100644 --- a/plugins/fs/Cargo.toml +++ b/plugins/fs/Cargo.toml @@ -1,23 +1,21 @@ [package] name = "tauri-plugin-fs" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Access the file system." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } tauri = { workspace = true } thiserror = { workspace = true } anyhow = "1" -uuid = { version = "1", features = ["v4"] } +uuid = { version = "1", features = [ "v4" ] } glob = "0.3" -notify = { version = "5", optional = true, features = ["serde"] } -notify-debouncer-mini = { version = "0.2.1", optional = true, features = ["serde"] } +notify = { version = "5", optional = true, features = [ "serde" ] } +notify-debouncer-mini = { version = "0.2.1", optional = true, features = [ "serde" ] } [features] -watch = ["notify", "notify-debouncer-mini"] +watch = [ "notify", "notify-debouncer-mini" ] diff --git a/plugins/fs/package.json b/plugins/fs/package.json index 0b520585..071c6f1a 100644 --- a/plugins/fs/package.json +++ b/plugins/fs/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-fs", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Access the file system.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/global-shortcut/CHANGELOG.md b/plugins/global-shortcut/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/global-shortcut/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/global-shortcut/Cargo.toml b/plugins/global-shortcut/Cargo.toml index 927c4337..7ea3ae80 100644 --- a/plugins/global-shortcut/Cargo.toml +++ b/plugins/global-shortcut/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-global-shortcut" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/global-shortcut/package.json b/plugins/global-shortcut/package.json index 686cb64e..227625c1 100644 --- a/plugins/global-shortcut/package.json +++ b/plugins/global-shortcut/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-global-shortcut", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/http/CHANGELOG.md b/plugins/http/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/http/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index cb67760d..56b78282 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-http" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } @@ -10,7 +10,7 @@ serde = { workspace = true } serde_json = { workspace = true } tauri = { workspace = true } thiserror = { workspace = true } -tauri-plugin-fs = { path = "../fs", version = "1.0.0" } +tauri-plugin-fs = { path = "../fs", version = "2.0.0-alpha.0" } glob = "0.3" rand = "0.8" bytes = { version = "1", features = [ "serde" ] } diff --git a/plugins/http/package.json b/plugins/http/package.json index a238bb68..d1fe48e2 100644 --- a/plugins/http/package.json +++ b/plugins/http/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-http", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/localhost/CHANGELOG.md b/plugins/localhost/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/localhost/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/localhost/Cargo.toml b/plugins/localhost/Cargo.toml index 5f303476..a5586cbe 100644 --- a/plugins/localhost/Cargo.toml +++ b/plugins/localhost/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-localhost" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Expose your apps assets through a localhost server instead of the default custom protocol." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } @@ -16,4 +14,4 @@ tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } tiny_http = "0.12" -http = "0.2" \ No newline at end of file +http = "0.2" diff --git a/plugins/log/CHANGELOG.md b/plugins/log/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/log/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/log/Cargo.toml b/plugins/log/Cargo.toml index 9e4c8508..06a19f4a 100644 --- a/plugins/log/Cargo.toml +++ b/plugins/log/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-log" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Configurable logging for your Tauri app." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [build-dependencies] tauri-build = { workspace = true } @@ -18,8 +16,8 @@ serde_json = { workspace = true } tauri = { workspace = true } serde_repr = "0.1" byte-unit = "4.0" -log = { workspace = true, features = ["kv_unstable"] } -time = { version = "0.3", features = ["formatting", "local-offset"] } +log = { workspace = true, features = [ "kv_unstable" ] } +time = { version = "0.3", features = [ "formatting", "local-offset" ] } fern = "0.6" [target."cfg(target_os = \"android\")".dependencies] @@ -31,4 +29,4 @@ objc = "0.2" cocoa = "0.24" [features] -colored = ["fern/colored"] \ No newline at end of file +colored = [ "fern/colored" ] diff --git a/plugins/log/package.json b/plugins/log/package.json index 575dcfb6..388c7aa6 100644 --- a/plugins/log/package.json +++ b/plugins/log/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-log", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Configurable logging for your Tauri app.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/notification/CHANGELOG.md b/plugins/notification/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/notification/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/notification/Cargo.toml b/plugins/notification/Cargo.toml index a6660eba..1756baf2 100644 --- a/plugins/notification/Cargo.toml +++ b/plugins/notification/Cargo.toml @@ -1,13 +1,11 @@ [package] name = "tauri-plugin-notification" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } links = "tauri-plugin-notification" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [build-dependencies] tauri-build = { workspace = true } @@ -18,8 +16,8 @@ tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } rand = "0.8" -time = { version = "0.3", features = ["serde", "parsing", "formatting"] } -url = { version = "2", features = ["serde"] } +time = { version = "0.3", features = [ "serde", "parsing", "formatting" ] } +url = { version = "2", features = [ "serde" ] } serde_repr = "0.1" [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] diff --git a/plugins/notification/package.json b/plugins/notification/package.json index f43df637..1b18b55c 100644 --- a/plugins/notification/package.json +++ b/plugins/notification/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-notification", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/os/CHANGELOG.md b/plugins/os/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/os/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/os/Cargo.toml b/plugins/os/Cargo.toml index 5db78b58..8a0d0494 100644 --- a/plugins/os/Cargo.toml +++ b/plugins/os/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-os" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/os/package.json b/plugins/os/package.json index b6022045..e2aae9c2 100644 --- a/plugins/os/package.json +++ b/plugins/os/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-os", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/persisted-scope/CHANGELOG.md b/plugins/persisted-scope/CHANGELOG.md new file mode 100644 index 00000000..9c19d778 --- /dev/null +++ b/plugins/persisted-scope/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`ebb2eb2`](https://github.com/tauri-apps/plugins-workspace/commit/ebb2eb2fe2ebfbb70530d16a983d396aa5829aa1)([#274](https://github.com/tauri-apps/plugins-workspace/pull/274)) Recursively unescape saved patterns before allowing/forbidding them. This effectively prevents `.persisted-scope` files from blowing up, which caused Out-Of-Memory issues, while automatically fixing existing broken files seamlessly. +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/persisted-scope/Cargo.toml b/plugins/persisted-scope/Cargo.toml index ec7ecf86..6b3c92e8 100644 --- a/plugins/persisted-scope/Cargo.toml +++ b/plugins/persisted-scope/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-persisted-scope" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Save filesystem and asset scopes and restore them when the app is reopened." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } @@ -17,4 +15,4 @@ log = { workspace = true } thiserror = { workspace = true } aho-corasick = "1.0" bincode = "1" -tauri-plugin-fs = { path = "../fs", version = "1.0.0" } +tauri-plugin-fs = { path = "../fs", version = "2.0.0-alpha.0" } diff --git a/plugins/positioner/CHANGELOG.md b/plugins/positioner/CHANGELOG.md index 71199780..f0814299 100644 --- a/plugins/positioner/CHANGELOG.md +++ b/plugins/positioner/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! + ## \[0.2.7] - Update Tauri to v1.0.0 diff --git a/plugins/positioner/Cargo.toml b/plugins/positioner/Cargo.toml index 11623b33..25927a26 100644 --- a/plugins/positioner/Cargo.toml +++ b/plugins/positioner/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-positioner" -version = "1.0.4" +version = "2.0.0-alpha.0" description = "Position your windows at well-known locations." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } @@ -18,4 +16,4 @@ thiserror = { workspace = true } serde_repr = "0.1" [features] -system-tray = [ "tauri/system-tray" ] \ No newline at end of file +system-tray = [ "tauri/system-tray" ] diff --git a/plugins/positioner/package.json b/plugins/positioner/package.json index 0dea96d4..2f064127 100644 --- a/plugins/positioner/package.json +++ b/plugins/positioner/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-positioner", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Position your windows at well-known locations.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/process/CHANGELOG.md b/plugins/process/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/process/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/process/Cargo.toml b/plugins/process/Cargo.toml index 7a44f481..64e5ab9b 100644 --- a/plugins/process/Cargo.toml +++ b/plugins/process/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-process" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/process/package.json b/plugins/process/package.json index 9f2542ec..d5517cf3 100644 --- a/plugins/process/package.json +++ b/plugins/process/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-process", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/shell/CHANGELOG.md b/plugins/shell/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/shell/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/shell/Cargo.toml b/plugins/shell/Cargo.toml index a9eb609d..2e4134c6 100644 --- a/plugins/shell/Cargo.toml +++ b/plugins/shell/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-shell" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } @@ -15,4 +15,4 @@ shared_child = "1" regex = "1" open = "4" encoding_rs = "0.8" -os_pipe = "1" \ No newline at end of file +os_pipe = "1" diff --git a/plugins/shell/package.json b/plugins/shell/package.json index 56aa7f66..79d2c0c1 100644 --- a/plugins/shell/package.json +++ b/plugins/shell/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-shell", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/single-instance/CHANGELOG.md b/plugins/single-instance/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/single-instance/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/single-instance/Cargo.toml b/plugins/single-instance/Cargo.toml index 2baa69e9..9c4fc139 100644 --- a/plugins/single-instance/Cargo.toml +++ b/plugins/single-instance/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-single-instance" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Ensure a single instance of your tauri app is running." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -exclude = ["/examples"] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +exclude = [ "/examples" ] [dependencies] serde = { workspace = true } @@ -17,17 +15,17 @@ tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } -[target.'cfg(target_os = "windows")'.dependencies.windows-sys] +[target."cfg(target_os = \"windows\")".dependencies.windows-sys] version = "0.48" features = [ - "Win32_System_Threading", - "Win32_System_DataExchange", - "Win32_Foundation", - "Win32_UI_WindowsAndMessaging", - "Win32_Security", - "Win32_System_LibraryLoader", - "Win32_Graphics_Gdi", + "Win32_System_Threading", + "Win32_System_DataExchange", + "Win32_Foundation", + "Win32_UI_WindowsAndMessaging", + "Win32_Security", + "Win32_System_LibraryLoader", + "Win32_Graphics_Gdi" ] -[target.'cfg(target_os = "linux")'.dependencies] +[target."cfg(target_os = \"linux\")".dependencies] zbus = "3" diff --git a/plugins/sql/CHANGELOG.md b/plugins/sql/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/sql/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/sql/Cargo.toml b/plugins/sql/Cargo.toml index da263e5f..a4ddf0c2 100644 --- a/plugins/sql/Cargo.toml +++ b/plugins/sql/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-sql" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Interface with SQL databases." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } @@ -16,11 +14,11 @@ tauri = { workspace = true } log = { workspace = true } thiserror = { workspace = true } futures-core = "0.3" -sqlx = { version = "0.6", features = ["runtime-tokio-rustls", "json", "time"] } +sqlx = { version = "0.6", features = [ "runtime-tokio-rustls", "json", "time" ] } time = "0.3" -tokio = { version = "1", features = ["sync"] } +tokio = { version = "1", features = [ "sync" ] } [features] -sqlite = ["sqlx/sqlite"] -mysql = ["sqlx/mysql"] -postgres = ["sqlx/postgres"] \ No newline at end of file +sqlite = [ "sqlx/sqlite" ] +mysql = [ "sqlx/mysql" ] +postgres = [ "sqlx/postgres" ] diff --git a/plugins/sql/package.json b/plugins/sql/package.json index 86342845..faea80a8 100644 --- a/plugins/sql/package.json +++ b/plugins/sql/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-sql", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Interface with SQL databases", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/store/CHANGELOG.md b/plugins/store/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/store/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/store/Cargo.toml b/plugins/store/Cargo.toml index 3386b9fb..a2ec5226 100644 --- a/plugins/store/Cargo.toml +++ b/plugins/store/Cargo.toml @@ -1,17 +1,15 @@ [package] name = "tauri-plugin-store" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Simple, persistent key-value store." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } tauri = { workspace = true } log = { workspace = true } -thiserror = { workspace = true } \ No newline at end of file +thiserror = { workspace = true } diff --git a/plugins/store/package.json b/plugins/store/package.json index 00882a96..9bfaabe1 100644 --- a/plugins/store/package.json +++ b/plugins/store/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-store", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Simple, persistent key-value store.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/stronghold/CHANGELOG.md b/plugins/stronghold/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/stronghold/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/stronghold/Cargo.toml b/plugins/stronghold/Cargo.toml index 80d04b0f..6dfb18f6 100644 --- a/plugins/stronghold/Cargo.toml +++ b/plugins/stronghold/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-stronghold" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Store secrets and keys using the IOTA Stronghold encrypted database." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } @@ -18,8 +16,8 @@ thiserror = { workspace = true } iota_stronghold = "1" iota-crypto = "0.17" hex = "0.4" -zeroize = { version = "1", features = ["zeroize_derive"] } +zeroize = { version = "1", features = [ "zeroize_derive" ] } [dev-dependencies] rand = "0.8" -rusty-fork = "0.3" \ No newline at end of file +rusty-fork = "0.3" diff --git a/plugins/stronghold/package.json b/plugins/stronghold/package.json index 04c0aacd..e4c7fc2d 100644 --- a/plugins/stronghold/package.json +++ b/plugins/stronghold/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-stronghold", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Store secrets and keys using the IOTA Stronghold encrypted database.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/updater/CHANGELOG.md b/plugins/updater/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/updater/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index 3230da31..ccd767ac 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-updater" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } @@ -10,7 +10,6 @@ tauri = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } - tokio = "1" reqwest = { version = "0.11", default-features = false, features = [ "json", "stream" ] } url = "2" diff --git a/plugins/updater/package.json b/plugins/updater/package.json index 7de4db59..1117938d 100644 --- a/plugins/updater/package.json +++ b/plugins/updater/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-updater", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/upload/CHANGELOG.md b/plugins/upload/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/upload/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/upload/Cargo.toml b/plugins/upload/Cargo.toml index 787a072c..0f4da100 100644 --- a/plugins/upload/Cargo.toml +++ b/plugins/upload/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-upload" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Upload files from disk to a remote server over HTTP." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } @@ -24,4 +22,4 @@ read-progress-stream = "1.0.0" [features] native-tls = [ "reqwest/native-tls" ] native-tls-vendored = [ "reqwest/native-tls-vendored" ] -rustls-tls = [ "reqwest/rustls-tls" ] \ No newline at end of file +rustls-tls = [ "reqwest/rustls-tls" ] diff --git a/plugins/upload/package.json b/plugins/upload/package.json index 6bc205bb..67ecc76d 100644 --- a/plugins/upload/package.json +++ b/plugins/upload/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-upload", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Upload files from disk to a remote server over HTTP.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/websocket/CHANGELOG.md b/plugins/websocket/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/websocket/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/websocket/Cargo.toml b/plugins/websocket/Cargo.toml index 3ab8ddb3..98251f41 100644 --- a/plugins/websocket/Cargo.toml +++ b/plugins/websocket/Cargo.toml @@ -1,13 +1,11 @@ [package] name = "tauri-plugin-websocket" -version = "1.0.0" +version = "2.0.0-alpha.0" authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -exclude = ["/examples"] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +exclude = [ "/examples" ] [dependencies] serde = { workspace = true } @@ -17,7 +15,7 @@ log = { workspace = true } thiserror = { workspace = true } rand = "0.8" futures-util = "0.3" -tokio = { version = "1", features = ["net", "sync"] } +tokio = { version = "1", features = [ "net", "sync" ] } tokio-tungstenite = { version = "0.18" } [features] diff --git a/plugins/websocket/package.json b/plugins/websocket/package.json index e2fc865c..7cc1628b 100644 --- a/plugins/websocket/package.json +++ b/plugins/websocket/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-websocket", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/plugins/window-state/CHANGELOG.md b/plugins/window-state/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/window-state/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/window-state/Cargo.toml b/plugins/window-state/Cargo.toml index cd5cc835..b1f6c802 100644 --- a/plugins/window-state/Cargo.toml +++ b/plugins/window-state/Cargo.toml @@ -1,14 +1,12 @@ [package] name = "tauri-plugin-window-state" -version = "1.0.0" +version = "2.0.0-alpha.0" description = "Save window positions and sizes and restore them when the app is reopened." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } rust-version = { workspace = true } -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - [dependencies] serde = { workspace = true } serde_json = { workspace = true } diff --git a/plugins/window-state/package.json b/plugins/window-state/package.json index 01f524d8..060ae802 100644 --- a/plugins/window-state/package.json +++ b/plugins/window-state/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-window-state", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "description": "Save window positions and sizes and restore them when the app is reopened.", "license": "MIT or APACHE-2.0", "authors": [ diff --git a/plugins/window/CHANGELOG.md b/plugins/window/CHANGELOG.md new file mode 100644 index 00000000..a70b10ec --- /dev/null +++ b/plugins/window/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## \[2.0.0-alpha.0] + +- [`717ae67`](https://github.com/tauri-apps/plugins-workspace/commit/717ae670978feb4492fac1f295998b93f2b9347f)([#371](https://github.com/tauri-apps/plugins-workspace/pull/371)) First v2 alpha release! diff --git a/plugins/window/Cargo.toml b/plugins/window/Cargo.toml index e274079a..140e1895 100644 --- a/plugins/window/Cargo.toml +++ b/plugins/window/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin-window" -version = "1.0.0" +version = "2.0.0-alpha.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } @@ -11,6 +11,6 @@ serde = { workspace = true } thiserror = { workspace = true } [features] -icon-png = ["tauri/icon-png"] -icon-ico = ["tauri/icon-ico"] -devtools = [] +icon-png = [ "tauri/icon-png" ] +icon-ico = [ "tauri/icon-ico" ] +devtools = [ ] diff --git a/plugins/window/package.json b/plugins/window/package.json index 2de9b3bb..1de59aeb 100644 --- a/plugins/window/package.json +++ b/plugins/window/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/plugin-window", - "version": "1.0.0", + "version": "2.0.0-alpha.0", "license": "MIT or APACHE-2.0", "authors": [ "Tauri Programme within The Commons Conservancy" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96d380f5..3d0bc376 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,43 +59,43 @@ importers: specifier: 2.0.0-alpha.4 version: 2.0.0-alpha.4 '@tauri-apps/plugin-app': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/app '@tauri-apps/plugin-cli': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/cli '@tauri-apps/plugin-clipboard': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/clipboard '@tauri-apps/plugin-dialog': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/dialog '@tauri-apps/plugin-fs': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/fs '@tauri-apps/plugin-global-shortcut': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/global-shortcut '@tauri-apps/plugin-http': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/http '@tauri-apps/plugin-notification': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/notification '@tauri-apps/plugin-os': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/os '@tauri-apps/plugin-process': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/process '@tauri-apps/plugin-shell': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/shell '@tauri-apps/plugin-updater': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/updater '@tauri-apps/plugin-window': - specifier: 1.0.0 + specifier: 2.0.0-alpha.0 version: link:../../plugins/window '@zerodevx/svelte-json-view': specifier: 0.2.1 From b5aaf5d9dd568e4e6e53155ad2be6ae213f208f4 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 24 May 2023 06:51:04 -0700 Subject: [PATCH 48/64] fix(ci): adjust package-latest-version script (#398) --- .changes/pre.json | 5 +---- .scripts/covector/package-latest-version.cjs | 10 ++++++--- plugins/upload/README.md | 22 ++++++++++---------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.changes/pre.json b/.changes/pre.json index dd8471fa..94ca7d1f 100644 --- a/.changes/pre.json +++ b/.changes/pre.json @@ -1,7 +1,4 @@ { "tag": "alpha", - "changes": [ - ".changes/persisted-scope-fix-oom.md", - ".changes/v2-alpha.md" - ] + "changes": [".changes/persisted-scope-fix-oom.md", ".changes/v2-alpha.md"] } diff --git a/.scripts/covector/package-latest-version.cjs b/.scripts/covector/package-latest-version.cjs index 9ff107c3..68203a1f 100644 --- a/.scripts/covector/package-latest-version.cjs +++ b/.scripts/covector/package-latest-version.cjs @@ -44,10 +44,14 @@ https.get(url, options, (response) => { response.on("end", function () { const data = JSON.parse(chunks.join("")); if (kind === "cargo") { - const versions = data.versions.filter((v) => v.num.startsWith(target)); - console.log(versions.length ? versions[0].num : "0.0.0"); + if (data.versions) { + const versions = data.versions.filter((v) => v.num.startsWith(target)); + console.log(versions.length ? versions[0].num : "0.0.0"); + } else { + console.log("0.0.0"); + } } else if (kind === "npm") { - const versions = Object.keys(data.versions).filter((v) => + const versions = Object.keys(data.versions || {}).filter((v) => v.startsWith(target) ); console.log(versions[versions.length - 1] || "0.0.0"); diff --git a/plugins/upload/README.md b/plugins/upload/README.md index 7738077f..31d13238 100644 --- a/plugins/upload/README.md +++ b/plugins/upload/README.md @@ -61,25 +61,25 @@ fn main() { Afterwards all the plugin's APIs are available through the JavaScript guest bindings: ```javascript -import { upload } from '@tauri-apps/plugin-upload' +import { upload } from "@tauri-apps/plugin-upload"; upload( - 'https://example.com/file-upload', - './path/to/my/file.txt', - (progress, total) => console.log(`Uploaded ${progress} of ${total} bytes`), // a callback that will be called with the upload progress - { 'Content-Type': 'text/plain' } // optional headers to send with the request -) + "https://example.com/file-upload", + "./path/to/my/file.txt", + (progress, total) => console.log(`Uploaded ${progress} of ${total} bytes`), // a callback that will be called with the upload progress + { "Content-Type": "text/plain" } // optional headers to send with the request +); ``` ```javascript import { download } from "tauri-plugin-upload-api"; download( - 'https://example.com/file-download-link', - './path/to/save/my/file.txt', - (progress, total) => console.log(`Downloaded ${progress} of ${total} bytes`), // a callback that will be called with the download progress - { 'Content-Type': 'text/plain' } // optional headers to send with the request -) + "https://example.com/file-download-link", + "./path/to/save/my/file.txt", + (progress, total) => console.log(`Downloaded ${progress} of ${total} bytes`), // a callback that will be called with the download progress + { "Content-Type": "text/plain" } // optional headers to send with the request +); ``` ## Contributing From 396f493fdb3ef8f6249972f77c912784e322ee60 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Wed, 24 May 2023 10:55:06 -0300 Subject: [PATCH 49/64] fix(ci): install deps on v2 covector workflow --- .github/workflows/covector-version-or-publish-v2.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/covector-version-or-publish-v2.yml b/.github/workflows/covector-version-or-publish-v2.yml index 2b41de66..6d1ce3a7 100644 --- a/.github/workflows/covector-version-or-publish-v2.yml +++ b/.github/workflows/covector-version-or-publish-v2.yml @@ -33,6 +33,11 @@ jobs: version: 7.x.x run_install: true + - name: install webkit2gtk and libudev for [authenticator] + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libudev-dev + - name: cargo login run: cargo login ${{ secrets.ORG_CRATES_IO_TOKEN }} @@ -59,5 +64,5 @@ jobs: title: "Publish New Versions (v2)" commit-message: "publish new versions" labels: "version updates" - branch: "release" + branch: "release-v2" body: ${{ steps.covector.outputs.change }} From 26d993cfea66c28945ea08c949372315d5e3ff40 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 24 May 2023 07:11:26 -0700 Subject: [PATCH 50/64] chore(plugins): update description field (#399) --- plugins/app/Cargo.toml | 1 + plugins/cli/Cargo.toml | 1 + plugins/clipboard/Cargo.toml | 1 + plugins/dialog/Cargo.toml | 1 + plugins/global-shortcut/Cargo.toml | 1 + plugins/http/Cargo.toml | 1 + plugins/notification/Cargo.toml | 1 + plugins/os/Cargo.toml | 1 + plugins/process/Cargo.toml | 1 + plugins/shell/Cargo.toml | 1 + plugins/updater/Cargo.toml | 1 + plugins/websocket/Cargo.toml | 1 + plugins/window/Cargo.toml | 1 + 13 files changed, 13 insertions(+) diff --git a/plugins/app/Cargo.toml b/plugins/app/Cargo.toml index 4984ae28..6ae1ca3f 100644 --- a/plugins/app/Cargo.toml +++ b/plugins/app/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-app" version = "2.0.0-alpha.0" +description = "APIs to read application metadata and change app visibility on macOS." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/cli/Cargo.toml b/plugins/cli/Cargo.toml index ac5035a8..b3a2ca7d 100644 --- a/plugins/cli/Cargo.toml +++ b/plugins/cli/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-cli" version = "2.0.0-alpha.0" +description = "Parse arguments from your Tauri application's command line interface." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/clipboard/Cargo.toml b/plugins/clipboard/Cargo.toml index ab7f5f7a..96522fb8 100644 --- a/plugins/clipboard/Cargo.toml +++ b/plugins/clipboard/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-clipboard" version = "2.0.0-alpha.0" +description = "Read and write to the system clipboard." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/dialog/Cargo.toml b/plugins/dialog/Cargo.toml index 1159ff55..7ca49870 100644 --- a/plugins/dialog/Cargo.toml +++ b/plugins/dialog/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-dialog" version = "2.0.0-alpha.0" +description = "Native system dialogs for opening and saving files along with message dialogs on your Tauri application." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/global-shortcut/Cargo.toml b/plugins/global-shortcut/Cargo.toml index 7ea3ae80..b281d2b0 100644 --- a/plugins/global-shortcut/Cargo.toml +++ b/plugins/global-shortcut/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-global-shortcut" version = "2.0.0-alpha.0" +description = "Register global hotkeys listeners on your Tauri application." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml index 56b78282..f1fb6082 100644 --- a/plugins/http/Cargo.toml +++ b/plugins/http/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-http" version = "2.0.0-alpha.0" +description = "Access an HTTP client written in Rust." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/notification/Cargo.toml b/plugins/notification/Cargo.toml index 1756baf2..a89a731f 100644 --- a/plugins/notification/Cargo.toml +++ b/plugins/notification/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-notification" version = "2.0.0-alpha.0" +description = "Send desktop and mobile notifications on your Tauri application." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/os/Cargo.toml b/plugins/os/Cargo.toml index 8a0d0494..2890d540 100644 --- a/plugins/os/Cargo.toml +++ b/plugins/os/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-os" version = "2.0.0-alpha.0" +description = "Read information about the operating system." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/process/Cargo.toml b/plugins/process/Cargo.toml index 64e5ab9b..f018daa1 100644 --- a/plugins/process/Cargo.toml +++ b/plugins/process/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-process" version = "2.0.0-alpha.0" +description = "Access the current process of your Tauri application." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/shell/Cargo.toml b/plugins/shell/Cargo.toml index 2e4134c6..2502b782 100644 --- a/plugins/shell/Cargo.toml +++ b/plugins/shell/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-shell" version = "2.0.0-alpha.0" +description = "Access the system shell. Allows you to spawn child processes and manage files and URLs using their default application." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/updater/Cargo.toml b/plugins/updater/Cargo.toml index ccd767ac..7342e8d8 100644 --- a/plugins/updater/Cargo.toml +++ b/plugins/updater/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-updater" version = "2.0.0-alpha.0" +description = "In-app updates for Tauri applications." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/plugins/websocket/Cargo.toml b/plugins/websocket/Cargo.toml index f988f785..a9c00ba1 100644 --- a/plugins/websocket/Cargo.toml +++ b/plugins/websocket/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-websocket" version = "2.0.0-alpha.0" +description = "Expose a WebSocket server to your Tauri frontend." authors = { workspace = true } license = { workspace = true } edition = { workspace = true } diff --git a/plugins/window/Cargo.toml b/plugins/window/Cargo.toml index 140e1895..7e52814d 100644 --- a/plugins/window/Cargo.toml +++ b/plugins/window/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "tauri-plugin-window" version = "2.0.0-alpha.0" +description = "Interact with the Tauri window." edition = { workspace = true } authors = { workspace = true } license = { workspace = true } From b259baa17e3f0b9e192bcc3060f5820c2e09c85e Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 24 May 2023 08:06:07 -0700 Subject: [PATCH 51/64] refactor: rename clipboard plugin to clipboard-manager (#400) --- .changes/config.json | 8 +++---- .changes/v2-alpha.md | 4 ++-- .github/workflows/check-generated-files.yml | 6 ++--- .github/workflows/lint-rust.yml | 4 ++-- .github/workflows/test-rust.yml | 4 ++-- Cargo.lock | 4 ++-- examples/api/package.json | 2 +- examples/api/src-tauri/Cargo.toml | 2 +- examples/api/src-tauri/src/lib.rs | 2 +- examples/api/src/views/Clipboard.svelte | 2 +- .../.gitignore | 0 .../CHANGELOG.md | 0 .../Cargo.toml | 4 ++-- .../LICENSE.spdx | 0 .../LICENSE_APACHE-2.0 | 0 .../LICENSE_MIT | 0 .../README.md | 22 +++++++++---------- .../android/.gitignore | 0 .../android/build.gradle.kts | 0 .../android/proguard-rules.pro | 0 .../android/settings.gradle | 0 .../java/ExampleInstrumentedTest.kt | 0 .../android/src/main/AndroidManifest.xml | 0 .../android/src/main/java/ClipboardPlugin.kt | 0 .../android/src/test/java/ExampleUnitTest.kt | 0 .../{clipboard => clipboard-manager}/build.rs | 0 .../guest-js/index.ts | 4 ++-- .../ios/.gitignore | 0 .../ios/Package.swift | 8 +++---- .../ios/README.md | 0 .../ios/Sources/ClipboardPlugin.swift | 0 .../ios/Tests/PluginTests/PluginTests.swift | 0 .../package.json | 2 +- .../rollup.config.mjs | 0 plugins/clipboard-manager/src/api-iife.js | 1 + .../src/commands.rs | 0 .../src/desktop.rs | 0 .../src/error.rs | 0 .../src/lib.rs | 0 .../src/mobile.rs | 0 .../src/models.rs | 0 .../tsconfig.json | 0 plugins/clipboard/src/api-iife.js | 1 - plugins/mirrors.txt | 2 +- pnpm-lock.yaml | 6 ++--- 45 files changed, 44 insertions(+), 44 deletions(-) rename plugins/{clipboard => clipboard-manager}/.gitignore (100%) rename plugins/{clipboard => clipboard-manager}/CHANGELOG.md (100%) rename plugins/{clipboard => clipboard-manager}/Cargo.toml (88%) rename plugins/{clipboard => clipboard-manager}/LICENSE.spdx (100%) rename plugins/{clipboard => clipboard-manager}/LICENSE_APACHE-2.0 (100%) rename plugins/{clipboard => clipboard-manager}/LICENSE_MIT (100%) rename plugins/{clipboard => clipboard-manager}/README.md (74%) rename plugins/{clipboard => clipboard-manager}/android/.gitignore (100%) rename plugins/{clipboard => clipboard-manager}/android/build.gradle.kts (100%) rename plugins/{clipboard => clipboard-manager}/android/proguard-rules.pro (100%) rename plugins/{clipboard => clipboard-manager}/android/settings.gradle (100%) rename plugins/{clipboard => clipboard-manager}/android/src/androidTest/java/ExampleInstrumentedTest.kt (100%) rename plugins/{clipboard => clipboard-manager}/android/src/main/AndroidManifest.xml (100%) rename plugins/{clipboard => clipboard-manager}/android/src/main/java/ClipboardPlugin.kt (100%) rename plugins/{clipboard => clipboard-manager}/android/src/test/java/ExampleUnitTest.kt (100%) rename plugins/{clipboard => clipboard-manager}/build.rs (100%) rename plugins/{clipboard => clipboard-manager}/guest-js/index.ts (94%) rename plugins/{clipboard => clipboard-manager}/ios/.gitignore (100%) rename plugins/{clipboard => clipboard-manager}/ios/Package.swift (81%) rename plugins/{clipboard => clipboard-manager}/ios/README.md (100%) rename plugins/{clipboard => clipboard-manager}/ios/Sources/ClipboardPlugin.swift (100%) rename plugins/{clipboard => clipboard-manager}/ios/Tests/PluginTests/PluginTests.swift (100%) rename plugins/{clipboard => clipboard-manager}/package.json (92%) rename plugins/{clipboard => clipboard-manager}/rollup.config.mjs (100%) create mode 100644 plugins/clipboard-manager/src/api-iife.js rename plugins/{clipboard => clipboard-manager}/src/commands.rs (100%) rename plugins/{clipboard => clipboard-manager}/src/desktop.rs (100%) rename plugins/{clipboard => clipboard-manager}/src/error.rs (100%) rename plugins/{clipboard => clipboard-manager}/src/lib.rs (100%) rename plugins/{clipboard => clipboard-manager}/src/mobile.rs (100%) rename plugins/{clipboard => clipboard-manager}/src/models.rs (100%) rename plugins/{clipboard => clipboard-manager}/tsconfig.json (100%) delete mode 100644 plugins/clipboard/src/api-iife.js diff --git a/.changes/config.json b/.changes/config.json index 36d6e5f2..8e79bb83 100644 --- a/.changes/config.json +++ b/.changes/config.json @@ -112,12 +112,12 @@ "manager": "javascript" }, - "clipboard": { - "path": "./plugins/clipboard", + "clipboard-manager": { + "path": "./plugins/clipboard-manager", "manager": "rust" }, - "clipboard-js": { - "path": "./plugins/clipboard", + "clipboard-manager-js": { + "path": "./plugins/clipboard-manager", "manager": "javascript" }, diff --git a/.changes/v2-alpha.md b/.changes/v2-alpha.md index 6c8e7894..4083686d 100644 --- a/.changes/v2-alpha.md +++ b/.changes/v2-alpha.md @@ -7,8 +7,8 @@ "autostart-js": major "cli": major "cli-js": major -"clipboard": major -"clipboard-js": major +"clipboard-manager": major +"clipboard-manager-js": major "dialog": major "dialog-js": major "fs": major diff --git a/.github/workflows/check-generated-files.yml b/.github/workflows/check-generated-files.yml index 86502340..a5be08c0 100644 --- a/.github/workflows/check-generated-files.yml +++ b/.github/workflows/check-generated-files.yml @@ -41,10 +41,10 @@ jobs: - .github/workflows/check-generated-files.yml - plugins/cli/guest-js/** - plugins/cli/src/api-iife.js - clipboard: + clipboard-manager: - .github/workflows/check-generated-files.yml - - plugins/clipboard/guest-js/** - - plugins/clipboard/src/api-iife.js + - plugins/clipboard-manager/guest-js/** + - plugins/clipboard-manager/src/api-iife.js dialog: - .github/workflows/check-generated-files.yml - plugins/dialog/guest-js/** diff --git a/.github/workflows/lint-rust.yml b/.github/workflows/lint-rust.yml index 77ade591..720fb77d 100644 --- a/.github/workflows/lint-rust.yml +++ b/.github/workflows/lint-rust.yml @@ -53,9 +53,9 @@ jobs: tauri-plugin-cli: - .github/workflows/lint-rust.yml - plugins/cli/** - tauri-plugin-clipboard: + tauri-plugin-clipboard-manager: - .github/workflows/lint-rust.yml - - plugins/clipboard/** + - plugins/clipboard-manager/** tauri-plugin-dialog: - .github/workflows/lint-rust.yml - plugins/dialog/** diff --git a/.github/workflows/test-rust.yml b/.github/workflows/test-rust.yml index 6d4458ee..cf0de8e1 100644 --- a/.github/workflows/test-rust.yml +++ b/.github/workflows/test-rust.yml @@ -55,9 +55,9 @@ jobs: tauri-plugin-cli: - .github/workflows/test-rust.yml - plugins/cli/** - tauri-plugin-clipboard: + tauri-plugin-clipboard-manager: - .github/workflows/test-rust.yml - - plugins/clipboard/** + - plugins/clipboard-manager/** tauri-plugin-dialog: - .github/workflows/test-rust.yml - plugins/dialog/** diff --git a/Cargo.lock b/Cargo.lock index 9b2c7533..5fe18839 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -215,7 +215,7 @@ dependencies = [ "tauri-build", "tauri-plugin-app", "tauri-plugin-cli", - "tauri-plugin-clipboard", + "tauri-plugin-clipboard-manager", "tauri-plugin-dialog", "tauri-plugin-fs", "tauri-plugin-global-shortcut", @@ -5158,7 +5158,7 @@ dependencies = [ ] [[package]] -name = "tauri-plugin-clipboard" +name = "tauri-plugin-clipboard-manager" version = "2.0.0-alpha.0" dependencies = [ "arboard", diff --git a/examples/api/package.json b/examples/api/package.json index a47f5a82..74272660 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -13,7 +13,7 @@ "@zerodevx/svelte-json-view": "0.2.1", "@tauri-apps/plugin-app": "2.0.0-alpha.0", "@tauri-apps/plugin-cli": "2.0.0-alpha.0", - "@tauri-apps/plugin-clipboard": "2.0.0-alpha.0", + "@tauri-apps/plugin-clipboard-manager": "2.0.0-alpha.0", "@tauri-apps/plugin-dialog": "2.0.0-alpha.0", "@tauri-apps/plugin-fs": "2.0.0-alpha.0", "@tauri-apps/plugin-global-shortcut": "2.0.0-alpha.0", diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index f7ec0eec..06428b8e 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -21,7 +21,7 @@ log = { workspace = true } tauri-plugin-app = { path = "../../../plugins/app", version = "2.0.0-alpha.0" } tauri-plugin-log = { path = "../../../plugins/log", version = "2.0.0-alpha.0" } tauri-plugin-fs = { path = "../../../plugins/fs", version = "2.0.0-alpha.0" } -tauri-plugin-clipboard = { path = "../../../plugins/clipboard", version = "2.0.0-alpha.0" } +tauri-plugin-clipboard-manager = { path = "../../../plugins/clipboard-manager", version = "2.0.0-alpha.0" } tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "2.0.0-alpha.0" } tauri-plugin-http = { path = "../../../plugins/http", features = [ "multipart" ], version = "2.0.0-alpha.0" } tauri-plugin-notification = { path = "../../../plugins/notification", version = "2.0.0-alpha.0", features = [ "windows7-compat" ] } diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index 41be8760..812091e5 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -33,7 +33,7 @@ pub fn run() { ) .plugin(tauri_plugin_app::init()) .plugin(tauri_plugin_fs::init()) - .plugin(tauri_plugin_clipboard::init()) + .plugin(tauri_plugin_clipboard_manager::init()) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_http::init()) .plugin(tauri_plugin_notification::init()) diff --git a/examples/api/src/views/Clipboard.svelte b/examples/api/src/views/Clipboard.svelte index d75cfbcc..f571b2ee 100644 --- a/examples/api/src/views/Clipboard.svelte +++ b/examples/api/src/views/Clipboard.svelte @@ -1,5 +1,5 @@