From a95fb473a242657ea28d36d31ebf61904bbfe04f Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Thu, 11 May 2023 09:33:24 -0700 Subject: [PATCH] feat(updater): add plugin (#350) Co-authored-by: Fabian-Lars --- Cargo.toml | 2 +- examples/api/package.json | 3 +- examples/api/src-tauri/Cargo.lock | 1149 +++-- examples/api/src-tauri/Cargo.toml | 1 + examples/api/src-tauri/src/lib.rs | 1 + examples/api/src/views/Updater.svelte | 102 +- package.json | 2 +- plugins/cli/README.md | 2 +- plugins/updater/Cargo.lock | 4184 +++++++++++++++++ plugins/updater/Cargo.toml | 39 + plugins/updater/LICENSE.spdx | 20 + plugins/updater/LICENSE_APACHE-2.0 | 177 + plugins/updater/LICENSE_MIT | 21 + plugins/updater/README.md | 65 + plugins/updater/build.rs | 14 + plugins/updater/guest-js/index.ts | 84 + plugins/updater/package.json | 32 + plugins/updater/rollup.config.mjs | 11 + plugins/updater/src/commands.rs | 102 + plugins/updater/src/error.rs | 90 + plugins/updater/src/lib.rs | 77 + plugins/updater/src/updater/core.rs | 1672 +++++++ plugins/updater/src/updater/mod.rs | 307 ++ plugins/updater/tests/app-updater/.gitignore | 0 plugins/updater/tests/app-updater/Cargo.lock | 3852 +++++++++++++++ plugins/updater/tests/app-updater/Cargo.toml | 20 + plugins/updater/tests/app-updater/build.rs | 7 + .../tests/app-updater/icons/128x128.png | Bin 0 -> 11059 bytes .../tests/app-updater/icons/128x128@2x.png | Bin 0 -> 23137 bytes .../updater/tests/app-updater/icons/32x32.png | Bin 0 -> 2225 bytes .../updater/tests/app-updater/icons/icon.icns | Bin 0 -> 277003 bytes .../updater/tests/app-updater/icons/icon.ico | Bin 0 -> 37710 bytes .../updater/tests/app-updater/icons/icon.png | Bin 0 -> 49979 bytes plugins/updater/tests/app-updater/src/main.rs | 49 + .../updater/tests/app-updater/tauri.conf.json | 38 + .../updater/tests/app-updater/tests/update.rs | 298 ++ plugins/updater/tsconfig.json | 4 + pnpm-lock.yaml | 13 + 38 files changed, 11930 insertions(+), 508 deletions(-) create mode 100644 plugins/updater/Cargo.lock create mode 100644 plugins/updater/Cargo.toml create mode 100644 plugins/updater/LICENSE.spdx create mode 100644 plugins/updater/LICENSE_APACHE-2.0 create mode 100644 plugins/updater/LICENSE_MIT create mode 100644 plugins/updater/README.md create mode 100644 plugins/updater/build.rs create mode 100644 plugins/updater/guest-js/index.ts create mode 100644 plugins/updater/package.json create mode 100644 plugins/updater/rollup.config.mjs create mode 100644 plugins/updater/src/commands.rs create mode 100644 plugins/updater/src/error.rs create mode 100644 plugins/updater/src/lib.rs create mode 100644 plugins/updater/src/updater/core.rs create mode 100644 plugins/updater/src/updater/mod.rs create mode 100644 plugins/updater/tests/app-updater/.gitignore create mode 100644 plugins/updater/tests/app-updater/Cargo.lock create mode 100644 plugins/updater/tests/app-updater/Cargo.toml create mode 100644 plugins/updater/tests/app-updater/build.rs create mode 100644 plugins/updater/tests/app-updater/icons/128x128.png create mode 100644 plugins/updater/tests/app-updater/icons/128x128@2x.png create mode 100644 plugins/updater/tests/app-updater/icons/32x32.png create mode 100644 plugins/updater/tests/app-updater/icons/icon.icns create mode 100644 plugins/updater/tests/app-updater/icons/icon.ico create mode 100644 plugins/updater/tests/app-updater/icons/icon.png create mode 100644 plugins/updater/tests/app-updater/src/main.rs create mode 100644 plugins/updater/tests/app-updater/tauri.conf.json create mode 100644 plugins/updater/tests/app-updater/tests/update.rs create mode 100644 plugins/updater/tsconfig.json diff --git a/Cargo.toml b/Cargo.toml index 44306836..acfc6598 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] members = ["plugins/*", "examples/*/src-tauri"] -exclude = ["plugins/fs", "plugins/http", "examples/api/src-tauri"] +exclude = ["plugins/fs", "plugins/http", "plugins/updater", "examples/api/src-tauri"] resolver = "2" [workspace.dependencies] diff --git a/examples/api/package.json b/examples/api/package.json index 1b129026..ff0a11bf 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -21,7 +21,8 @@ "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-shell-api": "0.0.0", + "tauri-plugin-updater-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 9871bc69..a83fefe3 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -10,9 +10,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", "generic-array", @@ -52,6 +52,15 @@ 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" @@ -85,11 +94,20 @@ dependencies = [ "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.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" dependencies = [ "anstyle", "anstyle-parse", @@ -126,9 +144,9 @@ dependencies = [ [[package]] name = "anstyle-wincon" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" dependencies = [ "anstyle", "windows-sys 0.48.0", @@ -136,9 +154,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "api" @@ -161,6 +179,7 @@ dependencies = [ "tauri-plugin-os", "tauri-plugin-process", "tauri-plugin-shell", + "tauri-plugin-updater", "tiny_http", "window-shadows", ] @@ -214,9 +233,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" +checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" dependencies = [ "async-lock", "async-task", @@ -269,13 +288,13 @@ dependencies = [ [[package]] name = "async-recursion" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" +checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -286,13 +305,13 @@ checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -321,9 +340,9 @@ dependencies = [ [[package]] name = "atomic-waker" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599" +checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" [[package]] name = "autocfg" @@ -357,18 +376,18 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "blocking" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8" +checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" dependencies = [ "async-channel", "async-lock", @@ -376,6 +395,7 @@ dependencies = [ "atomic-waker", "fastrand", "futures-lite", + "log", ] [[package]] @@ -411,9 +431,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b" [[package]] name = "byte-unit" @@ -427,9 +447,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "byteorder" @@ -473,9 +493,9 @@ 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", @@ -506,11 +526,12 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.11.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa" +checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9" dependencies = [ "smallvec", + "target-lexicon", ] [[package]] @@ -519,6 +540,19 @@ 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" @@ -527,9 +561,9 @@ checksum = "cca491388666e04d7248af3f60f0c40cfb0991c72205595d7c396e3510207d1a" [[package]] name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -537,18 +571,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.2" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b802d85aaf3a1cdb02b224ba472ebdea62014fccfcb269b95a4d76443b5ee5a" +checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.2.2" +version = "4.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14a1a858f532119338887a4b8e1af9c60de8249cd7bafd68036a489e261e37b6" +checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" dependencies = [ "anstream", "anstyle", @@ -592,9 +626,9 @@ dependencies = [ [[package]] name = "cocoa-foundation" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" dependencies = [ "bitflags", "block", @@ -605,6 +639,16 @@ dependencies = [ "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" @@ -629,9 +673,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" +checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" dependencies = [ "crossbeam-utils", ] @@ -654,9 +698,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core-graphics" @@ -685,9 +729,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] @@ -703,9 +747,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -713,9 +757,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ "cfg-if", ] @@ -745,7 +789,7 @@ dependencies = [ "proc-macro2", "quote", "smallvec", - "syn", + "syn 1.0.109", ] [[package]] @@ -755,7 +799,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -765,7 +809,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -777,11 +821,55 @@ 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.13.4" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" dependencies = [ "darling_core", "darling_macro", @@ -789,27 +877,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.13.4" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.15", ] [[package]] name = "darling_macro" -version = "0.13.4" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -820,7 +908,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -832,8 +920,8 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", - "syn", + "rustc_version", + "syn 1.0.109", ] [[package]] @@ -846,15 +934,6 @@ dependencies = [ "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" @@ -865,17 +944,6 @@ dependencies = [ "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" @@ -910,9 +978,22 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.3" +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 = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c" +checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a" +dependencies = [ + "cc", + "rustc_version", + "toml", + "vswhom", + "winreg 0.11.0", +] [[package]] name = "embed_plist" @@ -931,9 +1012,9 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ "enumflags2_derive", "serde", @@ -941,13 +1022,13 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.4" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -962,13 +1043,13 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -999,13 +1080,22 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +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" @@ -1017,31 +1107,31 @@ dependencies = [ [[package]] name = "field-offset" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" +checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535" dependencies = [ - "memoffset 0.6.5", - "rustc_version 0.3.3", + "memoffset 0.8.0", + "rustc_version", ] [[package]] name = "filetime" -version = "0.2.19" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.42.0", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", ] [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", "miniz_oxide", @@ -1089,24 +1179,24 @@ 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", ] [[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" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -1115,15 +1205,15 @@ 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" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ "fastrand", "futures-core", @@ -1136,32 +1226,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.15", ] [[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-core", "futures-io", @@ -1271,22 +1361,22 @@ dependencies = [ [[package]] name = "generator" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266041a359dfa931b370ef684cceb84b166beb14f7f0421f4a6a3d0c446d12e" +checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a" dependencies = [ "cc", "libc", "log", "rustversion", - "windows 0.39.0", + "windows 0.48.0", ] [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -1315,9 +1405,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "libc", @@ -1391,9 +1481,9 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.16.3" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e084807350b01348b6d9dbabb724d1a0bb987f47a2c85de200e98e12e30733bf" +checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" dependencies = [ "anyhow", "heck 0.4.1", @@ -1401,7 +1491,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1440,7 +1530,7 @@ version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" dependencies = [ - "aho-corasick", + "aho-corasick 0.7.20", "bstr", "fnv", "log", @@ -1501,23 +1591,23 @@ dependencies = [ [[package]] name = "gtk3-macros" -version = "0.16.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfd6557b1018b773e43c8de9d0d13581d6b36190d0501916cbec4731db5ccff" +checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8" dependencies = [ "anyhow", "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "h2" -version = "0.3.15" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" dependencies = [ "bytes", "fnv", @@ -1585,7 +1675,7 @@ dependencies = [ "markup5ever", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1596,7 +1686,7 @@ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", - "itoa 1.0.5", + "itoa 1.0.6", ] [[package]] @@ -1630,9 +1720,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" dependencies = [ "bytes", "futures-channel", @@ -1643,7 +1733,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.5", + "itoa 1.0.6", "pin-project-lite", "socket2", "tokio", @@ -1652,6 +1742,30 @@ dependencies = [ "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" @@ -1707,9 +1821,9 @@ dependencies = [ [[package]] name = "image" -version = "0.24.5" +version = "0.24.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" dependencies = [ "bytemuck", "byteorder", @@ -1722,12 +1836,13 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", + "serde", ] [[package]] @@ -1779,9 +1894,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" [[package]] name = "is-docker" @@ -1822,9 +1937,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "javascriptcore-rs" @@ -1877,18 +1992,18 @@ checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" [[package]] name = "js-sys" -version = "0.3.61" +version = "0.3.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5" dependencies = [ "wasm-bindgen", ] [[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", @@ -1951,9 +2066,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.139" +version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" [[package]] name = "libloading" @@ -1974,11 +2089,20 @@ 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.1" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" +checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" [[package]] name = "lock_api" @@ -2096,11 +2220,20 @@ 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.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" @@ -2120,23 +2253,24 @@ checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", + "simd-adler32", ] [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -2195,7 +2329,6 @@ dependencies = [ "cfg-if", "libc", "memoffset 0.7.1", - "pin-utils", "static_assertions", ] @@ -2205,21 +2338,13 @@ 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.0" +version = "4.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ce656bb6d22a93ae276a23de52d1aec5ba4db3ece3c0eb79dfd5add7384db6a" +checksum = "2bfa211d18e360f08e36c364308f394b5eb23a6629150690e109a916dc6f610e" dependencies = [ + "log", "mac-notification-sys", "serde", "tauri-winrt-notification", @@ -2278,23 +2403,23 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d829733185c1ca374f17e52b762f24f535ec625d2cc1f070e34c8a9068f341b" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2be1598bf1c313dcdd12092e3f1920f463462525a21b7b4e11b4168353d0123e" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2347,9 +2472,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -2379,9 +2504,9 @@ dependencies = [ [[package]] name = "os_info" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c424bc68d15e0778838ac013b5b3449544d8133633d8016319e7e05a820b8c0" +checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" dependencies = [ "log", "serde", @@ -2390,12 +2515,12 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12" +checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177" dependencies = [ "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2432,9 +2557,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" +checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" [[package]] name = "parking_lot" @@ -2454,7 +2579,7 @@ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "windows-sys 0.45.0", ] @@ -2471,16 +2596,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" -[[package]] -name = "pest" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab62d2fa33726dbe6321cc97ef96d8cde531e3eeaf858a058de53a8a6d40d8f" -dependencies = [ - "thiserror", - "ucd-trie", -] - [[package]] name = "phf" version = "0.8.0" @@ -2544,7 +2659,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2558,7 +2673,7 @@ dependencies = [ "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2593,41 +2708,42 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "plist" -version = "1.4.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5329b8f106a176ab0dce4aae5da86bfcb139bb74fb00882859e03745011f3635" +checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" dependencies = [ - "base64 0.13.1", + "base64 0.21.0", "indexmap", "line-wrap", - "quick-xml 0.26.0", + "quick-xml 0.28.2", "serde", "time", ] [[package]] name = "png" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" dependencies = [ "bitflags", "crc32fast", + "fdeflate", "flate2", "miniz_oxide", ] [[package]] name = "polling" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", "bitflags", @@ -2636,7 +2752,7 @@ dependencies = [ "libc", "log", "pin-project-lite", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -2665,9 +2781,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "proc-macro-crate" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", "toml_edit", @@ -2682,7 +2798,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -2705,9 +2821,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -2723,18 +2839,18 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.26.0" +version = "0.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" +checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" dependencies = [ "memchr", ] [[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", ] @@ -2799,7 +2915,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", ] [[package]] @@ -2822,9 +2938,9 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f851a03551ceefd30132e447f07f96cb7011d6b658374f3aed847333adb5559" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "redox_syscall" @@ -2835,26 +2951,35 @@ 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.8", - "redox_syscall", + "getrandom 0.2.9", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.7.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" dependencies = [ - "aho-corasick", + "aho-corasick 1.0.1", "memchr", - "regex-syntax", + "regex-syntax 0.7.1", ] [[package]] @@ -2863,29 +2988,26 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", ] [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "regex-syntax" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" [[package]] name = "reqwest" -version = "0.11.14" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" dependencies = [ "base64 0.21.0", "bytes", @@ -2915,17 +3037,19 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg", + "winreg 0.10.1", ] [[package]] name = "rfd" -version = "0.11.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2583255eadc4e0d816cb7648371cc91e49cbac85b0748b6ab417093bff4040" +checksum = "7cb2988ec50c9bcdb0c012b89643a6094a35a785a37897211ee62e1639342f7b" dependencies = [ + "async-io", "block", "dispatch", + "futures-util", "glib-sys", "gobject-sys", "gtk-sys", @@ -2941,49 +3065,40 @@ dependencies = [ "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", + "semver", ] [[package]] name = "rustix" -version = "0.37.3" +version = "0.37.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b24138615de35e32031d041a09032ef3487a616d901ca4db224e7d557efae2" +checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safemem" @@ -3012,6 +3127,12 @@ 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" @@ -3034,71 +3155,62 @@ dependencies = [ [[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" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" 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" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "serde_json" -version = "1.0.92" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7434af0dc1cbd59268aa98b4c22c131c0584d2232f6fb166efb993e2832e896a" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ - "itoa 1.0.5", + "itoa 1.0.6", "ryu", "serde", ] [[package]] name = "serde_repr" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn", + "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]] @@ -3108,31 +3220,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.5", + "itoa 1.0.6", "ryu", "serde", ] [[package]] name = "serde_with" -version = "1.14.0" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "indexmap", "serde", + "serde_json", "serde_with_macros", + "time", ] [[package]] name = "serde_with_macros" -version = "1.5.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -3154,7 +3272,7 @@ checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3208,6 +3326,12 @@ dependencies = [ "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" @@ -3216,9 +3340,9 @@ checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg", ] @@ -3231,9 +3355,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -3296,9 +3420,9 @@ checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" [[package]] name = "string_cache" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", @@ -3344,7 +3468,7 @@ dependencies = [ "heck 0.3.3", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3355,9 +3479,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "swift-rs" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fa67d647176dfa7bdc5775430a1cb339e0ea48fe24707424023a4b17eb9688e" +checksum = "05e51d6f2b5fff4808614f429f8a7655ac8bcfe218185413f3a60c508482c2d6" dependencies = [ "base64 0.21.0", "serde", @@ -3366,9 +3490,20 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.107" +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 = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" dependencies = [ "proc-macro2", "quote", @@ -3377,9 +3512,9 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.0.3" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff" +checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2" dependencies = [ "cfg-expr", "heck 0.4.1", @@ -3390,9 +3525,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389820c5cd5279ffdde7729baa9cf4db20e9936e11b1e171a20fb74babe3a6d3" +checksum = "746ae5d0ca57ae275a792f109f6e992e0b41a443abdf3f5c6eff179ef5b3443a" dependencies = [ "bitflags", "cairo-rs", @@ -3445,7 +3580,7 @@ checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3459,13 +3594,18 @@ dependencies = [ "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#bb2a8ccf1356e59b98947d827d61e4e99533f2bc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" dependencies = [ "anyhow", - "base64 0.21.0", "bytes", "cocoa", "dirs-next", @@ -3484,16 +3624,14 @@ dependencies = [ "jni", "libc", "log", - "minisign-verify", "objc", "once_cell", - "os_info", "percent-encoding", "png", "rand 0.8.5", "raw-window-handle", "reqwest", - "semver 1.0.16", + "semver", "serde", "serde_json", "serde_repr", @@ -3521,7 +3659,7 @@ dependencies = [ [[package]] name = "tauri-build" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#bb2a8ccf1356e59b98947d827d61e4e99533f2bc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" dependencies = [ "anyhow", "cargo_toml", @@ -3529,7 +3667,7 @@ dependencies = [ "heck 0.4.1", "json-patch", "quote", - "semver 1.0.16", + "semver", "serde", "serde_json", "swift-rs", @@ -3542,7 +3680,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#bb2a8ccf1356e59b98947d827d61e4e99533f2bc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" dependencies = [ "base64 0.21.0", "brotli", @@ -3552,7 +3690,7 @@ dependencies = [ "png", "proc-macro2", "quote", - "semver 1.0.16", + "semver", "serde", "serde_json", "sha2", @@ -3567,12 +3705,12 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#bb2a8ccf1356e59b98947d827d61e4e99533f2bc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "tauri-codegen", "tauri-utils", ] @@ -3734,10 +3872,32 @@ dependencies = [ "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-runtime" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#bb2a8ccf1356e59b98947d827d61e4e99533f2bc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" dependencies = [ "gtk", "http", @@ -3758,7 +3918,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" version = "0.13.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#bb2a8ccf1356e59b98947d827d61e4e99533f2bc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" dependencies = [ "cocoa", "gtk", @@ -3778,12 +3938,12 @@ dependencies = [ [[package]] name = "tauri-utils" version = "2.0.0-alpha.4" -source = "git+https://github.com/tauri-apps/tauri?branch=next#bb2a8ccf1356e59b98947d827d61e4e99533f2bc" +source = "git+https://github.com/tauri-apps/tauri?branch=next#9122e27ed863a5cb2bf13dc0dd0433c7387e141b" dependencies = [ "aes-gcm", "brotli", "ctor", - "getrandom 0.2.8", + "getrandom 0.2.9", "glob", "heck 0.4.1", "html5ever", @@ -3794,7 +3954,7 @@ dependencies = [ "phf 0.10.1", "proc-macro2", "quote", - "semver 1.0.16", + "semver", "serde", "serde_json", "serde_with", @@ -3807,12 +3967,12 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7a78dc04f75fb5ab815e66ac561c81e92a968a40f29e7c21afd152d694fad8" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" dependencies = [ + "embed-resource", "toml", - "version_check", ] [[package]] @@ -3828,16 +3988,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.3.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.45.0", ] [[package]] @@ -3851,6 +4010,15 @@ dependencies = [ "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" @@ -3859,30 +4027,31 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -3899,11 +4068,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc" dependencies = [ - "itoa 1.0.5", + "itoa 1.0.6", "libc", "num_threads", "serde", @@ -3913,15 +4082,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" dependencies = [ "time-core", ] @@ -3956,26 +4125,25 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.25.0" +version = "1.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", "pin-project-lite", "socket2", - "windows-sys 0.42.0", + "windows-sys 0.48.0", ] [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" dependencies = [ "bytes", "futures-core", @@ -3987,28 +4155,36 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] name = "toml_datetime" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.18.1" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" dependencies = [ "indexmap", - "nom8", + "serde", + "serde_spanned", "toml_datetime", + "winnow", ] [[package]] @@ -4031,13 +4207,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] @@ -4063,9 +4239,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ "matchers", "nu-ansi-term", @@ -4100,12 +4276,6 @@ 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" @@ -4127,15 +4297,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -4152,6 +4322,12 @@ 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" @@ -4194,11 +4370,11 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" +checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" dependencies = [ - "getrandom 0.2.8", + "getrandom 0.2.9", ] [[package]] @@ -4229,6 +4405,26 @@ 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" @@ -4237,12 +4433,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -4270,9 +4465,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.84" +version = "0.2.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4280,24 +4475,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.84" +version = "0.2.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.15", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163" dependencies = [ "cfg-if", "js-sys", @@ -4307,9 +4502,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.84" +version = "0.2.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4317,22 +4512,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.84" +version = "0.2.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.84" +version = "0.2.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" +checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb" [[package]] name = "wasm-streams" @@ -4349,9 +4544,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.61" +version = "0.3.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721" dependencies = [ "js-sys", "wasm-bindgen", @@ -4403,9 +4598,9 @@ dependencies = [ [[package]] name = "webview2-com" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03411e89ec447e29c08b3c086edeb88c5f8fd782cbdd4d6d316bea439be7a244" +checksum = "11296e5daf3a653b79bf47d66c380e4143d5b9c975818871179a3bda79499562" dependencies = [ "webview2-com-macros", "webview2-com-sys", @@ -4421,14 +4616,14 @@ checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "webview2-com-sys" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c0f5ce43e9611c5b2983a33156d6abe31abf39185bad84a6766c80ba1dbf1ab" +checksum = "cde542bed28058a5b028d459689ee57f1d06685bb6c266da3b91b1be6703952f" dependencies = [ "regex", "serde", @@ -4528,7 +4723,16 @@ checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" dependencies = [ "windows-implement", "windows-interface", - "windows-targets 0.42.1", + "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]] @@ -4549,7 +4753,7 @@ checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4560,7 +4764,7 @@ checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4588,13 +4792,13 @@ 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]] @@ -4603,7 +4807,7 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets 0.42.1", + "windows-targets 0.42.2", ] [[package]] @@ -4617,17 +4821,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 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]] @@ -4653,9 +4857,9 @@ checksum = "fa4251900975a0d10841c5d4bde79c56681543367ef811f3fabb8d1803b0959b" [[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" @@ -4677,9 +4881,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" @@ -4701,9 +4905,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" @@ -4725,9 +4929,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" @@ -4749,9 +4953,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" @@ -4761,9 +4965,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" @@ -4785,9 +4989,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" @@ -4795,6 +4999,15 @@ 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" @@ -4804,6 +5017,16 @@ 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" @@ -4895,11 +5118,21 @@ 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.11.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dc29e76f558b2cb94190e8605ecfe77dd40f5df8c072951714b4b71a97f5848" +checksum = "29242fa5ec5693629ae74d6eb1f69622a9511f600986d6d9779bccf36ac316e3" dependencies = [ "async-broadcast", "async-executor", @@ -4911,7 +5144,6 @@ dependencies = [ "async-trait", "byteorder", "derivative", - "dirs", "enumflags2", "event-listener", "futures-core", @@ -4929,6 +5161,7 @@ dependencies = [ "tracing", "uds_windows", "winapi", + "xdg-home", "zbus_macros", "zbus_names", "zvariant", @@ -4936,15 +5169,15 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.11.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62a80fd82c011cd08459eaaf1fd83d3090c1b61e6d5284360074a7475af3a85d" +checksum = "537793e26e9af85f774801dc52c6f6292352b2b517c5cf0449ffd3735732a53a" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "regex", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -4961,9 +5194,9 @@ dependencies = [ [[package]] name = "zip" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef" +checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" dependencies = [ "byteorder", "crc32fast", @@ -4993,7 +5226,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "zvariant_utils", ] @@ -5005,5 +5238,5 @@ checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml index 771ba39b..4d30e57d 100644 --- a/examples/api/src-tauri/Cargo.toml +++ b/examples/api/src-tauri/Cargo.toml @@ -27,6 +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-updater = { path = "../../../plugins/updater" } [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 2a8ddfb1..9e146179 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -40,6 +40,7 @@ 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()) .setup(move |app| { #[cfg(desktop)] { diff --git a/examples/api/src/views/Updater.svelte b/examples/api/src/views/Updater.svelte index 9536a7a2..faaa3e5b 100644 --- a/examples/api/src/views/Updater.svelte +++ b/examples/api/src/views/Updater.svelte @@ -1,76 +1,86 @@
{#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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
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':

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 z 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