From 5264e41db3763e4c2eb0c3c21bd423fb7bece3e2 Mon Sep 17 00:00:00 2001 From: Fabian-Lars Date: Mon, 23 Oct 2023 20:12:00 +0200 Subject: [PATCH 01/45] fix(deps): Downgrade minisign to 0.7.3 again (#8082) --- .changes/cli-downgrade-rust-minisign.md | 6 ++++++ tooling/cli/Cargo.lock | 4 ++-- tooling/cli/Cargo.toml | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 .changes/cli-downgrade-rust-minisign.md diff --git a/.changes/cli-downgrade-rust-minisign.md b/.changes/cli-downgrade-rust-minisign.md new file mode 100644 index 000000000..ebf615b68 --- /dev/null +++ b/.changes/cli-downgrade-rust-minisign.md @@ -0,0 +1,6 @@ +--- +'tauri-cli': 'patch:bug' +'@tauri-apps/cli': 'patch:bug' +--- + +Downgraded `rust-minisign` to `0.7.3` to fix signing updater bundles with empty passwords. diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index 157c881e6..78c5a7ccc 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -1764,9 +1764,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "minisign" -version = "0.7.5" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b6f58413c6cee060115673578e47271838f3c87cb9322c61a3bcd6d740b7d2" +checksum = "b23ef13ff1d745b1e52397daaa247e333c607f3cff96d4df2b798dc252db974b" dependencies = [ "getrandom 0.2.10", "rpassword", diff --git a/tooling/cli/Cargo.toml b/tooling/cli/Cargo.toml index e6ef98d57..086c4326a 100644 --- a/tooling/cli/Cargo.toml +++ b/tooling/cli/Cargo.toml @@ -57,7 +57,7 @@ toml = "0.8" jsonschema = "0.17" handlebars = "4.4" include_dir = "0.7" -minisign = "=0.7.5" +minisign = "=0.7.3" base64 = "0.21.4" ureq = { version = "2.8", default-features = false, features = [ "gzip" ] } os_info = "3" From 13ce9ac836f4b0c95f31e85c59793dc29a6d6410 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 23 Oct 2023 19:43:01 -0300 Subject: [PATCH 02/45] fix: e2e test using invalid updater private keys (#8086) --- core/tests/app-updater/tests/update.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/tests/app-updater/tests/update.rs b/core/tests/app-updater/tests/update.rs index a21821467..b932b6543 100644 --- a/core/tests/app-updater/tests/update.rs +++ b/core/tests/app-updater/tests/update.rs @@ -13,11 +13,11 @@ use std::{ use serde::Serialize; -const UPDATER_PRIVATE_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5YTBGV3JiTy9lRDZVd3NkL0RoQ1htZmExNDd3RmJaNmRMT1ZGVjczWTBKZ0FBQkFBQUFBQUFBQUFBQUlBQUFBQWdMekUzVkE4K0tWQ1hjeGt1Vkx2QnRUR3pzQjVuV0ZpM2czWXNkRm9hVUxrVnB6TUN3K1NheHJMREhQbUVWVFZRK3NIL1VsMDBHNW5ET1EzQno0UStSb21nRW4vZlpTaXIwZFh5ZmRlL1lSN0dKcHdyOUVPclVvdzFhVkxDVnZrbHM2T1o4Tk1NWEU9Cg=="; -// const UPDATER_PUBLIC_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK"; +const UPDATER_PRIVATE_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5dkpDN09RZm5GeVAzc2RuYlNzWVVJelJRQnNIV2JUcGVXZUplWXZXYXpqUUFBQkFBQUFBQUFBQUFBQUlBQUFBQTZrN2RnWGh5dURxSzZiL1ZQSDdNcktiaHRxczQwMXdQelRHbjRNcGVlY1BLMTBxR2dpa3I3dDE1UTVDRDE4MXR4WlQwa1BQaXdxKy9UU2J2QmVSNXhOQWFDeG1GSVllbUNpTGJQRkhhTnROR3I5RmdUZi90OGtvaGhJS1ZTcjdZU0NyYzhQWlQ5cGM9Cg=="; +// const UPDATER_PUBLIC_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEZFOUJFNDg1NTU4NUZDQUQKUldTdC9JVlZoZVNiL2tVVG1hSFRETjRIZXE0a0F6d3dSY2ViYzdrSFh2MjBGWm1jM0NoWVFqM1YK"; -const UPDATER_PRIVATE_KEY_NEXT: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5Vm1kaFhCeEh0N2svRy85djJQbmNGTnk3TUQ1emJRWTF3Y01INW9OZjJwSUFBQkFBQUFBQUFBQUFBQUlBQUFBQS9YRStJU1RjK1JmUS9QK0F3WmdaMFE0RmUrcVY1RXhkL0VaYVZEeTVDNHREWnE2Y21yTVZCcW0rM1lKOUVLd1p1MWVPVFN5WmZBZEUxYnVtT3BnWW93TDZZRnYra1FUblFXazBVempRUFZOTnFRSjdod05LMjhvK3M0VGhoR0V4YWkzWUpOQXBIcEU9Cg=="; -const UPDATER_PUBLIC_KEY_NEXT: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE3RjlEQzI0MjEzRTcxRkQKUldUOWNUNGhKTno1RjZtKzNZSjlFS3dadTFlT1RTeVpmQWRFMWJ1bU9wZ1lvd0w2WUZ2K2tRVG4K"; +const UPDATER_PRIVATE_KEY_NEXT: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5OUxRK2FpTzVPQWt6M2laMWNodDI5QnJEL1Y2Z3pjREprTW9TMkc1Z1BuWUFBQkFBQUFBQUFBQUFBQUlBQUFBQVFCTkRHdHZlLzRTbHIxSUNXdFY0VnZaODhLdGExa1B4R240UGdqekFRcVNDd2xkeDMvZkFZZTJEYUxqSE5BZnc2Sk5VNGdmU0Y0Nml3QU92WWRaRlFGUUtaZWNSMWxjaisyc1pZSUk0RXB1N3BrbXlSYitZMHR0MEVsOUdxZk56eEZoZ0diUXRXLzg9Cg=="; +const UPDATER_PUBLIC_KEY_NEXT: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDg5Nzg5MDdEREM5MDNBRjkKUldUNU9wRGNmWkI0aWZtY0toN3lxeHRJMmJ5bjFWdit6eXB2QWtJMVhzYjdrc3VIdDQxVVFwMVQK"; #[derive(Serialize)] struct PackageConfig { From ae75004cee126c4bac332643c49869d2cfe38ad1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 21:20:02 -0300 Subject: [PATCH 03/45] Apply Version Updates From Current Changes (v1) (#8065) Co-authored-by: lucasfernog --- .changes/cli-downgrade-rust-minisign.md | 6 ------ .changes/nsis-german.md | 5 ----- tooling/bundler/CHANGELOG.md | 6 ++++++ tooling/bundler/Cargo.toml | 2 +- tooling/cli/CHANGELOG.md | 10 ++++++++++ tooling/cli/Cargo.lock | 4 ++-- tooling/cli/Cargo.toml | 4 ++-- tooling/cli/metadata.json | 2 +- tooling/cli/node/CHANGELOG.md | 10 ++++++++++ tooling/cli/node/package.json | 2 +- 10 files changed, 33 insertions(+), 18 deletions(-) delete mode 100644 .changes/cli-downgrade-rust-minisign.md delete mode 100644 .changes/nsis-german.md diff --git a/.changes/cli-downgrade-rust-minisign.md b/.changes/cli-downgrade-rust-minisign.md deleted file mode 100644 index ebf615b68..000000000 --- a/.changes/cli-downgrade-rust-minisign.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'tauri-cli': 'patch:bug' -'@tauri-apps/cli': 'patch:bug' ---- - -Downgraded `rust-minisign` to `0.7.3` to fix signing updater bundles with empty passwords. diff --git a/.changes/nsis-german.md b/.changes/nsis-german.md deleted file mode 100644 index 8425d0cf2..000000000 --- a/.changes/nsis-german.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'tauri-bundler': 'patch:enhance' ---- - -Added German language support to the NSIS bundler. diff --git a/tooling/bundler/CHANGELOG.md b/tooling/bundler/CHANGELOG.md index c055cbc6d..c7de9c973 100644 --- a/tooling/bundler/CHANGELOG.md +++ b/tooling/bundler/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[1.4.5] + +### Enhancements + +- [`cfe6fa6c`](https://www.github.com/tauri-apps/tauri/commit/cfe6fa6c91a8cc177d4665ba04dad32ba545159d)([#8061](https://www.github.com/tauri-apps/tauri/pull/8061)) Added German language support to the NSIS bundler. + ## \[1.4.4] ### Enhancements diff --git a/tooling/bundler/Cargo.toml b/tooling/bundler/Cargo.toml index 55e6e0430..c928d3e3b 100644 --- a/tooling/bundler/Cargo.toml +++ b/tooling/bundler/Cargo.toml @@ -2,7 +2,7 @@ workspace = { } [package] name = "tauri-bundler" -version = "1.4.4" +version = "1.4.5" authors = [ "George Burton ", "Tauri Programme within The Commons Conservancy" diff --git a/tooling/cli/CHANGELOG.md b/tooling/cli/CHANGELOG.md index 18f62aab5..51a391791 100644 --- a/tooling/cli/CHANGELOG.md +++ b/tooling/cli/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## \[1.5.6] + +### Bug Fixes + +- [`5264e41d`](https://www.github.com/tauri-apps/tauri/commit/5264e41db3763e4c2eb0c3c21bd423fb7bece3e2)([#8082](https://www.github.com/tauri-apps/tauri/pull/8082)) Downgraded `rust-minisign` to `0.7.3` to fix signing updater bundles with empty passwords. + +### Dependencies + +- Upgraded to `tauri-bundler@1.4.5` + ## \[1.5.5] ### Enhancements diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index 78c5a7ccc..8e03dc3a2 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -3356,7 +3356,7 @@ dependencies = [ [[package]] name = "tauri-bundler" -version = "1.4.4" +version = "1.4.5" dependencies = [ "anyhow", "ar", @@ -3396,7 +3396,7 @@ dependencies = [ [[package]] name = "tauri-cli" -version = "1.5.5" +version = "1.5.6" dependencies = [ "anyhow", "axum", diff --git a/tooling/cli/Cargo.toml b/tooling/cli/Cargo.toml index 086c4326a..b94ea2e3d 100644 --- a/tooling/cli/Cargo.toml +++ b/tooling/cli/Cargo.toml @@ -3,7 +3,7 @@ members = [ "node" ] [package] name = "tauri-cli" -version = "1.5.5" +version = "1.5.6" authors = [ "Tauri Programme within The Commons Conservancy" ] edition = "2021" rust-version = "1.60" @@ -42,7 +42,7 @@ path = "src/main.rs" clap_complete = "4" clap = { version = "4.4", features = [ "derive" ] } anyhow = "1.0" -tauri-bundler = { version = "1.4.4", path = "../bundler", default-features = false } +tauri-bundler = { version = "1.4.5", path = "../bundler", default-features = false } colored = "2.0" once_cell = "1" serde = { version = "1.0", features = [ "derive" ] } diff --git a/tooling/cli/metadata.json b/tooling/cli/metadata.json index 8ad9d6ba3..a3f1a25db 100644 --- a/tooling/cli/metadata.json +++ b/tooling/cli/metadata.json @@ -1,6 +1,6 @@ { "cli.js": { - "version": "1.5.5", + "version": "1.5.6", "node": ">= 10.0.0" }, "tauri": "1.5.2", diff --git a/tooling/cli/node/CHANGELOG.md b/tooling/cli/node/CHANGELOG.md index 12af690ce..df9ae75ff 100644 --- a/tooling/cli/node/CHANGELOG.md +++ b/tooling/cli/node/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## \[1.5.6] + +### Bug Fixes + +- [`5264e41d`](https://www.github.com/tauri-apps/tauri/commit/5264e41db3763e4c2eb0c3c21bd423fb7bece3e2)([#8082](https://www.github.com/tauri-apps/tauri/pull/8082)) Downgraded `rust-minisign` to `0.7.3` to fix signing updater bundles with empty passwords. + +### Dependencies + +- Upgraded to `tauri-cli@1.5.6` + ## \[1.5.5] ### Enhancements diff --git a/tooling/cli/node/package.json b/tooling/cli/node/package.json index 08fec7145..c618099c5 100644 --- a/tooling/cli/node/package.json +++ b/tooling/cli/node/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/cli", - "version": "1.5.5", + "version": "1.5.6", "description": "Command line interface for building Tauri apps", "funding": { "type": "opencollective", From a635ec23459a29bbe4d4b1ed6f4d5e9b7954d5f0 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 25 Oct 2023 19:13:48 -0300 Subject: [PATCH 04/45] feat(cli): add unit test for empty updater private key password (#8096) --- tooling/cli/src/helpers/updater_signature.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tooling/cli/src/helpers/updater_signature.rs b/tooling/cli/src/helpers/updater_signature.rs index 82923a229..972659dd8 100644 --- a/tooling/cli/src/helpers/updater_signature.rs +++ b/tooling/cli/src/helpers/updater_signature.rs @@ -165,3 +165,19 @@ where .map_err(|e| minisign::PError::new(minisign::ErrorKind::Io, e))?; Ok(BufReader::new(file)) } + +#[cfg(test)] +mod tests { + const PRIVATE_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5dkpDN09RZm5GeVAzc2RuYlNzWVVJelJRQnNIV2JUcGVXZUplWXZXYXpqUUFBQkFBQUFBQUFBQUFBQUlBQUFBQTZrN2RnWGh5dURxSzZiL1ZQSDdNcktiaHRxczQwMXdQelRHbjRNcGVlY1BLMTBxR2dpa3I3dDE1UTVDRDE4MXR4WlQwa1BQaXdxKy9UU2J2QmVSNXhOQWFDeG1GSVllbUNpTGJQRkhhTnROR3I5RmdUZi90OGtvaGhJS1ZTcjdZU0NyYzhQWlQ5cGM9Cg=="; + + // we use minisign=0.7.3 to prevent a breaking change + #[test] + fn empty_password_is_valid() { + let path = std::env::temp_dir().join("minisign-password-text.txt"); + std::fs::write(&path, b"TAURI").expect("failed to write test file"); + + let secret_key = + super::secret_key(PRIVATE_KEY.into(), Some("".into())).expect("failed to resolve secret key"); + super::sign_file(&secret_key, &path).expect("failed to sign file"); + } +} From bf859859d6060f732f10470062664f47752f9da8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 13:33:01 -0300 Subject: [PATCH 05/45] chore(deps) Update Rust crate libflate to v2 (1.x) (#8106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tooling/bundler/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/bundler/Cargo.toml b/tooling/bundler/Cargo.toml index c928d3e3b..2805a9175 100644 --- a/tooling/bundler/Cargo.toml +++ b/tooling/bundler/Cargo.toml @@ -19,7 +19,7 @@ exclude = [ "CHANGELOG.md", "/target", "rustfmt.toml" ] [dependencies] tauri-utils = { version = "1.5.0", path = "../../core/tauri-utils", features = [ "resources" ] } image = "0.24.7" -libflate = "1.4" +libflate = "2.0" anyhow = "1.0" thiserror = "1.0" serde_json = "1.0" From b6ef1fab0e7335ff6e7d7ac1e472d99835c2cdf5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 13:42:15 -0300 Subject: [PATCH 06/45] chore(deps) Update Tauri API Definitions (1.x) (#8100) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tooling/api/package.json | 6 +- tooling/api/yarn.lock | 567 +++++++++++++++++---------------------- 2 files changed, 256 insertions(+), 317 deletions(-) diff --git a/tooling/api/package.json b/tooling/api/package.json index 94694e489..3ebee370c 100644 --- a/tooling/api/package.json +++ b/tooling/api/package.json @@ -42,17 +42,17 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", - "eslint": "8.46.0", + "eslint": "8.52.0", "eslint-config-prettier": "8.10.0", "eslint-config-standard-with-typescript": "34.0.1", - "eslint-plugin-import": "2.28.0", + "eslint-plugin-import": "2.29.0", "eslint-plugin-n": "15.7.0", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "eslint-plugin-security": "1.7.1", "prettier": "2.8.8", "tsup": "6.7.0", - "typescript": "5.1.6" + "typescript": "5.2.2" }, "resolutions": { "semver": ">=7.5.2", diff --git a/tooling/api/yarn.lock b/tooling/api/yarn.lock index 39e363cdf..a5e5466ac 100644 --- a/tooling/api/yarn.lock +++ b/tooling/api/yarn.lock @@ -134,10 +134,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.1.tgz#18d635e24ad35f7276e8a49d135c7d3ca6a46f93" - integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -149,17 +149,17 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@^8.46.0": - version "8.46.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.46.0.tgz#3f7802972e8b6fe3f88ed1aabc74ec596c456db6" - integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== +"@eslint/js@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" + integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -168,10 +168,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -337,6 +337,11 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -395,15 +400,15 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -411,45 +416,46 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" - integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.1" -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== dependencies: array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" define-properties "^1.2.0" + es-abstract "^1.22.1" get-intrinsic "^1.2.1" is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" @@ -511,6 +517,15 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -589,6 +604,15 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -626,94 +650,26 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -es-abstract@^1.19.0, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-abstract@^1.21.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -721,23 +677,23 @@ es-abstract@^1.21.2: is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" typed-array-buffer "^1.0.0" typed-array-byte-length "^1.0.0" typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" + which-typed-array "^1.1.13" es-set-tostringtag@^2.0.1: version "2.0.1" @@ -815,14 +771,14 @@ eslint-config-standard@17.0.0: resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== -eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" + is-core-module "^2.13.0" + resolve "^1.22.4" eslint-module-utils@^2.8.0: version "2.8.0" @@ -847,27 +803,26 @@ eslint-plugin-es@^4.1.0: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@2.28.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" - integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== +eslint-plugin-import@2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" + eslint-import-resolver-node "^0.3.9" eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.12.1" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - resolve "^1.22.3" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" tsconfig-paths "^3.14.2" @@ -959,23 +914,24 @@ eslint-visitor-keys@^3.4.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint-visitor-keys@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz#8c2095440eca8c933bedcadf16fefa44dbe9ba5f" - integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.46.0: - version "8.46.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.46.0.tgz#a06a0ff6974e53e643acc42d1dcf2e7f797b3552" - integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== +eslint@8.52.0: + version "8.52.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" + integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.1" - "@eslint/js" "^8.46.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.52.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -983,7 +939,7 @@ eslint@8.46.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.2" + eslint-visitor-keys "^3.4.3" espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" @@ -1150,22 +1106,27 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -1193,6 +1154,16 @@ get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -1323,6 +1294,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -1359,24 +1337,6 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -internal-slot@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" - integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - side-channel "^1.0.4" - internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" @@ -1431,7 +1391,7 @@ is-callable@^1.1.3, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-callable@^1.1.4, is-callable@^1.2.4: +is-callable@^1.1.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== @@ -1443,13 +1403,20 @@ is-core-module@^2.11.0: dependencies: has "^1.0.3" -is-core-module@^2.12.1, is-core-module@^2.13.0: +is-core-module@^2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" +is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-core-module@^2.8.1: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -1557,6 +1524,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-typed-array@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -1731,15 +1705,10 @@ object-assign@^4.0.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-inspect@^1.12.2, object-inspect@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-inspect@^1.9.0: version "1.11.0" @@ -1751,16 +1720,6 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" @@ -1771,33 +1730,33 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.groupby@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" - integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - es-abstract "^1.21.2" - get-intrinsic "^1.2.1" + es-abstract "^1.22.1" -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" once@^1.3.0: version "1.4.0" @@ -1921,23 +1880,14 @@ regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" regexpp@^3.0.0: version "3.2.0" @@ -1972,10 +1922,10 @@ resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.22.3: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -2007,13 +1957,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" isarray "^2.0.5" @@ -2040,6 +1990,25 @@ semver@>=7.5.2, semver@^6.1.0, semver@^6.3.1, semver@^7.0.0, semver@^7.3.7, semv dependencies: lru-cache "^6.0.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2078,50 +2047,32 @@ source-map@0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" strip-ansi@^6.0.1: version "6.0.1" @@ -2305,10 +2256,10 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +typescript@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== unbox-primitive@^1.0.2: version "1.0.2" @@ -2352,29 +2303,17 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.10: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" From 2c7d683ae39716f06298849d8a01f81c6fd6f153 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Thu, 26 Oct 2023 15:38:09 -0300 Subject: [PATCH 07/45] chore(renovate): ignore cargo_toml and minisign (#8118) --- renovate.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/renovate.json b/renovate.json index f1d417dc8..e6f17cbe0 100644 --- a/renovate.json +++ b/renovate.json @@ -12,6 +12,11 @@ "packagePatterns": ["*"], "enabled": false }, + { + "matchPackagePatterns": ["cargo_toml", "minisign"], + "matchManagers": ["cargo"], + "enabled": false + }, { "enabled": true, "paths": ["core/tauri/**"], From 416370a6276efd4d67287dc1d6ee4f1c7a1500e4 Mon Sep 17 00:00:00 2001 From: i-c-b <133848861+i-c-b@users.noreply.github.com> Date: Mon, 6 Nov 2023 18:12:26 -0500 Subject: [PATCH 08/45] enhance(docs): Document Windows-specific icon behaviour (#8153) --- core/tauri/src/api/notification.rs | 4 ++++ tooling/api/src/notification.ts | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/tauri/src/api/notification.rs b/core/tauri/src/api/notification.rs index 938f5d608..2959591ca 100644 --- a/core/tauri/src/api/notification.rs +++ b/core/tauri/src/api/notification.rs @@ -110,6 +110,10 @@ impl Notification { } /// Sets the notification icon. + /// + /// ## Platform-specific + /// + /// - **Windows**: The app must be installed for this to have any effect. #[must_use] pub fn icon(mut self, icon: impl Into) -> Self { self.icon = Some(icon.into()); diff --git a/tooling/api/src/notification.ts b/tooling/api/src/notification.ts index 056936a2b..68deca39e 100644 --- a/tooling/api/src/notification.ts +++ b/tooling/api/src/notification.ts @@ -36,7 +36,14 @@ interface Options { title: string /** Optional notification body. */ body?: string - /** Optional notification icon. */ + /** + * Optional notification icon. + * + * #### Platform-specific + * + * - **Windows**: The app must be installed for this to have any effect. + * + */ icon?: string /** * Optional notification sound. From 1d5aa38ae418ea31f593590b6d32cf04d3bfd8c1 Mon Sep 17 00:00:00 2001 From: Olivier Lemasle Date: Thu, 9 Nov 2023 19:34:16 +0100 Subject: [PATCH 09/45] fix(cli): Fixes errors on command output, closes #8110 (#8162) Fixes #8110 --- .changes/fix-cmd-output-error.md | 7 +++++++ tooling/bundler/src/bundle/common.rs | 22 ++++++++++++++-------- tooling/cli/src/lib.rs | 22 ++++++++++++++-------- 3 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 .changes/fix-cmd-output-error.md diff --git a/.changes/fix-cmd-output-error.md b/.changes/fix-cmd-output-error.md new file mode 100644 index 000000000..384095b81 --- /dev/null +++ b/.changes/fix-cmd-output-error.md @@ -0,0 +1,7 @@ +--- +"@tauri-apps/cli": patch:bug +"tauri-cli": patch:bug +"tauri-bundler": patch:bug +--- + +Fixes errors on command output, occuring when the output stream contains an invalid UTF-8 character, or ends with a multi-bytes UTF-8 character. diff --git a/tooling/bundler/src/bundle/common.rs b/tooling/bundler/src/bundle/common.rs index 712e3ebc9..7e207faef 100644 --- a/tooling/bundler/src/bundle/common.rs +++ b/tooling/bundler/src/bundle/common.rs @@ -169,11 +169,14 @@ impl CommandExt for Command { let mut lines = stdout_lines_.lock().unwrap(); loop { line.clear(); - if let Ok(0) = stdout.read_line(&mut line) { - break; + match stdout.read_line(&mut line) { + Ok(0) => break, + Ok(_) => { + debug!(action = "stdout"; "{}", line.trim_end()); + lines.extend(line.as_bytes().to_vec()); + } + Err(_) => (), } - debug!(action = "stdout"; "{}", &line[0..line.len() - 1]); - lines.extend(line.as_bytes().to_vec()); } }); @@ -185,11 +188,14 @@ impl CommandExt for Command { let mut lines = stderr_lines_.lock().unwrap(); loop { line.clear(); - if let Ok(0) = stderr.read_line(&mut line) { - break; + match stderr.read_line(&mut line) { + Ok(0) => break, + Ok(_) => { + debug!(action = "stderr"; "{}", line.trim_end()); + lines.extend(line.as_bytes().to_vec()); + } + Err(_) => (), } - debug!(action = "stderr"; "{}", &line[0..line.len() - 1]); - lines.extend(line.as_bytes().to_vec()); } }); diff --git a/tooling/cli/src/lib.rs b/tooling/cli/src/lib.rs index 801033356..fb1645e07 100644 --- a/tooling/cli/src/lib.rs +++ b/tooling/cli/src/lib.rs @@ -231,11 +231,14 @@ impl CommandExt for Command { let mut lines = stdout_lines_.lock().unwrap(); loop { line.clear(); - if let Ok(0) = stdout.read_line(&mut line) { - break; + match stdout.read_line(&mut line) { + Ok(0) => break, + Ok(_) => { + debug!(action = "stdout"; "{}", line.trim_end()); + lines.extend(line.as_bytes().to_vec()); + } + Err(_) => (), } - debug!(action = "stdout"; "{}", &line[0..line.len() - 1]); - lines.extend(line.as_bytes().to_vec()); } }); @@ -247,11 +250,14 @@ impl CommandExt for Command { let mut lines = stderr_lines_.lock().unwrap(); loop { line.clear(); - if let Ok(0) = stderr.read_line(&mut line) { - break; + match stderr.read_line(&mut line) { + Ok(0) => break, + Ok(_) => { + debug!(action = "stderr"; "{}", line.trim_end()); + lines.extend(line.as_bytes().to_vec()); + } + Err(_) => (), } - debug!(action = "stderr"; "{}", &line[0..line.len() - 1]); - lines.extend(line.as_bytes().to_vec()); } }); From 14544e4b87269c06c89fed3647d80f492e0a1d34 Mon Sep 17 00:00:00 2001 From: Merlin Gough <6558104+MGough@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:48:54 +0000 Subject: [PATCH 10/45] fix(api): avoid crashing in `clearMocks`, closes #8179 (#8219) * fix(api): do nothing in clearMocks if __TAURI_INTERNALS__ is not defined (fix: #8179) Prevents tests that didn't define any mocks from failing in `afterEach` test hook. * Update fix-clearmocks.md * check for indvidiual properties instead --- .changes/fix-clearmocks.md | 5 +++++ tooling/api/src/mocks.ts | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changes/fix-clearmocks.md diff --git a/.changes/fix-clearmocks.md b/.changes/fix-clearmocks.md new file mode 100644 index 000000000..2decce827 --- /dev/null +++ b/.changes/fix-clearmocks.md @@ -0,0 +1,5 @@ +--- +"@tauri-apps/api": 'patch:bug' +--- + +Avoid crashing in `clearMocks` diff --git a/tooling/api/src/mocks.ts b/tooling/api/src/mocks.ts index 2a4ca9a48..d011ebcb0 100644 --- a/tooling/api/src/mocks.ts +++ b/tooling/api/src/mocks.ts @@ -202,9 +202,9 @@ export function mockConvertFileSrc( */ export function clearMocks(): void { // @ts-expect-error "The operand of a 'delete' operator must be optional' does not matter in this case - delete window.__TAURI__.convertFileSrc + if (window.__TAURI__?.convertFileSrc) delete window.__TAURI__.convertFileSrc // @ts-expect-error "The operand of a 'delete' operator must be optional' does not matter in this case - delete window.__TAURI_IPC__ + if (window.__TAURI_IPC__) delete window.__TAURI_IPC__ // @ts-expect-error "The operand of a 'delete' operator must be optional' does not matter in this case - delete window.__TAURI_METADATA__ + if (window.__TAURI_METADATA__) delete window.__TAURI_METADATA__ } From 0f7b2c4298ac1a4e978b4680b043609990a1eba5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 21:43:45 -0300 Subject: [PATCH 11/45] chore(deps) Update Rust crate tempfile to 3.8.1 (1.x) (#8188) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tooling/bundler/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/bundler/Cargo.toml b/tooling/bundler/Cargo.toml index 2805a9175..47d4c5965 100644 --- a/tooling/bundler/Cargo.toml +++ b/tooling/bundler/Cargo.toml @@ -28,7 +28,7 @@ strsim = "0.10.0" tar = "0.4.40" walkdir = "2" handlebars = "4.4" -tempfile = "3.8.0" +tempfile = "3.8.1" log = { version = "0.4.20", features = [ "kv_unstable" ] } dirs-next = "2.0" os_pipe = "1" From f964cbdb93ffa50019bfbbe6e8d56612e2c9ce95 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 21:45:24 -0300 Subject: [PATCH 12/45] chore(deps) Update dependency eslint to v8.53.0 (1.x) (#8189) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tooling/api/package.json | 2 +- tooling/api/yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tooling/api/package.json b/tooling/api/package.json index 3ebee370c..b81aab10e 100644 --- a/tooling/api/package.json +++ b/tooling/api/package.json @@ -42,7 +42,7 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", - "eslint": "8.52.0", + "eslint": "8.53.0", "eslint-config-prettier": "8.10.0", "eslint-config-standard-with-typescript": "34.0.1", "eslint-plugin-import": "2.29.0", diff --git a/tooling/api/yarn.lock b/tooling/api/yarn.lock index a5e5466ac..23e2dd30a 100644 --- a/tooling/api/yarn.lock +++ b/tooling/api/yarn.lock @@ -134,10 +134,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -149,10 +149,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.52.0": - version "8.52.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" - integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== +"@eslint/js@8.53.0": + version "8.53.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" + integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== "@humanwhocodes/config-array@^0.11.13": version "0.11.13" @@ -919,15 +919,15 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.52.0: - version "8.52.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" - integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== +eslint@8.53.0: + version "8.53.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" + integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.52.0" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.53.0" "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" From 2ba8856343e284ed022f28cff6d16db15ad4645f Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 13 Nov 2023 22:34:22 -0300 Subject: [PATCH 13/45] fix(core): docs.rs build failing for macOS (#8095) --- .changes/fix-docs-rs-macos-build.md | 5 ++ core/tauri/Cargo.toml | 12 +++- core/tauri/src/api/mod.rs | 2 +- core/tauri/src/api/notification.rs | 93 +++++++++++++++-------------- 4 files changed, 65 insertions(+), 47 deletions(-) create mode 100644 .changes/fix-docs-rs-macos-build.md diff --git a/.changes/fix-docs-rs-macos-build.md b/.changes/fix-docs-rs-macos-build.md new file mode 100644 index 000000000..bfff22b23 --- /dev/null +++ b/.changes/fix-docs-rs-macos-build.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:bug +--- + +Fix docs.rs build for `x86_64-apple-darwin`. diff --git a/core/tauri/Cargo.toml b/core/tauri/Cargo.toml index a493280d2..0ec045ae4 100644 --- a/core/tauri/Cargo.toml +++ b/core/tauri/Cargo.toml @@ -17,7 +17,6 @@ no-default-features = true features = [ "wry", "custom-protocol", - "api-all", "windows7-compat", "cli", "updater", @@ -27,7 +26,16 @@ features = [ "http-multipart", "icon-png", "test", - "dox" + "dox", + "dialog", + "global-shortcut", + "http-request", + "os-api", + "process-relaunch", + "process-exit", + "protocol-asset", + "process-command-api", + "shell-open", ] rustdoc-args = [ "--cfg", "doc_cfg" ] default-target = "x86_64-unknown-linux-gnu" diff --git a/core/tauri/src/api/mod.rs b/core/tauri/src/api/mod.rs index cd296db7d..00bfc3a20 100644 --- a/core/tauri/src/api/mod.rs +++ b/core/tauri/src/api/mod.rs @@ -31,7 +31,7 @@ pub mod cli; #[cfg_attr(doc_cfg, doc(cfg(feature = "cli")))] pub use clap; -#[cfg(all(desktop, feature = "notification"))] +#[cfg(all(desktop, any(feature = "notification", feature = "dox")))] #[cfg_attr(doc_cfg, doc(cfg(all(desktop, feature = "notification"))))] pub mod notification; diff --git a/core/tauri/src/api/notification.rs b/core/tauri/src/api/notification.rs index 2959591ca..019696ee6 100644 --- a/core/tauri/src/api/notification.rs +++ b/core/tauri/src/api/notification.rs @@ -153,55 +153,60 @@ impl Notification { deprecated = "This function does not work on Windows 7. Use `Self::notify` instead." )] pub fn show(self) -> crate::api::Result<()> { - let mut notification = notify_rust::Notification::new(); - if let Some(body) = self.body { - notification.body(&body); - } - if let Some(title) = self.title { - notification.summary(&title); - } - if let Some(icon) = self.icon { - notification.icon(&icon); - } else { - notification.auto_icon(); - } - if let Some(sound) = self.sound { - notification.sound_name(&match sound { - #[cfg(target_os = "macos")] - Sound::Default => "NSUserNotificationDefaultSoundName".to_string(), - #[cfg(windows)] - Sound::Default => "Default".to_string(), - #[cfg(all(unix, not(target_os = "macos")))] - Sound::Default => "message-new-instant".to_string(), - Sound::Custom(c) => c, - }); - } - #[cfg(windows)] + #[cfg(feature = "dox")] + return Ok(()); + #[cfg(not(feature = "dox"))] { - let exe = tauri_utils::platform::current_exe()?; - let exe_dir = exe.parent().expect("failed to get exe directory"); - let curr_dir = exe_dir.display().to_string(); - // set the notification's System.AppUserModel.ID only when running the installed app - if !(curr_dir.ends_with(format!("{SEP}target{SEP}debug").as_str()) - || curr_dir.ends_with(format!("{SEP}target{SEP}release").as_str())) - { - notification.app_id(&self.identifier); + let mut notification = notify_rust::Notification::new(); + if let Some(body) = self.body { + notification.body(&body); } - } - #[cfg(target_os = "macos")] - { - let _ = notify_rust::set_application(if cfg!(feature = "custom-protocol") { - &self.identifier + if let Some(title) = self.title { + notification.summary(&title); + } + if let Some(icon) = self.icon { + notification.icon(&icon); } else { - "com.apple.Terminal" + notification.auto_icon(); + } + if let Some(sound) = self.sound { + notification.sound_name(&match sound { + #[cfg(target_os = "macos")] + Sound::Default => "NSUserNotificationDefaultSoundName".to_string(), + #[cfg(windows)] + Sound::Default => "Default".to_string(), + #[cfg(all(unix, not(target_os = "macos")))] + Sound::Default => "message-new-instant".to_string(), + Sound::Custom(c) => c, + }); + } + #[cfg(windows)] + { + let exe = tauri_utils::platform::current_exe()?; + let exe_dir = exe.parent().expect("failed to get exe directory"); + let curr_dir = exe_dir.display().to_string(); + // set the notification's System.AppUserModel.ID only when running the installed app + if !(curr_dir.ends_with(format!("{SEP}target{SEP}debug").as_str()) + || curr_dir.ends_with(format!("{SEP}target{SEP}release").as_str())) + { + notification.app_id(&self.identifier); + } + } + #[cfg(target_os = "macos")] + { + let _ = notify_rust::set_application(if cfg!(feature = "custom-protocol") { + &self.identifier + } else { + "com.apple.Terminal" + }); + } + + crate::async_runtime::spawn(async move { + let _ = notification.show(); }); + + Ok(()) } - - crate::async_runtime::spawn(async move { - let _ = notification.show(); - }); - - Ok(()) } /// Shows the notification. This API is similar to [`Self::show`], but it also works on Windows 7. From 626121e7bfaf4f65d75a7ecc3378ee014a092fa9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 23:58:27 -0300 Subject: [PATCH 14/45] chore(deps) Update Tauri CLI (1.x) (#8193) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lucas Nogueira --- .github/workflows/test-cli-rs.yml | 4 +- .github/workflows/test-core.yml | 4 +- renovate.json | 14 ++- tooling/cli/Cargo.lock | 89 +++++++++++++------ tooling/cli/Cargo.toml | 4 +- tooling/cli/node/Cargo.toml | 6 +- .../jest/fixtures/app/src-tauri/Cargo.toml | 2 +- 7 files changed, 81 insertions(+), 42 deletions(-) diff --git a/.github/workflows/test-cli-rs.yml b/.github/workflows/test-cli-rs.yml index 26e98e820..56c4b0cb0 100644 --- a/.github/workflows/test-cli-rs.yml +++ b/.github/workflows/test-cli-rs.yml @@ -50,8 +50,8 @@ jobs: with: workspaces: tooling/cli - - name: build CLI + - name: test CLI uses: actions-rs/cargo@v1 with: - command: build + command: test args: --manifest-path ./tooling/cli/Cargo.toml diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index dc91cfca2..382339ff3 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -85,13 +85,14 @@ jobs: - name: Downgrade crates with MSRV conflict # The --precise flag can only be used once per invocation. run: | - cargo update -p system-deps:6.1.2 --precise 6.1.1 + cargo update -p system-deps:6.2.0 --precise 6.1.1 cargo update -p toml:0.7.8 --precise 0.7.3 cargo update -p toml_edit:0.19.15 --precise 0.19.8 cargo update -p embed-resource --precise 2.3.0 cargo update -p toml_datetime --precise 0.6.1 cargo update -p serde_spanned --precise 0.6.1 cargo update -p winnow --precise 0.4.1 + cargo update -p plist --precise 1.5.1 cargo update -p time --precise 0.3.15 cargo update -p ignore --precise 0.4.18 cargo update -p raw-window-handle --precise 0.5.0 @@ -113,6 +114,7 @@ jobs: cargo update -p regex --precise 1.9.6 cargo update -p bstr --precise 1.6.2 cargo update -p backtrace --precise 0.3.68 + cargo update -p blocking --precise 1.4.1 - name: test run: cargo test --target ${{ matrix.platform.target }} ${{ matrix.features.args }} diff --git a/renovate.json b/renovate.json index e6f17cbe0..ea668600d 100644 --- a/renovate.json +++ b/renovate.json @@ -12,11 +12,6 @@ "packagePatterns": ["*"], "enabled": false }, - { - "matchPackagePatterns": ["cargo_toml", "minisign"], - "matchManagers": ["cargo"], - "enabled": false - }, { "enabled": true, "paths": ["core/tauri/**"], @@ -26,7 +21,8 @@ "lockFileMaintenance": { "enabled": true }, - "rebaseConflictedPrs": false + "rebaseConflictedPrs": false, + "ignoreDeps": ["cargo_toml", "toml"] }, { "enabled": true, @@ -37,7 +33,8 @@ "lockFileMaintenance": { "enabled": true }, - "rebaseConflictedPrs": false + "rebaseConflictedPrs": false, + "ignoreDeps": ["cargo_toml"] }, { "enabled": true, @@ -82,7 +79,8 @@ "enabled": true }, "rebaseConflictedPrs": false, - "matchManagers": ["cargo"] + "matchManagers": ["cargo"], + "ignoreDeps": ["minisign"] }, { "enabled": true, diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index 8e03dc3a2..453b4339d 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -241,9 +241,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -532,6 +532,15 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +[[package]] +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +dependencies = [ + "memchr", +] + [[package]] name = "cpufeatures" version = "0.2.9" @@ -711,6 +720,12 @@ dependencies = [ "syn 2.0.38", ] +[[package]] +name = "dary_heap" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca" + [[package]] name = "data-encoding" version = "2.4.0" @@ -1187,6 +1202,15 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.14.1" @@ -1635,32 +1659,36 @@ checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "libflate" -version = "1.4.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ff4ae71b685bbad2f2f391fe74f6b7659a34871c08b210fdc039e43bee07d18" +checksum = "9f7d5654ae1795afc7ff76f4365c2c8791b0feb18e8996a96adad8ffd7c3b2bf" dependencies = [ "adler32", + "core2", "crc32fast", + "dary_heap", "libflate_lz77", ] [[package]] name = "libflate_lz77" -version = "1.2.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a52d3a8bfc85f250440e4424db7d857e241a3aebbbe301f3eb606ab15c39acbf" +checksum = "be5f52fb8c451576ec6b79d3f4deb327398bc05bbdbd99021a6e77a4c855d524" dependencies = [ + "core2", + "hashbrown 0.13.2", "rle-decode-fast", ] [[package]] name = "libloading" -version = "0.7.4" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -1764,9 +1792,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "minisign" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b23ef13ff1d745b1e52397daaa247e333c607f3cff96d4df2b798dc252db974b" +checksum = "d2b6f58413c6cee060115673578e47271838f3c87cb9322c61a3bcd6d740b7d2" dependencies = [ "getrandom 0.2.10", "rpassword", @@ -1797,9 +1825,9 @@ dependencies = [ [[package]] name = "napi" -version = "2.13.3" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd063c93b900149304e3ba96ce5bf210cd4f81ef5eb80ded0d100df3e85a3ac0" +checksum = "f9d90182620f32fe34b6ac9b52cba898af26e94c7f5abc01eb4094c417ae2e6c" dependencies = [ "bitflags 2.4.1", "ctor 0.2.5", @@ -1810,15 +1838,15 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882a73d9ef23e8dc2ebbffb6a6ae2ef467c0f18ac10711e4cc59c5485d41df0e" +checksum = "d4b4532cf86bfef556348ac65e561e3123879f0e7566cca6d43a6ff5326f13df" [[package]] name = "napi-derive" -version = "2.13.0" +version = "2.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da1c6a8fa84d549aa8708fcd062372bf8ec6e849de39016ab921067d21bde367" +checksum = "3619fa472d23cd5af94d63a2bae454a77a8863251f40230fbf59ce20eafa8a86" dependencies = [ "cfg-if", "convert_case 0.6.0", @@ -1830,9 +1858,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.52" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20bbc7c69168d06a848f925ec5f0e0997f98e8c8d4f2cc30157f0da51c009e17" +checksum = "ecd3ea4b54020c73d591a49cd192f6334c5f37f71a63ead54dbc851fa991ef00" dependencies = [ "convert_case 0.6.0", "once_cell", @@ -1845,9 +1873,9 @@ dependencies = [ [[package]] name = "napi-sys" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "166b5ef52a3ab5575047a9fe8d4a030cdd0f63c96f071cd6907674453b07bae3" +checksum = "2503fa6af34dc83fb74888df8b22afe933b58d37daf7d80424b1c60c68196b8b" dependencies = [ "libloading", ] @@ -3438,7 +3466,7 @@ dependencies = [ "tauri-utils", "tokio", "toml 0.8.2", - "toml_edit", + "toml_edit 0.21.0", "unicode-width", "ureq", "url", @@ -3694,14 +3722,14 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -3719,6 +3747,17 @@ dependencies = [ "winnow", ] +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.0.2", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" version = "0.4.13" diff --git a/tooling/cli/Cargo.toml b/tooling/cli/Cargo.toml index b94ea2e3d..76136e10f 100644 --- a/tooling/cli/Cargo.toml +++ b/tooling/cli/Cargo.toml @@ -50,7 +50,7 @@ serde_json = "1.0" notify = "6.1" notify-debouncer-mini = "0.4" shared_child = "1.0" -toml_edit = "0.20" +toml_edit = "0.21" json-patch = "1.2" tauri-utils = { version = "1.5.0", path = "../../core/tauri-utils", features = [ "isolation", "schema", "config-json5", "config-toml" ] } toml = "0.8" @@ -58,7 +58,7 @@ jsonschema = "0.17" handlebars = "4.4" include_dir = "0.7" minisign = "=0.7.3" -base64 = "0.21.4" +base64 = "0.21.5" ureq = { version = "2.8", default-features = false, features = [ "gzip" ] } os_info = "3" semver = "1.0" diff --git a/tooling/cli/node/Cargo.toml b/tooling/cli/node/Cargo.toml index 79618c4f6..2af60d570 100644 --- a/tooling/cli/node/Cargo.toml +++ b/tooling/cli/node/Cargo.toml @@ -8,13 +8,13 @@ crate-type = ["cdylib"] [dependencies] # Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix -napi = { version = "2.13", default-features = false, features = ["napi4"] } -napi-derive = "2.13" +napi = { version = "2.14", default-features = false, features = ["napi4"] } +napi-derive = "2.14" tauri-cli = { path = "..", default-features = false } log = "0.4.20" [build-dependencies] -napi-build = "2.0" +napi-build = "2.1" [features] default = ["tauri-cli/default"] diff --git a/tooling/cli/node/test/jest/fixtures/app/src-tauri/Cargo.toml b/tooling/cli/node/test/jest/fixtures/app/src-tauri/Cargo.toml index 99a4984ed..a292dc23a 100644 --- a/tooling/cli/node/test/jest/fixtures/app/src-tauri/Cargo.toml +++ b/tooling/cli/node/test/jest/fixtures/app/src-tauri/Cargo.toml @@ -24,7 +24,7 @@ icon = [ tauri-build = { path = "../../../../../../../../core/tauri-build", features = [] } [dependencies] -serde_json = "1.0.107" +serde_json = "1.0.108" serde = "1.0" serde_derive = "1.0" tauri = { path = "../../../../../../../../core/tauri", features = ["api-all"] } From e221aae53185fe2701652e142700c7cfe630f214 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:52:58 -0300 Subject: [PATCH 15/45] chore(deps) Update Tauri Utils (1.x) (#8105) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lucas Nogueira Co-authored-by: Lucas Nogueira --- core/tauri-utils/Cargo.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/tauri-utils/Cargo.toml b/core/tauri-utils/Cargo.toml index 81433e9c9..45a1abbc0 100644 --- a/core/tauri-utils/Cargo.toml +++ b/core/tauri-utils/Cargo.toml @@ -15,7 +15,7 @@ readme = "README.md" serde = { version = "1", features = [ "derive" ] } serde_json = "1" thiserror = "1" -phf = { version = "0.10", features = [ "macros" ] } +phf = { version = "0.11", features = [ "macros" ] } brotli = { version = "3", optional = true, default-features = false, features = [ "std" ] } url = { version = "2", features = [ "serde" ] } html5ever = "0.26" @@ -27,15 +27,15 @@ serde_with = "3" aes-gcm = { version = "0.10", optional = true } getrandom = { version = "0.2", optional = true, features = [ "std" ] } serialize-to-javascript = { version = "=0.1.1", optional = true } -ctor = "0.1" +ctor = "0.2" json5 = { version = "0.4", optional = true } -toml = { version = "0.5", optional = true } -json-patch = "1.0" +toml = { version = "0.7", optional = true } +json-patch = "1.2" glob = { version = "0.3", optional = true } walkdir = { version = "2", optional = true } memchr = "2" semver = "1" -infer = "0.12" +infer = "0.13" dunce = "1" log = "0.4.20" @@ -43,7 +43,7 @@ log = "0.4.20" heck = "0.4" [target."cfg(windows)".dependencies.windows] -version = "0.39.0" +version = "0.39" features = [ "implement", "Win32_Foundation", From 9e3aff0a3aa736a7a196d0b5397490cbe2928790 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 10:18:35 -0300 Subject: [PATCH 16/45] chore(deps) Update Tauri Build (1.x) (#8102) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lucas Nogueira --- core/tauri-build/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/tauri-build/Cargo.toml b/core/tauri-build/Cargo.toml index 3fd900466..e68464819 100644 --- a/core/tauri-build/Cargo.toml +++ b/core/tauri-build/Cargo.toml @@ -25,7 +25,7 @@ cargo_toml = "0.15" serde = "1" serde_json = "1" heck = "0.4" -json-patch = "1.0" +json-patch = "1.2" tauri-winres = "0.1" semver = "1" walkdir = "2" From 92bc7d0e16157434330a1bcf1eefda6f0f1e5f85 Mon Sep 17 00:00:00 2001 From: Fabian-Lars Date: Wed, 15 Nov 2023 19:53:15 +0100 Subject: [PATCH 17/45] fix(bundler/nsis): calculate estimated size on build system (#8233) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(bundler): Fix nsis installer taking longer than expected to install resources * create dir structure for resources before extracting files * calculate size in rust on the build system * i'm sorry clippy, i programmed in unholy languages where += wasn't a thing so i forgot it exists in rust... * i'm a better clippy than clippy🌚 --- .changes/nsis-slow-resources-installation.md | 7 ++++ tooling/bundler/src/bundle/windows/nsis.rs | 34 +++++++++++++++---- .../bundle/windows/templates/installer.nsi | 18 ++++------ 3 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 .changes/nsis-slow-resources-installation.md diff --git a/.changes/nsis-slow-resources-installation.md b/.changes/nsis-slow-resources-installation.md new file mode 100644 index 000000000..486227050 --- /dev/null +++ b/.changes/nsis-slow-resources-installation.md @@ -0,0 +1,7 @@ +--- +"@tauri-apps/cli": patch:bug +"tauri-cli": patch:bug +"tauri-bundler": patch:bug +--- + +Fixes an issue in the NSIS installer which caused the installation to take much longer than expected when many `resources` were added to the bundle. diff --git a/tooling/bundler/src/bundle/windows/nsis.rs b/tooling/bundler/src/bundle/windows/nsis.rs index b0711b31e..afa148ddb 100644 --- a/tooling/bundler/src/bundle/windows/nsis.rs +++ b/tooling/bundler/src/bundle/windows/nsis.rs @@ -290,23 +290,27 @@ fn build_nsis_app_installer( .iter() .find(|bin| bin.main()) .ok_or_else(|| anyhow::anyhow!("Failed to get main binary"))?; + let main_binary_path = settings.binary_path(main_binary).with_extension("exe"); data.insert( "main_binary_name", to_json(main_binary.name().replace(".exe", "")), ); - data.insert( - "main_binary_path", - to_json(settings.binary_path(main_binary).with_extension("exe")), - ); + data.insert("main_binary_path", to_json(&main_binary_path)); let out_file = "nsis-output.exe"; data.insert("out_file", to_json(out_file)); let resources = generate_resource_data(settings)?; - data.insert("resources", to_json(resources)); + let resources_dirs = + std::collections::HashSet::::from_iter(resources.values().map(|r| r.0.to_owned())); + data.insert("resources_dirs", to_json(resources_dirs)); + data.insert("resources", to_json(&resources)); let binaries = generate_binaries_data(settings)?; - data.insert("binaries", to_json(binaries)); + data.insert("binaries", to_json(&binaries)); + + let estimated_size = generate_estimated_size(&main_binary_path, &binaries, &resources)?; + data.insert("estimated_size", to_json(estimated_size)); let silent_webview2_install = if let WebviewInstallMode::DownloadBootstrapper { silent } | WebviewInstallMode::EmbedBootstrapper { silent } @@ -552,6 +556,24 @@ fn generate_binaries_data(settings: &Settings) -> crate::Result { Ok(binaries) } +fn generate_estimated_size( + main: &Path, + binaries: &BinariesMap, + resources: &ResourcesMap, +) -> crate::Result { + use std::fs::metadata; + + let mut size = metadata(main)?.len(); + + for k in binaries.keys().chain(resources.keys()) { + size += metadata(k)?.len(); + } + + size /= 1000; + + Ok(format!("{size:#08x}")) +} + fn get_lang_data( lang: &str, custom_lang_files: Option<&HashMap>, diff --git a/tooling/bundler/src/bundle/windows/templates/installer.nsi b/tooling/bundler/src/bundle/windows/templates/installer.nsi index 45e63acc0..d19bce14e 100644 --- a/tooling/bundler/src/bundle/windows/templates/installer.nsi +++ b/tooling/bundler/src/bundle/windows/templates/installer.nsi @@ -40,6 +40,7 @@ ${StrLoc} !define UNINSTKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCTNAME}" !define MANUPRODUCTKEY "Software\${MANUFACTURER}\${PRODUCTNAME}" !define UNINSTALLERSIGNCOMMAND "{{uninstaller_sign_cmd}}" +!define ESTIMATEDSIZE "{{estimated_size}}" Name "${PRODUCTNAME}" BrandingText "${COPYRIGHT}" @@ -522,31 +523,26 @@ SectionEnd app_check_done: !macroend -Var AppSize Section Install SetOutPath $INSTDIR - StrCpy $AppSize 0 !insertmacro CheckIfAppIsRunning ; Copy main executable File "${MAINBINARYSRCPATH}" - ${GetSize} "$INSTDIR" "/M=${MAINBINARYNAME}.exe /S=0B" $0 $1 $2 - IntOp $AppSize $AppSize + $0 ; Copy resources + {{#each resources_dirs}} + ; `\\` is not a typo. + CreateDirectory "$INSTDIR\\{{this}}" + {{/each}} {{#each resources}} - CreateDirectory "$INSTDIR\\{{this.[0]}}" File /a "/oname={{this.[1]}}" "{{@key}}" - ${GetSize} "$INSTDIR" "/M={{this.[1]}} /S=0B" $0 $1 $2 - IntOp $AppSize $AppSize + $0 {{/each}} ; Copy external binaries {{#each binaries}} File /a "/oname={{this}}" "{{@key}}" - ${GetSize} "$INSTDIR" "/M={{this}} /S=0B" $0 $1 $2 - IntOp $AppSize $AppSize + $0 {{/each}} ; Create uninstaller @@ -570,9 +566,7 @@ Section Install WriteRegStr SHCTX "${UNINSTKEY}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" WriteRegDWORD SHCTX "${UNINSTKEY}" "NoModify" "1" WriteRegDWORD SHCTX "${UNINSTKEY}" "NoRepair" "1" - IntOp $AppSize $AppSize / 1000 - IntFmt $AppSize "0x%08X" $AppSize - WriteRegDWORD SHCTX "${UNINSTKEY}" "EstimatedSize" "$AppSize" + WriteRegDWORD SHCTX "${UNINSTKEY}" "EstimatedSize" "${ESTIMATEDSIZE}" ; Create start menu shortcut (GUI) !insertmacro MUI_STARTMENU_WRITE_BEGIN Application From 4b6a602a89b36f24d34d6ccd8e3c9b7ce202c9eb Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Thu, 16 Nov 2023 01:26:03 +0200 Subject: [PATCH 18/45] fix(updater): Use escaped installer path when starting the updater msi (#8234) * fix(updater): Use escaped installer path when starting the updater msi Continuation of https://github.com/tauri-apps/tauri/pull/7956 * fix build --- .changes/updater-msi-escaped-path.md | 5 +++++ core/tauri/src/updater/core.rs | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changes/updater-msi-escaped-path.md diff --git a/.changes/updater-msi-escaped-path.md b/.changes/updater-msi-escaped-path.md new file mode 100644 index 000000000..1235827d1 --- /dev/null +++ b/.changes/updater-msi-escaped-path.md @@ -0,0 +1,5 @@ +--- +'tauri': 'patch:bug' +--- + +Escape path of the updater msi to avoid crashing on installers with spaces. diff --git a/core/tauri/src/updater/core.rs b/core/tauri/src/updater/core.rs index 4d488d3e7..838ded932 100644 --- a/core/tauri/src/updater/core.rs +++ b/core/tauri/src/updater/core.rs @@ -844,7 +844,7 @@ fn copy_files_and_run( "-ArgumentList", ]) .arg("/i,") - .arg(msi_path_arg) + .arg(&msi_path_arg) .arg(format!(", {}, /promptrestart;", msiexec_args.join(", "))) .arg("Start-Process") .arg(current_exe_arg) @@ -858,7 +858,7 @@ fn copy_files_and_run( ); let _ = Command::new(msiexec_path) .arg("/i") - .arg(found_path) + .arg(msi_path_arg) .args(msiexec_args) .arg("/promptrestart") .spawn(); From d8f1b6c59b5916f5bd42b2f7d58a4a7426d8617b Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Sun, 19 Nov 2023 13:51:17 +0200 Subject: [PATCH 19/45] feat: migrate manual implementation to the light `windows-version` crate (#8242) --- core/tauri-utils/Cargo.toml | 11 +---- core/tauri-utils/src/platform.rs | 75 +++----------------------------- 2 files changed, 7 insertions(+), 79 deletions(-) diff --git a/core/tauri-utils/Cargo.toml b/core/tauri-utils/Cargo.toml index 45a1abbc0..380e0dcef 100644 --- a/core/tauri-utils/Cargo.toml +++ b/core/tauri-utils/Cargo.toml @@ -42,15 +42,8 @@ log = "0.4.20" [target."cfg(target_os = \"linux\")".dependencies] heck = "0.4" -[target."cfg(windows)".dependencies.windows] -version = "0.39" -features = [ - "implement", - "Win32_Foundation", - "Win32_System_Com", - "Win32_System_LibraryLoader", - "Win32_System_SystemInformation" -] +[target."cfg(windows)".dependencies] +windows-version = "0.1" [features] build = [ "proc-macro2", "quote" ] diff --git a/core/tauri-utils/src/platform.rs b/core/tauri-utils/src/platform.rs index 5e2e77192..2504a8a55 100644 --- a/core/tauri-utils/src/platform.rs +++ b/core/tauri-utils/src/platform.rs @@ -208,81 +208,16 @@ pub use windows_platform::{is_windows_7, windows_version}; #[cfg(windows)] mod windows_platform { - use std::{iter::once, os::windows::prelude::OsStrExt}; - use windows::{ - core::{PCSTR, PCWSTR}, - Win32::{ - Foundation::FARPROC, - System::{ - LibraryLoader::{GetProcAddress, LoadLibraryW}, - SystemInformation::OSVERSIONINFOW, - }, - }, - }; - /// Checks if we're running on Windows 7. pub fn is_windows_7() -> bool { - if let Some(v) = windows_version() { - // windows 7 is 6.1 - if v.0 == 6 && v.1 == 1 { - return true; - } - } - false - } - - fn encode_wide(string: impl AsRef) -> Vec { - string.as_ref().encode_wide().chain(once(0)).collect() - } - - // Helper function to dynamically load function pointer. - // `library` and `function` must be zero-terminated. - fn get_function_impl(library: &str, function: &str) -> Option { - let library = encode_wide(library); - assert_eq!(function.chars().last(), Some('\0')); - let function = PCSTR::from_raw(function.as_ptr()); - - // Library names we will use are ASCII so we can use the A version to avoid string conversion. - let module = unsafe { LoadLibraryW(PCWSTR::from_raw(library.as_ptr())) }.unwrap_or_default(); - if module.is_invalid() { - None - } else { - Some(unsafe { GetProcAddress(module, function) }) - } - } - - macro_rules! get_function { - ($lib:expr, $func:ident) => { - get_function_impl(concat!($lib, '\0'), concat!(stringify!($func), '\0')) - .map(|f| unsafe { std::mem::transmute::(f) }) - }; + windows_version() + .map(|v| v.0 == 6 && v.1 == 1) + .unwrap_or_default() } /// Returns a tuple of (major, minor, buildnumber) for the Windows version. pub fn windows_version() -> Option<(u32, u32, u32)> { - type RtlGetVersion = unsafe extern "system" fn(*mut OSVERSIONINFOW) -> i32; - let handle = get_function!("ntdll.dll", RtlGetVersion); - if let Some(rtl_get_version) = handle { - unsafe { - let mut vi = OSVERSIONINFOW { - dwOSVersionInfoSize: 0, - dwMajorVersion: 0, - dwMinorVersion: 0, - dwBuildNumber: 0, - dwPlatformId: 0, - szCSDVersion: [0; 128], - }; - - let status = (rtl_get_version)(&mut vi as _); - - if status >= 0 { - Some((vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber)) - } else { - None - } - } - } else { - None - } + let v = windows_version::OsVersion::current(); + Some((v.major, v.minor, v.build)) } } From 26ccfef9991b4d5c79f277c9e177828fd2beed90 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Sun, 19 Nov 2023 13:54:05 +0200 Subject: [PATCH 20/45] ci: fix parsing covector ouput (#8240) --- .../workflows/covector-version-or-publish-v1.yml | 14 ++++++++------ .../workflows/covector-version-or-publish.yml | 16 ++++++++++------ .scripts/covector/parse-output.js | 11 ----------- 3 files changed, 18 insertions(+), 23 deletions(-) delete mode 100644 .scripts/covector/parse-output.js diff --git a/.github/workflows/covector-version-or-publish-v1.yml b/.github/workflows/covector-version-or-publish-v1.yml index 4be13c600..0b004e36c 100644 --- a/.github/workflows/covector-version-or-publish-v1.yml +++ b/.github/workflows/covector-version-or-publish-v1.yml @@ -116,15 +116,17 @@ jobs: event-type: update-docs - name: Get `@tauri-apps/cli` release id + uses: actions/github-script@v6 id: cliReleaseId if: | steps.covector.outputs.successfulPublish == 'true' && contains(steps.covector.outputs.packagesPublished, '@tauri-apps/cli') - run: | - echo '${{ steps.covector.outputs }}' > output.json - id=$(jq '.["-tauri-apps-cli-releaseId"]' < output.json) - rm output.json - echo "cliReleaseId=$id" >> "$GITHUB_OUTPUT" + with: + result-encoding: string + script: | + const output = `${{ toJSON(steps.covector.outputs) }}`; + const [_, id] = /"-tauri-apps-cli-releaseId": "([0-9]+)"/g.exec(output); + return id; - name: Trigger `@tauri-apps/cli` publishing workflow if: | @@ -135,7 +137,7 @@ jobs: token: ${{ secrets.ORG_TAURI_BOT_PAT }} repository: tauri-apps/tauri event-type: publish-js-cli - client-payload: '{"releaseId": "${{ steps.cliReleaseId.outputs.cliReleaseId }}" }' + client-payload: '{"releaseId": "${{ steps.cliReleaseId.outputs.result }}" }' - name: Trigger `tauri-cli` publishing workflow if: | diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index e4a91586a..895e2d48a 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -115,14 +115,18 @@ jobs: repository: tauri-apps/tauri-docs event-type: update-docs - - name: Process covector output - id: covectorOutput + - name: Get `@tauri-apps/cli` release id + uses: actions/github-script@v6 + id: cliReleaseId if: | steps.covector.outputs.successfulPublish == 'true' && contains(steps.covector.outputs.packagesPublished, '@tauri-apps/cli') - run: | - id=$(node .scripts/covector/parse-output.js '${{ toJSON(steps.covector.outputs) }}' "-tauri-apps-cli-releaseId") - echo "cliReleaseId=$id" >> "$GITHUB_OUTPUT" + with: + result-encoding: string + script: | + const output = `${{ toJSON(steps.covector.outputs) }}`; + const [_, id] = /"-tauri-apps-cli-releaseId": "([0-9]+)"/g.exec(output); + return id; - name: Trigger `@tauri-apps/cli` publishing workflow if: | @@ -133,7 +137,7 @@ jobs: token: ${{ secrets.ORG_TAURI_BOT_PAT }} repository: tauri-apps/tauri event-type: publish-js-cli - client-payload: '{"releaseId": "${{ steps.covectorOutput.outputs.cliReleaseId }}" }' + client-payload: '{"releaseId": "${{ steps.cliReleaseId.outputs.result }}" }' - name: Trigger `tauri-cli` publishing workflow if: | diff --git a/.scripts/covector/parse-output.js b/.scripts/covector/parse-output.js deleted file mode 100644 index 4c1747de6..000000000 --- a/.scripts/covector/parse-output.js +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env node - -// Copyright 2019-2023 Tauri Programme within The Commons Conservancy -// SPDX-License-Identifier: Apache-2.0 -// SPDX-License-Identifier: MIT - -const json = process.argv[2] -const field = process.argv[3] - -const output = JSON.parse(json) -console.log(output[field]) From 8accd6940e749e2dbe9649145443267ef5236b80 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 19 Nov 2023 08:58:27 -0300 Subject: [PATCH 21/45] chore(deps) Update Rust crate handlebars to 4.5 (1.x) (#8231) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- tooling/bundler/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/bundler/Cargo.toml b/tooling/bundler/Cargo.toml index 47d4c5965..df5d71456 100644 --- a/tooling/bundler/Cargo.toml +++ b/tooling/bundler/Cargo.toml @@ -27,7 +27,7 @@ serde = { version = "1.0", features = [ "derive" ] } strsim = "0.10.0" tar = "0.4.40" walkdir = "2" -handlebars = "4.4" +handlebars = "4.5" tempfile = "3.8.1" log = { version = "0.4.20", features = [ "kv_unstable" ] } dirs-next = "2.0" From f26d9f0884f63f61b9f4d4fac15e6b251163793e Mon Sep 17 00:00:00 2001 From: Fabian-Lars Date: Mon, 20 Nov 2023 13:43:47 +0100 Subject: [PATCH 22/45] fix(bundler/nsis): remove empty resources folders on uninstall (#8263) * fix(bundler/nsis): remove empty resources folders on uninstall * make clippy happy for once --- .changes/nsis-leftover-dirs.md | 7 +++++++ tooling/bundler/src/bundle/windows/nsis.rs | 11 +++++++++++ .../src/bundle/windows/templates/installer.nsi | 11 ++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 .changes/nsis-leftover-dirs.md diff --git a/.changes/nsis-leftover-dirs.md b/.changes/nsis-leftover-dirs.md new file mode 100644 index 000000000..1b1df860b --- /dev/null +++ b/.changes/nsis-leftover-dirs.md @@ -0,0 +1,7 @@ +--- +"@tauri-apps/cli": patch:bug +"tauri-cli": patch:bug +"tauri-bundler": patch:bug +--- + +Fixes an issue in the NSIS installer which caused the uninstallation to leave empty folders on the system if the `resources` feature was used. diff --git a/tooling/bundler/src/bundle/windows/nsis.rs b/tooling/bundler/src/bundle/windows/nsis.rs index afa148ddb..5ea0b049a 100644 --- a/tooling/bundler/src/bundle/windows/nsis.rs +++ b/tooling/bundler/src/bundle/windows/nsis.rs @@ -303,6 +303,17 @@ fn build_nsis_app_installer( let resources = generate_resource_data(settings)?; let resources_dirs = std::collections::HashSet::::from_iter(resources.values().map(|r| r.0.to_owned())); + + let mut resources_ancestors = resources_dirs + .iter() + .flat_map(|p| p.ancestors()) + .collect::>(); + resources_ancestors.sort_unstable(); + resources_ancestors.dedup(); + resources_ancestors.sort_by_key(|p| std::cmp::Reverse(p.components().count())); + resources_ancestors.pop(); // Last one is always "" + + data.insert("resources_ancestors", to_json(resources_ancestors)); data.insert("resources_dirs", to_json(resources_dirs)); data.insert("resources", to_json(&resources)); diff --git a/tooling/bundler/src/bundle/windows/templates/installer.nsi b/tooling/bundler/src/bundle/windows/templates/installer.nsi index d19bce14e..ddbd31ca9 100644 --- a/tooling/bundler/src/bundle/windows/templates/installer.nsi +++ b/tooling/bundler/src/bundle/windows/templates/installer.nsi @@ -533,7 +533,6 @@ Section Install ; Copy resources {{#each resources_dirs}} - ; `\\` is not a typo. CreateDirectory "$INSTDIR\\{{this}}" {{/each}} {{#each resources}} @@ -623,7 +622,6 @@ Section Uninstall ; Delete resources {{#each resources}} Delete "$INSTDIR\\{{this.[1]}}" - RMDir "$INSTDIR\\{{this.[0]}}" {{/each}} ; Delete external binaries @@ -634,7 +632,14 @@ Section Uninstall ; Delete uninstaller Delete "$INSTDIR\uninstall.exe" - RMDir "$INSTDIR" + ${If} $DeleteAppDataCheckboxState == 1 + RMDir /R /REBOOTOK "$INSTDIR" + ${Else} + {{#each resources_ancestors}} + RMDir /REBOOTOK "$INSTDIR\\{{this}}" + {{/each}} + RMDir "$INSTDIR" + ${EndIf} ; Remove start menu shortcut !insertmacro MUI_STARTMENU_GETFOLDER Application $AppStartMenuFolder From b8756bc34e6a11cd1d1c2665d9f1d884252a1107 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Mon, 20 Nov 2023 22:55:18 +0200 Subject: [PATCH 23/45] perf: remove extranous call in `StateManager::get` (#8272) --- core/tauri/src/state.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/core/tauri/src/state.rs b/core/tauri/src/state.rs index b13f0c0f3..fa0eaae53 100644 --- a/core/tauri/src/state.rs +++ b/core/tauri/src/state.rs @@ -71,7 +71,6 @@ impl StateManager { /// Gets the state associated with the specified type. pub fn get(&self) -> State<'_, T> { - self.0.get::(); State( self .0 From 504627027303ef5a0e855aab2abea64c6964223b Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Mon, 20 Nov 2023 23:12:52 +0200 Subject: [PATCH 24/45] fix(api): add top-level `main`, `module` and `types` fields (#8267) --- .changes/api-top-level-main-module.md | 5 + .github/workflows/lint-js.yml | 3 + .husky/pre-commit | 2 +- .prettierrc | 5 + .prettierrc.js | 9 - core/tauri/scripts/bundle.global.js | 9 +- package.json | 5 +- tooling/api/.eslintrc | 51 ++ tooling/api/.eslintrc.cjs | 56 -- tooling/api/.prettierrc.cjs | 5 - tooling/api/CHANGELOG.md | 23 +- tooling/api/package.json | 51 +- tooling/api/rollup.config.ts | 138 +++++ tooling/api/scripts/after-build.cjs | 44 -- tooling/api/tsconfig.json | 8 +- tooling/api/tsup.config.ts | 34 -- tooling/api/yarn.lock | 702 +++++++------------------- 17 files changed, 451 insertions(+), 699 deletions(-) create mode 100644 .changes/api-top-level-main-module.md create mode 100644 .prettierrc delete mode 100644 .prettierrc.js create mode 100644 tooling/api/.eslintrc delete mode 100644 tooling/api/.eslintrc.cjs delete mode 100644 tooling/api/.prettierrc.cjs create mode 100644 tooling/api/rollup.config.ts delete mode 100644 tooling/api/scripts/after-build.cjs delete mode 100644 tooling/api/tsup.config.ts diff --git a/.changes/api-top-level-main-module.md b/.changes/api-top-level-main-module.md new file mode 100644 index 000000000..fba6cdb2c --- /dev/null +++ b/.changes/api-top-level-main-module.md @@ -0,0 +1,5 @@ +--- +'@tauri-apps/api': 'patch:bug' +--- + +Add top-level `main`, `module` and `types` fields in `package.json` to be compliant with typescripts's `"moduleResolution": "node"` diff --git a/.github/workflows/lint-js.yml b/.github/workflows/lint-js.yml index 7cf54f022..de3ee5a06 100644 --- a/.github/workflows/lint-js.yml +++ b/.github/workflows/lint-js.yml @@ -49,6 +49,9 @@ jobs: - name: install deps via yarn working-directory: ./tooling/api/ run: yarn + - name: run ts:check + working-directory: ./tooling/api/ + run: yarn ts:check - name: run lint working-directory: ./tooling/api/ run: yarn lint diff --git a/.husky/pre-commit b/.husky/pre-commit index 3050d5d43..7178a5417 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -11,7 +11,7 @@ if [ -z "$(git diff --name-only tooling/api)" ]; then else cd tooling/api yarn format - yarn lint-fix + yarn lint:fix cd ../.. fi diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..299b9e14e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "semi": false, + "trailingComma": "none" +} diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 6641113ef..000000000 --- a/.prettierrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2019-2023 Tauri Programme within The Commons Conservancy -// SPDX-License-Identifier: Apache-2.0 -// SPDX-License-Identifier: MIT - -module.exports = { - singleQuote: true, - semi: false, - trailingComma: 'none' -} diff --git a/core/tauri/scripts/bundle.global.js b/core/tauri/scripts/bundle.global.js index dea0ba44d..7c2cf47b4 100644 --- a/core/tauri/scripts/bundle.global.js +++ b/core/tauri/scripts/bundle.global.js @@ -1,8 +1 @@ -"use strict";var __TAURI_IIFE__=(()=>{var L=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var ye=Object.prototype.hasOwnProperty;var d=(t,e)=>{for(var i in e)L(t,i,{get:e[i],enumerable:!0})},he=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ge(e))!ye.call(t,s)&&s!==i&&L(t,s,{get:()=>e[s],enumerable:!(r=pe(e,s))||r.enumerable});return t};var fe=t=>he(L({},"__esModule",{value:!0}),t);var Zt={};d(Zt,{app:()=>k,cli:()=>U,clipboard:()=>I,dialog:()=>z,event:()=>V,fs:()=>j,globalShortcut:()=>q,http:()=>J,invoke:()=>Yt,notification:()=>$,os:()=>ne,path:()=>K,process:()=>Q,shell:()=>Y,tauri:()=>R,updater:()=>X,window:()=>ie});var k={};d(k,{getName:()=>we,getTauriVersion:()=>ve,getVersion:()=>Pe,hide:()=>Te,show:()=>Me});var R={};d(R,{convertFileSrc:()=>_e,invoke:()=>f,transformCallback:()=>c});function be(){return window.crypto.getRandomValues(new Uint32Array(1))[0]}function c(t,e=!1){let i=be(),r=`_${i}`;return Object.defineProperty(window,r,{value:s=>(e&&Reflect.deleteProperty(window,r),t?.(s)),writable:!1,configurable:!0}),i}async function f(t,e={}){return new Promise((i,r)=>{let s=c(l=>{i(l),Reflect.deleteProperty(window,`_${o}`)},!0),o=c(l=>{r(l),Reflect.deleteProperty(window,`_${s}`)},!0);window.__TAURI_IPC__({cmd:t,callback:s,error:o,...e})})}function _e(t,e="asset"){return window.__TAURI__.convertFileSrc(t,e)}async function n(t){return f("tauri",t)}async function Pe(){return n({__tauriModule:"App",message:{cmd:"getAppVersion"}})}async function we(){return n({__tauriModule:"App",message:{cmd:"getAppName"}})}async function ve(){return n({__tauriModule:"App",message:{cmd:"getTauriVersion"}})}async function Me(){return n({__tauriModule:"App",message:{cmd:"show"}})}async function Te(){return n({__tauriModule:"App",message:{cmd:"hide"}})}var U={};d(U,{getMatches:()=>Fe});async function Fe(){return n({__tauriModule:"Cli",message:{cmd:"cliMatches"}})}var I={};d(I,{readText:()=>Ee,writeText:()=>Oe});async function Oe(t){return n({__tauriModule:"Clipboard",message:{cmd:"writeText",data:t}})}async function Ee(){return n({__tauriModule:"Clipboard",message:{cmd:"readText",data:null}})}var z={};d(z,{ask:()=>De,confirm:()=>Se,message:()=>We,open:()=>Ce,save:()=>Ae});async function Ce(t={}){return typeof t=="object"&&Object.freeze(t),n({__tauriModule:"Dialog",message:{cmd:"openDialog",options:t}})}async function Ae(t={}){return typeof t=="object"&&Object.freeze(t),n({__tauriModule:"Dialog",message:{cmd:"saveDialog",options:t}})}async function We(t,e){let i=typeof e=="string"?{title:e}:e;return n({__tauriModule:"Dialog",message:{cmd:"messageDialog",message:t.toString(),title:i?.title?.toString(),type:i?.type,buttonLabel:i?.okLabel?.toString()}})}async function De(t,e){let i=typeof e=="string"?{title:e}:e;return n({__tauriModule:"Dialog",message:{cmd:"askDialog",message:t.toString(),title:i?.title?.toString(),type:i?.type,buttonLabels:[i?.okLabel?.toString()??"Yes",i?.cancelLabel?.toString()??"No"]}})}async function Se(t,e){let i=typeof e=="string"?{title:e}:e;return n({__tauriModule:"Dialog",message:{cmd:"confirmDialog",message:t.toString(),title:i?.title?.toString(),type:i?.type,buttonLabels:[i?.okLabel?.toString()??"Ok",i?.cancelLabel?.toString()??"Cancel"]}})}var V={};d(V,{TauriEvent:()=>M,emit:()=>T,listen:()=>N,once:()=>H});async function re(t,e){return n({__tauriModule:"Event",message:{cmd:"unlisten",event:t,eventId:e}})}async function w(t,e,i){await n({__tauriModule:"Event",message:{cmd:"emit",event:t,windowLabel:e,payload:i}})}async function b(t,e,i){return n({__tauriModule:"Event",message:{cmd:"listen",event:t,windowLabel:e,handler:c(i)}}).then(r=>async()=>re(t,r))}async function v(t,e,i){return b(t,e,r=>{i(r),re(t,r.id).catch(()=>{})})}var M=(u=>(u.WINDOW_RESIZED="tauri://resize",u.WINDOW_MOVED="tauri://move",u.WINDOW_CLOSE_REQUESTED="tauri://close-requested",u.WINDOW_CREATED="tauri://window-created",u.WINDOW_DESTROYED="tauri://destroyed",u.WINDOW_FOCUS="tauri://focus",u.WINDOW_BLUR="tauri://blur",u.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",u.WINDOW_THEME_CHANGED="tauri://theme-changed",u.WINDOW_FILE_DROP="tauri://file-drop",u.WINDOW_FILE_DROP_HOVER="tauri://file-drop-hover",u.WINDOW_FILE_DROP_CANCELLED="tauri://file-drop-cancelled",u.MENU="tauri://menu",u.CHECK_UPDATE="tauri://update",u.UPDATE_AVAILABLE="tauri://update-available",u.INSTALL_UPDATE="tauri://update-install",u.STATUS_UPDATE="tauri://update-status",u.DOWNLOAD_PROGRESS="tauri://update-download-progress",u))(M||{});async function N(t,e){return b(t,null,e)}async function H(t,e){return v(t,null,e)}async function T(t,e){return w(t,void 0,e)}var j={};d(j,{BaseDirectory:()=>F,Dir:()=>F,copyFile:()=>He,createDir:()=>ze,exists:()=>qe,readBinaryFile:()=>Re,readDir:()=>Ie,readTextFile:()=>Le,removeDir:()=>Ne,removeFile:()=>Ve,renameFile:()=>je,writeBinaryFile:()=>Ue,writeFile:()=>ke,writeTextFile:()=>ke});var F=(a=>(a[a.Audio=1]="Audio",a[a.Cache=2]="Cache",a[a.Config=3]="Config",a[a.Data=4]="Data",a[a.LocalData=5]="LocalData",a[a.Desktop=6]="Desktop",a[a.Document=7]="Document",a[a.Download=8]="Download",a[a.Executable=9]="Executable",a[a.Font=10]="Font",a[a.Home=11]="Home",a[a.Picture=12]="Picture",a[a.Public=13]="Public",a[a.Runtime=14]="Runtime",a[a.Template=15]="Template",a[a.Video=16]="Video",a[a.Resource=17]="Resource",a[a.App=18]="App",a[a.Log=19]="Log",a[a.Temp=20]="Temp",a[a.AppConfig=21]="AppConfig",a[a.AppData=22]="AppData",a[a.AppLocalData=23]="AppLocalData",a[a.AppCache=24]="AppCache",a[a.AppLog=25]="AppLog",a))(F||{});async function Le(t,e={}){return n({__tauriModule:"Fs",message:{cmd:"readTextFile",path:t,options:e}})}async function Re(t,e={}){let i=await n({__tauriModule:"Fs",message:{cmd:"readFile",path:t,options:e}});return Uint8Array.from(i)}async function ke(t,e,i){typeof i=="object"&&Object.freeze(i),typeof t=="object"&&Object.freeze(t);let r={path:"",contents:""},s=i;return typeof t=="string"?r.path=t:(r.path=t.path,r.contents=t.contents),typeof e=="string"?r.contents=e??"":s=e,n({__tauriModule:"Fs",message:{cmd:"writeFile",path:r.path,contents:Array.from(new TextEncoder().encode(r.contents)),options:s}})}async function Ue(t,e,i){typeof i=="object"&&Object.freeze(i),typeof t=="object"&&Object.freeze(t);let r={path:"",contents:[]},s=i;return typeof t=="string"?r.path=t:(r.path=t.path,r.contents=t.contents),e&&"dir"in e?s=e:typeof t=="string"&&(r.contents=e??[]),n({__tauriModule:"Fs",message:{cmd:"writeFile",path:r.path,contents:Array.from(r.contents instanceof ArrayBuffer?new Uint8Array(r.contents):r.contents),options:s}})}async function Ie(t,e={}){return n({__tauriModule:"Fs",message:{cmd:"readDir",path:t,options:e}})}async function ze(t,e={}){return n({__tauriModule:"Fs",message:{cmd:"createDir",path:t,options:e}})}async function Ne(t,e={}){return n({__tauriModule:"Fs",message:{cmd:"removeDir",path:t,options:e}})}async function He(t,e,i={}){return n({__tauriModule:"Fs",message:{cmd:"copyFile",source:t,destination:e,options:i}})}async function Ve(t,e={}){return n({__tauriModule:"Fs",message:{cmd:"removeFile",path:t,options:e}})}async function je(t,e,i={}){return n({__tauriModule:"Fs",message:{cmd:"renameFile",oldPath:t,newPath:e,options:i}})}async function qe(t,e={}){return n({__tauriModule:"Fs",message:{cmd:"exists",path:t,options:e}})}var q={};d(q,{isRegistered:()=>$e,register:()=>Ge,registerAll:()=>Je,unregister:()=>Ke,unregisterAll:()=>Qe});async function Ge(t,e){return n({__tauriModule:"GlobalShortcut",message:{cmd:"register",shortcut:t,handler:c(e)}})}async function Je(t,e){return n({__tauriModule:"GlobalShortcut",message:{cmd:"registerAll",shortcuts:t,handler:c(e)}})}async function $e(t){return n({__tauriModule:"GlobalShortcut",message:{cmd:"isRegistered",shortcut:t}})}async function Ke(t){return n({__tauriModule:"GlobalShortcut",message:{cmd:"unregister",shortcut:t}})}async function Qe(){return n({__tauriModule:"GlobalShortcut",message:{cmd:"unregisterAll"}})}var J={};d(J,{Body:()=>p,Client:()=>E,Response:()=>O,ResponseType:()=>se,fetch:()=>Ze,getClient:()=>ae});var se=(r=>(r[r.JSON=1]="JSON",r[r.Text=2]="Text",r[r.Binary=3]="Binary",r))(se||{});async function Ye(t){let e={},i=async(r,s)=>{if(s!==null){let o;typeof s=="string"?o=s:s instanceof Uint8Array||Array.isArray(s)?o=Array.from(s):s instanceof File?o={file:Array.from(new Uint8Array(await s.arrayBuffer())),mime:s.type,fileName:s.name}:typeof s.file=="string"?o={file:s.file,mime:s.mime,fileName:s.fileName}:o={file:Array.from(s.file),mime:s.mime,fileName:s.fileName},e[String(r)]=o}};if(t instanceof FormData)for(let[r,s]of t)await i(r,s);else for(let[r,s]of Object.entries(t))await i(r,s);return e}var p=class{constructor(e,i){this.type=e,this.payload=i}static form(e){return new p("Form",e)}static json(e){return new p("Json",e)}static text(e){return new p("Text",e)}static bytes(e){return new p("Bytes",Array.from(e instanceof ArrayBuffer?new Uint8Array(e):e))}},O=class{constructor(e){this.url=e.url,this.status=e.status,this.ok=this.status>=200&&this.status<300,this.headers=e.headers,this.rawHeaders=e.rawHeaders,this.data=e.data}},E=class{constructor(e){this.id=e}async drop(){return n({__tauriModule:"Http",message:{cmd:"dropClient",client:this.id}})}async request(e){let i=!e.responseType||e.responseType===1;return i&&(e.responseType=2),e.body?.type==="Form"&&(e.body.payload=await Ye(e.body.payload)),n({__tauriModule:"Http",message:{cmd:"httpRequest",client:this.id,options:e}}).then(r=>{let s=new O(r);if(i){try{s.data=JSON.parse(s.data)}catch(o){if(s.ok&&s.data==="")s.data={};else if(s.ok)throw Error(`Failed to parse response \`${s.data}\` as JSON: ${o}; - try setting the \`responseType\` option to \`ResponseType.Text\` or \`ResponseType.Binary\` if the API does not return a JSON response.`)}return s}return s})}async get(e,i){return this.request({method:"GET",url:e,...i})}async post(e,i,r){return this.request({method:"POST",url:e,body:i,...r})}async put(e,i,r){return this.request({method:"PUT",url:e,body:i,...r})}async patch(e,i){return this.request({method:"PATCH",url:e,...i})}async delete(e,i){return this.request({method:"DELETE",url:e,...i})}};async function ae(t){return n({__tauriModule:"Http",message:{cmd:"createClient",options:t}}).then(e=>new E(e))}var G=null;async function Ze(t,e){return G===null&&(G=await ae()),G.request({url:t,method:e?.method??"GET",...e})}var $={};d($,{isPermissionGranted:()=>Xe,requestPermission:()=>Be,sendNotification:()=>et});async function Xe(){return window.Notification.permission!=="default"?Promise.resolve(window.Notification.permission==="granted"):n({__tauriModule:"Notification",message:{cmd:"isNotificationPermissionGranted"}})}async function Be(){return window.Notification.requestPermission()}function et(t){typeof t=="string"?new window.Notification(t):new window.Notification(t.title,t)}var K={};d(K,{BaseDirectory:()=>F,appCacheDir:()=>rt,appConfigDir:()=>oe,appDataDir:()=>it,appDir:()=>tt,appLocalDataDir:()=>nt,appLogDir:()=>le,audioDir:()=>st,basename:()=>Dt,cacheDir:()=>at,configDir:()=>ot,dataDir:()=>lt,delimiter:()=>Ft,desktopDir:()=>ut,dirname:()=>At,documentDir:()=>dt,downloadDir:()=>ct,executableDir:()=>mt,extname:()=>Wt,fontDir:()=>pt,homeDir:()=>gt,isAbsolute:()=>St,join:()=>Ct,localDataDir:()=>yt,logDir:()=>Mt,normalize:()=>Et,pictureDir:()=>ht,publicDir:()=>ft,resolve:()=>Ot,resolveResource:()=>_t,resourceDir:()=>bt,runtimeDir:()=>Pt,sep:()=>Tt,templateDir:()=>wt,videoDir:()=>vt});function _(){return navigator.appVersion.includes("Win")}async function tt(){return oe()}async function oe(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:21}})}async function it(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:22}})}async function nt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:23}})}async function rt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:24}})}async function st(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:1}})}async function at(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:2}})}async function ot(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:3}})}async function lt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:4}})}async function ut(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:6}})}async function dt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:7}})}async function ct(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:8}})}async function mt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:9}})}async function pt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:10}})}async function gt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:11}})}async function yt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:5}})}async function ht(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:12}})}async function ft(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:13}})}async function bt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:17}})}async function _t(t){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:t,directory:17}})}async function Pt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:14}})}async function wt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:15}})}async function vt(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:16}})}async function Mt(){return le()}async function le(){return n({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:25}})}var Tt=_()?"\\":"/",Ft=_()?";":":";async function Ot(...t){return n({__tauriModule:"Path",message:{cmd:"resolve",paths:t}})}async function Et(t){return n({__tauriModule:"Path",message:{cmd:"normalize",path:t}})}async function Ct(...t){return n({__tauriModule:"Path",message:{cmd:"join",paths:t}})}async function At(t){return n({__tauriModule:"Path",message:{cmd:"dirname",path:t}})}async function Wt(t){return n({__tauriModule:"Path",message:{cmd:"extname",path:t}})}async function Dt(t,e){return n({__tauriModule:"Path",message:{cmd:"basename",path:t,ext:e}})}async function St(t){return n({__tauriModule:"Path",message:{cmd:"isAbsolute",path:t}})}var Q={};d(Q,{exit:()=>xt,relaunch:()=>Lt});async function xt(t=0){return n({__tauriModule:"Process",message:{cmd:"exit",exitCode:t}})}async function Lt(){return n({__tauriModule:"Process",message:{cmd:"relaunch"}})}var Y={};d(Y,{Child:()=>C,Command:()=>P,EventEmitter:()=>g,open:()=>kt});async function Rt(t,e,i=[],r){return typeof i=="object"&&Object.freeze(i),n({__tauriModule:"Shell",message:{cmd:"execute",program:e,args:i,options:r,onEventFn:c(t)}})}var g=class{constructor(){this.eventListeners=Object.create(null)}addListener(e,i){return this.on(e,i)}removeListener(e,i){return this.off(e,i)}on(e,i){return e in this.eventListeners?this.eventListeners[e].push(i):this.eventListeners[e]=[i],this}once(e,i){let r=(...s)=>{this.removeListener(e,r),i(...s)};return this.addListener(e,r)}off(e,i){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter(r=>r!==i)),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,...i){if(e in this.eventListeners){let r=this.eventListeners[e];for(let s of r)s(...i);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,i){return e in this.eventListeners?this.eventListeners[e].unshift(i):this.eventListeners[e]=[i],this}prependOnceListener(e,i){let r=(...s)=>{this.removeListener(e,r),i(...s)};return this.prependListener(e,r)}},C=class{constructor(e){this.pid=e}async write(e){return n({__tauriModule:"Shell",message:{cmd:"stdinWrite",pid:this.pid,buffer:typeof e=="string"?e:Array.from(e)}})}async kill(){return n({__tauriModule:"Shell",message:{cmd:"killChild",pid:this.pid}})}},P=class extends g{constructor(i,r=[],s){super();this.stdout=new g;this.stderr=new g;this.program=i,this.args=typeof r=="string"?[r]:r,this.options=s??{}}static sidecar(i,r=[],s){let o=new P(i,r,s);return o.options.sidecar=!0,o}async spawn(){return Rt(i=>{switch(i.event){case"Error":this.emit("error",i.payload);break;case"Terminated":this.emit("close",i.payload);break;case"Stdout":this.stdout.emit("data",i.payload);break;case"Stderr":this.stderr.emit("data",i.payload);break}},this.program,this.args,this.options).then(i=>new C(i))}async execute(){return new Promise((i,r)=>{this.on("error",r);let s=[],o=[];this.stdout.on("data",l=>{s.push(l)}),this.stderr.on("data",l=>{o.push(l)}),this.on("close",l=>{i({code:l.code,signal:l.signal,stdout:s.join(` -`),stderr:o.join(` -`)})}),this.spawn().catch(r)})}};async function kt(t,e){return n({__tauriModule:"Shell",message:{cmd:"open",path:t,with:e}})}var X={};d(X,{checkUpdate:()=>It,installUpdate:()=>Ut,onUpdaterEvent:()=>Z});async function Z(t){return N("tauri://update-status",e=>{t(e?.payload)})}async function Ut(){let t;function e(){t&&t(),t=void 0}return new Promise((i,r)=>{function s(o){if(o.error){e(),r(o.error);return}o.status==="DONE"&&(e(),i())}Z(s).then(o=>{t=o}).catch(o=>{throw e(),o}),T("tauri://update-install").catch(o=>{throw e(),o})})}async function It(){let t;function e(){t&&t(),t=void 0}return new Promise((i,r)=>{function s(l){e(),i({manifest:l,shouldUpdate:!0})}function o(l){if(l.error){e(),r(l.error);return}l.status==="UPTODATE"&&(e(),i({shouldUpdate:!1}))}H("tauri://update-available",l=>{s(l?.payload)}).catch(l=>{throw e(),l}),Z(o).then(l=>{t=l}).catch(l=>{throw e(),l}),T("tauri://update").catch(l=>{throw e(),l})})}var ie={};d(ie,{CloseRequestedEvent:()=>x,LogicalPosition:()=>W,LogicalSize:()=>A,PhysicalPosition:()=>h,PhysicalSize:()=>y,UserAttentionType:()=>de,WebviewWindow:()=>m,WebviewWindowHandle:()=>D,WindowManager:()=>S,appWindow:()=>ee,availableMonitors:()=>Vt,currentMonitor:()=>Nt,getAll:()=>B,getCurrent:()=>zt,primaryMonitor:()=>Ht});var A=class{constructor(e,i){this.type="Logical";this.width=e,this.height=i}},y=class{constructor(e,i){this.type="Physical";this.width=e,this.height=i}toLogical(e){return new A(this.width/e,this.height/e)}},W=class{constructor(e,i){this.type="Logical";this.x=e,this.y=i}},h=class{constructor(e,i){this.type="Physical";this.x=e,this.y=i}toLogical(e){return new W(this.x/e,this.y/e)}},de=(i=>(i[i.Critical=1]="Critical",i[i.Informational=2]="Informational",i))(de||{});function zt(){return new m(window.__TAURI_METADATA__.__currentWindow.label,{skip:!0})}function B(){return window.__TAURI_METADATA__.__windows.map(t=>new m(t.label,{skip:!0}))}var ue=["tauri://created","tauri://error"],D=class{constructor(e){this.label=e,this.listeners=Object.create(null)}async listen(e,i){return this._handleTauriEvent(e,i)?Promise.resolve(()=>{let r=this.listeners[e];r.splice(r.indexOf(i),1)}):b(e,this.label,i)}async once(e,i){return this._handleTauriEvent(e,i)?Promise.resolve(()=>{let r=this.listeners[e];r.splice(r.indexOf(i),1)}):v(e,this.label,i)}async emit(e,i){if(ue.includes(e)){for(let r of this.listeners[e]||[])r({event:e,id:-1,windowLabel:this.label,payload:i});return Promise.resolve()}return w(e,this.label,i)}_handleTauriEvent(e,i){return ue.includes(e)?(e in this.listeners?this.listeners[e].push(i):this.listeners[e]=[i],!0):!1}},S=class extends D{async scaleFactor(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"scaleFactor"}}}})}async innerPosition(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"innerPosition"}}}}).then(({x:e,y:i})=>new h(e,i))}async outerPosition(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"outerPosition"}}}}).then(({x:e,y:i})=>new h(e,i))}async innerSize(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"innerSize"}}}}).then(({width:e,height:i})=>new y(e,i))}async outerSize(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"outerSize"}}}}).then(({width:e,height:i})=>new y(e,i))}async isFullscreen(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isFullscreen"}}}})}async isMinimized(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMinimized"}}}})}async isMaximized(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMaximized"}}}})}async isFocused(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isFocused"}}}})}async isDecorated(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isDecorated"}}}})}async isResizable(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isResizable"}}}})}async isMaximizable(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMaximizable"}}}})}async isMinimizable(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMinimizable"}}}})}async isClosable(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isClosable"}}}})}async isVisible(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isVisible"}}}})}async title(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"title"}}}})}async theme(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"theme"}}}})}async center(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"center"}}}})}async requestUserAttention(e){let i=null;return e&&(e===1?i={type:"Critical"}:i={type:"Informational"}),n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"requestUserAttention",payload:i}}}})}async setResizable(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setResizable",payload:e}}}})}async setMaximizable(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMaximizable",payload:e}}}})}async setMinimizable(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMinimizable",payload:e}}}})}async setClosable(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setClosable",payload:e}}}})}async setTitle(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setTitle",payload:e}}}})}async maximize(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"maximize"}}}})}async unmaximize(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"unmaximize"}}}})}async toggleMaximize(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"toggleMaximize"}}}})}async minimize(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"minimize"}}}})}async unminimize(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"unminimize"}}}})}async show(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"show"}}}})}async hide(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"hide"}}}})}async close(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"close"}}}})}async setDecorations(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setDecorations",payload:e}}}})}async setAlwaysOnTop(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setAlwaysOnTop",payload:e}}}})}async setContentProtected(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setContentProtected",payload:e}}}})}async setSize(e){if(!e||e.type!=="Logical"&&e.type!=="Physical")throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setSize",payload:{type:e.type,data:{width:e.width,height:e.height}}}}}})}async setMinSize(e){if(e&&e.type!=="Logical"&&e.type!=="Physical")throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMinSize",payload:e?{type:e.type,data:{width:e.width,height:e.height}}:null}}}})}async setMaxSize(e){if(e&&e.type!=="Logical"&&e.type!=="Physical")throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMaxSize",payload:e?{type:e.type,data:{width:e.width,height:e.height}}:null}}}})}async setPosition(e){if(!e||e.type!=="Logical"&&e.type!=="Physical")throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setPosition",payload:{type:e.type,data:{x:e.x,y:e.y}}}}}})}async setFullscreen(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setFullscreen",payload:e}}}})}async setFocus(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setFocus"}}}})}async setIcon(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setIcon",payload:{icon:typeof e=="string"?e:Array.from(e)}}}}})}async setSkipTaskbar(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setSkipTaskbar",payload:e}}}})}async setCursorGrab(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorGrab",payload:e}}}})}async setCursorVisible(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorVisible",payload:e}}}})}async setCursorIcon(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorIcon",payload:e}}}})}async setCursorPosition(e){if(!e||e.type!=="Logical"&&e.type!=="Physical")throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorPosition",payload:{type:e.type,data:{x:e.x,y:e.y}}}}}})}async setIgnoreCursorEvents(e){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setIgnoreCursorEvents",payload:e}}}})}async startDragging(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"startDragging"}}}})}async onResized(e){return this.listen("tauri://resize",i=>{i.payload=me(i.payload),e(i)})}async onMoved(e){return this.listen("tauri://move",i=>{i.payload=ce(i.payload),e(i)})}async onCloseRequested(e){return this.listen("tauri://close-requested",i=>{let r=new x(i);Promise.resolve(e(r)).then(()=>{if(!r.isPreventDefault())return this.close()})})}async onFocusChanged(e){let i=await this.listen("tauri://focus",s=>{e({...s,payload:!0})}),r=await this.listen("tauri://blur",s=>{e({...s,payload:!1})});return()=>{i(),r()}}async onScaleChanged(e){return this.listen("tauri://scale-change",e)}async onMenuClicked(e){return this.listen("tauri://menu",e)}async onFileDropEvent(e){let i=await this.listen("tauri://file-drop",o=>{e({...o,payload:{type:"drop",paths:o.payload}})}),r=await this.listen("tauri://file-drop-hover",o=>{e({...o,payload:{type:"hover",paths:o.payload}})}),s=await this.listen("tauri://file-drop-cancelled",o=>{e({...o,payload:{type:"cancel"}})});return()=>{i(),r(),s()}}async onThemeChanged(e){return this.listen("tauri://theme-changed",e)}},x=class{constructor(e){this._preventDefault=!1;this.event=e.event,this.windowLabel=e.windowLabel,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}},m=class extends S{constructor(e,i={}){super(e),i?.skip||n({__tauriModule:"Window",message:{cmd:"createWebview",data:{options:{label:e,...i}}}}).then(async()=>this.emit("tauri://created")).catch(async r=>this.emit("tauri://error",r))}static getByLabel(e){return B().some(i=>i.label===e)?new m(e,{skip:!0}):null}static async getFocusedWindow(){for(let e of B())if(await e.isFocused())return e;return null}},ee;"__TAURI_METADATA__"in window?ee=new m(window.__TAURI_METADATA__.__currentWindow.label,{skip:!0}):(console.warn(`Could not find "window.__TAURI_METADATA__". The "appWindow" value will reference the "main" window label. -Note that this is not an issue if running this frontend on a browser instead of a Tauri window.`),ee=new m("main",{skip:!0}));function te(t){return t===null?null:{name:t.name,scaleFactor:t.scaleFactor,position:ce(t.position),size:me(t.size)}}function ce(t){return new h(t.x,t.y)}function me(t){return new y(t.width,t.height)}async function Nt(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{cmd:{type:"currentMonitor"}}}}).then(te)}async function Ht(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{cmd:{type:"primaryMonitor"}}}}).then(te)}async function Vt(){return n({__tauriModule:"Window",message:{cmd:"manage",data:{cmd:{type:"availableMonitors"}}}}).then(t=>t.map(te))}var ne={};d(ne,{EOL:()=>jt,arch:()=>$t,locale:()=>Qt,platform:()=>qt,tempdir:()=>Kt,type:()=>Jt,version:()=>Gt});var jt=_()?`\r -`:` -`;async function qt(){return n({__tauriModule:"Os",message:{cmd:"platform"}})}async function Gt(){return n({__tauriModule:"Os",message:{cmd:"version"}})}async function Jt(){return n({__tauriModule:"Os",message:{cmd:"osType"}})}async function $t(){return n({__tauriModule:"Os",message:{cmd:"arch"}})}async function Kt(){return n({__tauriModule:"Os",message:{cmd:"tempdir"}})}async function Qt(){return n({__tauriModule:"Os",message:{cmd:"locale"}})}var Yt=f;return fe(Zt);})(); -window.__TAURI__ = __TAURI_IIFE__ +var __TAURI_IIFE__=function(e){"use strict";function t(e,t=!1){const a=window.crypto.getRandomValues(new Uint32Array(1))[0],n=`_${a}`;return Object.defineProperty(window,n,{value:a=>(t&&Reflect.deleteProperty(window,n),e?.(a)),writable:!1,configurable:!0}),a}async function a(e,a={}){return new Promise(((n,r)=>{const i=t((e=>{n(e),Reflect.deleteProperty(window,`_${s}`)}),!0),s=t((e=>{r(e),Reflect.deleteProperty(window,`_${i}`)}),!0);window.__TAURI_IPC__({cmd:e,callback:i,error:s,...a})}))}var n=Object.freeze({__proto__:null,convertFileSrc:function(e,t="asset"){return window.__TAURI__.convertFileSrc(e,t)},invoke:a,transformCallback:t});async function r(e){return a("tauri",e)}var i=Object.freeze({__proto__:null,getName:async function(){return r({__tauriModule:"App",message:{cmd:"getAppName"}})},getTauriVersion:async function(){return r({__tauriModule:"App",message:{cmd:"getTauriVersion"}})},getVersion:async function(){return r({__tauriModule:"App",message:{cmd:"getAppVersion"}})},hide:async function(){return r({__tauriModule:"App",message:{cmd:"hide"}})},show:async function(){return r({__tauriModule:"App",message:{cmd:"show"}})}});var s=Object.freeze({__proto__:null,getMatches:async function(){return r({__tauriModule:"Cli",message:{cmd:"cliMatches"}})}});var o=Object.freeze({__proto__:null,readText:async function(){return r({__tauriModule:"Clipboard",message:{cmd:"readText",data:null}})},writeText:async function(e){return r({__tauriModule:"Clipboard",message:{cmd:"writeText",data:e}})}});var c,l=Object.freeze({__proto__:null,ask:async function(e,t){const a="string"==typeof t?{title:t}:t;return r({__tauriModule:"Dialog",message:{cmd:"askDialog",message:e.toString(),title:a?.title?.toString(),type:a?.type,buttonLabels:[a?.okLabel?.toString()??"Yes",a?.cancelLabel?.toString()??"No"]}})},confirm:async function(e,t){const a="string"==typeof t?{title:t}:t;return r({__tauriModule:"Dialog",message:{cmd:"confirmDialog",message:e.toString(),title:a?.title?.toString(),type:a?.type,buttonLabels:[a?.okLabel?.toString()??"Ok",a?.cancelLabel?.toString()??"Cancel"]}})},message:async function(e,t){const a="string"==typeof t?{title:t}:t;return r({__tauriModule:"Dialog",message:{cmd:"messageDialog",message:e.toString(),title:a?.title?.toString(),type:a?.type,buttonLabel:a?.okLabel?.toString()}})},open:async function(e={}){return"object"==typeof e&&Object.freeze(e),r({__tauriModule:"Dialog",message:{cmd:"openDialog",options:e}})},save:async function(e={}){return"object"==typeof e&&Object.freeze(e),r({__tauriModule:"Dialog",message:{cmd:"saveDialog",options:e}})}});async function u(e,t){return r({__tauriModule:"Event",message:{cmd:"unlisten",event:e,eventId:t}})}async function d(e,t,a){await r({__tauriModule:"Event",message:{cmd:"emit",event:e,windowLabel:t,payload:a}})}async function m(e,a,n){return r({__tauriModule:"Event",message:{cmd:"listen",event:e,windowLabel:a,handler:t(n)}}).then((t=>async()=>u(e,t)))}async function h(e,t,a){return m(e,t,(t=>{a(t),u(e,t.id).catch((()=>{}))}))}async function p(e,t){return m(e,null,t)}async function _(e,t){return h(e,null,t)}async function y(e,t){return d(e,void 0,t)}!function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",e.WINDOW_CREATED="tauri://window-created",e.WINDOW_DESTROYED="tauri://destroyed",e.WINDOW_FOCUS="tauri://focus",e.WINDOW_BLUR="tauri://blur",e.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",e.WINDOW_THEME_CHANGED="tauri://theme-changed",e.WINDOW_FILE_DROP="tauri://file-drop",e.WINDOW_FILE_DROP_HOVER="tauri://file-drop-hover",e.WINDOW_FILE_DROP_CANCELLED="tauri://file-drop-cancelled",e.MENU="tauri://menu",e.CHECK_UPDATE="tauri://update",e.UPDATE_AVAILABLE="tauri://update-available",e.INSTALL_UPDATE="tauri://update-install",e.STATUS_UPDATE="tauri://update-status",e.DOWNLOAD_PROGRESS="tauri://update-download-progress"}(c||(c={}));var g,f=Object.freeze({__proto__:null,get TauriEvent(){return c},emit:y,listen:p,once:_});async function b(e,t,a){"object"==typeof a&&Object.freeze(a),"object"==typeof e&&Object.freeze(e);const n={path:"",contents:""};let i=a;return"string"==typeof e?n.path=e:(n.path=e.path,n.contents=e.contents),"string"==typeof t?n.contents=t??"":i=t,r({__tauriModule:"Fs",message:{cmd:"writeFile",path:n.path,contents:Array.from((new TextEncoder).encode(n.contents)),options:i}})}!function(e){e[e.Audio=1]="Audio",e[e.Cache=2]="Cache",e[e.Config=3]="Config",e[e.Data=4]="Data",e[e.LocalData=5]="LocalData",e[e.Desktop=6]="Desktop",e[e.Document=7]="Document",e[e.Download=8]="Download",e[e.Executable=9]="Executable",e[e.Font=10]="Font",e[e.Home=11]="Home",e[e.Picture=12]="Picture",e[e.Public=13]="Public",e[e.Runtime=14]="Runtime",e[e.Template=15]="Template",e[e.Video=16]="Video",e[e.Resource=17]="Resource",e[e.App=18]="App",e[e.Log=19]="Log",e[e.Temp=20]="Temp",e[e.AppConfig=21]="AppConfig",e[e.AppData=22]="AppData",e[e.AppLocalData=23]="AppLocalData",e[e.AppCache=24]="AppCache",e[e.AppLog=25]="AppLog"}(g||(g={}));var w=Object.freeze({__proto__:null,get BaseDirectory(){return g},get Dir(){return g},copyFile:async function(e,t,a={}){return r({__tauriModule:"Fs",message:{cmd:"copyFile",source:e,destination:t,options:a}})},createDir:async function(e,t={}){return r({__tauriModule:"Fs",message:{cmd:"createDir",path:e,options:t}})},exists:async function(e,t={}){return r({__tauriModule:"Fs",message:{cmd:"exists",path:e,options:t}})},readBinaryFile:async function(e,t={}){const a=await r({__tauriModule:"Fs",message:{cmd:"readFile",path:e,options:t}});return Uint8Array.from(a)},readDir:async function(e,t={}){return r({__tauriModule:"Fs",message:{cmd:"readDir",path:e,options:t}})},readTextFile:async function(e,t={}){return r({__tauriModule:"Fs",message:{cmd:"readTextFile",path:e,options:t}})},removeDir:async function(e,t={}){return r({__tauriModule:"Fs",message:{cmd:"removeDir",path:e,options:t}})},removeFile:async function(e,t={}){return r({__tauriModule:"Fs",message:{cmd:"removeFile",path:e,options:t}})},renameFile:async function(e,t,a={}){return r({__tauriModule:"Fs",message:{cmd:"renameFile",oldPath:e,newPath:t,options:a}})},writeBinaryFile:async function(e,t,a){"object"==typeof a&&Object.freeze(a),"object"==typeof e&&Object.freeze(e);const n={path:"",contents:[]};let i=a;return"string"==typeof e?n.path=e:(n.path=e.path,n.contents=e.contents),t&&"dir"in t?i=t:"string"==typeof e&&(n.contents=t??[]),r({__tauriModule:"Fs",message:{cmd:"writeFile",path:n.path,contents:Array.from(n.contents instanceof ArrayBuffer?new Uint8Array(n.contents):n.contents),options:i}})},writeFile:b,writeTextFile:b});var M,D=Object.freeze({__proto__:null,isRegistered:async function(e){return r({__tauriModule:"GlobalShortcut",message:{cmd:"isRegistered",shortcut:e}})},register:async function(e,a){return r({__tauriModule:"GlobalShortcut",message:{cmd:"register",shortcut:e,handler:t(a)}})},registerAll:async function(e,a){return r({__tauriModule:"GlobalShortcut",message:{cmd:"registerAll",shortcuts:e,handler:t(a)}})},unregister:async function(e){return r({__tauriModule:"GlobalShortcut",message:{cmd:"unregister",shortcut:e}})},unregisterAll:async function(){return r({__tauriModule:"GlobalShortcut",message:{cmd:"unregisterAll"}})}});!function(e){e[e.JSON=1]="JSON",e[e.Text=2]="Text",e[e.Binary=3]="Binary"}(M||(M={}));class P{constructor(e,t){this.type=e,this.payload=t}static form(e){return new P("Form",e)}static json(e){return new P("Json",e)}static text(e){return new P("Text",e)}static bytes(e){return new P("Bytes",Array.from(e instanceof ArrayBuffer?new Uint8Array(e):e))}}class v{constructor(e){this.url=e.url,this.status=e.status,this.ok=this.status>=200&&this.status<300,this.headers=e.headers,this.rawHeaders=e.rawHeaders,this.data=e.data}}class A{constructor(e){this.id=e}async drop(){return r({__tauriModule:"Http",message:{cmd:"dropClient",client:this.id}})}async request(e){const t=!e.responseType||e.responseType===M.JSON;return t&&(e.responseType=M.Text),"Form"===e.body?.type&&(e.body.payload=await async function(e){const t={},a=async(e,a)=>{if(null!==a){let n;n="string"==typeof a?a:a instanceof Uint8Array||Array.isArray(a)?Array.from(a):a instanceof File?{file:Array.from(new Uint8Array(await a.arrayBuffer())),mime:a.type,fileName:a.name}:"string"==typeof a.file?{file:a.file,mime:a.mime,fileName:a.fileName}:{file:Array.from(a.file),mime:a.mime,fileName:a.fileName},t[String(e)]=n}};if(e instanceof FormData)for(const[t,n]of e)await a(t,n);else for(const[t,n]of Object.entries(e))await a(t,n);return t}(e.body.payload)),r({__tauriModule:"Http",message:{cmd:"httpRequest",client:this.id,options:e}}).then((e=>{const a=new v(e);if(t){try{a.data=JSON.parse(a.data)}catch(e){if(a.ok&&""===a.data)a.data={};else if(a.ok)throw Error(`Failed to parse response \`${a.data}\` as JSON: ${e};\n try setting the \`responseType\` option to \`ResponseType.Text\` or \`ResponseType.Binary\` if the API does not return a JSON response.`)}return a}return a}))}async get(e,t){return this.request({method:"GET",url:e,...t})}async post(e,t,a){return this.request({method:"POST",url:e,body:t,...a})}async put(e,t,a){return this.request({method:"PUT",url:e,body:t,...a})}async patch(e,t){return this.request({method:"PATCH",url:e,...t})}async delete(e,t){return this.request({method:"DELETE",url:e,...t})}}async function W(e){return r({__tauriModule:"Http",message:{cmd:"createClient",options:e}}).then((e=>new A(e)))}let E=null;var L=Object.freeze({__proto__:null,Body:P,Client:A,Response:v,get ResponseType(){return M},fetch:async function(e,t){return null===E&&(E=await W()),E.request({url:e,method:t?.method??"GET",...t})},getClient:W});var T=Object.freeze({__proto__:null,isPermissionGranted:async function(){return"default"!==window.Notification.permission?Promise.resolve("granted"===window.Notification.permission):r({__tauriModule:"Notification",message:{cmd:"isNotificationPermissionGranted"}})},requestPermission:async function(){return window.Notification.requestPermission()},sendNotification:function(e){"string"==typeof e?new window.Notification(e):new window.Notification(e.title,e)}});function O(){return navigator.appVersion.includes("Win")}async function C(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.AppConfig}})}async function z(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.AppLog}})}const S=O()?"\\":"/",F=O()?";":":";var I=Object.freeze({__proto__:null,get BaseDirectory(){return g},appCacheDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.AppCache}})},appConfigDir:C,appDataDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.AppData}})},appDir:async function(){return C()},appLocalDataDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.AppLocalData}})},appLogDir:z,audioDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Audio}})},basename:async function(e,t){return r({__tauriModule:"Path",message:{cmd:"basename",path:e,ext:t}})},cacheDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Cache}})},configDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Config}})},dataDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Data}})},delimiter:F,desktopDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Desktop}})},dirname:async function(e){return r({__tauriModule:"Path",message:{cmd:"dirname",path:e}})},documentDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Document}})},downloadDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Download}})},executableDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Executable}})},extname:async function(e){return r({__tauriModule:"Path",message:{cmd:"extname",path:e}})},fontDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Font}})},homeDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Home}})},isAbsolute:async function(e){return r({__tauriModule:"Path",message:{cmd:"isAbsolute",path:e}})},join:async function(...e){return r({__tauriModule:"Path",message:{cmd:"join",paths:e}})},localDataDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.LocalData}})},logDir:async function(){return z()},normalize:async function(e){return r({__tauriModule:"Path",message:{cmd:"normalize",path:e}})},pictureDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Picture}})},publicDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Public}})},resolve:async function(...e){return r({__tauriModule:"Path",message:{cmd:"resolve",paths:e}})},resolveResource:async function(e){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:e,directory:g.Resource}})},resourceDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Resource}})},runtimeDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Runtime}})},sep:S,templateDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Template}})},videoDir:async function(){return r({__tauriModule:"Path",message:{cmd:"resolvePath",path:"",directory:g.Video}})}});var x=Object.freeze({__proto__:null,exit:async function(e=0){return r({__tauriModule:"Process",message:{cmd:"exit",exitCode:e}})},relaunch:async function(){return r({__tauriModule:"Process",message:{cmd:"relaunch"}})}});class N{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){const a=(...n)=>{this.removeListener(e,a),t(...n)};return this.addListener(e,a)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter((e=>e!==t))),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,...t){if(e in this.eventListeners){const a=this.eventListeners[e];for(const e of a)e(...t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){const a=(...n)=>{this.removeListener(e,a),t(...n)};return this.prependListener(e,a)}}class R{constructor(e){this.pid=e}async write(e){return r({__tauriModule:"Shell",message:{cmd:"stdinWrite",pid:this.pid,buffer:"string"==typeof e?e:Array.from(e)}})}async kill(){return r({__tauriModule:"Shell",message:{cmd:"killChild",pid:this.pid}})}}class U extends N{constructor(e,t=[],a){super(),this.stdout=new N,this.stderr=new N,this.program=e,this.args="string"==typeof t?[t]:t,this.options=a??{}}static sidecar(e,t=[],a){const n=new U(e,t,a);return n.options.sidecar=!0,n}async spawn(){return async function(e,a,n=[],i){return"object"==typeof n&&Object.freeze(n),r({__tauriModule:"Shell",message:{cmd:"execute",program:a,args:n,options:i,onEventFn:t(e)}})}((e=>{switch(e.event){case"Error":this.emit("error",e.payload);break;case"Terminated":this.emit("close",e.payload);break;case"Stdout":this.stdout.emit("data",e.payload);break;case"Stderr":this.stderr.emit("data",e.payload)}}),this.program,this.args,this.options).then((e=>new R(e)))}async execute(){return new Promise(((e,t)=>{this.on("error",t);const a=[],n=[];this.stdout.on("data",(e=>{a.push(e)})),this.stderr.on("data",(e=>{n.push(e)})),this.on("close",(t=>{e({code:t.code,signal:t.signal,stdout:a.join("\n"),stderr:n.join("\n")})})),this.spawn().catch(t)}))}}var j=Object.freeze({__proto__:null,Child:R,Command:U,EventEmitter:N,open:async function(e,t){return r({__tauriModule:"Shell",message:{cmd:"open",path:e,with:t}})}});async function k(e){return p(c.STATUS_UPDATE,(t=>{e(t?.payload)}))}var H,V=Object.freeze({__proto__:null,checkUpdate:async function(){let e;function t(){e&&e(),e=void 0}return new Promise(((a,n)=>{_(c.UPDATE_AVAILABLE,(e=>{var n;n=e?.payload,t(),a({manifest:n,shouldUpdate:!0})})).catch((e=>{throw t(),e})),k((function(e){if(e.error)return t(),void n(e.error);"UPTODATE"===e.status&&(t(),a({shouldUpdate:!1}))})).then((t=>{e=t})).catch((e=>{throw t(),e})),y(c.CHECK_UPDATE).catch((e=>{throw t(),e}))}))},installUpdate:async function(){let e;function t(){e&&e(),e=void 0}return new Promise(((a,n)=>{k((function(e){if(e.error)return t(),void n(e.error);"DONE"===e.status&&(t(),a())})).then((t=>{e=t})).catch((e=>{throw t(),e})),y(c.INSTALL_UPDATE).catch((e=>{throw t(),e}))}))},onUpdaterEvent:k});class B{constructor(e,t){this.type="Logical",this.width=e,this.height=t}}class G{constructor(e,t){this.type="Physical",this.width=e,this.height=t}toLogical(e){return new B(this.width/e,this.height/e)}}class q{constructor(e,t){this.type="Logical",this.x=e,this.y=t}}class J{constructor(e,t){this.type="Physical",this.x=e,this.y=t}toLogical(e){return new q(this.x/e,this.y/e)}}function $(){return window.__TAURI_METADATA__.__windows.map((e=>new X(e.label,{skip:!0})))}!function(e){e[e.Critical=1]="Critical",e[e.Informational=2]="Informational"}(H||(H={}));const K=["tauri://created","tauri://error"];class Q{constructor(e){this.label=e,this.listeners=Object.create(null)}async listen(e,t){return this._handleTauriEvent(e,t)?Promise.resolve((()=>{const a=this.listeners[e];a.splice(a.indexOf(t),1)})):m(e,this.label,t)}async once(e,t){return this._handleTauriEvent(e,t)?Promise.resolve((()=>{const a=this.listeners[e];a.splice(a.indexOf(t),1)})):h(e,this.label,t)}async emit(e,t){if(K.includes(e)){for(const a of this.listeners[e]||[])a({event:e,id:-1,windowLabel:this.label,payload:t});return Promise.resolve()}return d(e,this.label,t)}_handleTauriEvent(e,t){return!!K.includes(e)&&(e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t],!0)}}class Y extends Q{async scaleFactor(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"scaleFactor"}}}})}async innerPosition(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"innerPosition"}}}}).then((({x:e,y:t})=>new J(e,t)))}async outerPosition(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"outerPosition"}}}}).then((({x:e,y:t})=>new J(e,t)))}async innerSize(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"innerSize"}}}}).then((({width:e,height:t})=>new G(e,t)))}async outerSize(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"outerSize"}}}}).then((({width:e,height:t})=>new G(e,t)))}async isFullscreen(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isFullscreen"}}}})}async isMinimized(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMinimized"}}}})}async isMaximized(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMaximized"}}}})}async isFocused(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isFocused"}}}})}async isDecorated(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isDecorated"}}}})}async isResizable(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isResizable"}}}})}async isMaximizable(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMaximizable"}}}})}async isMinimizable(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isMinimizable"}}}})}async isClosable(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isClosable"}}}})}async isVisible(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"isVisible"}}}})}async title(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"title"}}}})}async theme(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"theme"}}}})}async center(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"center"}}}})}async requestUserAttention(e){let t=null;return e&&(t=e===H.Critical?{type:"Critical"}:{type:"Informational"}),r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"requestUserAttention",payload:t}}}})}async setResizable(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setResizable",payload:e}}}})}async setMaximizable(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMaximizable",payload:e}}}})}async setMinimizable(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMinimizable",payload:e}}}})}async setClosable(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setClosable",payload:e}}}})}async setTitle(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setTitle",payload:e}}}})}async maximize(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"maximize"}}}})}async unmaximize(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"unmaximize"}}}})}async toggleMaximize(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"toggleMaximize"}}}})}async minimize(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"minimize"}}}})}async unminimize(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"unminimize"}}}})}async show(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"show"}}}})}async hide(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"hide"}}}})}async close(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"close"}}}})}async setDecorations(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setDecorations",payload:e}}}})}async setAlwaysOnTop(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setAlwaysOnTop",payload:e}}}})}async setContentProtected(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setContentProtected",payload:e}}}})}async setSize(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setSize",payload:{type:e.type,data:{width:e.width,height:e.height}}}}}})}async setMinSize(e){if(e&&"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMinSize",payload:e?{type:e.type,data:{width:e.width,height:e.height}}:null}}}})}async setMaxSize(e){if(e&&"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setMaxSize",payload:e?{type:e.type,data:{width:e.width,height:e.height}}:null}}}})}async setPosition(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setPosition",payload:{type:e.type,data:{x:e.x,y:e.y}}}}}})}async setFullscreen(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setFullscreen",payload:e}}}})}async setFocus(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setFocus"}}}})}async setIcon(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setIcon",payload:{icon:"string"==typeof e?e:Array.from(e)}}}}})}async setSkipTaskbar(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setSkipTaskbar",payload:e}}}})}async setCursorGrab(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorGrab",payload:e}}}})}async setCursorVisible(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorVisible",payload:e}}}})}async setCursorIcon(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorIcon",payload:e}}}})}async setCursorPosition(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setCursorPosition",payload:{type:e.type,data:{x:e.x,y:e.y}}}}}})}async setIgnoreCursorEvents(e){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"setIgnoreCursorEvents",payload:e}}}})}async startDragging(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{label:this.label,cmd:{type:"startDragging"}}}})}async onResized(e){return this.listen(c.WINDOW_RESIZED,(t=>{t.payload=ne(t.payload),e(t)}))}async onMoved(e){return this.listen(c.WINDOW_MOVED,(t=>{t.payload=ae(t.payload),e(t)}))}async onCloseRequested(e){return this.listen(c.WINDOW_CLOSE_REQUESTED,(t=>{const a=new Z(t);Promise.resolve(e(a)).then((()=>{if(!a.isPreventDefault())return this.close()}))}))}async onFocusChanged(e){const t=await this.listen(c.WINDOW_FOCUS,(t=>{e({...t,payload:!0})})),a=await this.listen(c.WINDOW_BLUR,(t=>{e({...t,payload:!1})}));return()=>{t(),a()}}async onScaleChanged(e){return this.listen(c.WINDOW_SCALE_FACTOR_CHANGED,e)}async onMenuClicked(e){return this.listen(c.MENU,e)}async onFileDropEvent(e){const t=await this.listen(c.WINDOW_FILE_DROP,(t=>{e({...t,payload:{type:"drop",paths:t.payload}})})),a=await this.listen(c.WINDOW_FILE_DROP_HOVER,(t=>{e({...t,payload:{type:"hover",paths:t.payload}})})),n=await this.listen(c.WINDOW_FILE_DROP_CANCELLED,(t=>{e({...t,payload:{type:"cancel"}})}));return()=>{t(),a(),n()}}async onThemeChanged(e){return this.listen(c.WINDOW_THEME_CHANGED,e)}}class Z{constructor(e){this._preventDefault=!1,this.event=e.event,this.windowLabel=e.windowLabel,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}class X extends Y{constructor(e,t={}){super(e),t?.skip||r({__tauriModule:"Window",message:{cmd:"createWebview",data:{options:{label:e,...t}}}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static getByLabel(e){return $().some((t=>t.label===e))?new X(e,{skip:!0}):null}static async getFocusedWindow(){for(const e of $())if(await e.isFocused())return e;return null}}let ee;function te(e){return null===e?null:{name:e.name,scaleFactor:e.scaleFactor,position:ae(e.position),size:ne(e.size)}}function ae(e){return new J(e.x,e.y)}function ne(e){return new G(e.width,e.height)}"__TAURI_METADATA__"in window?ee=new X(window.__TAURI_METADATA__.__currentWindow.label,{skip:!0}):(console.warn('Could not find "window.__TAURI_METADATA__". The "appWindow" value will reference the "main" window label.\nNote that this is not an issue if running this frontend on a browser instead of a Tauri window.'),ee=new X("main",{skip:!0}));var re=Object.freeze({__proto__:null,CloseRequestedEvent:Z,LogicalPosition:q,LogicalSize:B,PhysicalPosition:J,PhysicalSize:G,get UserAttentionType(){return H},WebviewWindow:X,WebviewWindowHandle:Q,WindowManager:Y,get appWindow(){return ee},availableMonitors:async function(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{cmd:{type:"availableMonitors"}}}}).then((e=>e.map(te)))},currentMonitor:async function(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{cmd:{type:"currentMonitor"}}}}).then(te)},getAll:$,getCurrent:function(){return new X(window.__TAURI_METADATA__.__currentWindow.label,{skip:!0})},primaryMonitor:async function(){return r({__tauriModule:"Window",message:{cmd:"manage",data:{cmd:{type:"primaryMonitor"}}}}).then(te)}});const ie=O()?"\r\n":"\n";var se=Object.freeze({__proto__:null,EOL:ie,arch:async function(){return r({__tauriModule:"Os",message:{cmd:"arch"}})},locale:async function(){return r({__tauriModule:"Os",message:{cmd:"locale"}})},platform:async function(){return r({__tauriModule:"Os",message:{cmd:"platform"}})},tempdir:async function(){return r({__tauriModule:"Os",message:{cmd:"tempdir"}})},type:async function(){return r({__tauriModule:"Os",message:{cmd:"osType"}})},version:async function(){return r({__tauriModule:"Os",message:{cmd:"version"}})}});const oe=a;return e.app=i,e.cli=s,e.clipboard=o,e.dialog=l,e.event=f,e.fs=w,e.globalShortcut=D,e.http=L,e.invoke=oe,e.notification=T,e.os=se,e.path=I,e.process=x,e.shell=j,e.tauri=n,e.updater=V,e.window=re,e}({});window.__TAURI__=__TAURI_IIFE__; diff --git a/package.json b/package.json index 9b24e6286..66dfa1380 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,9 @@ "url": "https://github.com/tauri-apps/tauri.git" }, "scripts": { - "format": "prettier --write --end-of-line=auto \"./**/*.{cjs,js,jsx,ts,tsx,html,css,json}\" --ignore-path .prettierignore", - "postinstall": "husky install" + "format": "prettier --write . --config .prettierrc --ignore-path .prettierignore", + "format:check": "prettier --check . --config .prettierrc --ignore-path .prettierignore", + "postinstall": "husky install" }, "devDependencies": { "covector": "^0.7.3", diff --git a/tooling/api/.eslintrc b/tooling/api/.eslintrc new file mode 100644 index 000000000..752e551de --- /dev/null +++ b/tooling/api/.eslintrc @@ -0,0 +1,51 @@ +{ + "root": true, + + "env": { + "node": true, + "jest": true + }, + + "parser": "@typescript-eslint/parser", + + "extends": [ + "plugin:@typescript-eslint/recommended-requiring-type-checking", + // TODO: make this work with typescript + // "plugin:node/recommended" + "prettier" + ], + + "plugins": ["@typescript-eslint", "node", "security"], + + "parserOptions": { + "project": "./tsconfig.json" + }, + + "globals": { + "__statics": true, + "process": true + }, + + // add your custom rules here + "rules": { + "no-debugger": "error", + "no-process-exit": "off", + "security/detect-non-literal-fs-filename": "warn", + "security/detect-unsafe-regex": "error", + "security/detect-buffer-noassert": "error", + "security/detect-child-process": "warn", + "security/detect-disable-mustache-escape": "error", + "security/detect-eval-with-expression": "error", + "security/detect-no-csrf-before-method-override": "error", + "security/detect-non-literal-regexp": "error", + "security/detect-non-literal-require": "warn", + "security/detect-object-injection": "warn", + "security/detect-possible-timing-attacks": "error", + "security/detect-pseudoRandomBytes": "error", + "space-before-function-paren": "off", + "@typescript-eslint/default-param-last": "off", + "@typescript-eslint/strict-boolean-expressions": 0, + "no-return-await": "warn", + "@typescript-eslint/return-await": "off" + } +} diff --git a/tooling/api/.eslintrc.cjs b/tooling/api/.eslintrc.cjs deleted file mode 100644 index 15146e750..000000000 --- a/tooling/api/.eslintrc.cjs +++ /dev/null @@ -1,56 +0,0 @@ -module.exports = { - root: true, - - env: { - node: true, - jest: true - }, - - parser: '@typescript-eslint/parser', - - extends: [ - 'standard-with-typescript', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - // TODO: make this work with typescript - // 'plugin:node/recommended' - 'prettier' - ], - - plugins: ['@typescript-eslint', 'node', 'security'], - - parserOptions: { - tsconfigRootDir: __dirname, - project: './tsconfig.json' - }, - - globals: { - __statics: true, - process: true - }, - - // add your custom rules here - rules: { - // allow console.log during development only - 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - // allow debugger during development only - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-process-exit': 'off', - 'security/detect-non-literal-fs-filename': 'warn', - 'security/detect-unsafe-regex': 'error', - 'security/detect-buffer-noassert': 'error', - 'security/detect-child-process': 'warn', - 'security/detect-disable-mustache-escape': 'error', - 'security/detect-eval-with-expression': 'error', - 'security/detect-no-csrf-before-method-override': 'error', - 'security/detect-non-literal-regexp': 'error', - 'security/detect-non-literal-require': 'warn', - 'security/detect-object-injection': 'warn', - 'security/detect-possible-timing-attacks': 'error', - 'security/detect-pseudoRandomBytes': 'error', - 'space-before-function-paren': 'off', - '@typescript-eslint/default-param-last': 'off', - '@typescript-eslint/strict-boolean-expressions': 0, - 'no-return-await': 'warn', - '@typescript-eslint/return-await': 'off' - } -} diff --git a/tooling/api/.prettierrc.cjs b/tooling/api/.prettierrc.cjs deleted file mode 100644 index 2be2f9327..000000000 --- a/tooling/api/.prettierrc.cjs +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - singleQuote: true, - semi: false, - trailingComma: 'none' -} diff --git a/tooling/api/CHANGELOG.md b/tooling/api/CHANGELOG.md index ba78b3844..ab5c025da 100644 --- a/tooling/api/CHANGELOG.md +++ b/tooling/api/CHANGELOG.md @@ -31,7 +31,7 @@ ## \[1.3.0] -- Return correct type for ` event.payload ` in `onResized` and `onMoved` window event handlers. +- Return correct type for `event.payload ` in `onResized` and `onMoved` window event handlers. - [0b46637e](https://www.github.com/tauri-apps/tauri/commit/0b46637ebaba54403afa32a1cb466f09df2db999) fix(api): construct correct object for onResized and onMoved, closes [#6507](https://www.github.com/tauri-apps/tauri/pull/6507) ([#6509](https://www.github.com/tauri-apps/tauri/pull/6509)) on 2023-04-03 - Added the `WindowOptions::contentProtected` option and `WebviewWindow#setContentProtected` to change it at runtime. - [4ab5545b](https://www.github.com/tauri-apps/tauri/commit/4ab5545b7a831c549f3c65e74de487ede3ab7ce5) feat: add content protection api, closes [#5132](https://www.github.com/tauri-apps/tauri/pull/5132) ([#5513](https://www.github.com/tauri-apps/tauri/pull/5513)) on 2022-12-13 @@ -168,65 +168,84 @@ ## \[1.0.0-rc.0] - Add `fileDropEnabled` property to `WindowOptions` so you can now disable it when creating windows from js. + - [1bfc32a3](https://www.github.com/tauri-apps/tauri/commit/1bfc32a3b2f31b962ce8a5c611b60cb008360923) fix(api.js): add `fileDropEnabled` to `WindowOptions`, closes [#2968](https://www.github.com/tauri-apps/tauri/pull/2968) ([#2989](https://www.github.com/tauri-apps/tauri/pull/2989)) on 2021-12-09 - Add `logDir` function to the `path` module to access the suggested log directory. Add `BaseDirectory.Log` to the `fs` module. + - [acbb3ae7](https://www.github.com/tauri-apps/tauri/commit/acbb3ae7bb0165846b9456aea103269f027fc548) feat: add Log directory ([#2736](https://www.github.com/tauri-apps/tauri/pull/2736)) on 2021-10-16 - [62c7a8ad](https://www.github.com/tauri-apps/tauri/commit/62c7a8ad30fd3031b8679960590e5ef3eef8e4da) chore(covector): prepare for `rc` release ([#3376](https://www.github.com/tauri-apps/tauri/pull/3376)) on 2022-02-10 - Expose `ask`, `message` and `confirm` APIs on the dialog module. + - [e98c1af4](https://www.github.com/tauri-apps/tauri/commit/e98c1af44279a5ff6c8a6f0a506ecc219c9f77af) feat(core): expose message dialog APIs, fix window.confirm, implement HasRawWindowHandle for Window, closes [#2535](https://www.github.com/tauri-apps/tauri/pull/2535) ([#2700](https://www.github.com/tauri-apps/tauri/pull/2700)) on 2021-10-02 - Event `emit` now automatically serialize non-string types. + - [06000996](https://www.github.com/tauri-apps/tauri/commit/060009969627890fa9018e2f1105bad13299394c) feat(api): support unknown types for event emit payload, closes [#2929](https://www.github.com/tauri-apps/tauri/pull/2929) ([#2964](https://www.github.com/tauri-apps/tauri/pull/2964)) on 2022-01-07 - Fix `http.fetch` throwing error if the response is successful but the body is empty. + - [50c63900](https://www.github.com/tauri-apps/tauri/commit/50c63900c7313064037e2ceb798a6432fcd1bcda) fix(api.js): fix `http.fetch` throwing error if response body is empty, closes [#2831](https://www.github.com/tauri-apps/tauri/pull/2831) ([#3008](https://www.github.com/tauri-apps/tauri/pull/3008)) on 2021-12-09 - Add `title` option to file open/save dialogs. + - [e1d6a6e6](https://www.github.com/tauri-apps/tauri/commit/e1d6a6e6445637723e2331ca799a662e720e15a8) Create api-file-dialog-title.md ([#3235](https://www.github.com/tauri-apps/tauri/pull/3235)) on 2022-01-16 - [62c7a8ad](https://www.github.com/tauri-apps/tauri/commit/62c7a8ad30fd3031b8679960590e5ef3eef8e4da) chore(covector): prepare for `rc` release ([#3376](https://www.github.com/tauri-apps/tauri/pull/3376)) on 2022-02-10 - Fix `os.platform` returning `macos` and `windows` instead of `darwin` and `win32`. + - [3924c3d8](https://www.github.com/tauri-apps/tauri/commit/3924c3d85365df30b376a1ec6c2d933460d66af0) fix(api.js): fix `os.platform` return on macos and windows, closes [#2698](https://www.github.com/tauri-apps/tauri/pull/2698) ([#2699](https://www.github.com/tauri-apps/tauri/pull/2699)) on 2021-10-02 - The `formatCallback` helper function now returns a number instead of a string. + - [a48b8b18](https://www.github.com/tauri-apps/tauri/commit/a48b8b18d428bcc404d489daa690bbefe1f57311) feat(core): validate callbacks and event names \[TRI-038] \[TRI-020] ([#21](https://www.github.com/tauri-apps/tauri/pull/21)) on 2022-01-09 - Added `rawHeaders` to `http > Response`. + - [b7a2345b](https://www.github.com/tauri-apps/tauri/commit/b7a2345b06ca0306988b4ba3d3deadd449e65af9) feat(core): add raw headers to HTTP API, closes [#2695](https://www.github.com/tauri-apps/tauri/pull/2695) ([#3053](https://www.github.com/tauri-apps/tauri/pull/3053)) on 2022-01-07 - Removed the `currentDir` API from the `path` module. + - [a08509c6](https://www.github.com/tauri-apps/tauri/commit/a08509c641f43695e25944a2dd47697b18cd83e2) fix(api): remove `currentDir` API from the `path` module on 2022-02-04 - Remove `.ts` files on the published package. + - [0f321ac0](https://www.github.com/tauri-apps/tauri/commit/0f321ac08d56412edd5bc9d166201fbc95d887d8) fix(api): do not ship TS files, closes [#2598](https://www.github.com/tauri-apps/tauri/pull/2598) ([#2645](https://www.github.com/tauri-apps/tauri/pull/2645)) on 2021-09-23 - **Breaking change:** Replaces all usages of `number[]` with `Uint8Array` to be closer aligned with the wider JS ecosystem. + - [9b19a805](https://www.github.com/tauri-apps/tauri/commit/9b19a805aa8efa64b22f2dfef193a144b8e0cee3) fix(api.js) Replace `number[]`with `Uint8Array`. fixes [#3306](https://www.github.com/tauri-apps/tauri/pull/3306) ([#3305](https://www.github.com/tauri-apps/tauri/pull/3305)) on 2022-02-05 - `WindowManager` methods `innerPosition` `outerPosition` now correctly return instance of `PhysicalPosition`. `WindowManager` methods `innerSize` `outerSize` now correctly return instance of `PhysicalSize`. + - [cc8b1468](https://www.github.com/tauri-apps/tauri/commit/cc8b1468c821df53ceb771061c919409a9c80978) Fix(api): Window size and position returning wrong class (fix: [#2599](https://www.github.com/tauri-apps/tauri/pull/2599)) ([#2621](https://www.github.com/tauri-apps/tauri/pull/2621)) on 2021-09-22 - Change the `event` field of the `Event` interface to type `EventName` instead of `string`. + - [b5d9bcb4](https://www.github.com/tauri-apps/tauri/commit/b5d9bcb402380abc86ae1fa1a77c629af2275f9d) Consistent event name usage ([#3228](https://www.github.com/tauri-apps/tauri/pull/3228)) on 2022-01-15 - [62c7a8ad](https://www.github.com/tauri-apps/tauri/commit/62c7a8ad30fd3031b8679960590e5ef3eef8e4da) chore(covector): prepare for `rc` release ([#3376](https://www.github.com/tauri-apps/tauri/pull/3376)) on 2022-02-10 - Now `resolve()`, `join()` and `normalize()` from the `path` module, won't throw errors if the path doesn't exist, which matches NodeJS behavior. + - [fe381a0b](https://www.github.com/tauri-apps/tauri/commit/fe381a0bde86ebf4014007f6e21af4c1a9e58cef) fix: `join` no longer cares if path doesn't exist, closes [#2499](https://www.github.com/tauri-apps/tauri/pull/2499) ([#2548](https://www.github.com/tauri-apps/tauri/pull/2548)) on 2021-09-21 - Fixes the dialog `defaultPath` usage on Linux. + - [2212bd5d](https://www.github.com/tauri-apps/tauri/commit/2212bd5d75146f5a2df27cc2157a057642f626da) fix: dialog default path on Linux, closes [#3091](https://www.github.com/tauri-apps/tauri/pull/3091) ([#3123](https://www.github.com/tauri-apps/tauri/pull/3123)) on 2021-12-27 - Fixes `window.label` property returning null instead of the actual label. + - [f5109e0c](https://www.github.com/tauri-apps/tauri/commit/f5109e0c962e3d25404995194968bade1be33b16) fix(api): window label null instead of actual value, closes [#3295](https://www.github.com/tauri-apps/tauri/pull/3295) ([#3332](https://www.github.com/tauri-apps/tauri/pull/3332)) on 2022-02-04 - Remove the `BaseDirectory::Current` enum variant for security reasons. + - [696dca58](https://www.github.com/tauri-apps/tauri/commit/696dca58a9f8ee127a1cf857eb848e09f5845d18) refactor(core): remove `BaseDirectory::Current` variant on 2022-01-26 - Change `WindowLabel` type to `string`. + - [f68603ae](https://www.github.com/tauri-apps/tauri/commit/f68603aee4e16500dff9e385b217f5dd8b1b39e8) chore(docs): simplify event system documentation on 2021-09-27 - When building Universal macOS Binaries through the virtual target `universal-apple-darwin`: @@ -295,7 +314,7 @@ ## \[1.0.0-beta.3] - Export `Response` and `ResponseType` as value instead of type. - - [394b6e05](https://www.github.com/tauri-apps/tauri/commit/394b6e0572e7a0a92e103e462a7f603f7d569319) fix(api): http `ResponseType` export type error ([#2065](https://www.github.com/tauri-apps/tauri/pull/2065)) on 2021-06-24 + - [394b6e05](https://www.github.com/tauri-apps/tauri/commit/394b6e0572e7a0a92e103e462a7f603f7d569319) fix(api): http `ResponseType` export type error ([#2065](https://www.github.com/tauri-apps/tauri/pull/2065)) on 2021-06-24 ## \[1.0.0-beta.2] diff --git a/tooling/api/package.json b/tooling/api/package.json index b81aab10e..62d59cb21 100644 --- a/tooling/api/package.json +++ b/tooling/api/package.json @@ -2,23 +2,10 @@ "name": "@tauri-apps/api", "version": "1.5.1", "description": "Tauri API definitions", - "type": "module", "funding": { "type": "opencollective", "url": "https://opencollective.com/tauri" }, - "exports": { - "./package.json": "./package.json" - }, - "scripts": { - "build": "yarn tsup && node ./scripts/after-build.cjs", - "npm-pack": "yarn build && cd ./dist && npm pack", - "npm-publish": "yarn build && cd ./dist && yarn publish --access public --loglevel silly", - "lint": "eslint --ext ts \"./src/**/*.ts\"", - "lint-fix": "eslint --fix --ext ts \"./src/**/*.ts\"", - "format": "prettier --write --end-of-line=auto \"./**/*.{cjs,js,jsx,ts,tsx,html,css,json}\" --ignore-path ../../.prettierignore", - "format:check": "prettier --check --end-of-line=auto \"./**/*.{cjs,js,jsx,ts,tsx,html,css,json}\" --ignore-path ../../.prettierignore" - }, "repository": { "type": "git", "url": "git+https://github.com/tauri-apps/tauri.git" @@ -31,31 +18,45 @@ "url": "https://github.com/tauri-apps/tauri/issues" }, "homepage": "https://github.com/tauri-apps/tauri#readme", - "publishConfig": { - "access": "public" + "type": "module", + "types": "./types/index.d.ts", + "main": "./index.cjs", + "module": "./index.js", + "exports": { + "./package.json": "./package.json" }, - "engines": { - "node": ">= 14.6.0", - "npm": ">= 6.6.0", - "yarn": ">= 1.19.1" + "scripts": { + "build": "rollup -c --configPlugin typescript", + "npm-pack": "yarn build && cd ./dist && npm pack", + "npm-publish": "yarn build && cd ./dist && yarn publish --access public --loglevel silly --tag next", + "ts:check": "tsc -noEmit", + "lint": "eslint --ext ts \"./src/**/*.ts\"", + "lint:fix": "eslint --fix --ext ts \"./src/**/*.ts\"", + "format": "prettier --write . --config ../../.prettierrc --ignore-path .gitignore --ignore-path ../../.prettierignore", + "format:check": "prettier --check . --config ../../.prettierrc --ignore-path .gitignore --ignore-path ../../.prettierignore" }, "devDependencies": { + "@rollup/plugin-terser": "0.4.4", + "@rollup/plugin-typescript": "11.1.5", + "@types/node": "20.9.0", "@typescript-eslint/eslint-plugin": "5.62.0", + "eslint-config-standard-with-typescript": "34.0.1", "@typescript-eslint/parser": "5.62.0", "eslint": "8.53.0", "eslint-config-prettier": "8.10.0", - "eslint-config-standard-with-typescript": "34.0.1", "eslint-plugin-import": "2.29.0", "eslint-plugin-n": "15.7.0", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "eslint-plugin-security": "1.7.1", - "prettier": "2.8.8", - "tsup": "6.7.0", + "fast-glob": "3.3.2", + "prettier": "3.0.3", + "rollup": "3.29.4", "typescript": "5.2.2" }, - "resolutions": { - "semver": ">=7.5.2", - "optionator": ">=0.9.3" + "engines": { + "node": ">= 14.6.0", + "npm": ">= 6.6.0", + "yarn": ">= 1.19.1" } } diff --git a/tooling/api/rollup.config.ts b/tooling/api/rollup.config.ts new file mode 100644 index 000000000..c440f7afa --- /dev/null +++ b/tooling/api/rollup.config.ts @@ -0,0 +1,138 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +import { defineConfig, Plugin, RollupLog } from 'rollup' +import typescript from '@rollup/plugin-typescript' +import terser from '@rollup/plugin-terser' +import fg from 'fast-glob' +import { basename, join } from 'path' +import { + writeFileSync, + copyFileSync, + opendirSync, + rmSync, + Dir, + readFileSync +} from 'fs' +import { fileURLToPath } from 'url' + +// cleanup dist dir +const __dirname = fileURLToPath(new URL('.', import.meta.url)) +cleanDir(join(__dirname, './dist')) + +const modules = fg.sync(['./src/*.ts']) + +export default defineConfig([ + { + input: Object.fromEntries(modules.map((p) => [basename(p, '.ts'), p])), + output: [ + { + format: 'esm', + dir: './dist', + preserveModules: true, + preserveModulesRoot: 'src', + entryFileNames: '[name].js' + }, + { + format: 'cjs', + dir: './dist', + preserveModules: true, + preserveModulesRoot: 'src', + entryFileNames: '[name].cjs' + } + ], + plugins: [ + typescript({ + declaration: true, + declarationDir: './dist/types', + rootDir: 'src' + }), + makeFlatPackageInDist() + ], + onwarn + }, + + { + input: 'src/index.ts', + output: { + format: 'iife', + name: '__TAURI_IIFE__', + footer: 'window.__TAURI__ = __TAURI_IIFE__', + file: '../../core/tauri/scripts/bundle.global.js' + }, + plugins: [typescript(), terser()], + onwarn + } +]) + +function onwarn(warning: RollupLog) { + // deny warnings by default + throw Object.assign(new Error(), warning) +} + +function makeFlatPackageInDist(): Plugin { + return { + name: 'makeFlatPackageInDist', + writeBundle() { + // append our api modules to `exports` in `package.json` then write it to `./dist` + const pkg = JSON.parse(readFileSync('package.json', 'utf8')) + const mods = modules.map((p) => basename(p).split('.')[0]) + + const outputPkg = { + ...pkg, + devDependencies: {}, + exports: Object.assign( + {}, + ...mods.map((mod) => { + const exports: Record< + string, + { types: string; import: string; require: string } + > = {} + const key = mod === 'index' ? '.' : `./${mod}` + exports[key] = { + types: `./types/${mod}.d.ts`, + import: `./${mod}.js`, + require: `./${mod}.cjs` + } + return exports + }), + // if for some reason in the future we manually add something in the `exports` field + // this will ensure it doesn't get overwritten by the logic above + { ...(pkg.exports || {}) } + ) + } + writeFileSync( + 'dist/package.json', + JSON.stringify(outputPkg, undefined, 2) + ) + + // copy necessary files like `CHANGELOG.md` , `README.md` and Licenses to `./dist` + fg.sync('(LICENSE*|*.md)').forEach((f) => copyFileSync(f, `dist/${f}`)) + } + } +} + +function cleanDir(path: string) { + let dir: Dir + try { + dir = opendirSync(path) + } catch (err: any) { + switch (err.code) { + case 'ENOENT': + return // Noop when directory don't exists. + case 'ENOTDIR': + throw new Error(`'${path}' is not a directory.`) + default: + throw err + } + } + + let file = dir.readSync() + while (file) { + const filePath = join(path, file.name) + rmSync(filePath, { recursive: true }) + file = dir.readSync() + } + dir.closeSync() +} diff --git a/tooling/api/scripts/after-build.cjs b/tooling/api/scripts/after-build.cjs deleted file mode 100644 index 5b6d46c2f..000000000 --- a/tooling/api/scripts/after-build.cjs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2019-2023 Tauri Programme within The Commons Conservancy -// SPDX-License-Identifier: Apache-2.0 -// SPDX-License-Identifier: MIT - -const { readFileSync, readdirSync, writeFileSync, copyFileSync } = require('fs') - -// append our api modules to `exports` in `package.json` then write it to `./dist` -const pkg = JSON.parse(readFileSync('package.json', 'utf8')) -const modules = readdirSync('src') - .filter((e) => e !== 'helpers') - .map((mod) => mod.replace('.ts', '')) - -const outputPkg = { - ...pkg, - devDependencies: {}, - exports: Object.assign( - {}, - ...modules.map((mod) => { - let temp = {} - let key = `./${mod}` - if (mod === 'index') { - key = '.' - } - - temp[key] = { - import: `./${mod}.js`, - require: `./${mod}.cjs` - } - return temp - }), - // if for some reason in the future we manually add something in the `exports` field - // this will ensure it doesn't get overwritten by the logic above - { ...(pkg.exports || {}) } - ) -} -writeFileSync('dist/package.json', JSON.stringify(outputPkg, undefined, 2)) - -// copy necessary files like `CHANGELOG.md` , `README.md` and Licenses to `./dist` -const dir = readdirSync('.') -const files = [ - ...dir.filter((f) => f.startsWith('LICENSE')), - ...dir.filter((f) => f.endsWith('.md')) -] -files.forEach((f) => copyFileSync(f, `dist/${f}`)) diff --git a/tooling/api/tsconfig.json b/tooling/api/tsconfig.json index 5cf2857b4..02145bf4c 100644 --- a/tooling/api/tsconfig.json +++ b/tooling/api/tsconfig.json @@ -1,14 +1,12 @@ { "compilerOptions": { - "target": "es2020", + "target": "es2021", "module": "esnext", - "strict": true, - "esModuleInterop": true, - "moduleResolution": "node", + "moduleResolution": "bundler", "skipLibCheck": true, + "strict": true, "noUnusedLocals": true, "noImplicitAny": true, - "resolveJsonModule": true, "noEmit": true } } diff --git a/tooling/api/tsup.config.ts b/tooling/api/tsup.config.ts deleted file mode 100644 index 36dbc816b..000000000 --- a/tooling/api/tsup.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2019-2023 Tauri Programme within The Commons Conservancy -// SPDX-License-Identifier: Apache-2.0 -// SPDX-License-Identifier: MIT - -import { defineConfig } from 'tsup' - -export default defineConfig(() => [ - { - entry: ['src/*.ts'], - outDir: 'dist', - format: ['esm', 'cjs'], - clean: true, - minify: true, - platform: 'browser', - dts: { - resolve: true - } - }, - { - entry: { bundle: 'src/index.ts' }, - outDir: '../../core/tauri/scripts', - format: ['iife'], - globalName: '__TAURI_IIFE__', - clean: false, - minify: true, - platform: 'browser', - dts: false, - // esbuild `globalName` option generates `var __TAURI_IIFE__ = (() => {})()` - // and var is not guaranteed to assign to the global `window` object so we make sure to assign it - footer: { - js: 'window.__TAURI__ = __TAURI_IIFE__' - } - } -]) diff --git a/tooling/api/yarn.lock b/tooling/api/yarn.lock index 23e2dd30a..c0107137c 100644 --- a/tooling/api/yarn.lock +++ b/tooling/api/yarn.lock @@ -7,116 +7,6 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@esbuild/android-arm64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.6.tgz#b11bd4e4d031bb320c93c83c137797b2be5b403b" - integrity sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg== - -"@esbuild/android-arm@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.6.tgz#ac6b5674da2149997f6306b3314dae59bbe0ac26" - integrity sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g== - -"@esbuild/android-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.6.tgz#18c48bf949046638fc209409ff684c6bb35a5462" - integrity sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ== - -"@esbuild/darwin-arm64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz#b3fe19af1e4afc849a07c06318124e9c041e0646" - integrity sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA== - -"@esbuild/darwin-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.6.tgz#f4dacd1ab21e17b355635c2bba6a31eba26ba569" - integrity sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg== - -"@esbuild/freebsd-arm64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.6.tgz#ea4531aeda70b17cbe0e77b0c5c36298053855b4" - integrity sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg== - -"@esbuild/freebsd-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.6.tgz#1896170b3c9f63c5e08efdc1f8abc8b1ed7af29f" - integrity sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q== - -"@esbuild/linux-arm64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.6.tgz#967dfb951c6b2de6f2af82e96e25d63747f75079" - integrity sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w== - -"@esbuild/linux-arm@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.6.tgz#097a0ee2be39fed3f37ea0e587052961e3bcc110" - integrity sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw== - -"@esbuild/linux-ia32@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.6.tgz#a38a789d0ed157495a6b5b4469ec7868b59e5278" - integrity sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ== - -"@esbuild/linux-loong64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.6.tgz#ae3983d0fb4057883c8246f57d2518c2af7cf2ad" - integrity sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ== - -"@esbuild/linux-mips64el@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.6.tgz#15fbbe04648d944ec660ee5797febdf09a9bd6af" - integrity sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA== - -"@esbuild/linux-ppc64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.6.tgz#38210094e8e1a971f2d1fd8e48462cc65f15ef19" - integrity sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg== - -"@esbuild/linux-riscv64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.6.tgz#bc3c66d5578c3b9951a6ed68763f2a6856827e4a" - integrity sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ== - -"@esbuild/linux-s390x@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.6.tgz#d7ba7af59285f63cfce6e5b7f82a946f3e6d67fc" - integrity sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q== - -"@esbuild/linux-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.6.tgz#ba51f8760a9b9370a2530f98964be5f09d90fed0" - integrity sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw== - -"@esbuild/netbsd-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.6.tgz#e84d6b6fdde0261602c1e56edbb9e2cb07c211b9" - integrity sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A== - -"@esbuild/openbsd-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.6.tgz#cf4b9fb80ce6d280a673d54a731d9c661f88b083" - integrity sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw== - -"@esbuild/sunos-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.6.tgz#a6838e246079b24d962b9dcb8d208a3785210a73" - integrity sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw== - -"@esbuild/win32-arm64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.6.tgz#ace0186e904d109ea4123317a3ba35befe83ac21" - integrity sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg== - -"@esbuild/win32-ia32@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.6.tgz#7fb3f6d4143e283a7f7dffc98a6baf31bb365c7e" - integrity sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg== - -"@esbuild/win32-x64@0.17.6": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.6.tgz#563ff4277f1230a006472664fa9278a83dd124da" - integrity sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA== - "@eslint-community/eslint-utils@^4.2.0": version "4.3.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz#a556790523a351b4e47e9d385f47265eaaf9780a" @@ -125,9 +15,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403" - integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ== + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== "@eslint-community/regexpp@^4.6.1": version "4.6.2" @@ -173,6 +63,46 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -194,20 +124,58 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@rollup/plugin-terser@0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz#15dffdb3f73f121aa4fbb37e7ca6be9aeea91962" + integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== + dependencies: + serialize-javascript "^6.0.1" + smob "^1.0.0" + terser "^5.17.4" + +"@rollup/plugin-typescript@11.1.5": + version "11.1.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.5.tgz#039c763bf943a5921f3f42be255895e75764cb91" + integrity sha512-rnMHrGBB0IUEv69Q8/JGRD/n4/n6b3nfpufUu26axhUcboUzv/twfZU8fIBbTOphRAe0v8EyxzeDpKXqGHfyDA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + resolve "^1.22.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.5.tgz#bbb4c175e19ebfeeb8c132c2eea0ecb89941a66c" + integrity sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/node@20.9.0": + version "20.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" + integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== + dependencies: + undici-types "~5.26.4" + "@types/semver@^7.3.12": - version "7.3.12" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.12.tgz#920447fdd78d76b19de0438b7f60df3c4a80bf1c" - integrity sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A== + version "7.5.5" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" + integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== "@typescript-eslint/eslint-plugin@5.62.0": version "5.62.0" @@ -225,7 +193,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@5.62.0": +"@typescript-eslint/parser@5.62.0", "@typescript-eslint/parser@^5.43.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -235,24 +203,6 @@ "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/parser@^5.43.0": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.1.tgz#af911234bd4401d09668c5faf708a0570a17a748" - integrity sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA== - dependencies: - "@typescript-eslint/scope-manager" "5.57.1" - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/typescript-estree" "5.57.1" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710" - integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw== - dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" - "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" @@ -271,29 +221,11 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" - integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== - "@typescript-eslint/types@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" - integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw== - dependencies: - "@typescript-eslint/types" "5.57.1" - "@typescript-eslint/visitor-keys" "5.57.1" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" @@ -321,14 +253,6 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.57.1": - version "5.57.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" - integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA== - dependencies: - "@typescript-eslint/types" "5.57.1" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" @@ -347,6 +271,11 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn@^8.8.2: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + acorn@^8.9.0: version "8.10.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" @@ -374,19 +303,6 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -470,11 +386,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -483,13 +394,18 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + builtins@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" @@ -497,18 +413,6 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" -bundle-require@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.0.0.tgz#99e91aed83fb33041c123b013c356e7b76473e10" - integrity sha512-5xjxGtR06579D7UcTBhcQO7Zg3A7ji5xuIUl7kNHSvVJ7/CmAs3bCosfYWNuD/Xm5k0jS9VFuPipSpm5S+ZlKw== - dependencies: - load-tsconfig "^0.2.3" - -cac@^6.7.12: - version "6.7.12" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.12.tgz#6fb5ea2ff50bd01490dbda497f4ae75a99415193" - integrity sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA== - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -539,21 +443,6 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -566,17 +455,17 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -592,7 +481,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -720,34 +609,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.17.6: - version "0.17.6" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.6.tgz#bbccd4433629deb6e0a83860b3b61da120ba4e01" - integrity sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q== - optionalDependencies: - "@esbuild/android-arm" "0.17.6" - "@esbuild/android-arm64" "0.17.6" - "@esbuild/android-x64" "0.17.6" - "@esbuild/darwin-arm64" "0.17.6" - "@esbuild/darwin-x64" "0.17.6" - "@esbuild/freebsd-arm64" "0.17.6" - "@esbuild/freebsd-x64" "0.17.6" - "@esbuild/linux-arm" "0.17.6" - "@esbuild/linux-arm64" "0.17.6" - "@esbuild/linux-ia32" "0.17.6" - "@esbuild/linux-loong64" "0.17.6" - "@esbuild/linux-mips64el" "0.17.6" - "@esbuild/linux-ppc64" "0.17.6" - "@esbuild/linux-riscv64" "0.17.6" - "@esbuild/linux-s390x" "0.17.6" - "@esbuild/linux-x64" "0.17.6" - "@esbuild/netbsd-x64" "0.17.6" - "@esbuild/openbsd-x64" "0.17.6" - "@esbuild/sunos-x64" "0.17.6" - "@esbuild/win32-arm64" "0.17.6" - "@esbuild/win32-ia32" "0.17.6" - "@esbuild/win32-x64" "0.17.6" - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -996,31 +857,32 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" @@ -1164,11 +1026,6 @@ get-intrinsic@^1.2.2: has-symbols "^1.0.3" hasown "^2.0.0" -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -1177,7 +1034,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1191,18 +1048,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -1229,7 +1074,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.3, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -1301,11 +1146,6 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - ignore@^5.1.1, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" @@ -1371,13 +1211,6 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -1396,12 +1229,12 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-core-module@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-core-module@^2.13.0: version "2.13.0" @@ -1410,13 +1243,6 @@ is-core-module@^2.13.0: dependencies: has "^1.0.3" -is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - is-core-module@^2.8.1: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -1450,7 +1276,7 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -1494,11 +1320,6 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -1548,11 +1369,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -joycon@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1585,21 +1401,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -load-tsconfig@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.3.tgz#08af3e7744943caab0c75f8af7f1703639c3ef1f" - integrity sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ== - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -1612,11 +1413,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1624,11 +1420,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -1642,11 +1433,6 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -1669,15 +1455,6 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -1688,23 +1465,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" @@ -1765,14 +1525,7 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@>=0.9.3, optionator@^0.9.3: +optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== @@ -1815,7 +1568,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -1830,33 +1583,20 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pirates@^4.0.1: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -postcss-load-config@^3.0.1: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@2.8.8: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== punycode@^2.1.0: version "2.1.1" @@ -1868,12 +1608,12 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: - picomatch "^2.2.1" + safe-buffer "^5.1.0" regexp-tree@~0.1.1: version "0.1.24" @@ -1899,11 +1639,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - resolve@^1.10.1: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" @@ -1943,10 +1678,10 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.2.5.tgz#9452168ac083218c8212bf53d2448bdc6b8b0de7" - integrity sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw== +rollup@3.29.4: + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== optionalDependencies: fsevents "~2.3.2" @@ -1967,6 +1702,11 @@ safe-array-concat@^1.0.1: has-symbols "^1.0.3" isarray "^2.0.5" +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex-test@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" @@ -1983,13 +1723,25 @@ safe-regex@^2.1.1: dependencies: regexp-tree "~0.1.1" -semver@>=7.5.2, semver@^6.1.0, semver@^6.3.1, semver@^7.0.0, semver@^7.3.7, semver@^7.3.8: +semver@^6.1.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.3.7, semver@^7.3.8: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + set-function-length@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" @@ -2030,22 +1782,28 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map@0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== +smob@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/smob/-/smob-1.4.1.tgz#66270e7df6a7527664816c5b577a23f17ba6f5b5" + integrity sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: - whatwg-url "^7.0.0" + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== string.prototype.trim@^1.2.8: version "1.2.8" @@ -2086,28 +1844,11 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -sucrase@^3.20.3: - version "3.21.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.21.0.tgz#6a5affdbe716b22e4dc99c57d366ad0d216444b9" - integrity sha512-FjAhMJjDcifARI7bZej0Bi1yekjWQHoEvWIXhLPwDhC6O4iZ5PtGb86WV56riW87hzpgB13wwBKO9vKAiWu5VQ== - dependencies: - commander "^4.0.0" - glob "7.1.6" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2120,25 +1861,21 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +terser@^5.17.4: + version "5.24.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.24.0.tgz#4ae50302977bca4831ccc7b4fef63a3c04228364" + integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2146,23 +1883,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" @@ -2178,26 +1898,6 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tsup@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-6.7.0.tgz#416f350f32a07b6ae86792ad7e52b0cafc566d64" - integrity sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ== - dependencies: - bundle-require "^4.0.0" - cac "^6.7.12" - chokidar "^3.5.1" - debug "^4.3.1" - esbuild "^0.17.6" - execa "^5.0.0" - globby "^11.0.3" - joycon "^3.0.1" - postcss-load-config "^3.0.1" - resolve-from "^5.0.0" - rollup "^3.2.5" - source-map "0.8.0-beta.0" - sucrase "^3.20.3" - tree-kill "^1.2.2" - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -2271,6 +1971,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -2278,20 +1983,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -2331,11 +2022,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From b3e53e7243311a2659b7569dddc20c56ac9f9d8e Mon Sep 17 00:00:00 2001 From: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com> Date: Thu, 23 Nov 2023 11:12:38 -0300 Subject: [PATCH 25/45] feat(core): add AssetManager::iter (#8288) This new function allows users to iterate on all embedded assets, important if you want to AssetManager::get an asset you are not sure exists. --- .changes/asset-iter.md | 5 +++++ core/tauri-utils/src/assets.rs | 7 +++++++ core/tauri/src/app.rs | 5 +++++ core/tauri/src/manager.rs | 4 ++++ core/tauri/src/test/mod.rs | 6 ++++++ 5 files changed, 27 insertions(+) create mode 100644 .changes/asset-iter.md diff --git a/.changes/asset-iter.md b/.changes/asset-iter.md new file mode 100644 index 000000000..1b95f4902 --- /dev/null +++ b/.changes/asset-iter.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:enhance +--- + +Added `AssetResolver::iter` to iterate on all embedded assets. diff --git a/core/tauri-utils/src/assets.rs b/core/tauri-utils/src/assets.rs index 5b035a386..ca7f3de69 100644 --- a/core/tauri-utils/src/assets.rs +++ b/core/tauri-utils/src/assets.rs @@ -109,6 +109,9 @@ pub trait Assets: Send + Sync + 'static { /// Get the content of the passed [`AssetKey`]. fn get(&self, key: &AssetKey) -> Option>; + /// Iterator for the assets. + fn iter(&self) -> Box + '_>; + /// Gets the hashes for the CSP tag of the HTML on the given path. fn csp_hashes(&self, html_path: &AssetKey) -> Box> + '_>; } @@ -163,6 +166,10 @@ impl Assets for EmbeddedAssets { .map(|a| Cow::Owned(a.to_vec())) } + fn iter(&self) -> Box + '_> { + Box::new(self.assets.into_iter()) + } + fn csp_hashes(&self, html_path: &AssetKey) -> Box> + '_> { Box::new( self diff --git a/core/tauri/src/app.rs b/core/tauri/src/app.rs index d9bd7635a..c0f7911fd 100644 --- a/core/tauri/src/app.rs +++ b/core/tauri/src/app.rs @@ -357,6 +357,11 @@ impl AssetResolver { pub fn get(&self, path: String) -> Option { self.manager.get_asset(path).ok() } + + /// Iterate on all assets. + pub fn iter(&self) -> Box + '_> { + self.manager.asset_iter() + } } /// A handle to the currently running application. diff --git a/core/tauri/src/manager.rs b/core/tauri/src/manager.rs index a6948afd3..372ffa14b 100644 --- a/core/tauri/src/manager.rs +++ b/core/tauri/src/manager.rs @@ -627,6 +627,10 @@ impl WindowManager { }) } + pub fn asset_iter(&self) -> Box + '_> { + self.inner.assets.iter() + } + pub fn get_asset(&self, mut path: String) -> Result> { let assets = &self.inner.assets; if path.ends_with('/') { diff --git a/core/tauri/src/test/mod.rs b/core/tauri/src/test/mod.rs index eaadae04f..3138d56fb 100644 --- a/core/tauri/src/test/mod.rs +++ b/core/tauri/src/test/mod.rs @@ -99,6 +99,7 @@ struct Ipc(Mutex, csp_hashes: Vec>, } @@ -107,6 +108,10 @@ impl Assets for NoopAsset { None } + fn iter(&self) -> Box + '_> { + Box::new(self.assets.iter()) + } + fn csp_hashes(&self, html_path: &AssetKey) -> Box> + '_> { Box::new(self.csp_hashes.iter().copied()) } @@ -115,6 +120,7 @@ impl Assets for NoopAsset { /// Creates a new empty [`Assets`] implementation. pub fn noop_assets() -> NoopAsset { NoopAsset { + assets: Default::default(), csp_hashes: Default::default(), } } From 5e05236b4987346697c7caae0567d3c50714c198 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira <118899497+lucasfernog-crabnebula@users.noreply.github.com> Date: Mon, 27 Nov 2023 11:56:46 -0300 Subject: [PATCH 26/45] feat(core): add tracing for vital functionality closes #5204 (#8289) * feat(core): add tracing for vital functionality * Update core/tauri-runtime-wry/src/lib.rs [skip ci] * Update Cargo.toml [skip ci] * tracing feature * wry 0.24.6 * add change tag * add tracing to CI test * enhance spans for update check * remove app from debug impl --- .changes/tracing.md | 7 + .github/workflows/test-core.yml | 2 +- core/tauri-macros/Cargo.toml | 3 +- core/tauri-macros/src/command/wrapper.rs | 63 +++++++- core/tauri-runtime-wry/Cargo.toml | 4 +- core/tauri-runtime-wry/src/lib.rs | 107 ++++++++++++++ core/tauri/Cargo.toml | 2 + core/tauri/src/app.rs | 35 ++--- core/tauri/src/command.rs | 4 + core/tauri/src/hooks.rs | 39 ++++- core/tauri/src/lib.rs | 17 +++ core/tauri/src/manager.rs | 13 +- core/tauri/src/plugin.rs | 63 +++++--- core/tauri/src/updater/core.rs | 174 ++++++++++++++++++----- core/tauri/src/window.rs | 29 ++++ examples/api/src-tauri/Cargo.lock | 132 ++++++++++++++--- 16 files changed, 581 insertions(+), 113 deletions(-) create mode 100644 .changes/tracing.md diff --git a/.changes/tracing.md b/.changes/tracing.md new file mode 100644 index 000000000..baee89fdb --- /dev/null +++ b/.changes/tracing.md @@ -0,0 +1,7 @@ +--- +"tauri": patch:enhance +"tauri-runtime-wry": patch:enhance +"tauri-macros": patch:enhance +--- + +Added tracing for window startup, plugins, `Window::eval`, events, IPC, updater and custom protocol request handlers behind the `tracing` feature flag. diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 382339ff3..8a34e1411 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -56,7 +56,7 @@ jobs: key: api-all } - { - args: --features compression,wry,linux-protocol-headers,isolation,custom-protocol,api-all,cli,updater,system-tray,windows7-compat,http-multipart,test, + args: --features tracing,compression,wry,linux-protocol-headers,isolation,custom-protocol,api-all,cli,updater,system-tray,windows7-compat,http-multipart,test, key: all } diff --git a/core/tauri-macros/Cargo.toml b/core/tauri-macros/Cargo.toml index 4085f1286..213ce8cf3 100644 --- a/core/tauri-macros/Cargo.toml +++ b/core/tauri-macros/Cargo.toml @@ -16,7 +16,7 @@ readme = "README.md" proc-macro = true [dependencies] -proc-macro2 = "1" +proc-macro2 = { version = "1", features = ["span-locations"] } quote = "1" syn = { version = "1", features = [ "full" ] } heck = "0.4" @@ -30,3 +30,4 @@ isolation = [ "tauri-codegen/isolation" ] shell-scope = [ "tauri-codegen/shell-scope" ] config-json5 = [ "tauri-codegen/config-json5", "tauri-utils/config-json5" ] config-toml = [ "tauri-codegen/config-toml", "tauri-utils/config-toml" ] +tracing = [] diff --git a/core/tauri-macros/src/command/wrapper.rs b/core/tauri-macros/src/command/wrapper.rs index e529d8fcd..c50707089 100644 --- a/core/tauri-macros/src/command/wrapper.rs +++ b/core/tauri-macros/src/command/wrapper.rs @@ -161,21 +161,51 @@ pub fn wrapper(attributes: TokenStream, item: TokenStream) -> TokenStream { } // body to the command wrapper or a `compile_error!` of an error occurred while parsing it. - let body = syn::parse::(attributes) + let (body, attributes) = syn::parse::(attributes) .map(|mut attrs| { if function.sig.asyncness.is_some() { attrs.execution_context = ExecutionContext::Async; } attrs }) - .and_then(|attrs| match attrs.execution_context { - ExecutionContext::Async => body_async(&function, &invoke, attrs.argument_case), - ExecutionContext::Blocking => body_blocking(&function, &invoke, attrs.argument_case), + .and_then(|attrs| { + let body = match attrs.execution_context { + ExecutionContext::Async => body_async(&function, &invoke, attrs.argument_case), + ExecutionContext::Blocking => body_blocking(&function, &invoke, attrs.argument_case), + }; + body.map(|b| (b, Some(attrs))) }) - .unwrap_or_else(syn::Error::into_compile_error); + .unwrap_or_else(|e| (syn::Error::into_compile_error(e), None)); let Invoke { message, resolver } = invoke; + let kind = match attributes.as_ref().map(|a| &a.execution_context) { + Some(ExecutionContext::Async) if function.sig.asyncness.is_none() => "sync_threadpool", + Some(ExecutionContext::Async) => "async", + Some(ExecutionContext::Blocking) => "sync", + _ => "sync", + }; + + let loc = function.span().start(); + let line = loc.line; + let col = loc.column; + + let maybe_span = if cfg!(feature = "tracing") { + quote!({ + let _span = tracing::debug_span!( + "ipc::request::handler", + cmd = #message.command(), + kind = #kind, + loc.line = #line, + loc.col = #col, + is_internal = false, + ) + .entered(); + }) + } else { + quote!() + }; + // Rely on rust 2018 edition to allow importing a macro from a path. quote!( #async_command_check @@ -193,6 +223,8 @@ pub fn wrapper(attributes: TokenStream, item: TokenStream) -> TokenStream { #[allow(unused_variables)] let ::tauri::Invoke { message: #message, resolver: #resolver } = $invoke; + #maybe_span + #body }}; } @@ -212,6 +244,20 @@ pub fn wrapper(attributes: TokenStream, item: TokenStream) -> TokenStream { fn body_async(function: &ItemFn, invoke: &Invoke, case: ArgumentCase) -> syn::Result { let Invoke { message, resolver } = invoke; parse_args(function, message, case).map(|args| { + #[cfg(feature = "tracing")] + quote! { + use tracing::Instrument; + + let span = tracing::debug_span!("ipc::request::run"); + #resolver.respond_async_serialized(async move { + let result = $path(#(#args?),*); + let kind = (&result).async_kind(); + kind.future(result).await + } + .instrument(span)); + } + + #[cfg(not(feature = "tracing"))] quote! { #resolver.respond_async_serialized(async move { let result = $path(#(#args?),*); @@ -241,7 +287,14 @@ fn body_blocking( Err(err) => return #resolver.invoke_error(err), }); + let maybe_span = if cfg!(feature = "tracing") { + quote!(let _span = tracing::debug_span!("ipc::request::run").entered();) + } else { + quote!() + }; + Ok(quote! { + #maybe_span let result = $path(#(match #args #match_body),*); let kind = (&result).blocking_kind(); kind.block(result, #resolver); diff --git a/core/tauri-runtime-wry/Cargo.toml b/core/tauri-runtime-wry/Cargo.toml index d13484dd5..e3a33182b 100644 --- a/core/tauri-runtime-wry/Cargo.toml +++ b/core/tauri-runtime-wry/Cargo.toml @@ -13,12 +13,13 @@ exclude = [ "CHANGELOG.md", "/target" ] readme = "README.md" [dependencies] -wry = { version = "0.24.4", default-features = false, features = [ "file-drop", "protocol" ] } +wry = { version = "0.24.6", default-features = false, features = [ "file-drop", "protocol" ] } tauri-runtime = { version = "0.14.1", path = "../tauri-runtime" } tauri-utils = { version = "1.5.0", path = "../tauri-utils" } uuid = { version = "1", features = [ "v4" ] } rand = "0.8" raw-window-handle = "0.5" +tracing = { version = "0.1", optional = true } [target."cfg(windows)".dependencies] webview2-com = "0.19.1" @@ -48,3 +49,4 @@ objc-exception = [ "wry/objc-exception" ] global-shortcut = [ "tauri-runtime/global-shortcut" ] clipboard = [ "tauri-runtime/clipboard" ] linux-headers = [ "wry/linux-headers", "webkit2gtk/v2_36" ] +tracing = [ "dep:tracing", "wry/tracing" ] diff --git a/core/tauri-runtime-wry/src/lib.rs b/core/tauri-runtime-wry/src/lib.rs index 9a222c5cf..27f541838 100644 --- a/core/tauri-runtime-wry/src/lib.rs +++ b/core/tauri-runtime-wry/src/lib.rs @@ -244,6 +244,32 @@ impl Context { } } +#[cfg(feature = "tracing")] +#[derive(Debug, Clone, Default)] +pub struct ActiveTraceSpanStore(Rc>>); + +#[cfg(feature = "tracing")] +impl ActiveTraceSpanStore { + pub fn remove_window_draw(&self, window_id: WindowId) { + let mut store = self.0.borrow_mut(); + if let Some(index) = store + .iter() + .position(|t| matches!(t, ActiveTracingSpan::WindowDraw { id, span: _ } if id == &window_id)) + { + store.remove(index); + } + } +} + +#[cfg(feature = "tracing")] +#[derive(Debug)] +pub enum ActiveTracingSpan { + WindowDraw { + id: WindowId, + span: tracing::span::EnteredSpan, + }, +} + #[derive(Debug, Clone)] pub struct DispatcherMainThreadContext { pub window_target: EventLoopWindowTarget>, @@ -255,6 +281,8 @@ pub struct DispatcherMainThreadContext { pub windows: Rc>>, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: SystemTrayManager, + #[cfg(feature = "tracing")] + pub active_tracing_spans: ActiveTraceSpanStore, } // SAFETY: we ensure this type is only used on the main thread. @@ -1135,7 +1163,10 @@ pub enum WindowMessage { #[derive(Debug, Clone)] pub enum WebviewMessage { + #[cfg(not(feature = "tracing"))] EvaluateScript(String), + #[cfg(feature = "tracing")] + EvaluateScript(String, Sender<()>, tracing::Span), #[allow(dead_code)] WebviewEvent(WebviewEvent), Print, @@ -1651,6 +1682,21 @@ impl Dispatch for WryDispatcher { ) } + #[cfg(feature = "tracing")] + fn eval_script>(&self, script: S) -> Result<()> { + // use a channel so the EvaluateScript task uses the current span as parent + let (tx, rx) = channel(); + getter!( + self, + rx, + Message::Webview( + self.window_id, + WebviewMessage::EvaluateScript(script.into(), tx, tracing::Span::current()), + ) + ) + } + + #[cfg(not(feature = "tracing"))] fn eval_script>(&self, script: S) -> Result<()> { send_user_message( &self.context, @@ -1962,6 +2008,8 @@ impl Wry { windows, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager, + #[cfg(feature = "tracing")] + active_tracing_spans: Default::default(), }, }; @@ -2165,6 +2213,9 @@ impl Runtime for Wry { #[cfg(all(desktop, feature = "system-tray"))] let system_tray_manager = self.context.main_thread.system_tray_manager.clone(); + #[cfg(feature = "tracing")] + let active_tracing_spans = self.context.main_thread.active_tracing_spans.clone(); + #[cfg(all(desktop, feature = "global-shortcut"))] let global_shortcut_manager = self.context.main_thread.global_shortcut_manager.clone(); #[cfg(all(desktop, feature = "global-shortcut"))] @@ -2202,6 +2253,8 @@ impl Runtime for Wry { clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), + #[cfg(feature = "tracing")] + active_tracing_spans: active_tracing_spans.clone(), }, web_context, ); @@ -2226,6 +2279,8 @@ impl Runtime for Wry { clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), + #[cfg(feature = "tracing")] + active_tracing_spans: active_tracing_spans.clone(), }, web_context, ); @@ -2240,6 +2295,9 @@ impl Runtime for Wry { let web_context = self.context.main_thread.web_context; let mut plugins = self.plugins; + #[cfg(feature = "tracing")] + let active_tracing_spans = self.context.main_thread.active_tracing_spans.clone(); + #[cfg(all(desktop, feature = "system-tray"))] let system_tray_manager = self.context.main_thread.system_tray_manager; @@ -2272,6 +2330,8 @@ impl Runtime for Wry { clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), + #[cfg(feature = "tracing")] + active_tracing_spans: active_tracing_spans.clone(), }, &web_context, ); @@ -2295,6 +2355,8 @@ impl Runtime for Wry { clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), + #[cfg(feature = "tracing")] + active_tracing_spans: active_tracing_spans.clone(), }, &web_context, ); @@ -2314,6 +2376,8 @@ pub struct EventLoopIterationContext<'a, T: UserEvent> { pub clipboard_manager: Arc>, #[cfg(all(desktop, feature = "system-tray"))] pub system_tray_manager: SystemTrayManager, + #[cfg(feature = "tracing")] + pub active_tracing_spans: ActiveTraceSpanStore, } struct UserMessageContext { @@ -2590,6 +2654,19 @@ fn handle_user_message( } } Message::Webview(id, webview_message) => match webview_message { + #[cfg(feature = "tracing")] + WebviewMessage::EvaluateScript(script, tx, span) => { + let _span = span.entered(); + if let Some(WindowHandle::Webview { inner: webview, .. }) = + windows.borrow().get(&id).and_then(|w| w.inner.as_ref()) + { + if let Err(e) = webview.evaluate_script(&script) { + debug_eprintln!("{}", e); + } + } + tx.send(()).unwrap(); + } + #[cfg(not(feature = "tracing"))] WebviewMessage::EvaluateScript(script) => { if let Some(WindowHandle::Webview { inner: webview, .. }) = windows.borrow().get(&id).and_then(|w| w.inner.as_ref()) @@ -2758,6 +2835,8 @@ fn handle_event_loop( clipboard_manager, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager, + #[cfg(feature = "tracing")] + active_tracing_spans, } = context; if *control_flow != ControlFlow::Exit { *control_flow = ControlFlow::Wait; @@ -2780,6 +2859,11 @@ fn handle_event_loop( callback(RunEvent::Exit); } + #[cfg(feature = "tracing")] + Event::RedrawRequested(id) => { + active_tracing_spans.remove_window_draw(id); + } + #[cfg(all(desktop, feature = "global-shortcut"))] Event::GlobalShortcutEvent(accelerator_id) => { for (id, handler) in &*global_shortcut_manager_handle.listeners.lock().unwrap() { @@ -3123,6 +3207,14 @@ fn create_webview( #[cfg(windows)] let proxy = context.proxy.clone(); + #[cfg(feature = "tracing")] + let _webview_create_span = tracing::debug_span!("wry::webview::create").entered(); + #[cfg(feature = "tracing")] + let window_draw_span = tracing::debug_span!("wry::window::draw").entered(); + #[cfg(feature = "tracing")] + let window_create_span = + tracing::debug_span!(parent: &window_draw_span, "wry::window::create").entered(); + let window_event_listeners = WindowEventListeners::default(); #[cfg(windows)] @@ -3157,6 +3249,21 @@ fn create_webview( let focused = window_builder.inner.window.focused; let window = window_builder.inner.build(event_loop).unwrap(); + #[cfg(feature = "tracing")] + { + drop(window_create_span); + + context + .main_thread + .active_tracing_spans + .0 + .borrow_mut() + .push(ActiveTracingSpan::WindowDraw { + id: window.id(), + span: window_draw_span, + }); + } + webview_id_map.insert(window.id(), window_id); if window_builder.center { diff --git a/core/tauri/Cargo.toml b/core/tauri/Cargo.toml index 0ec045ae4..c7bb7f713 100644 --- a/core/tauri/Cargo.toml +++ b/core/tauri/Cargo.toml @@ -94,6 +94,7 @@ png = { version = "0.17", optional = true } ico = { version = "0.2.0", optional = true } encoding_rs = "0.8.31" sys-locale = { version = "0.2.3", optional = true } +tracing = { version = "0.1", optional = true } [target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies] rfd = { version = "0.10", optional = true, features = [ "gtk3", "common-controls-v6" ] } @@ -135,6 +136,7 @@ cargo_toml = "0.11" [features] default = [ "wry", "compression", "objc-exception" ] +tracing = [ "dep:tracing", "tauri-macros/tracing", "tauri-runtime-wry/tracing" ] test = [ ] compression = [ "tauri-macros/compression", "tauri-utils/compression" ] wry = [ "tauri-runtime-wry" ] diff --git a/core/tauri/src/app.rs b/core/tauri/src/app.rs index c0f7911fd..93e470364 100644 --- a/core/tauri/src/app.rs +++ b/core/tauri/src/app.rs @@ -474,26 +474,14 @@ impl AppHandle { /// Ok(()) /// }); /// ``` - pub fn plugin + 'static>(&self, mut plugin: P) -> crate::Result<()> { - plugin - .initialize( - self, - self - .config() - .plugins - .0 - .get(plugin.name()) - .cloned() - .unwrap_or_default(), - ) - .map_err(|e| crate::Error::PluginInitialization(plugin.name().to_string(), e.to_string()))?; - self - .manager() - .inner - .plugins - .lock() - .unwrap() - .register(plugin); + #[cfg_attr(feature = "tracing", tracing::instrument(name = "app::plugin::register", skip(plugin), fields(name = plugin.name())))] + pub fn plugin + 'static>(&self, plugin: P) -> crate::Result<()> { + let mut plugin = Box::new(plugin) as Box>; + + let mut store = self.manager().inner.plugins.lock().unwrap(); + store.initialize(&mut plugin, self, &self.config().plugins)?; + store.register(plugin); + Ok(()) } @@ -913,6 +901,7 @@ impl App { /// } /// ``` #[cfg(desktop)] + #[cfg_attr(feature = "tracing", tracing::instrument(name = "app::run_iteration"))] pub fn run_iteration(&mut self) -> crate::runtime::RunIteration { let manager = self.manager.clone(); let app_handle = self.handle(); @@ -1206,7 +1195,7 @@ impl Builder { /// ``` #[must_use] pub fn plugin + 'static>(mut self, plugin: P) -> Self { - self.plugins.register(plugin); + self.plugins.register(Box::new(plugin)); self } @@ -1557,6 +1546,10 @@ impl Builder { /// Builds the application. #[allow(clippy::type_complexity)] + #[cfg_attr( + feature = "tracing", + tracing::instrument(name = "app::build", skip_all) + )] pub fn build(mut self, context: Context) -> crate::Result> { #[cfg(target_os = "macos")] if self.menu.is_none() && self.enable_macos_default_menu { diff --git a/core/tauri/src/command.rs b/core/tauri/src/command.rs index 7f392d480..5c2aca148 100644 --- a/core/tauri/src/command.rs +++ b/core/tauri/src/command.rs @@ -52,6 +52,8 @@ impl<'de, D: Deserialize<'de>, R: Runtime> CommandArg<'de, R> for D { fn from_command(command: CommandItem<'de, R>) -> Result { let name = command.name; let arg = command.key; + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("ipc::request::deserialize_arg", arg = arg).entered(); Self::deserialize(command).map_err(|e| crate::Error::InvalidArgs(name, arg, e).into()) } } @@ -160,6 +162,8 @@ pub mod private { use serde::Serialize; use serde_json::Value; use std::future::Future; + #[cfg(feature = "tracing")] + pub use tracing; // ===== impl Serialize ===== diff --git a/core/tauri/src/hooks.rs b/core/tauri/src/hooks.rs index fb9dea03b..e4acd724b 100644 --- a/core/tauri/src/hooks.rs +++ b/core/tauri/src/hooks.rs @@ -11,6 +11,8 @@ use serde::{Deserialize, Serialize}; use serde_json::Value as JsonValue; use serialize_to_javascript::{default_template, Template}; use std::{future::Future, sync::Arc}; +#[cfg(feature = "tracing")] +use tracing::Instrument; use tauri_macros::default_runtime; @@ -181,9 +183,16 @@ impl InvokeResolver { T: Serialize, F: Future> + Send + 'static, { - crate::async_runtime::spawn(async move { + let task = async move { Self::return_task(self.window, task, self.callback, self.error).await; - }); + }; + #[cfg(feature = "tracing")] + { + let span = tracing::trace_span!("ipc::request::respond"); + crate::async_runtime::spawn(task.instrument(span)); + } + #[cfg(not(feature = "tracing"))] + crate::async_runtime::spawn(task); } /// Reply to the invoke promise with an async task which is already serialized. @@ -191,27 +200,40 @@ impl InvokeResolver { where F: Future> + Send + 'static, { - crate::async_runtime::spawn(async move { + let task = async move { let response = match task.await { Ok(ok) => InvokeResponse::Ok(ok), Err(err) => InvokeResponse::Err(err), }; Self::return_result(self.window, response, self.callback, self.error) - }); + }; + #[cfg(feature = "tracing")] + { + let span = tracing::trace_span!("ipc::request::respond"); + crate::async_runtime::spawn(task.instrument(span)); + } + #[cfg(not(feature = "tracing"))] + crate::async_runtime::spawn(task); } /// Reply to the invoke promise with a serializable value. pub fn respond(self, value: Result) { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("ipc::request::respond").entered(); Self::return_result(self.window, value.into(), self.callback, self.error) } /// Resolve the invoke promise with a value. pub fn resolve(self, value: T) { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("ipc::request::respond").entered(); Self::return_result(self.window, Ok(value).into(), self.callback, self.error) } /// Reject the invoke promise with a value. pub fn reject(self, value: T) { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("ipc::request::respond").entered(); Self::return_result( self.window, Result::<(), _>::Err(value.into()).into(), @@ -222,6 +244,8 @@ impl InvokeResolver { /// Reject the invoke promise with an [`InvokeError`]. pub fn invoke_error(self, error: InvokeError) { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("ipc::request::respond").entered(); Self::return_result(self.window, error.into(), self.callback, self.error) } @@ -230,7 +254,7 @@ impl InvokeResolver { /// /// If the Result `is_ok()`, the callback will be the `success_callback` function name and the argument will be the Ok value. /// If the Result `is_err()`, the callback will be the `error_callback` function name and the argument will be the Err value. - pub async fn return_task( + pub(crate) async fn return_task( window: Window, task: F, success_callback: CallbackFn, @@ -258,6 +282,9 @@ impl InvokeResolver { success_callback: CallbackFn, error_callback: CallbackFn, ) { + #[cfg(feature = "tracing")] + let _span = + tracing::trace_span!("ipc::request::response", response = format!("{response:?}")).entered(); (window.invoke_responder())(window, response, success_callback, error_callback); } } @@ -268,6 +295,8 @@ pub fn window_invoke_responder( success_callback: CallbackFn, error_callback: CallbackFn, ) { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("ipc::request::eval_response").entered(); let callback_string = match format_callback_result(response.into_result(), success_callback, error_callback) { Ok(callback_string) => callback_string, diff --git a/core/tauri/src/lib.rs b/core/tauri/src/lib.rs index e1290bf97..daa015f52 100644 --- a/core/tauri/src/lib.rs +++ b/core/tauri/src/lib.rs @@ -11,6 +11,7 @@ //! The following are a list of [Cargo features](https://doc.rust-lang.org/stable/cargo/reference/manifest.html#the-features-section) that can be enabled or disabled: //! //! - **wry** *(enabled by default)*: Enables the [wry](https://github.com/tauri-apps/wry) runtime. Only disable it if you want a custom runtime. +//! - **tracing**: Enables [`tracing`](https://docs.rs/tracing/latest/tracing) for window startup, plugins, `Window::eval`, events, IPC, updater and custom protocol request handlers. //! - **test**: Enables the [`test`] module exposing unit test helpers. //! - **dox**: Internal feature to generate Rust documentation without linking on Linux. //! - **objc-exception**: Wrap each msg_send! in a @try/@catch and panics if an exception is caught, preventing Objective-C from unwinding into Rust. @@ -625,6 +626,10 @@ pub trait Manager: sealed::ManagerBase { /// app.emit_all("synchronized", ()); /// } /// ``` + #[cfg_attr( + feature = "tracing", + tracing::instrument("app::emit::all", skip(self, payload)) + )] fn emit_all(&self, event: &str, payload: S) -> Result<()> { self.manager().emit_filter(event, None, payload, |_| true) } @@ -641,6 +646,10 @@ pub trait Manager: sealed::ManagerBase { /// app.emit_filter("synchronized", (), |w| w.label().starts_with("foo-")); /// } /// ``` + #[cfg_attr( + feature = "tracing", + tracing::instrument("app::emit::filter", skip(self, payload, filter)) + )] fn emit_filter(&self, event: &str, payload: S, filter: F) -> Result<()> where S: Serialize + Clone, @@ -664,6 +673,10 @@ pub trait Manager: sealed::ManagerBase { /// } /// } /// ``` + #[cfg_attr( + feature = "tracing", + tracing::instrument("app::emit::to", skip(self, payload)) + )] fn emit_to(&self, label: &str, event: &str, payload: S) -> Result<()> { self .manager() @@ -728,6 +741,10 @@ pub trait Manager: sealed::ManagerBase { /// } /// } /// ``` + #[cfg_attr( + feature = "tracing", + tracing::instrument("app::emit::rust", skip(self)) + )] fn trigger_global(&self, event: &str, data: Option) { self.manager().trigger(event, None, data) } diff --git a/core/tauri/src/manager.rs b/core/tauri/src/manager.rs index 372ffa14b..fd19adcd1 100644 --- a/core/tauri/src/manager.rs +++ b/core/tauri/src/manager.rs @@ -593,6 +593,10 @@ impl WindowManager { ) -> WebviewIpcHandler { let manager = self.clone(); Box::new(move |window, #[allow(unused_mut)] mut request| { + #[cfg(feature = "tracing")] + let _span = + tracing::trace_span!("ipc::request", kind = "post-message", request = request).entered(); + let window = Window::new(manager.clone(), window, app_handle.clone()); #[cfg(feature = "isolation")] @@ -614,9 +618,14 @@ impl WindowManager { match serde_json::from_str::(&request) { Ok(message) => { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("ipc::request::handle", cmd = message.cmd).entered(); + let _ = window.on_message(message); } Err(e) => { + #[cfg(feature = "tracing")] + tracing::trace!("ipc::request::error {}", e); let error: crate::Error = e.into(); let _ = window.eval(&format!( r#"console.error({})"#, @@ -958,7 +967,7 @@ impl WindowManager { .plugins .lock() .expect("poisoned plugin store") - .initialize(app, &self.inner.config.plugins) + .initialize_all(app, &self.inner.config.plugins) } pub fn prepare_window( @@ -1148,6 +1157,8 @@ impl WindowManager { S: Serialize + Clone, F: Fn(&Window) -> bool, { + #[cfg(feature = "tracing")] + let _span = tracing::debug_span!("emit::run").entered(); let emit_args = WindowEmitArgs::from(event, source_window_label, payload)?; assert_event_name_is_valid(event); self diff --git a/core/tauri/src/plugin.rs b/core/tauri/src/plugin.rs index f04890c58..0a53b4d84 100644 --- a/core/tauri/src/plugin.rs +++ b/core/tauri/src/plugin.rs @@ -575,8 +575,8 @@ impl PluginStore { /// Adds a plugin to the store. /// /// Returns `true` if a plugin with the same name is already in the store. - pub fn register + 'static>(&mut self, plugin: P) -> bool { - self.store.insert(plugin.name(), Box::new(plugin)).is_some() + pub fn register(&mut self, plugin: Box>) -> bool { + self.store.insert(plugin.name(), plugin).is_some() } /// Removes the plugin with the given name from the store. @@ -584,20 +584,26 @@ impl PluginStore { self.store.remove(plugin).is_some() } - /// Initializes all plugins in the store. + /// Initializes the given plugin. pub(crate) fn initialize( + &self, + plugin: &mut Box>, + app: &AppHandle, + config: &PluginConfig, + ) -> crate::Result<()> { + initialize(plugin, app, config) + } + + /// Initializes all plugins in the store. + pub(crate) fn initialize_all( &mut self, app: &AppHandle, config: &PluginConfig, ) -> crate::Result<()> { - self.store.values_mut().try_for_each(|plugin| { - plugin - .initialize( - app, - config.0.get(plugin.name()).cloned().unwrap_or_default(), - ) - .map_err(|e| crate::Error::PluginInitialization(plugin.name().to_string(), e.to_string())) - }) + self + .store + .values_mut() + .try_for_each(|plugin| initialize(plugin, app, config)) } /// Generates an initialization script from all plugins in the store. @@ -613,18 +619,21 @@ impl PluginStore { /// Runs the created hook for all plugins in the store. pub(crate) fn created(&mut self, window: Window) { - self - .store - .values_mut() - .for_each(|plugin| plugin.created(window.clone())) + self.store.values_mut().for_each(|plugin| { + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("plugin::hooks::created", name = plugin.name()).entered(); + plugin.created(window.clone()) + }) } /// Runs the on_page_load hook for all plugins in the store. pub(crate) fn on_page_load(&mut self, window: Window, payload: PageLoadPayload) { - self - .store - .values_mut() - .for_each(|plugin| plugin.on_page_load(window.clone(), payload.clone())) + self.store.values_mut().for_each(|plugin| { + #[cfg(feature = "tracing")] + let _span = + tracing::trace_span!("plugin::hooks::on_page_load", name = plugin.name()).entered(); + plugin.on_page_load(window.clone(), payload.clone()) + }) } /// Runs the on_event hook for all plugins in the store. @@ -646,9 +655,25 @@ impl PluginStore { .next() .map(|c| c.to_string()) .unwrap_or_else(String::new); + #[cfg(feature = "tracing")] + let _span = tracing::trace_span!("plugin::hooks::ipc", name = plugin.name()).entered(); plugin.extend_api(invoke); } else { invoke.resolver.reject(format!("plugin {target} not found")); } } } + +#[cfg_attr(feature = "tracing", tracing::instrument(name = "plugin::hooks::initialize", skip(plugin), fields(name = plugin.name())))] +fn initialize( + plugin: &mut Box>, + app: &AppHandle, + config: &PluginConfig, +) -> crate::Result<()> { + plugin + .initialize( + app, + config.0.get(plugin.name()).cloned().unwrap_or_default(), + ) + .map_err(|e| crate::Error::PluginInitialization(plugin.name().to_string(), e.to_string())) +} diff --git a/core/tauri/src/updater/core.rs b/core/tauri/src/updater/core.rs index 838ded932..d75f1b506 100644 --- a/core/tauri/src/updater/core.rs +++ b/core/tauri/src/updater/core.rs @@ -19,6 +19,8 @@ use semver::Version; use serde::{de::Error as DeError, Deserialize, Deserializer, Serialize}; use tauri_utils::{platform::current_exe, Env}; use time::OffsetDateTime; +#[cfg(feature = "tracing")] +use tracing::Instrument; use url::Url; #[cfg(desktop)] @@ -312,6 +314,10 @@ impl UpdateBuilder { Ok(self) } + #[cfg_attr( + feature = "tracing", + tracing::instrument("updater::check", skip_all, fields(arch, target), ret, err) + )] pub async fn build(mut self) -> Result> { let mut remote_release: Option = None; @@ -335,6 +341,12 @@ impl UpdateBuilder { (target.to_string(), format!("{target}-{arch}")) }; + #[cfg(feature = "tracing")] + { + tracing::Span::current().record("arch", arch); + tracing::Span::current().record("target", &target); + } + // Get the extract_path from the provided executable_path let extract_path = extract_path_from_executable(&self.app.state::(), &executable_path); @@ -370,38 +382,75 @@ impl UpdateBuilder { .replace("{{target}}", &target) .replace("{{arch}}", arch); - let mut request = HttpRequestBuilder::new("GET", &fixed_link)?.headers(headers.clone()); - if let Some(timeout) = self.timeout { - request = request.timeout(timeout); - } - let resp = ClientBuilder::new().build()?.send(request).await; + let task = async { + #[cfg(feature = "tracing")] + tracing::debug!("checking if there is an update via {}", url); - // If we got a success, we stop the loop - // and we set our remote_release variable - if let Ok(res) = resp { - 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 res = res.read().await?; - // Convert the remote result to our local struct - let built_release = serde_json::from_value(res.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; + let mut request = HttpRequestBuilder::new("GET", &fixed_link)?.headers(headers.clone()); + if let Some(timeout) = self.timeout { + request = request.timeout(timeout); + } + let resp = ClientBuilder::new().build()?.send(request).await; + + // If we got a success, we stop the loop + // and we set our remote_release variable + if let Ok(res) = resp { + let status = res.status(); + // got status code 2XX + if status.is_success() { + // if we got 204 + if status == StatusCode::NO_CONTENT { + #[cfg(feature = "tracing")] + tracing::event!(tracing::Level::DEBUG, kind = "result", data = "no content"); + // return with `UpToDate` error + // we should catch on the client + return Err(Error::UpToDate); + }; + let res = res.read().await?; + + // Convert the remote result to our local struct + let built_release: Result = + serde_json::from_value(res.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) => { + #[cfg(feature = "tracing")] + tracing::event!( + tracing::Level::DEBUG, + kind = "result", + data = tracing::field::debug(&release) + ); + last_error = None; + return Ok(Some(release)); + } + Err(err) => { + #[cfg(feature = "tracing")] + tracing::event!( + tracing::Level::ERROR, + kind = "error", + error = err.to_string() + ); + last_error = Some(err) + } } - Err(err) => last_error = Some(err), - } - } // if status code is not 2XX we keep loopin' our urls + } // if status code is not 2XX we keep loopin' our urls + } + + Ok(None) + }; + + #[cfg(feature = "tracing")] + let found_release = { + let span = tracing::info_span!("updater::check::fetch", url = &fixed_link,); + task.instrument(span).await? + }; + #[cfg(not(feature = "tracing"))] + let found_release = task.await?; + if let Some(release) = found_release { + remote_release.replace(release); + break; } } @@ -447,7 +496,6 @@ pub(crate) fn builder(app: AppHandle) -> UpdateBuilder { UpdateBuilder::new(app) } -#[derive(Debug)] pub(crate) struct Update { /// Application handle. pub app: AppHandle, @@ -480,6 +528,29 @@ pub(crate) struct Update { headers: HeaderMap, } +impl fmt::Debug for Update { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let mut s = f.debug_struct("Update"); + + s.field("current_version", &self.current_version) + .field("version", &self.version) + .field("date", &self.date) + .field("should_update", &self.should_update) + .field("body", &self.body) + .field("target", &self.target) + .field("extract_path", &self.extract_path) + .field("download_url", &self.download_url) + .field("signature", &self.signature) + .field("timeout", &self.timeout) + .field("headers", &self.headers); + + #[cfg(target_os = "windows")] + s.field("with_elevated_task", &self.with_elevated_task); + + s.finish() + } +} + impl Clone for Update { fn clone(&self) -> Self { Self { @@ -527,6 +598,7 @@ impl Update { // Download and install our update // @todo(lemarier): Split into download and install (two step) but need to be thread safe + #[cfg_attr(feature = "tracing", tracing::instrument("updater::download_and_install", skip_all, fields(url = %self.download_url), ret, err))] pub async fn download_and_install), D: FnOnce()>( &self, pub_key: String, @@ -540,6 +612,10 @@ impl Update { // anything with it yet #[cfg(target_os = "linux")] if self.app.state::().appimage.is_none() { + #[cfg(feature = "tracing")] + tracing::error!( + "app is not a supported Linux package. Currently only AppImages are supported" + ); return Err(Error::UnsupportedLinuxPackage); } @@ -561,10 +637,14 @@ impl Update { req = req.timeout(timeout); } + #[cfg(feature = "tracing")] + tracing::info!("Downloading update"); let response = client.send(req).await?; // make sure it's success if !response.status().is_success() { + #[cfg(feature = "tracing")] + tracing::error!("Failed to download update"); return Err(Error::Network(format!( "Download request failed with status: {}", response.status() @@ -577,17 +657,31 @@ impl Update { .and_then(|value| value.to_str().ok()) .and_then(|value| value.parse().ok()); - let mut buffer = Vec::new(); - { + let buffer = { use futures_util::StreamExt; let mut stream = response.bytes_stream(); - while let Some(chunk) = stream.next().await { - let chunk = chunk?; - let bytes = chunk.as_ref().to_vec(); - on_chunk(bytes.len(), content_length); - buffer.extend(bytes); + + let task = async move { + let mut buffer = Vec::new(); + while let Some(chunk) = stream.next().await { + let chunk = chunk?; + let bytes = chunk.as_ref().to_vec(); + on_chunk(bytes.len(), content_length); + buffer.extend(bytes); + } + Result::Ok(buffer) + }; + + #[cfg(feature = "tracing")] + { + let span = tracing::info_span!("updater::download_and_install::stream"); + task.instrument(span).await } - } + #[cfg(not(feature = "tracing"))] + { + task.await + } + }?; on_download_finish(); @@ -601,6 +695,8 @@ impl Update { // TODO: implement updater in mobile #[cfg(desktop)] { + #[cfg(feature = "tracing")] + tracing::info_span!("updater::download_and_install::install"); // we copy the files depending of the operating system // we run the setup, appimage re-install or overwrite the // macos .app diff --git a/core/tauri/src/window.rs b/core/tauri/src/window.rs index 594ff2de6..d9190d0fb 100644 --- a/core/tauri/src/window.rs +++ b/core/tauri/src/window.rs @@ -68,6 +68,8 @@ impl WindowEmitArgs { source_window_label: Option<&str>, payload: S, ) -> crate::Result { + #[cfg(feature = "tracing")] + let _span = tracing::debug_span!("window::emit::serialize").entered(); Ok(WindowEmitArgs { event: serde_json::to_string(event)?, source_window_label: serde_json::to_string(&source_window_label)?, @@ -321,6 +323,7 @@ impl<'a, R: Runtime> WindowBuilder<'a, R> { } /// Creates a new webview window. + #[cfg_attr(feature = "tracing", tracing::instrument(name = "window::create"))] pub fn build(mut self) -> crate::Result> { let mut pending = PendingWindow::new( self.window_builder.clone(), @@ -776,6 +779,10 @@ impl PartialEq for Window { } impl Manager for Window { + #[cfg_attr( + feature = "tracing", + tracing::instrument("window::emit::to", skip(self, payload)) + )] fn emit_to( &self, label: &str, @@ -787,12 +794,17 @@ impl Manager for Window { .emit_filter(event, Some(self.label()), payload, |w| label == w.label()) } + #[cfg_attr( + feature = "tracing", + tracing::instrument("window::emit::all", skip(self, payload)) + )] fn emit_all(&self, event: &str, payload: S) -> crate::Result<()> { self .manager() .emit_filter(event, Some(self.label()), payload, |_| true) } } + impl ManagerBase for Window { fn manager(&self) -> &WindowManager { &self.manager @@ -1790,6 +1802,15 @@ impl Window { self.emit(event, payload) } + #[cfg_attr(feature = "tracing", tracing::instrument( + "window::emit::eval", + skip(emit_args), + fields( + event = emit_args.event, + source_window = emit_args.source_window_label, + payload = emit_args.payload + )) + )] pub(crate) fn emit_internal(&self, emit_args: &WindowEmitArgs) -> crate::Result<()> { self.eval(&format!( "(function () {{ const fn = window['{}']; fn && fn({{event: {}, windowLabel: {}, payload: {}}}) }})()", @@ -1816,6 +1837,10 @@ impl Window { /// } /// } /// ``` + #[cfg_attr( + feature = "tracing", + tracing::instrument("window::emit", skip(self, payload)) + )] pub fn emit(&self, event: &str, payload: S) -> crate::Result<()> { self .manager @@ -1908,6 +1933,10 @@ impl Window { /// } /// } /// ``` + #[cfg_attr( + feature = "tracing", + tracing::instrument("window::trigger", skip(self)) + )] pub fn trigger(&self, event: &str, data: Option) { let label = self.window.label.clone(); self.manager.trigger(event, Some(label), data) diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index 96070ddbe..813d8098d 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -712,12 +712,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.26" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583" dependencies = [ "quote", - "syn 1.0.109", + "syn 2.0.18", ] [[package]] @@ -1724,9 +1724,9 @@ dependencies = [ [[package]] name = "infer" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" +checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" dependencies = [ "cfb", ] @@ -1846,9 +1846,9 @@ dependencies = [ [[package]] name = "json-patch" -version = "1.0.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658" +checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" dependencies = [ "serde", "serde_json", @@ -2514,9 +2514,17 @@ 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" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", ] [[package]] @@ -2559,6 +2567,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + [[package]] name = "phf_macros" version = "0.8.0" @@ -2575,16 +2593,15 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", + "phf_generator 0.11.2", + "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.18", ] [[package]] @@ -2605,6 +2622,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -3693,12 +3719,12 @@ dependencies = [ "glob", "heck 0.4.1", "html5ever 0.26.0", - "infer 0.12.0", + "infer 0.13.0", "json-patch", "kuchikiki", "log", "memchr", - "phf 0.10.1", + "phf 0.11.2", "proc-macro2", "quote", "semver", @@ -3709,7 +3735,7 @@ dependencies = [ "thiserror", "url", "walkdir", - "windows 0.39.0", + "windows-version", ] [[package]] @@ -4557,12 +4583,36 @@ dependencies = [ "windows_x86_64_msvc 0.48.0", ] +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + [[package]] name = "windows-tokens" version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" +[[package]] +name = "windows-version" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -4575,6 +4625,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.37.0" @@ -4599,6 +4655,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.37.0" @@ -4623,6 +4685,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.37.0" @@ -4647,6 +4715,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.37.0" @@ -4671,6 +4745,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -4683,6 +4763,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.37.0" @@ -4707,6 +4793,12 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" version = "0.4.7" @@ -4737,9 +4829,9 @@ dependencies = [ [[package]] name = "wry" -version = "0.24.4" +version = "0.24.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ef04bdad49eba2e01f06e53688c8413bd6a87b0bc14b72284465cf96e3578e" +checksum = "64a70547e8f9d85da0f5af609143f7bde3ac7457a6e1073104d9b73d6c5ac744" dependencies = [ "base64 0.13.1", "block", From c34710de6726a929dd7cea04593629ae10f1527a Mon Sep 17 00:00:00 2001 From: Chase Knowlden Date: Tue, 28 Nov 2023 20:41:41 -0500 Subject: [PATCH 27/45] fix: Fix archived links, Closes #8302 (#8315) --- tooling/api/src/dialog.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tooling/api/src/dialog.ts b/tooling/api/src/dialog.ts index eebaeb2c1..cdce40035 100644 --- a/tooling/api/src/dialog.ts +++ b/tooling/api/src/dialog.ts @@ -120,7 +120,7 @@ interface ConfirmDialogOptions { * prefer writing a dedicated command instead. * * Note that the allowlist scope change is not persisted, so the values are cleared when the application is restarted. - * You can save it to the filesystem using [tauri-plugin-persisted-scope](https://github.com/tauri-apps/tauri-plugin-persisted-scope). + * You can save it to the filesystem using [tauri-plugin-persisted-scope](https://github.com/tauri-apps/plugins-workspace/tree/v1/plugins/persisted-scope). * @example * ```typescript * import { open } from '@tauri-apps/api/dialog'; @@ -188,7 +188,7 @@ async function open( * prefer writing a dedicated command instead. * * Note that the allowlist scope change is not persisted, so the values are cleared when the application is restarted. - * You can save it to the filesystem using [tauri-plugin-persisted-scope](https://github.com/tauri-apps/tauri-plugin-persisted-scope). + * You can save it to the filesystem using [tauri-plugin-persisted-scope](https://github.com/tauri-apps/plugins-workspace/tree/v1/plugins/persisted-scope). * @example * ```typescript * import { save } from '@tauri-apps/api/dialog'; From 977a39f4f7fb5e47492b51df931643b1af4f92b0 Mon Sep 17 00:00:00 2001 From: i-c-b <133848861+i-c-b@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:51:42 -0500 Subject: [PATCH 28/45] fix(bundler): migrate WebView2 offline installer to shorturl (#8292) --- .changes/migrate-webview2-offline-shorturl.md | 5 ++ tooling/bundler/src/bundle/windows/msi/wix.rs | 36 ++----------- tooling/bundler/src/bundle/windows/nsis.rs | 35 ++---------- tooling/bundler/src/bundle/windows/util.rs | 54 +++++++++++++++++-- 4 files changed, 65 insertions(+), 65 deletions(-) create mode 100644 .changes/migrate-webview2-offline-shorturl.md diff --git a/.changes/migrate-webview2-offline-shorturl.md b/.changes/migrate-webview2-offline-shorturl.md new file mode 100644 index 000000000..bcfde041a --- /dev/null +++ b/.changes/migrate-webview2-offline-shorturl.md @@ -0,0 +1,5 @@ +--- +"tauri-bundler": 'patch:bug' +--- + +Migrate the WebView2 offline installer to use shorturl provided by Microsoft. diff --git a/tooling/bundler/src/bundle/windows/msi/wix.rs b/tooling/bundler/src/bundle/windows/msi/wix.rs index 50f41ab88..c0f8c61c3 100644 --- a/tooling/bundler/src/bundle/windows/msi/wix.rs +++ b/tooling/bundler/src/bundle/windows/msi/wix.rs @@ -10,9 +10,8 @@ use crate::bundle::{ windows::{ sign::try_sign, util::{ - download, download_and_verify, extract_zip, HashAlgorithm, WEBVIEW2_BOOTSTRAPPER_URL, - WEBVIEW2_X64_OFFLINE_INSTALLER_GUID, WEBVIEW2_X86_OFFLINE_INSTALLER_GUID, - WIX_OUTPUT_FOLDER_NAME, WIX_UPDATER_OUTPUT_FOLDER_NAME, + download_and_verify, download_webview2_bootstrapper, download_webview2_offline_installer, + extract_zip, HashAlgorithm, WIX_OUTPUT_FOLDER_NAME, WIX_UPDATER_OUTPUT_FOLDER_NAME, }, }, }; @@ -473,42 +472,15 @@ pub fn build_wix_app_installer( ); } WebviewInstallMode::EmbedBootstrapper { silent: _ } => { - let webview2_bootstrapper_path = output_path.join("MicrosoftEdgeWebview2Setup.exe"); - std::fs::write( - &webview2_bootstrapper_path, - download(WEBVIEW2_BOOTSTRAPPER_URL)?, - )?; + let webview2_bootstrapper_path = download_webview2_bootstrapper(&output_path)?; data.insert( "webview2_bootstrapper_path", to_json(webview2_bootstrapper_path), ); } WebviewInstallMode::OfflineInstaller { silent: _ } => { - let guid = if arch == "x64" { - WEBVIEW2_X64_OFFLINE_INSTALLER_GUID - } else { - WEBVIEW2_X86_OFFLINE_INSTALLER_GUID - }; - let offline_installer_path = dirs_next::cache_dir() - .unwrap() - .join("tauri") - .join("Webview2OfflineInstaller") - .join(guid) - .join(arch); - create_dir_all(&offline_installer_path)?; let webview2_installer_path = - offline_installer_path.join("MicrosoftEdgeWebView2RuntimeInstaller.exe"); - if !webview2_installer_path.exists() { - std::fs::write( - &webview2_installer_path, - download( - &format!("https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/{}/MicrosoftEdgeWebView2RuntimeInstaller{}.exe", - guid, - arch.to_uppercase(), - ), - )?, - )?; - } + download_webview2_offline_installer(&output_path.join(arch), arch)?; data.insert("webview2_installer_path", to_json(webview2_installer_path)); } } diff --git a/tooling/bundler/src/bundle/windows/nsis.rs b/tooling/bundler/src/bundle/windows/nsis.rs index 5ea0b049a..893630238 100644 --- a/tooling/bundler/src/bundle/windows/nsis.rs +++ b/tooling/bundler/src/bundle/windows/nsis.rs @@ -8,9 +8,9 @@ use crate::{ bundle::{ common::CommandExt, windows::util::{ - download, download_and_verify, extract_zip, HashAlgorithm, NSIS_OUTPUT_FOLDER_NAME, - NSIS_UPDATER_OUTPUT_FOLDER_NAME, WEBVIEW2_BOOTSTRAPPER_URL, - WEBVIEW2_X64_OFFLINE_INSTALLER_GUID, WEBVIEW2_X86_OFFLINE_INSTALLER_GUID, + download, download_and_verify, download_webview2_bootstrapper, + download_webview2_offline_installer, extract_zip, HashAlgorithm, NSIS_OUTPUT_FOLDER_NAME, + NSIS_UPDATER_OUTPUT_FOLDER_NAME, }, }, Settings, @@ -370,40 +370,15 @@ fn build_nsis_app_installer( match webview2_install_mode { WebviewInstallMode::EmbedBootstrapper { silent: _ } => { - let webview2_bootstrapper_path = tauri_tools_path.join("MicrosoftEdgeWebview2Setup.exe"); - std::fs::write( - &webview2_bootstrapper_path, - download(WEBVIEW2_BOOTSTRAPPER_URL)?, - )?; + let webview2_bootstrapper_path = download_webview2_bootstrapper(tauri_tools_path)?; data.insert( "webview2_bootstrapper_path", to_json(webview2_bootstrapper_path), ); } WebviewInstallMode::OfflineInstaller { silent: _ } => { - let guid = if arch == "x64" { - WEBVIEW2_X64_OFFLINE_INSTALLER_GUID - } else { - WEBVIEW2_X86_OFFLINE_INSTALLER_GUID - }; - let offline_installer_path = tauri_tools_path - .join("Webview2OfflineInstaller") - .join(guid) - .join(arch); - create_dir_all(&offline_installer_path)?; let webview2_installer_path = - offline_installer_path.join("MicrosoftEdgeWebView2RuntimeInstaller.exe"); - if !webview2_installer_path.exists() { - std::fs::write( - &webview2_installer_path, - download( - &format!("https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/{}/MicrosoftEdgeWebView2RuntimeInstaller{}.exe", - guid, - arch.to_uppercase(), - ), - )?, - )?; - } + download_webview2_offline_installer(&tauri_tools_path.join(arch), arch)?; data.insert("webview2_installer_path", to_json(webview2_installer_path)); } _ => {} diff --git a/tooling/bundler/src/bundle/windows/util.rs b/tooling/bundler/src/bundle/windows/util.rs index e27d91432..a9d4e3df6 100644 --- a/tooling/bundler/src/bundle/windows/util.rs +++ b/tooling/bundler/src/bundle/windows/util.rs @@ -5,7 +5,7 @@ use std::{ fs::{create_dir_all, File}, io::{Cursor, Read, Write}, - path::Path, + path::{Path, PathBuf}, }; use log::info; @@ -13,13 +13,61 @@ use sha2::Digest; use zip::ZipArchive; pub const WEBVIEW2_BOOTSTRAPPER_URL: &str = "https://go.microsoft.com/fwlink/p/?LinkId=2124703"; -pub const WEBVIEW2_X86_OFFLINE_INSTALLER_GUID: &str = "2c122012-898d-4a69-9ab6-aa50bbe81031"; -pub const WEBVIEW2_X64_OFFLINE_INSTALLER_GUID: &str = "0af26c79-02f0-4f06-a12d-116bc05ca860"; +pub const WEBVIEW2_OFFLINE_INSTALLER_X86_URL: &str = + "https://go.microsoft.com/fwlink/?linkid=2099617"; +pub const WEBVIEW2_OFFLINE_INSTALLER_X64_URL: &str = + "https://go.microsoft.com/fwlink/?linkid=2124701"; +pub const WEBVIEW2_URL_PREFIX: &str = + "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/"; pub const NSIS_OUTPUT_FOLDER_NAME: &str = "nsis"; pub const NSIS_UPDATER_OUTPUT_FOLDER_NAME: &str = "nsis-updater"; pub const WIX_OUTPUT_FOLDER_NAME: &str = "msi"; pub const WIX_UPDATER_OUTPUT_FOLDER_NAME: &str = "msi-updater"; +pub fn webview2_guid_path(url: &str) -> crate::Result<(String, String)> { + let agent = ureq::AgentBuilder::new().try_proxy_from_env(true).build(); + let response = agent.head(url).call().map_err(Box::new)?; + let final_url = response.get_url(); + let remaining_url = final_url.strip_prefix(WEBVIEW2_URL_PREFIX).ok_or_else(|| { + anyhow::anyhow!( + "WebView2 URL prefix mismatch. Expected `{}`, found `{}`.", + WEBVIEW2_URL_PREFIX, + final_url + ) + })?; + let (guid, filename) = remaining_url.split_once('/').ok_or_else(|| { + anyhow::anyhow!( + "WebView2 URL format mismatch. Expected `/`, found `{}`.", + remaining_url + ) + })?; + Ok((guid.into(), filename.into())) +} + +pub fn download_webview2_bootstrapper(base_path: &Path) -> crate::Result { + let file_path = base_path.join("MicrosoftEdgeWebview2Setup.exe"); + if !file_path.exists() { + std::fs::write(&file_path, download(WEBVIEW2_BOOTSTRAPPER_URL)?)?; + } + Ok(file_path) +} + +pub fn download_webview2_offline_installer(base_path: &Path, arch: &str) -> crate::Result { + let url = if arch == "x64" { + WEBVIEW2_OFFLINE_INSTALLER_X64_URL + } else { + WEBVIEW2_OFFLINE_INSTALLER_X86_URL + }; + let (guid, filename) = webview2_guid_path(url)?; + let dir_path = base_path.join(guid); + let file_path = dir_path.join(filename); + if !file_path.exists() { + create_dir_all(dir_path)?; + std::fs::write(&file_path, download(url)?)?; + } + Ok(file_path) +} + pub fn download(url: &str) -> crate::Result> { info!(action = "Downloading"; "{}", url); From c4b5df12bb3309394dea90d4cfbddacef69024bd Mon Sep 17 00:00:00 2001 From: Robin van Boven <497556+Beanow@users.noreply.github.com> Date: Thu, 30 Nov 2023 15:56:24 +0100 Subject: [PATCH 29/45] perf: skip large `Window` and `AppHandle` fields on traces (#8318) * perf: Skip large Window and AppHandle fields on traces These contain large fields like image buffers, causing spans/events to be very large when serialized. Especially the `window::emit::eval` one which is in a hot code path. * fix: MSRV issues --- .github/workflows/test-core.yml | 3 +++ core/tauri/src/plugin.rs | 2 +- core/tauri/src/window.rs | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 8a34e1411..a995e5267 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -115,6 +115,9 @@ jobs: cargo update -p bstr --precise 1.6.2 cargo update -p backtrace --precise 0.3.68 cargo update -p blocking --precise 1.4.1 + cargo update -p ignore --precise 0.4.18 + cargo update -p regex --precise 1.9.6 + cargo update -p globset --precise 0.4.13 - name: test run: cargo test --target ${{ matrix.platform.target }} ${{ matrix.features.args }} diff --git a/core/tauri/src/plugin.rs b/core/tauri/src/plugin.rs index 0a53b4d84..a506d4136 100644 --- a/core/tauri/src/plugin.rs +++ b/core/tauri/src/plugin.rs @@ -664,7 +664,7 @@ impl PluginStore { } } -#[cfg_attr(feature = "tracing", tracing::instrument(name = "plugin::hooks::initialize", skip(plugin), fields(name = plugin.name())))] +#[cfg_attr(feature = "tracing", tracing::instrument(name = "plugin::hooks::initialize", skip(plugin, app), fields(name = plugin.name())))] fn initialize( plugin: &mut Box>, app: &AppHandle, diff --git a/core/tauri/src/window.rs b/core/tauri/src/window.rs index d9190d0fb..4307f1bb7 100644 --- a/core/tauri/src/window.rs +++ b/core/tauri/src/window.rs @@ -1804,7 +1804,7 @@ impl Window { #[cfg_attr(feature = "tracing", tracing::instrument( "window::emit::eval", - skip(emit_args), + skip(self, emit_args), fields( event = emit_args.event, source_window = emit_args.source_window_label, From 61cc7d9c5aec80b5ed0ff6cf94da58f0b4a3c770 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 03:05:05 +0200 Subject: [PATCH 30/45] Apply Version Updates From Current Changes (v1) (#8203) * apply version updates * fmt --------- Co-authored-by: amrbashir Co-authored-by: amrbashir --- .changes/api-top-level-main-module.md | 5 - .changes/asset-iter.md | 5 - .changes/fix-clearmocks.md | 5 - .changes/fix-cmd-output-error.md | 7 - .changes/fix-docs-rs-macos-build.md | 5 - .changes/migrate-webview2-offline-shorturl.md | 5 - .changes/nsis-leftover-dirs.md | 7 - .changes/nsis-slow-resources-installation.md | 7 - .changes/tracing.md | 7 - .changes/updater-msi-escaped-path.md | 5 - core/tauri-macros/CHANGELOG.md | 6 + core/tauri-macros/Cargo.toml | 6 +- core/tauri-runtime-wry/CHANGELOG.md | 6 + core/tauri-runtime-wry/Cargo.toml | 2 +- core/tauri/CHANGELOG.md | 17 ++ core/tauri/Cargo.toml | 14 +- tooling/api/CHANGELOG.md | 9 +- tooling/api/package.json | 2 +- tooling/bundler/CHANGELOG.md | 9 + tooling/bundler/Cargo.toml | 2 +- tooling/cli/CHANGELOG.md | 12 + tooling/cli/Cargo.lock | 206 +++++++++++------- tooling/cli/Cargo.toml | 4 +- tooling/cli/metadata.json | 4 +- tooling/cli/node/CHANGELOG.md | 12 + tooling/cli/node/package.json | 2 +- 26 files changed, 212 insertions(+), 159 deletions(-) delete mode 100644 .changes/api-top-level-main-module.md delete mode 100644 .changes/asset-iter.md delete mode 100644 .changes/fix-clearmocks.md delete mode 100644 .changes/fix-cmd-output-error.md delete mode 100644 .changes/fix-docs-rs-macos-build.md delete mode 100644 .changes/migrate-webview2-offline-shorturl.md delete mode 100644 .changes/nsis-leftover-dirs.md delete mode 100644 .changes/nsis-slow-resources-installation.md delete mode 100644 .changes/tracing.md delete mode 100644 .changes/updater-msi-escaped-path.md diff --git a/.changes/api-top-level-main-module.md b/.changes/api-top-level-main-module.md deleted file mode 100644 index fba6cdb2c..000000000 --- a/.changes/api-top-level-main-module.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@tauri-apps/api': 'patch:bug' ---- - -Add top-level `main`, `module` and `types` fields in `package.json` to be compliant with typescripts's `"moduleResolution": "node"` diff --git a/.changes/asset-iter.md b/.changes/asset-iter.md deleted file mode 100644 index 1b95f4902..000000000 --- a/.changes/asset-iter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"tauri": patch:enhance ---- - -Added `AssetResolver::iter` to iterate on all embedded assets. diff --git a/.changes/fix-clearmocks.md b/.changes/fix-clearmocks.md deleted file mode 100644 index 2decce827..000000000 --- a/.changes/fix-clearmocks.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@tauri-apps/api": 'patch:bug' ---- - -Avoid crashing in `clearMocks` diff --git a/.changes/fix-cmd-output-error.md b/.changes/fix-cmd-output-error.md deleted file mode 100644 index 384095b81..000000000 --- a/.changes/fix-cmd-output-error.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@tauri-apps/cli": patch:bug -"tauri-cli": patch:bug -"tauri-bundler": patch:bug ---- - -Fixes errors on command output, occuring when the output stream contains an invalid UTF-8 character, or ends with a multi-bytes UTF-8 character. diff --git a/.changes/fix-docs-rs-macos-build.md b/.changes/fix-docs-rs-macos-build.md deleted file mode 100644 index bfff22b23..000000000 --- a/.changes/fix-docs-rs-macos-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"tauri": patch:bug ---- - -Fix docs.rs build for `x86_64-apple-darwin`. diff --git a/.changes/migrate-webview2-offline-shorturl.md b/.changes/migrate-webview2-offline-shorturl.md deleted file mode 100644 index bcfde041a..000000000 --- a/.changes/migrate-webview2-offline-shorturl.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"tauri-bundler": 'patch:bug' ---- - -Migrate the WebView2 offline installer to use shorturl provided by Microsoft. diff --git a/.changes/nsis-leftover-dirs.md b/.changes/nsis-leftover-dirs.md deleted file mode 100644 index 1b1df860b..000000000 --- a/.changes/nsis-leftover-dirs.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@tauri-apps/cli": patch:bug -"tauri-cli": patch:bug -"tauri-bundler": patch:bug ---- - -Fixes an issue in the NSIS installer which caused the uninstallation to leave empty folders on the system if the `resources` feature was used. diff --git a/.changes/nsis-slow-resources-installation.md b/.changes/nsis-slow-resources-installation.md deleted file mode 100644 index 486227050..000000000 --- a/.changes/nsis-slow-resources-installation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@tauri-apps/cli": patch:bug -"tauri-cli": patch:bug -"tauri-bundler": patch:bug ---- - -Fixes an issue in the NSIS installer which caused the installation to take much longer than expected when many `resources` were added to the bundle. diff --git a/.changes/tracing.md b/.changes/tracing.md deleted file mode 100644 index baee89fdb..000000000 --- a/.changes/tracing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"tauri": patch:enhance -"tauri-runtime-wry": patch:enhance -"tauri-macros": patch:enhance ---- - -Added tracing for window startup, plugins, `Window::eval`, events, IPC, updater and custom protocol request handlers behind the `tracing` feature flag. diff --git a/.changes/updater-msi-escaped-path.md b/.changes/updater-msi-escaped-path.md deleted file mode 100644 index 1235827d1..000000000 --- a/.changes/updater-msi-escaped-path.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'tauri': 'patch:bug' ---- - -Escape path of the updater msi to avoid crashing on installers with spaces. diff --git a/core/tauri-macros/CHANGELOG.md b/core/tauri-macros/CHANGELOG.md index 4c0029591..733c9c389 100644 --- a/core/tauri-macros/CHANGELOG.md +++ b/core/tauri-macros/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[1.4.2] + +### Enhancements + +- [`5e05236b`](https://www.github.com/tauri-apps/tauri/commit/5e05236b4987346697c7caae0567d3c50714c198)([#8289](https://www.github.com/tauri-apps/tauri/pull/8289)) Added tracing for window startup, plugins, `Window::eval`, events, IPC, updater and custom protocol request handlers behind the `tracing` feature flag. + ## \[1.4.1] ### Dependencies diff --git a/core/tauri-macros/Cargo.toml b/core/tauri-macros/Cargo.toml index 213ce8cf3..90e9f3641 100644 --- a/core/tauri-macros/Cargo.toml +++ b/core/tauri-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-macros" -version = "1.4.1" +version = "1.4.2" authors = [ "Tauri Programme within The Commons Conservancy" ] categories = [ "gui", "os", "filesystem", "web-programming" ] license = "Apache-2.0 OR MIT" @@ -16,7 +16,7 @@ readme = "README.md" proc-macro = true [dependencies] -proc-macro2 = { version = "1", features = ["span-locations"] } +proc-macro2 = { version = "1", features = [ "span-locations" ] } quote = "1" syn = { version = "1", features = [ "full" ] } heck = "0.4" @@ -30,4 +30,4 @@ isolation = [ "tauri-codegen/isolation" ] shell-scope = [ "tauri-codegen/shell-scope" ] config-json5 = [ "tauri-codegen/config-json5", "tauri-utils/config-json5" ] config-toml = [ "tauri-codegen/config-toml", "tauri-utils/config-toml" ] -tracing = [] +tracing = [ ] diff --git a/core/tauri-runtime-wry/CHANGELOG.md b/core/tauri-runtime-wry/CHANGELOG.md index fb26af9b6..d81aa49f9 100644 --- a/core/tauri-runtime-wry/CHANGELOG.md +++ b/core/tauri-runtime-wry/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[0.14.2] + +### Enhancements + +- [`5e05236b`](https://www.github.com/tauri-apps/tauri/commit/5e05236b4987346697c7caae0567d3c50714c198)([#8289](https://www.github.com/tauri-apps/tauri/pull/8289)) Added tracing for window startup, plugins, `Window::eval`, events, IPC, updater and custom protocol request handlers behind the `tracing` feature flag. + ## \[0.14.1] ### Enhancements diff --git a/core/tauri-runtime-wry/Cargo.toml b/core/tauri-runtime-wry/Cargo.toml index e3a33182b..f5601e432 100644 --- a/core/tauri-runtime-wry/Cargo.toml +++ b/core/tauri-runtime-wry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-runtime-wry" -version = "0.14.1" +version = "0.14.2" authors = [ "Tauri Programme within The Commons Conservancy" ] categories = [ "gui", "web-programming" ] license = "Apache-2.0 OR MIT" diff --git a/core/tauri/CHANGELOG.md b/core/tauri/CHANGELOG.md index 4b022d6c9..1fd5d0911 100644 --- a/core/tauri/CHANGELOG.md +++ b/core/tauri/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## \[1.5.3] + +### Enhancements + +- [`b3e53e72`](https://www.github.com/tauri-apps/tauri/commit/b3e53e7243311a2659b7569dddc20c56ac9f9d8e)([#8288](https://www.github.com/tauri-apps/tauri/pull/8288)) Added `AssetResolver::iter` to iterate on all embedded assets. +- [`5e05236b`](https://www.github.com/tauri-apps/tauri/commit/5e05236b4987346697c7caae0567d3c50714c198)([#8289](https://www.github.com/tauri-apps/tauri/pull/8289)) Added tracing for window startup, plugins, `Window::eval`, events, IPC, updater and custom protocol request handlers behind the `tracing` feature flag. + +### Bug Fixes + +- [`2ba88563`](https://www.github.com/tauri-apps/tauri/commit/2ba8856343e284ed022f28cff6d16db15ad4645f)([#8095](https://www.github.com/tauri-apps/tauri/pull/8095)) Fix docs.rs build for `x86_64-apple-darwin`. +- [`4b6a602a`](https://www.github.com/tauri-apps/tauri/commit/4b6a602a89b36f24d34d6ccd8e3c9b7ce202c9eb)([#8234](https://www.github.com/tauri-apps/tauri/pull/8234)) Escape path of the updater msi to avoid crashing on installers with spaces. + +### Dependencies + +- Upgraded to `tauri-runtime-wry@0.14.2` +- Upgraded to `tauri-macros@1.4.2` + ## \[1.5.2] ### Bug Fixes diff --git a/core/tauri/Cargo.toml b/core/tauri/Cargo.toml index c7bb7f713..6da8551ed 100644 --- a/core/tauri/Cargo.toml +++ b/core/tauri/Cargo.toml @@ -10,7 +10,7 @@ license = "Apache-2.0 OR MIT" name = "tauri" readme = "README.md" repository = "https://github.com/tauri-apps/tauri" -version = "1.5.2" +version = "1.5.3" [package.metadata.docs.rs] no-default-features = true @@ -35,7 +35,7 @@ features = [ "process-exit", "protocol-asset", "process-command-api", - "shell-open", + "shell-open" ] rustdoc-args = [ "--cfg", "doc_cfg" ] default-target = "x86_64-unknown-linux-gnu" @@ -59,9 +59,9 @@ anyhow = "1.0" thiserror = "1.0" once_cell = "1" tauri-runtime = { version = "0.14.1", path = "../tauri-runtime" } -tauri-macros = { version = "1.4.1", path = "../tauri-macros" } +tauri-macros = { version = "1.4.2", path = "../tauri-macros" } tauri-utils = { version = "1.5.0", features = [ "resources" ], path = "../tauri-utils" } -tauri-runtime-wry = { version = "0.14.1", path = "../tauri-runtime-wry", optional = true } +tauri-runtime-wry = { version = "0.14.2", path = "../tauri-runtime-wry", optional = true } rand = "0.8" semver = { version = "1.0", features = [ "serde" ] } serde_repr = "0.1" @@ -136,7 +136,11 @@ cargo_toml = "0.11" [features] default = [ "wry", "compression", "objc-exception" ] -tracing = [ "dep:tracing", "tauri-macros/tracing", "tauri-runtime-wry/tracing" ] +tracing = [ + "dep:tracing", + "tauri-macros/tracing", + "tauri-runtime-wry/tracing" +] test = [ ] compression = [ "tauri-macros/compression", "tauri-utils/compression" ] wry = [ "tauri-runtime-wry" ] diff --git a/tooling/api/CHANGELOG.md b/tooling/api/CHANGELOG.md index ab5c025da..b3bd8894e 100644 --- a/tooling/api/CHANGELOG.md +++ b/tooling/api/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[1.5.2] + +### Bug Fixes + +- [`50462702`](https://www.github.com/tauri-apps/tauri/commit/504627027303ef5a0e855aab2abea64c6964223b)([#8267](https://www.github.com/tauri-apps/tauri/pull/8267)) Add top-level `main`, `module` and `types` fields in `package.json` to be compliant with typescripts's `"moduleResolution": "node"` +- [`14544e4b`](https://www.github.com/tauri-apps/tauri/commit/14544e4b87269c06c89fed3647d80f492e0a1d34)([#8219](https://www.github.com/tauri-apps/tauri/pull/8219)) Avoid crashing in `clearMocks` + ## \[1.5.1] ### New Features @@ -31,7 +38,7 @@ ## \[1.3.0] -- Return correct type for `event.payload ` in `onResized` and `onMoved` window event handlers. +- Return correct type for `event.payload` in `onResized` and `onMoved` window event handlers. - [0b46637e](https://www.github.com/tauri-apps/tauri/commit/0b46637ebaba54403afa32a1cb466f09df2db999) fix(api): construct correct object for onResized and onMoved, closes [#6507](https://www.github.com/tauri-apps/tauri/pull/6507) ([#6509](https://www.github.com/tauri-apps/tauri/pull/6509)) on 2023-04-03 - Added the `WindowOptions::contentProtected` option and `WebviewWindow#setContentProtected` to change it at runtime. - [4ab5545b](https://www.github.com/tauri-apps/tauri/commit/4ab5545b7a831c549f3c65e74de487ede3ab7ce5) feat: add content protection api, closes [#5132](https://www.github.com/tauri-apps/tauri/pull/5132) ([#5513](https://www.github.com/tauri-apps/tauri/pull/5513)) on 2022-12-13 diff --git a/tooling/api/package.json b/tooling/api/package.json index 62d59cb21..b0e5389c2 100644 --- a/tooling/api/package.json +++ b/tooling/api/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/api", - "version": "1.5.1", + "version": "1.5.2", "description": "Tauri API definitions", "funding": { "type": "opencollective", diff --git a/tooling/bundler/CHANGELOG.md b/tooling/bundler/CHANGELOG.md index c7de9c973..bf2538d06 100644 --- a/tooling/bundler/CHANGELOG.md +++ b/tooling/bundler/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## \[1.4.6] + +### Bug Fixes + +- [`1d5aa38a`](https://www.github.com/tauri-apps/tauri/commit/1d5aa38ae418ea31f593590b6d32cf04d3bfd8c1)([#8162](https://www.github.com/tauri-apps/tauri/pull/8162)) Fixes errors on command output, occuring when the output stream contains an invalid UTF-8 character, or ends with a multi-bytes UTF-8 character. +- [`977a39f4`](https://www.github.com/tauri-apps/tauri/commit/977a39f4f7fb5e47492b51df931643b1af4f92b0)([#8292](https://www.github.com/tauri-apps/tauri/pull/8292)) Migrate the WebView2 offline installer to use shorturl provided by Microsoft. +- [`f26d9f08`](https://www.github.com/tauri-apps/tauri/commit/f26d9f0884f63f61b9f4d4fac15e6b251163793e)([#8263](https://www.github.com/tauri-apps/tauri/pull/8263)) Fixes an issue in the NSIS installer which caused the uninstallation to leave empty folders on the system if the `resources` feature was used. +- [`92bc7d0e`](https://www.github.com/tauri-apps/tauri/commit/92bc7d0e16157434330a1bcf1eefda6f0f1e5f85)([#8233](https://www.github.com/tauri-apps/tauri/pull/8233)) Fixes an issue in the NSIS installer which caused the installation to take much longer than expected when many `resources` were added to the bundle. + ## \[1.4.5] ### Enhancements diff --git a/tooling/bundler/Cargo.toml b/tooling/bundler/Cargo.toml index df5d71456..6c3b0cc40 100644 --- a/tooling/bundler/Cargo.toml +++ b/tooling/bundler/Cargo.toml @@ -2,7 +2,7 @@ workspace = { } [package] name = "tauri-bundler" -version = "1.4.5" +version = "1.4.6" authors = [ "George Burton ", "Tauri Programme within The Commons Conservancy" diff --git a/tooling/cli/CHANGELOG.md b/tooling/cli/CHANGELOG.md index 51a391791..4f48f5d97 100644 --- a/tooling/cli/CHANGELOG.md +++ b/tooling/cli/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## \[1.5.7] + +### Bug Fixes + +- [`1d5aa38a`](https://www.github.com/tauri-apps/tauri/commit/1d5aa38ae418ea31f593590b6d32cf04d3bfd8c1)([#8162](https://www.github.com/tauri-apps/tauri/pull/8162)) Fixes errors on command output, occuring when the output stream contains an invalid UTF-8 character, or ends with a multi-bytes UTF-8 character. +- [`f26d9f08`](https://www.github.com/tauri-apps/tauri/commit/f26d9f0884f63f61b9f4d4fac15e6b251163793e)([#8263](https://www.github.com/tauri-apps/tauri/pull/8263)) Fixes an issue in the NSIS installer which caused the uninstallation to leave empty folders on the system if the `resources` feature was used. +- [`92bc7d0e`](https://www.github.com/tauri-apps/tauri/commit/92bc7d0e16157434330a1bcf1eefda6f0f1e5f85)([#8233](https://www.github.com/tauri-apps/tauri/pull/8233)) Fixes an issue in the NSIS installer which caused the installation to take much longer than expected when many `resources` were added to the bundle. + +### Dependencies + +- Upgraded to `tauri-bundler@1.4.6` + ## \[1.5.6] ### Bug Fixes diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index 453b4339d..d4bfcbfee 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -646,16 +646,6 @@ dependencies = [ "syn 2.0.38", ] -[[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 = "ctor" version = "0.2.5" @@ -1184,9 +1174,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.4.0" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39b3bc2a8f715298032cf5087e58573809374b08160aa7d750582bdb82d2683" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -1443,9 +1433,9 @@ dependencies = [ [[package]] name = "infer" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3" +checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" dependencies = [ "cfb", ] @@ -1653,9 +1643,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.149" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libflate" @@ -1702,9 +1692,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "lock_api" @@ -1792,9 +1782,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "minisign" -version = "0.7.5" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b6f58413c6cee060115673578e47271838f3c87cb9322c61a3bcd6d740b7d2" +checksum = "b23ef13ff1d745b1e52397daaa247e333c607f3cff96d4df2b798dc252db974b" dependencies = [ "getrandom 0.2.10", "rpassword", @@ -1830,7 +1820,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d90182620f32fe34b6ac9b52cba898af26e94c7f5abc01eb4094c417ae2e6c" dependencies = [ "bitflags 2.4.1", - "ctor 0.2.5", + "ctor", "napi-derive", "napi-sys", "once_cell", @@ -2282,9 +2272,17 @@ 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" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", ] [[package]] @@ -2327,6 +2325,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + [[package]] name = "phf_macros" version = "0.8.0" @@ -2343,16 +2351,15 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.10.0" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro-hack", + "phf_generator 0.11.2", + "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.38", ] [[package]] @@ -2373,6 +2380,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.3" @@ -2772,9 +2788,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.19" +version = "0.38.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed" +checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e" dependencies = [ "bitflags 2.4.1", "errno", @@ -3384,7 +3400,7 @@ dependencies = [ [[package]] name = "tauri-bundler" -version = "1.4.5" +version = "1.4.6" dependencies = [ "anyhow", "ar", @@ -3424,7 +3440,7 @@ dependencies = [ [[package]] name = "tauri-cli" -version = "1.5.6" +version = "1.5.7" dependencies = [ "anyhow", "axum", @@ -3500,7 +3516,7 @@ name = "tauri-utils" version = "1.5.0" dependencies = [ "aes-gcm", - "ctor 0.1.26", + "ctor", "dunce", "getrandom 0.2.10", "glob", @@ -3512,7 +3528,7 @@ dependencies = [ "kuchikiki", "log", "memchr", - "phf 0.10.1", + "phf 0.11.2", "schemars", "semver", "serde", @@ -3520,21 +3536,21 @@ dependencies = [ "serde_with", "serialize-to-javascript", "thiserror", - "toml 0.5.11", + "toml 0.7.8", "url", "walkdir", - "windows", + "windows-version", ] [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "rustix", "windows-sys 0.48.0", ] @@ -3706,11 +3722,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.11" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" dependencies = [ "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", ] [[package]] @@ -3734,6 +3753,19 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "toml_edit" version = "0.20.2" @@ -4150,20 +4182,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" -dependencies = [ - "windows-implement", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", -] - [[package]] name = "windows-core" version = "0.51.1" @@ -4173,16 +4191,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows-implement" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" -dependencies = [ - "syn 1.0.109", - "windows-tokens", -] - [[package]] name = "windows-sys" version = "0.45.0" @@ -4232,10 +4240,28 @@ dependencies = [ ] [[package]] -name = "windows-tokens" -version = "0.39.0" +name = "windows-targets" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows-version" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +dependencies = [ + "windows-targets 0.52.0", +] [[package]] name = "windows_aarch64_gnullvm" @@ -4250,10 +4276,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" +name = "windows_aarch64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" @@ -4268,10 +4294,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] -name = "windows_i686_gnu" -version = "0.39.0" +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" @@ -4286,10 +4312,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] -name = "windows_i686_msvc" -version = "0.39.0" +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -4304,10 +4330,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -4321,6 +4347,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -4334,10 +4366,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" +name = "windows_x86_64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" @@ -4351,6 +4383,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" version = "0.5.17" diff --git a/tooling/cli/Cargo.toml b/tooling/cli/Cargo.toml index 76136e10f..c8cbb2555 100644 --- a/tooling/cli/Cargo.toml +++ b/tooling/cli/Cargo.toml @@ -3,7 +3,7 @@ members = [ "node" ] [package] name = "tauri-cli" -version = "1.5.6" +version = "1.5.7" authors = [ "Tauri Programme within The Commons Conservancy" ] edition = "2021" rust-version = "1.60" @@ -42,7 +42,7 @@ path = "src/main.rs" clap_complete = "4" clap = { version = "4.4", features = [ "derive" ] } anyhow = "1.0" -tauri-bundler = { version = "1.4.5", path = "../bundler", default-features = false } +tauri-bundler = { version = "1.4.6", path = "../bundler", default-features = false } colored = "2.0" once_cell = "1" serde = { version = "1.0", features = [ "derive" ] } diff --git a/tooling/cli/metadata.json b/tooling/cli/metadata.json index a3f1a25db..09915989d 100644 --- a/tooling/cli/metadata.json +++ b/tooling/cli/metadata.json @@ -1,8 +1,8 @@ { "cli.js": { - "version": "1.5.6", + "version": "1.5.7", "node": ">= 10.0.0" }, - "tauri": "1.5.2", + "tauri": "1.5.3", "tauri-build": "1.5.0" } diff --git a/tooling/cli/node/CHANGELOG.md b/tooling/cli/node/CHANGELOG.md index df9ae75ff..2104711a7 100644 --- a/tooling/cli/node/CHANGELOG.md +++ b/tooling/cli/node/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## \[1.5.7] + +### Bug Fixes + +- [`1d5aa38a`](https://www.github.com/tauri-apps/tauri/commit/1d5aa38ae418ea31f593590b6d32cf04d3bfd8c1)([#8162](https://www.github.com/tauri-apps/tauri/pull/8162)) Fixes errors on command output, occuring when the output stream contains an invalid UTF-8 character, or ends with a multi-bytes UTF-8 character. +- [`f26d9f08`](https://www.github.com/tauri-apps/tauri/commit/f26d9f0884f63f61b9f4d4fac15e6b251163793e)([#8263](https://www.github.com/tauri-apps/tauri/pull/8263)) Fixes an issue in the NSIS installer which caused the uninstallation to leave empty folders on the system if the `resources` feature was used. +- [`92bc7d0e`](https://www.github.com/tauri-apps/tauri/commit/92bc7d0e16157434330a1bcf1eefda6f0f1e5f85)([#8233](https://www.github.com/tauri-apps/tauri/pull/8233)) Fixes an issue in the NSIS installer which caused the installation to take much longer than expected when many `resources` were added to the bundle. + +### Dependencies + +- Upgraded to `tauri-cli@1.5.7` + ## \[1.5.6] ### Bug Fixes diff --git a/tooling/cli/node/package.json b/tooling/cli/node/package.json index c618099c5..9338a4cf4 100644 --- a/tooling/cli/node/package.json +++ b/tooling/cli/node/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/cli", - "version": "1.5.6", + "version": "1.5.7", "description": "Command line interface for building Tauri apps", "funding": { "type": "opencollective", From cf7d584033e9d720d8365c574ce42ecfc5d5ec6d Mon Sep 17 00:00:00 2001 From: amrbashir Date: Fri, 1 Dec 2023 03:46:30 +0200 Subject: [PATCH 31/45] chore: manually bump `tauri-utils` --- core/tauri-utils/CHANGELOG.md | 6 ++++++ core/tauri-utils/Cargo.toml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/tauri-utils/CHANGELOG.md b/core/tauri-utils/CHANGELOG.md index 086917cc7..9c1cabbf4 100644 --- a/core/tauri-utils/CHANGELOG.md +++ b/core/tauri-utils/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[1.5.3] + +### New Features + +- [`b3e53e72`](https://www.github.com/tauri-apps/tauri/commit/b3e53e7243311a2659b7569dddc20c56ac9f9d8e)([#8288](https://www.github.com/tauri-apps/tauri/pull/8288)) Added `Assets::iter` to iterate on all embedded assets. + ## \[1.5.0] ### New Features diff --git a/core/tauri-utils/Cargo.toml b/core/tauri-utils/Cargo.toml index 380e0dcef..3fa6a5d6b 100644 --- a/core/tauri-utils/Cargo.toml +++ b/core/tauri-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-utils" -version = "1.5.0" +version = "1.5.1" authors = [ "Tauri Programme within The Commons Conservancy" ] license = "Apache-2.0 OR MIT" homepage = "https://tauri.app" From 14e29f320d3e7988a4f9c23e5c6e66abe719ffe1 Mon Sep 17 00:00:00 2001 From: amrbashir Date: Fri, 1 Dec 2023 04:27:26 +0200 Subject: [PATCH 32/45] chore: update tauri-cli lock file --- tooling/cli/Cargo.lock | 579 +++++++++++++++++++++-------------------- 1 file changed, 291 insertions(+), 288 deletions(-) diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index d4bfcbfee..0a9f0e0a5 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -60,15 +60,16 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", - "getrandom 0.2.10", + "getrandom 0.2.11", "once_cell", "serde", "version_check", + "zerocopy", ] [[package]] @@ -163,7 +164,7 @@ checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -295,9 +296,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" dependencies = [ "memchr", "serde", @@ -311,9 +312,9 @@ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "bytecount" -version = "0.6.4" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad152d03a2c813c80bb94fedbf3a3f02b28f793e39e7c214c8a0bcc196343de7" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" [[package]] name = "bytemuck" @@ -406,9 +407,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.6" +version = "4.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" +checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" dependencies = [ "clap_builder", "clap_derive", @@ -416,9 +417,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.6" +version = "4.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" dependencies = [ "anstream", "anstyle", @@ -428,30 +429,30 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.4.3" +version = "4.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ae8ba90b9d8b007efe66e55e48fb936272f5ca00349b5b0e89877520d35ea7" +checksum = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.4.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "clap_lex" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "color_quant" @@ -518,9 +519,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -528,9 +529,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core2" @@ -543,9 +544,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -643,7 +644,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -653,7 +654,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583" dependencies = [ "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -696,7 +697,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -707,7 +708,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -718,9 +719,9 @@ checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca" [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "deranged" @@ -813,9 +814,9 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "dyn-clone" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" [[package]] name = "either" @@ -840,9 +841,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" dependencies = [ "humantime", "is-terminal", @@ -868,12 +869,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -910,9 +911,9 @@ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fdeflate" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" dependencies = [ "simd-adler32", ] @@ -945,7 +946,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ - "spin 0.9.8", + "spin", ] [[package]] @@ -971,9 +972,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1009,42 +1010,42 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-core", "futures-io", @@ -1088,9 +1089,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "js-sys", @@ -1121,9 +1122,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -1133,22 +1134,22 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", "bstr", - "fnv", "log", - "regex", + "regex-automata", + "regex-syntax", ] [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ "bytes", "fnv", @@ -1156,7 +1157,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", "tokio-util", @@ -1203,9 +1204,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.1" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -1253,9 +1254,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -1308,7 +1309,7 @@ dependencies = [ "httpdate", "itoa 1.0.9", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -1346,9 +1347,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1356,17 +1357,16 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +checksum = "747ad1b4ae841a78e8aba0d63adbfbeaea26b517b63705d47856b73015d27060" dependencies = [ + "crossbeam-deque", "globset", - "lazy_static", "log", "memchr", - "regex", + "regex-automata", "same-file", - "thread_local", "walkdir", "winapi-util", ] @@ -1422,12 +1422,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.1", + "hashbrown 0.14.3", "serde", ] @@ -1471,9 +1471,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" @@ -1536,9 +1536,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -1579,7 +1579,7 @@ dependencies = [ "clap", "fancy-regex", "fraction", - "getrandom 0.2.10", + "getrandom 0.2.11", "iso8601", "itoa 1.0.9", "memchr", @@ -1681,6 +1681,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "line-wrap" version = "0.1.1" @@ -1692,9 +1703,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "lock_api" @@ -1786,7 +1797,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b23ef13ff1d745b1e52397daaa247e333c607f3cff96d4df2b798dc252db974b" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "rpassword", "scrypt", ] @@ -1803,9 +1814,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "log", @@ -1815,9 +1826,9 @@ dependencies = [ [[package]] name = "napi" -version = "2.14.0" +version = "2.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d90182620f32fe34b6ac9b52cba898af26e94c7f5abc01eb4094c417ae2e6c" +checksum = "1133249c46e92da921bafc8aba4912bf84d6c475f7625183772ed2d0844dc3a7" dependencies = [ "bitflags 2.4.1", "ctor", @@ -1834,9 +1845,9 @@ checksum = "d4b4532cf86bfef556348ac65e561e3123879f0e7566cca6d43a6ff5326f13df" [[package]] name = "napi-derive" -version = "2.14.1" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3619fa472d23cd5af94d63a2bae454a77a8863251f40230fbf59ce20eafa8a86" +checksum = "a0cca5738c6e81eb5ffd2c8ff2b4f05ece9c4c60c7e2b36cec6524492cf7f330" dependencies = [ "cfg-if", "convert_case 0.6.0", @@ -1848,9 +1859,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.54" +version = "1.0.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd3ea4b54020c73d591a49cd192f6334c5f37f71a63ead54dbc851fa991ef00" +checksum = "35960e5f33228192a9b661447d0dfe8f5a3790ff5b4058c4d67680ded4f65b91" dependencies = [ "convert_case 0.6.0", "once_cell", @@ -2066,9 +2077,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.57" +version = "0.10.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c" +checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" dependencies = [ "bitflags 2.4.1", "cfg-if", @@ -2087,7 +2098,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2098,18 +2109,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.1.5+3.1.3" +version = "300.1.6+3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491" +checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.93" +version = "0.9.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d" +checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" dependencies = [ "cc", "libc", @@ -2206,15 +2217,15 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" dependencies = [ "memchr", "thiserror", @@ -2223,9 +2234,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8" +checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" dependencies = [ "pest", "pest_generator", @@ -2233,22 +2244,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123a" +checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "pest_meta" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708d" +checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" dependencies = [ "once_cell", "pest", @@ -2359,7 +2370,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2406,7 +2417,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -2429,12 +2440,12 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "plist" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ "base64", - "indexmap 1.9.3", + "indexmap 2.1.0", "line-wrap", "quick-xml", "serde", @@ -2492,9 +2503,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] @@ -2510,9 +2521,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] @@ -2586,7 +2597,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", ] [[package]] @@ -2627,15 +2638,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.3.5" @@ -2656,12 +2658,12 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", + "getrandom 0.2.11", + "libredox", "thiserror", ] @@ -2731,17 +2733,16 @@ dependencies = [ [[package]] name = "ring" -version = "0.16.20" +version = "0.17.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866" dependencies = [ "cc", + "getrandom 0.2.11", "libc", - "once_cell", - "spin 0.5.2", + "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -2752,23 +2753,23 @@ checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" [[package]] name = "rpassword" -version = "7.2.0" +version = "7.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322" +checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f" dependencies = [ "libc", "rtoolbox", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "rtoolbox" -version = "0.0.1" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a" +checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e" dependencies = [ "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -2788,22 +2789,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.25" +version = "0.38.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e" +checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a" dependencies = [ "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", "ring", @@ -2813,9 +2814,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.101.6" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", "untrusted", @@ -2868,9 +2869,9 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" dependencies = [ "dyn-clone", "schemars_derive", @@ -2881,9 +2882,9 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" dependencies = [ "proc-macro2", "quote", @@ -2910,9 +2911,9 @@ dependencies = [ [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", "untrusted", @@ -2969,9 +2970,9 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.189" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] @@ -2988,13 +2989,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3019,9 +3020,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa 1.0.9", "ryu", @@ -3040,9 +3041,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -3069,7 +3070,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.0.2", + "indexmap 2.1.0", "serde", "serde_json", "serde_with_macros", @@ -3085,7 +3086,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3187,15 +3188,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -3203,20 +3204,14 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys 0.48.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -3272,15 +3267,15 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "sval" -version = "2.10.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55089b73dfa822e1eb6b635f8795215512cca94bfae11aee3a1a06228bc88bb" +checksum = "b15df12a8db7c216a04b4b438f90d50d5335cd38f161b56389c9f5c9d96d0873" [[package]] name = "sval_buffer" -version = "2.10.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df307823073d63f1fb126895439fead41afc493ea35d636cceedef9f6b32ba81" +checksum = "57e80556bc8acea0446e574ce542ad6114a76a0237f28a842bc01ca3ea98f479" dependencies = [ "sval", "sval_ref", @@ -3288,18 +3283,18 @@ dependencies = [ [[package]] name = "sval_dynamic" -version = "2.10.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f8e4c4d6d028d3cbff66c2bb3d98181d031d312b7df4550eea7142d7036f37" +checksum = "9d93d2259edb1d7b4316179f0a98c62e3ffc726f47ab200e07cfe382771f57b8" dependencies = [ "sval", ] [[package]] name = "sval_fmt" -version = "2.10.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad53f8eb502b0a3051fea001ae2e3723044699868ebfe06ea81b45545db392c2" +checksum = "532f7f882226f7a5a4656f5151224aaebf8217e0d539cb1595b831bace921343" dependencies = [ "itoa 1.0.9", "ryu", @@ -3308,9 +3303,9 @@ dependencies = [ [[package]] name = "sval_json" -version = "2.10.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f913253c9f6cd27645ba9a0b6788039b5d4338eae0833c64b42ef178168d2862" +checksum = "76e03bd8aa0ae6ee018f7ae95c9714577687a4415bd1a5f19b26e34695f7e072" dependencies = [ "itoa 1.0.9", "ryu", @@ -3319,18 +3314,18 @@ dependencies = [ [[package]] name = "sval_ref" -version = "2.10.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a9661412d06740ebe81512a527b3d9220460eb7685f4399232c0e670108cb7" +checksum = "75ed054f2fb8c2a0ab5d36c1ec57b412919700099fc5e32ad8e7a38b23e1a9e1" dependencies = [ "sval", ] [[package]] name = "sval_serde" -version = "2.10.1" +version = "2.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d077e98c1c8dfa466837ae0ec1e03c78138d42ac75662dac05e1bf0aebae20" +checksum = "7ff191c4ff05b67e3844c161021427646cde5d6624597958be158357d9200586" dependencies = [ "serde", "sval", @@ -3351,9 +3346,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", @@ -3481,7 +3476,7 @@ dependencies = [ "tauri-icns", "tauri-utils", "tokio", - "toml 0.8.2", + "toml 0.8.8", "toml_edit 0.21.0", "unicode-width", "ureq", @@ -3513,12 +3508,12 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "1.5.0" +version = "1.5.1" dependencies = [ "aes-gcm", "ctor", "dunce", - "getrandom 0.2.10", + "getrandom 0.2.11", "glob", "heck", "html5ever", @@ -3568,9 +3563,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" dependencies = [ "winapi-util", ] @@ -3583,32 +3578,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.49" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", -] - -[[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", + "syn 2.0.39", ] [[package]] @@ -3668,9 +3653,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ "backtrace", "bytes", @@ -3678,20 +3663,20 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.4", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3708,9 +3693,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -3734,14 +3719,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.2" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.20.2", + "toml_edit 0.21.0", ] [[package]] @@ -3759,20 +3744,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.2", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" -dependencies = [ - "indexmap 2.0.2", + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -3785,7 +3757,9 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ - "indexmap 2.0.2", + "indexmap 2.1.0", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -3820,9 +3794,9 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.39" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "log", "pin-project-lite", @@ -3929,15 +3903,15 @@ dependencies = [ [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ccd538d4a604753ebc2f17cd9946e89b77bf87f6a8e2309667c6f2e87855e3" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" dependencies = [ "base64", "flate2", @@ -3952,9 +3926,9 @@ dependencies = [ [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -3976,19 +3950,19 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.4.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "sha1_smol", ] [[package]] name = "value-bag" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3" +checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe" dependencies = [ "value-bag-serde1", "value-bag-sval2", @@ -3996,9 +3970,9 @@ dependencies = [ [[package]] name = "value-bag-serde1" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0b9f3feef403a50d4d67e9741a6d8fc688bcbb4e4f31bd4aab72cc690284394" +checksum = "07ba39dc791ecb35baad371a3fc04c6eab688c04937d2e0ac6c22b612c0357bf" dependencies = [ "erased-serde", "serde", @@ -4007,9 +3981,9 @@ dependencies = [ [[package]] name = "value-bag-sval2" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b24f4146b6f3361e91cbf527d1fb35e9376c3c0cef72ca5ec5af6d640fad7d" +checksum = "c3e06c10810a57bbf45778d023d432a50a1daa7d185991ae06bcfb6c654d0945" dependencies = [ "sval", "sval_buffer", @@ -4065,9 +4039,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4075,24 +4049,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if", "js-sys", @@ -4102,9 +4076,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4112,28 +4086,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -4141,9 +4115,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "weezl" @@ -4209,6 +4183,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -4391,9 +4374,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.17" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -4428,10 +4411,30 @@ dependencies = [ ] [[package]] -name = "zeroize" -version = "1.6.0" +name = "zerocopy" +version = "0.7.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "f43de342578a3a14a9314a2dab1942cbfcbe5686e1f91acdc513058063eafe18" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1012d89e3acb79fad7a799ce96866cfb8098b74638465ea1b1533d35900ca90" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" [[package]] name = "zip" From 327c7aec302cef64ee7b84dc43e2154907adf5df Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 21 Nov 2023 12:34:15 -0300 Subject: [PATCH 33/45] fix(ci): skip installing unnecessary deps (#8277) --- .github/workflows/publish-cli-js.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/publish-cli-js.yml b/.github/workflows/publish-cli-js.yml index 4a02dcbd4..ae5f860f6 100644 --- a/.github/workflows/publish-cli-js.yml +++ b/.github/workflows/publish-cli-js.yml @@ -297,14 +297,10 @@ jobs: - name: List packages run: ls -R . shell: bash - - name: Install system dependencies - run: | - apk add openssl-dev musl-dev glib-dev cairo-dev pkgconfig gdk-pixbuf-dev webkit2gtk-dev curl gtk+3.0-dev - name: Setup and run tests run: | yarn tauri --help ls -la - # TODO: fix this test: https://github.com/tauri-apps/tauri/runs/5145729140?check_suite_focus=true#step:9:704 #- name: Setup and run tests # run: | # rustup install stable From 777ddf434a966966dc8918322c1ec9ee3f822ee2 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Tue, 12 Dec 2023 12:17:03 +0200 Subject: [PATCH 34/45] fix(bundler): unset `NSISDIR` and `NSISCONFDIR` when running `makensis` (#8376) closes #8359 --- .changes/bundler-nsis-nsisdir.md | 5 +++++ tooling/bundler/src/bundle/windows/nsis.rs | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 .changes/bundler-nsis-nsisdir.md diff --git a/.changes/bundler-nsis-nsisdir.md b/.changes/bundler-nsis-nsisdir.md new file mode 100644 index 000000000..ecf8111b4 --- /dev/null +++ b/.changes/bundler-nsis-nsisdir.md @@ -0,0 +1,5 @@ +--- +'tauri-bundler': 'patch:bug' +--- + +Unset `NSISDIR` and `NSISCONFDIR` when running `makensis.exe` so it doesn't conflict with NSIS installed by the user. diff --git a/tooling/bundler/src/bundle/windows/nsis.rs b/tooling/bundler/src/bundle/windows/nsis.rs index 893630238..13299d6b8 100644 --- a/tooling/bundler/src/bundle/windows/nsis.rs +++ b/tooling/bundler/src/bundle/windows/nsis.rs @@ -457,6 +457,8 @@ fn build_nsis_app_installer( _ => "-V4", }) .arg(installer_nsi_path) + .env_remove("NSISDIR") + .env_remove("NSISCONFDIR") .current_dir(output_path) .piped() .context("error running makensis.exe")?; From 30adc8d45de92842cb0e29d90a7a2fa051285234 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Tue, 12 Dec 2023 12:17:11 +0200 Subject: [PATCH 35/45] ci: fix publish `@tauri-apps/api` to `latest` instead of `next` (#8371) * ci: fix publish `@tauri-apps/api` to `latest` instead of `next` closes #8335 * just remove tag --- tooling/api/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tooling/api/package.json b/tooling/api/package.json index b0e5389c2..3a3a2ea7a 100644 --- a/tooling/api/package.json +++ b/tooling/api/package.json @@ -28,7 +28,7 @@ "scripts": { "build": "rollup -c --configPlugin typescript", "npm-pack": "yarn build && cd ./dist && npm pack", - "npm-publish": "yarn build && cd ./dist && yarn publish --access public --loglevel silly --tag next", + "npm-publish": "yarn build && cd ./dist && yarn publish --access public --loglevel silly", "ts:check": "tsc -noEmit", "lint": "eslint --ext ts \"./src/**/*.ts\"", "lint:fix": "eslint --fix --ext ts \"./src/**/*.ts\"", From 5ff9d4592a6dd8fc93165012ef367d78ea06e4ce Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Wed, 13 Dec 2023 18:57:32 +0200 Subject: [PATCH 36/45] fix(bundler/nsis): only kill processes of current user (#8390) * fix(bundler/nsis): only kill processes of current user Co-authored-by: FabianLars-crabnebula * change file --------- Co-authored-by: FabianLars-crabnebula Co-authored-by: Amr Bashir --- .changes/bundler-nsis-process-current-user.md | 5 +++++ tooling/bundler/src/bundle/windows/nsis.rs | 4 ++-- .../src/bundle/windows/templates/installer.nsi | 12 ++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 .changes/bundler-nsis-process-current-user.md diff --git a/.changes/bundler-nsis-process-current-user.md b/.changes/bundler-nsis-process-current-user.md new file mode 100644 index 000000000..3029fdc4f --- /dev/null +++ b/.changes/bundler-nsis-process-current-user.md @@ -0,0 +1,5 @@ +--- +'tauri-bundler': 'patch:bug' +--- + +NSIS perUser installers will now only check if the app is running on the current user. \ No newline at end of file diff --git a/tooling/bundler/src/bundle/windows/nsis.rs b/tooling/bundler/src/bundle/windows/nsis.rs index 13299d6b8..86515081a 100644 --- a/tooling/bundler/src/bundle/windows/nsis.rs +++ b/tooling/bundler/src/bundle/windows/nsis.rs @@ -37,8 +37,8 @@ const NSIS_URL: &str = const NSIS_SHA1: &str = "057e83c7d82462ec394af76c87d06733605543d4"; const NSIS_APPLICATIONID_URL: &str = "https://github.com/tauri-apps/binary-releases/releases/download/nsis-plugins-v0/NSIS-ApplicationID.zip"; const NSIS_TAURI_UTILS: &str = - "https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.2.1/nsis_tauri_utils.dll"; -const NSIS_TAURI_UTILS_SHA1: &str = "53A7CFAEB6A4A9653D6D5FBFF02A3C3B8720130A"; + "https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.2.2/nsis_tauri_utils.dll"; +const NSIS_TAURI_UTILS_SHA1: &str = "16DF1D1A5B4D5DF3859447279C55BE36D4109DFB"; #[cfg(target_os = "windows")] const NSIS_REQUIRED_FILES: &[&str] = &[ diff --git a/tooling/bundler/src/bundle/windows/templates/installer.nsi b/tooling/bundler/src/bundle/windows/templates/installer.nsi index ddbd31ca9..05aecc5db 100644 --- a/tooling/bundler/src/bundle/windows/templates/installer.nsi +++ b/tooling/bundler/src/bundle/windows/templates/installer.nsi @@ -493,13 +493,21 @@ Section WebView2 SectionEnd !macro CheckIfAppIsRunning - nsis_tauri_utils::FindProcess "${MAINBINARYNAME}.exe" + !if "${INSTALLMODE}" == "currentUser" + nsis_tauri_utils::FindProcessCurrentUser "${MAINBINARYNAME}.exe" + !else + nsis_tauri_utils::FindProcess "${MAINBINARYNAME}.exe" + !endif Pop $R0 ${If} $R0 = 0 IfSilent kill 0 ${IfThen} $PassiveMode != 1 ${|} MessageBox MB_OKCANCEL "$(appRunningOkKill)" IDOK kill IDCANCEL cancel ${|} kill: - nsis_tauri_utils::KillProcess "${MAINBINARYNAME}.exe" + !if "${INSTALLMODE}" == "currentUser" + nsis_tauri_utils::KillProcessCurrentUser "${MAINBINARYNAME}.exe" + !else + nsis_tauri_utils::KillProcess "${MAINBINARYNAME}.exe" + !endif Pop $R0 Sleep 500 ${If} $R0 = 0 From f9c97b7e5b05dfdf79eae2cb9b63f55c9184d82f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 14:43:54 -0300 Subject: [PATCH 37/45] Apply Version Updates From Current Changes (v1) (#8377) Co-authored-by: amrbashir --- .changes/bundler-nsis-nsisdir.md | 5 ----- .changes/bundler-nsis-process-current-user.md | 5 ----- tooling/bundler/CHANGELOG.md | 7 +++++++ tooling/bundler/Cargo.toml | 2 +- tooling/cli/CHANGELOG.md | 6 ++++++ tooling/cli/Cargo.lock | 4 ++-- tooling/cli/Cargo.toml | 4 ++-- tooling/cli/metadata.json | 2 +- tooling/cli/node/CHANGELOG.md | 6 ++++++ tooling/cli/node/package.json | 2 +- 10 files changed, 26 insertions(+), 17 deletions(-) delete mode 100644 .changes/bundler-nsis-nsisdir.md delete mode 100644 .changes/bundler-nsis-process-current-user.md diff --git a/.changes/bundler-nsis-nsisdir.md b/.changes/bundler-nsis-nsisdir.md deleted file mode 100644 index ecf8111b4..000000000 --- a/.changes/bundler-nsis-nsisdir.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'tauri-bundler': 'patch:bug' ---- - -Unset `NSISDIR` and `NSISCONFDIR` when running `makensis.exe` so it doesn't conflict with NSIS installed by the user. diff --git a/.changes/bundler-nsis-process-current-user.md b/.changes/bundler-nsis-process-current-user.md deleted file mode 100644 index 3029fdc4f..000000000 --- a/.changes/bundler-nsis-process-current-user.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'tauri-bundler': 'patch:bug' ---- - -NSIS perUser installers will now only check if the app is running on the current user. \ No newline at end of file diff --git a/tooling/bundler/CHANGELOG.md b/tooling/bundler/CHANGELOG.md index bf2538d06..be604754e 100644 --- a/tooling/bundler/CHANGELOG.md +++ b/tooling/bundler/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[1.4.7] + +### Bug Fixes + +- [`777ddf43`](https://www.github.com/tauri-apps/tauri/commit/777ddf434a966966dc8918322c1ec9ee3f822ee2)([#8376](https://www.github.com/tauri-apps/tauri/pull/8376)) Unset `NSISDIR` and `NSISCONFDIR` when running `makensis.exe` so it doesn't conflict with NSIS installed by the user. +- [`5ff9d459`](https://www.github.com/tauri-apps/tauri/commit/5ff9d4592a6dd8fc93165012ef367d78ea06e4ce)([#8390](https://www.github.com/tauri-apps/tauri/pull/8390)) NSIS perUser installers will now only check if the app is running on the current user. + ## \[1.4.6] ### Bug Fixes diff --git a/tooling/bundler/Cargo.toml b/tooling/bundler/Cargo.toml index 6c3b0cc40..670a90841 100644 --- a/tooling/bundler/Cargo.toml +++ b/tooling/bundler/Cargo.toml @@ -2,7 +2,7 @@ workspace = { } [package] name = "tauri-bundler" -version = "1.4.6" +version = "1.4.7" authors = [ "George Burton ", "Tauri Programme within The Commons Conservancy" diff --git a/tooling/cli/CHANGELOG.md b/tooling/cli/CHANGELOG.md index 4f48f5d97..44909a716 100644 --- a/tooling/cli/CHANGELOG.md +++ b/tooling/cli/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[1.5.8] + +### Dependencies + +- Upgraded to `tauri-bundler@1.4.7` + ## \[1.5.7] ### Bug Fixes diff --git a/tooling/cli/Cargo.lock b/tooling/cli/Cargo.lock index 0a9f0e0a5..16ebdd6c4 100644 --- a/tooling/cli/Cargo.lock +++ b/tooling/cli/Cargo.lock @@ -3395,7 +3395,7 @@ dependencies = [ [[package]] name = "tauri-bundler" -version = "1.4.6" +version = "1.4.7" dependencies = [ "anyhow", "ar", @@ -3435,7 +3435,7 @@ dependencies = [ [[package]] name = "tauri-cli" -version = "1.5.7" +version = "1.5.8" dependencies = [ "anyhow", "axum", diff --git a/tooling/cli/Cargo.toml b/tooling/cli/Cargo.toml index c8cbb2555..875a44a4b 100644 --- a/tooling/cli/Cargo.toml +++ b/tooling/cli/Cargo.toml @@ -3,7 +3,7 @@ members = [ "node" ] [package] name = "tauri-cli" -version = "1.5.7" +version = "1.5.8" authors = [ "Tauri Programme within The Commons Conservancy" ] edition = "2021" rust-version = "1.60" @@ -42,7 +42,7 @@ path = "src/main.rs" clap_complete = "4" clap = { version = "4.4", features = [ "derive" ] } anyhow = "1.0" -tauri-bundler = { version = "1.4.6", path = "../bundler", default-features = false } +tauri-bundler = { version = "1.4.7", path = "../bundler", default-features = false } colored = "2.0" once_cell = "1" serde = { version = "1.0", features = [ "derive" ] } diff --git a/tooling/cli/metadata.json b/tooling/cli/metadata.json index 09915989d..55dad6265 100644 --- a/tooling/cli/metadata.json +++ b/tooling/cli/metadata.json @@ -1,6 +1,6 @@ { "cli.js": { - "version": "1.5.7", + "version": "1.5.8", "node": ">= 10.0.0" }, "tauri": "1.5.3", diff --git a/tooling/cli/node/CHANGELOG.md b/tooling/cli/node/CHANGELOG.md index 2104711a7..8e3b07879 100644 --- a/tooling/cli/node/CHANGELOG.md +++ b/tooling/cli/node/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[1.5.8] + +### Dependencies + +- Upgraded to `tauri-cli@1.5.8` + ## \[1.5.7] ### Bug Fixes diff --git a/tooling/cli/node/package.json b/tooling/cli/node/package.json index 9338a4cf4..a2dfd77ce 100644 --- a/tooling/cli/node/package.json +++ b/tooling/cli/node/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/cli", - "version": "1.5.7", + "version": "1.5.8", "description": "Command line interface for building Tauri apps", "funding": { "type": "opencollective", From c1bc4d2948479615211cbd3a10c0af36e1a19e77 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Thu, 14 Dec 2023 14:20:52 +0200 Subject: [PATCH 38/45] chore(cli/help): mention the need for a second `--` in `tauri dev` (#8388) * chore(cli/help): mention the need for a second `--` in `tauri dev` ref: https://github.com/tauri-apps/tauri/issues/8382#issuecomment-1854016310 * add example to clarify [skip ci] --------- Co-authored-by: Lucas Nogueira --- tooling/cli/src/build.rs | 2 +- tooling/cli/src/dev.rs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tooling/cli/src/build.rs b/tooling/cli/src/build.rs index 7cbfea4b8..b3e5bf692 100644 --- a/tooling/cli/src/build.rs +++ b/tooling/cli/src/build.rs @@ -53,7 +53,7 @@ pub struct Options { /// JSON string or path to JSON file to merge with tauri.conf.json #[clap(short, long)] pub config: Option, - /// Command line arguments passed to the runner + /// Command line arguments passed to the runner. Use `--` to explicitly mark the start of the arguments. pub args: Vec, /// Skip prompting for values #[clap(long)] diff --git a/tooling/cli/src/dev.rs b/tooling/cli/src/dev.rs index b0bae7157..67a048e74 100644 --- a/tooling/cli/src/dev.rs +++ b/tooling/cli/src/dev.rs @@ -56,7 +56,9 @@ pub struct Options { /// Run the code in release mode #[clap(long = "release")] pub release_mode: bool, - /// Command line arguments passed to the runner. Arguments after `--` are passed to the application. + /// Command line arguments passed to the runner. + /// Use `--` to explicitly mark the start of the arguments. Arguments after a second `--` are passed to the application + /// e.g. `tauri dev -- [runnerArgs] -- [appArgs]`. pub args: Vec, /// Disable the file watcher #[clap(long)] From 3c371aa8ee4032998f859b570702e81e26e77c6c Mon Sep 17 00:00:00 2001 From: Alexandre Dang <124160233+vdang-crabnebula@users.noreply.github.com> Date: Thu, 14 Dec 2023 15:52:45 +0100 Subject: [PATCH 39/45] feat(core): add test::test::get_ipc_response, closes #8199 (#8228) * feat(core): Add additional functions to the * Add documentation and cleanup the code * Improve and add tests to helper functions * Clean unecessary code and correct tests * Make `Ipc` and `IpcKey` public * Open `Ipc` with public functions * Update core/tauri/src/test/mod.rs Co-authored-by: Lucas Fernandes Nogueira * cleanup, change file --------- Co-authored-by: Lucas Fernandes Nogueira Co-authored-by: Lucas Nogueira --- .changes/get-ipc-response-test.md | 5 ++ core/tauri/src/test/mod.rs | 113 +++++++++++++++++++++--------- 2 files changed, 84 insertions(+), 34 deletions(-) create mode 100644 .changes/get-ipc-response-test.md diff --git a/.changes/get-ipc-response-test.md b/.changes/get-ipc-response-test.md new file mode 100644 index 000000000..9cd3ce1d2 --- /dev/null +++ b/.changes/get-ipc-response-test.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:enhance +--- + +Added `test::get_ipc_response`. diff --git a/core/tauri/src/test/mod.rs b/core/tauri/src/test/mod.rs index 3138d56fb..38c651231 100644 --- a/core/tauri/src/test/mod.rs +++ b/core/tauri/src/test/mod.rs @@ -27,7 +27,9 @@ //! } //! //! fn main() { -//! let app = create_app(tauri::Builder::default()); +//! // Use `tauri::Builder::default()` to use the default runtime rather than the `MockRuntime`; +//! // let app = create_app(tauri::Builder::default()); +//! let app = create_app(tauri::test::mock_builder()); //! // app.run(|_handle, _event| {}); //! } //! @@ -59,6 +61,7 @@ mod mock_runtime; pub use mock_runtime::*; +use serde::de::DeserializeOwned; use serde::Serialize; use serde_json::Value as JsonValue; @@ -82,9 +85,12 @@ use tauri_utils::{ config::{CliConfig, Config, PatternKind, TauriConfig}, }; +/// A key for an [`Ipc`] call. #[derive(Eq, PartialEq)] struct IpcKey { + /// callback callback: CallbackFn, + /// error callback error: CallbackFn, } @@ -95,6 +101,7 @@ impl Hash for IpcKey { } } +/// Structure to retrieve result of a Tauri command struct Ipc(Mutex>>>); /// An empty [`Assets`] implementation. @@ -227,35 +234,27 @@ pub fn mock_app() -> App { /// .expect("failed to build app") /// } /// +/// use tauri::Manager; +/// use tauri::test::mock_builder; /// fn main() { -/// let app = create_app(tauri::Builder::default()); -/// // app.run(|_handle, _event| {});} -/// } +/// // app createion with a `MockRuntime` +/// let app = create_app(mock_builder()); +/// let window = app.get_window("main").unwrap(); /// -/// //#[cfg(test)] -/// mod tests { -/// use tauri::Manager; -/// -/// //#[cfg(test)] -/// fn something() { -/// let app = super::create_app(tauri::test::mock_builder()); -/// let window = app.get_window("main").unwrap(); -/// -/// // run the `ping` command and assert it returns `pong` -/// tauri::test::assert_ipc_response( -/// &window, -/// tauri::InvokePayload { -/// cmd: "ping".into(), -/// tauri_module: None, -/// callback: tauri::api::ipc::CallbackFn(0), -/// error: tauri::api::ipc::CallbackFn(1), -/// inner: serde_json::Value::Null, -/// }, -/// // the expected response is a success with the "pong" payload -/// // we could also use Err("error message") here to ensure the command failed -/// Ok("pong") -/// ); -/// } +/// // run the `ping` command and assert it returns `pong` +/// tauri::test::assert_ipc_response( +/// &window, +/// tauri::InvokePayload { +/// cmd: "ping".into(), +/// tauri_module: None, +/// callback: tauri::api::ipc::CallbackFn(0), +/// error: tauri::api::ipc::CallbackFn(1), +/// inner: serde_json::Value::Null, +/// }, +/// // the expected response is a success with the "pong" payload +/// // we could also use Err("error message") here to ensure the command failed +/// Ok("pong") +/// ); /// } /// ``` pub fn assert_ipc_response( @@ -263,6 +262,54 @@ pub fn assert_ipc_response( payload: InvokePayload, expected: Result, ) { + assert_eq!( + get_ipc_response(window, payload), + expected + .map(|e| serde_json::to_value(e).unwrap()) + .map_err(|e| serde_json::to_value(e).unwrap()) + ); +} + +/// The application processes the command and stops. +/// +/// # Examples +/// +/// ```rust +/// +/// #[tauri::command] +/// fn ping() -> &'static str { +/// "pong" +/// } +/// +/// fn create_app(mut builder: tauri::Builder) -> tauri::App { +/// builder +/// .invoke_handler(tauri::generate_handler![ping]) +/// // remove the string argument on your app +/// .build(tauri::generate_context!("test/fixture/src-tauri/tauri.conf.json")) +/// .expect("failed to build app") +/// } +/// +/// use tauri::test::*; +/// use tauri::Manager; +/// let app = create_app(mock_builder()); +/// let window = app.get_window("main").unwrap(); +/// +/// // run the `ping` command and assert it returns `pong` +/// let res = tauri::test::get_ipc_response::( +/// &window, +/// tauri::InvokePayload { +/// cmd: "ping".into(), +/// tauri_module: None, +/// callback: tauri::api::ipc::CallbackFn(0), +/// error: tauri::api::ipc::CallbackFn(1), +/// inner: serde_json::Value::Null, +/// }); +/// assert_eq!(res, Ok("pong".into())) +/// ``` +pub fn get_ipc_response( + window: &Window, + payload: InvokePayload, +) -> Result { let callback = payload.callback; let error = payload.error; let ipc = window.state::(); @@ -270,12 +317,10 @@ pub fn assert_ipc_response( ipc.0.lock().unwrap().insert(IpcKey { callback, error }, tx); window.clone().on_message(payload).unwrap(); - assert_eq!( - rx.recv().unwrap(), - expected - .map(|e| serde_json::to_value(e).unwrap()) - .map_err(|e| serde_json::to_value(e).unwrap()) - ); + let res: Result = rx.recv().expect("Failed to receive result from command"); + res + .map(|v| serde_json::from_value(v).unwrap()) + .map_err(|e| serde_json::from_value(e).unwrap()) } #[cfg(test)] From 1c582a942e345a066b65620e4db9f688ec142bb9 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Thu, 14 Dec 2023 18:27:48 +0200 Subject: [PATCH 40/45] refactor(api): generate types next to modules (#8392) * refactor(api): generate types next to modules" this fixes an issue with `moduleResolution: node` * change file * Update api-module-resolution-node.md --- .changes/api-module-resolution-node.md | 5 +++ tooling/api/package.json | 9 ++++- tooling/api/rollup.config.ts | 47 +++----------------------- 3 files changed, 18 insertions(+), 43 deletions(-) create mode 100644 .changes/api-module-resolution-node.md diff --git a/.changes/api-module-resolution-node.md b/.changes/api-module-resolution-node.md new file mode 100644 index 000000000..26e96bf91 --- /dev/null +++ b/.changes/api-module-resolution-node.md @@ -0,0 +1,5 @@ +--- +"@tauri-apps/api": "patch:bug" +--- + +Fix a regression where typescript could not find types when using `"moduleResolution": "node"` diff --git a/tooling/api/package.json b/tooling/api/package.json index 3a3a2ea7a..235de4e0e 100644 --- a/tooling/api/package.json +++ b/tooling/api/package.json @@ -19,10 +19,17 @@ }, "homepage": "https://github.com/tauri-apps/tauri#readme", "type": "module", - "types": "./types/index.d.ts", "main": "./index.cjs", "module": "./index.js", "exports": { + ".": { + "import": "./index.js", + "require": "./index.cjs" + }, + "./*": { + "import": "./*.js", + "require": "./*.cjs" + }, "./package.json": "./package.json" }, "scripts": { diff --git a/tooling/api/rollup.config.ts b/tooling/api/rollup.config.ts index c440f7afa..ae1786d3d 100644 --- a/tooling/api/rollup.config.ts +++ b/tooling/api/rollup.config.ts @@ -7,14 +7,7 @@ import typescript from '@rollup/plugin-typescript' import terser from '@rollup/plugin-terser' import fg from 'fast-glob' import { basename, join } from 'path' -import { - writeFileSync, - copyFileSync, - opendirSync, - rmSync, - Dir, - readFileSync -} from 'fs' +import { copyFileSync, opendirSync, rmSync, Dir } from 'fs' import { fileURLToPath } from 'url' // cleanup dist dir @@ -45,7 +38,7 @@ export default defineConfig([ plugins: [ typescript({ declaration: true, - declarationDir: './dist/types', + declarationDir: './dist', rootDir: 'src' }), makeFlatPackageInDist() @@ -75,40 +68,10 @@ function makeFlatPackageInDist(): Plugin { return { name: 'makeFlatPackageInDist', writeBundle() { - // append our api modules to `exports` in `package.json` then write it to `./dist` - const pkg = JSON.parse(readFileSync('package.json', 'utf8')) - const mods = modules.map((p) => basename(p).split('.')[0]) - - const outputPkg = { - ...pkg, - devDependencies: {}, - exports: Object.assign( - {}, - ...mods.map((mod) => { - const exports: Record< - string, - { types: string; import: string; require: string } - > = {} - const key = mod === 'index' ? '.' : `./${mod}` - exports[key] = { - types: `./types/${mod}.d.ts`, - import: `./${mod}.js`, - require: `./${mod}.cjs` - } - return exports - }), - // if for some reason in the future we manually add something in the `exports` field - // this will ensure it doesn't get overwritten by the logic above - { ...(pkg.exports || {}) } - ) - } - writeFileSync( - 'dist/package.json', - JSON.stringify(outputPkg, undefined, 2) - ) - // copy necessary files like `CHANGELOG.md` , `README.md` and Licenses to `./dist` - fg.sync('(LICENSE*|*.md)').forEach((f) => copyFileSync(f, `dist/${f}`)) + fg.sync('(LICENSE*|*.md|package.json)').forEach((f) => + copyFileSync(f, `dist/${f}`) + ) } } } From 0d0501cb7b5e767c51a3697a148acfe84211a7ad Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Thu, 14 Dec 2023 13:41:20 -0300 Subject: [PATCH 41/45] refactor(clipboard): use arboard instead of tao closes #8177 (#8394) * refactor(clipboard): use arboard instead of tao closes #8177 * update api lock * add change file --- .changes/arboard.md | 5 + core/tauri-runtime-wry/Cargo.toml | 3 +- core/tauri-runtime-wry/src/clipboard.rs | 63 ++++-------- core/tauri-runtime-wry/src/lib.rs | 50 +--------- core/tauri-runtime/src/lib.rs | 3 + examples/api/src-tauri/Cargo.lock | 121 +++++++++++++++++++++++- 6 files changed, 151 insertions(+), 94 deletions(-) create mode 100644 .changes/arboard.md diff --git a/.changes/arboard.md b/.changes/arboard.md new file mode 100644 index 000000000..5a6aadb1f --- /dev/null +++ b/.changes/arboard.md @@ -0,0 +1,5 @@ +--- +"tauri-runtime-wry": patch:bug +--- + +Use `arboard` instead of `tao` clipboard implementation to prevent a crash. diff --git a/core/tauri-runtime-wry/Cargo.toml b/core/tauri-runtime-wry/Cargo.toml index f5601e432..98095a700 100644 --- a/core/tauri-runtime-wry/Cargo.toml +++ b/core/tauri-runtime-wry/Cargo.toml @@ -20,6 +20,7 @@ uuid = { version = "1", features = [ "v4" ] } rand = "0.8" raw-window-handle = "0.5" tracing = { version = "0.1", optional = true } +arboard = { version = "3", optional = true } [target."cfg(windows)".dependencies] webview2-com = "0.19.1" @@ -47,6 +48,6 @@ macos-private-api = [ ] objc-exception = [ "wry/objc-exception" ] global-shortcut = [ "tauri-runtime/global-shortcut" ] -clipboard = [ "tauri-runtime/clipboard" ] +clipboard = [ "tauri-runtime/clipboard", "arboard" ] linux-headers = [ "wry/linux-headers", "webkit2gtk/v2_36" ] tracing = [ "dep:tracing", "wry/tracing" ] diff --git a/core/tauri-runtime-wry/src/clipboard.rs b/core/tauri-runtime-wry/src/clipboard.rs index 428f1abb3..13f61c6f0 100644 --- a/core/tauri-runtime-wry/src/clipboard.rs +++ b/core/tauri-runtime-wry/src/clipboard.rs @@ -4,59 +4,36 @@ //! Clipboard implementation. -use crate::{getter, Context, Message}; - -use std::sync::{ - mpsc::{channel, Sender}, - Arc, Mutex, +use std::{ + fmt, + sync::{Arc, Mutex}, }; -use tauri_runtime::{ClipboardManager, Result, UserEvent}; -pub use wry::application::clipboard::Clipboard; +pub use arboard::Clipboard; +use tauri_runtime::{ClipboardManager, Result}; -#[derive(Debug, Clone)] -pub enum ClipboardMessage { - WriteText(String, Sender<()>), - ReadText(Sender>), +#[derive(Clone)] +pub struct ClipboardManagerWrapper { + pub clipboard: Arc>, } -#[derive(Debug, Clone)] -pub struct ClipboardManagerWrapper { - pub context: Context, +impl fmt::Debug for ClipboardManagerWrapper { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("ClipboardManagerWrapper").finish() + } } -// SAFETY: this is safe since the `Context` usage is guarded on `send_user_message`. -#[allow(clippy::non_send_fields_in_send_ty)] -unsafe impl Sync for ClipboardManagerWrapper {} - -impl ClipboardManager for ClipboardManagerWrapper { +impl ClipboardManager for ClipboardManagerWrapper { fn read_text(&self) -> Result> { - let (tx, rx) = channel(); - getter!(self, rx, Message::Clipboard(ClipboardMessage::ReadText(tx))) + Ok(self.clipboard.lock().unwrap().get_text().ok()) } fn write_text>(&mut self, text: V) -> Result<()> { - let (tx, rx) = channel(); - getter!( - self, - rx, - Message::Clipboard(ClipboardMessage::WriteText(text.into(), tx)) - )?; - Ok(()) - } -} - -pub fn handle_clipboard_message( - message: ClipboardMessage, - clipboard_manager: &Arc>, -) { - match message { - ClipboardMessage::WriteText(text, tx) => { - clipboard_manager.lock().unwrap().write_text(text); - tx.send(()).unwrap(); - } - ClipboardMessage::ReadText(tx) => tx - .send(clipboard_manager.lock().unwrap().read_text()) - .unwrap(), + self + .clipboard + .lock() + .unwrap() + .set_text(text.into()) + .map_err(|e| crate::Error::Clipboard(Box::new(e))) } } diff --git a/core/tauri-runtime-wry/src/lib.rs b/core/tauri-runtime-wry/src/lib.rs index 27f541838..e944917d4 100644 --- a/core/tauri-runtime-wry/src/lib.rs +++ b/core/tauri-runtime-wry/src/lib.rs @@ -175,8 +175,6 @@ pub(crate) fn send_user_message( webview_id_map: context.webview_id_map.clone(), #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager: context.main_thread.global_shortcut_manager.clone(), - #[cfg(feature = "clipboard")] - clipboard_manager: context.main_thread.clipboard_manager.clone(), windows: context.main_thread.windows.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: context.main_thread.system_tray_manager.clone(), @@ -276,8 +274,6 @@ pub struct DispatcherMainThreadContext { pub web_context: WebContextStore, #[cfg(all(desktop, feature = "global-shortcut"))] pub global_shortcut_manager: Rc>, - #[cfg(feature = "clipboard")] - pub clipboard_manager: Arc>, pub windows: Rc>>, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: SystemTrayManager, @@ -1213,8 +1209,6 @@ pub enum Message { ), #[cfg(all(desktop, feature = "global-shortcut"))] GlobalShortcut(GlobalShortcutMessage), - #[cfg(feature = "clipboard")] - Clipboard(ClipboardMessage), UserEvent(T), } @@ -1226,8 +1220,6 @@ impl Clone for Message { Self::Tray(i, m) => Self::Tray(*i, m.clone()), #[cfg(all(desktop, feature = "global-shortcut"))] Self::GlobalShortcut(m) => Self::GlobalShortcut(m.clone()), - #[cfg(feature = "clipboard")] - Self::Clipboard(m) => Self::Clipboard(m.clone()), Self::UserEvent(t) => Self::UserEvent(t.clone()), _ => unimplemented!(), } @@ -1829,7 +1821,7 @@ pub struct Wry { global_shortcut_manager_handle: GlobalShortcutManagerHandle, #[cfg(feature = "clipboard")] - clipboard_manager_handle: ClipboardManagerWrapper, + clipboard_manager_handle: ClipboardManagerWrapper, event_loop: EventLoop>, } @@ -1860,11 +1852,7 @@ impl fmt::Debug for Wry { ); #[cfg(feature = "clipboard")] - d.field( - "clipboard_manager", - &self.context.main_thread.clipboard_manager, - ) - .field("clipboard_manager_handle", &self.clipboard_manager_handle); + d.field("clipboard_manager_handle", &self.clipboard_manager_handle); d.finish() } @@ -1985,9 +1973,6 @@ impl Wry { #[cfg(all(desktop, feature = "global-shortcut"))] let global_shortcut_manager = Rc::new(Mutex::new(WryShortcutManager::new(&event_loop))); - #[cfg(feature = "clipboard")] - let clipboard_manager = Arc::new(Mutex::new(Clipboard::new())); - let windows = Rc::new(RefCell::new(HashMap::default())); let webview_id_map = WebviewIdStore::default(); @@ -2003,8 +1988,6 @@ impl Wry { web_context, #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager, - #[cfg(feature = "clipboard")] - clipboard_manager, windows, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager, @@ -2023,7 +2006,7 @@ impl Wry { #[cfg(feature = "clipboard")] #[allow(clippy::redundant_clone)] let clipboard_manager_handle = ClipboardManagerWrapper { - context: context.clone(), + clipboard: Arc::new(Mutex::new(Clipboard::new().unwrap())), }; Ok(Self { @@ -2056,7 +2039,7 @@ impl Runtime for Wry { type GlobalShortcutManager = GlobalShortcutManagerHandle; #[cfg(feature = "clipboard")] - type ClipboardManager = ClipboardManagerWrapper; + type ClipboardManager = ClipboardManagerWrapper; #[cfg(all(desktop, feature = "system-tray"))] type TrayHandler = SystemTrayHandle; @@ -2221,8 +2204,6 @@ impl Runtime for Wry { #[cfg(all(desktop, feature = "global-shortcut"))] let global_shortcut_manager_handle = self.global_shortcut_manager_handle.clone(); - #[cfg(feature = "clipboard")] - let clipboard_manager = self.context.main_thread.clipboard_manager.clone(); let mut iteration = RunIteration::default(); let proxy = self.event_loop.create_proxy(); @@ -2249,8 +2230,6 @@ impl Runtime for Wry { global_shortcut_manager: global_shortcut_manager.clone(), #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager_handle: &global_shortcut_manager_handle, - #[cfg(feature = "clipboard")] - clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), #[cfg(feature = "tracing")] @@ -2275,8 +2254,6 @@ impl Runtime for Wry { global_shortcut_manager: global_shortcut_manager.clone(), #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager_handle: &global_shortcut_manager_handle, - #[cfg(feature = "clipboard")] - clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), #[cfg(feature = "tracing")] @@ -2306,9 +2283,6 @@ impl Runtime for Wry { #[cfg(all(desktop, feature = "global-shortcut"))] let global_shortcut_manager_handle = self.global_shortcut_manager_handle.clone(); - #[cfg(feature = "clipboard")] - let clipboard_manager = self.context.main_thread.clipboard_manager.clone(); - let proxy = self.event_loop.create_proxy(); self.event_loop.run(move |event, event_loop, control_flow| { @@ -2326,8 +2300,6 @@ impl Runtime for Wry { global_shortcut_manager: global_shortcut_manager.clone(), #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager_handle: &global_shortcut_manager_handle, - #[cfg(feature = "clipboard")] - clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), #[cfg(feature = "tracing")] @@ -2351,8 +2323,6 @@ impl Runtime for Wry { global_shortcut_manager: global_shortcut_manager.clone(), #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager_handle: &global_shortcut_manager_handle, - #[cfg(feature = "clipboard")] - clipboard_manager: clipboard_manager.clone(), #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: system_tray_manager.clone(), #[cfg(feature = "tracing")] @@ -2372,8 +2342,6 @@ pub struct EventLoopIterationContext<'a, T: UserEvent> { pub global_shortcut_manager: Rc>, #[cfg(all(desktop, feature = "global-shortcut"))] pub global_shortcut_manager_handle: &'a GlobalShortcutManagerHandle, - #[cfg(feature = "clipboard")] - pub clipboard_manager: Arc>, #[cfg(all(desktop, feature = "system-tray"))] pub system_tray_manager: SystemTrayManager, #[cfg(feature = "tracing")] @@ -2385,8 +2353,6 @@ struct UserMessageContext { webview_id_map: WebviewIdStore, #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager: Rc>, - #[cfg(feature = "clipboard")] - clipboard_manager: Arc>, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager: SystemTrayManager, } @@ -2401,8 +2367,6 @@ fn handle_user_message( webview_id_map, #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager, - #[cfg(feature = "clipboard")] - clipboard_manager, windows, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager, @@ -2805,8 +2769,6 @@ fn handle_user_message( Message::GlobalShortcut(message) => { handle_global_shortcut_message(message, &global_shortcut_manager) } - #[cfg(feature = "clipboard")] - Message::Clipboard(message) => handle_clipboard_message(message, &clipboard_manager), Message::UserEvent(_) => (), } @@ -2831,8 +2793,6 @@ fn handle_event_loop( global_shortcut_manager, #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager_handle, - #[cfg(feature = "clipboard")] - clipboard_manager, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager, #[cfg(feature = "tracing")] @@ -3079,8 +3039,6 @@ fn handle_event_loop( webview_id_map, #[cfg(all(desktop, feature = "global-shortcut"))] global_shortcut_manager, - #[cfg(feature = "clipboard")] - clipboard_manager, windows, #[cfg(all(desktop, feature = "system-tray"))] system_tray_manager, diff --git a/core/tauri-runtime/src/lib.rs b/core/tauri-runtime/src/lib.rs index 0671fa253..9e961e863 100644 --- a/core/tauri-runtime/src/lib.rs +++ b/core/tauri-runtime/src/lib.rs @@ -252,6 +252,9 @@ pub enum Error { #[cfg(all(desktop, feature = "global-shortcut"))] #[error(transparent)] GlobalShortcut(Box), + #[cfg(all(desktop, feature = "clipboard"))] + #[error(transparent)] + Clipboard(Box), #[error("Invalid header name: {0}")] InvalidHeaderName(#[from] InvalidHeaderName), #[error("Invalid header value: {0}")] diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index 813d8098d..e14d16c96 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -134,6 +134,25 @@ dependencies = [ "window-shadows", ] +[[package]] +name = "arboard" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08" +dependencies = [ + "clipboard-win", + "core-graphics", + "image", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "winapi", + "x11rb", +] + [[package]] name = "ascii" version = "1.1.0" @@ -532,6 +551,17 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "clipboard-win" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + [[package]] name = "cocoa" version = "0.24.1" @@ -939,6 +969,16 @@ dependencies = [ "libc", ] +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + [[package]] name = "event-listener" version = "2.5.3" @@ -1240,6 +1280,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -1700,6 +1750,8 @@ dependencies = [ "color_quant", "num-rational", "num-traits", + "png", + "tiff", ] [[package]] @@ -1835,6 +1887,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + [[package]] name = "js-sys" version = "0.3.64" @@ -3377,6 +3435,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + [[package]] name = "string_cache" version = "0.8.7" @@ -3555,7 +3619,7 @@ checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5" [[package]] name = "tauri" -version = "1.5.2" +version = "1.5.3" dependencies = [ "anyhow", "base64 0.21.2", @@ -3660,7 +3724,7 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "1.4.1" +version = "1.4.2" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -3691,8 +3755,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "0.14.1" +version = "0.14.2" dependencies = [ + "arboard", "cocoa", "gtk", "percent-encoding", @@ -3709,7 +3774,7 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "1.5.0" +version = "1.5.1" dependencies = [ "aes-gcm", "brotli", @@ -3834,6 +3899,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tiff" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "time" version = "0.3.22" @@ -4405,6 +4481,12 @@ dependencies = [ "windows-metadata", ] +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + [[package]] name = "win7-notifications" version = "0.4.0" @@ -4440,6 +4522,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -4886,6 +4977,28 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "x11rb" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a" +dependencies = [ + "gethostname", + "nix", + "winapi", + "winapi-wsapoll", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc" +dependencies = [ + "nix", +] + [[package]] name = "xattr" version = "0.2.3" From e5cc72eb401e20ffd4da887a4f205e96faf98e13 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Mon, 18 Dec 2023 23:15:28 +0200 Subject: [PATCH 42/45] ci: fix msrv tests (#8409) * ci: remove `is-terminal` from crate pinning step * pin cross-beam * crossbeam-utils * image * linux-raw-sys * fix version * comon * ha? * tar * now? * rustix * kill me, kill me now * tar first??? * is-terminal * I am dying * remove rustix * image --- .github/workflows/test-core.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index a995e5267..65f768393 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -99,7 +99,6 @@ jobs: cargo update -p cargo_toml:0.15.3 --precise 0.15.2 cargo update -p zbus --precise 3.13.0 cargo update -p zbus_names --precise 2.5.0 - cargo update -p is-terminal --precise 0.4.7 cargo update -p colored --precise 2.0.2 cargo update -p tempfile --precise 3.6.0 cargo update -p serde_with:3.4.0 --precise 3.0.0 @@ -118,6 +117,12 @@ jobs: cargo update -p ignore --precise 0.4.18 cargo update -p regex --precise 1.9.6 cargo update -p globset --precise 0.4.13 + cargo update -p crossbeam-channel --precise 0.5.8 + cargo update -p crossbeam-utils --precise 0.8.16 + cargo update -p image --precise 0.24.4 + cargo update -p async-process --precise 1.7.0 + cargo update -p is-terminal --precise 0.4.7 + cargo update -p tar --precise 0.4.39 - name: test run: cargo test --target ${{ matrix.platform.target }} ${{ matrix.features.args }} From 50e9caad648f793d69a673224a447bd2f272cbb4 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Mon, 18 Dec 2023 23:17:39 +0200 Subject: [PATCH 43/45] ci: access cli release id directly (#8398) --- .../workflows/covector-version-or-publish-v1.yml | 16 ++-------------- .../workflows/covector-version-or-publish.yml | 16 ++-------------- 2 files changed, 4 insertions(+), 28 deletions(-) diff --git a/.github/workflows/covector-version-or-publish-v1.yml b/.github/workflows/covector-version-or-publish-v1.yml index 0b004e36c..78741cdca 100644 --- a/.github/workflows/covector-version-or-publish-v1.yml +++ b/.github/workflows/covector-version-or-publish-v1.yml @@ -115,19 +115,6 @@ jobs: repository: tauri-apps/tauri-docs event-type: update-docs - - name: Get `@tauri-apps/cli` release id - uses: actions/github-script@v6 - id: cliReleaseId - if: | - steps.covector.outputs.successfulPublish == 'true' && - contains(steps.covector.outputs.packagesPublished, '@tauri-apps/cli') - with: - result-encoding: string - script: | - const output = `${{ toJSON(steps.covector.outputs) }}`; - const [_, id] = /"-tauri-apps-cli-releaseId": "([0-9]+)"/g.exec(output); - return id; - - name: Trigger `@tauri-apps/cli` publishing workflow if: | steps.covector.outputs.successfulPublish == 'true' && @@ -137,7 +124,8 @@ jobs: token: ${{ secrets.ORG_TAURI_BOT_PAT }} repository: tauri-apps/tauri event-type: publish-js-cli - client-payload: '{"releaseId": "${{ steps.cliReleaseId.outputs.result }}" }' + client-payload: >- + {"releaseId": "${{ steps.covector.outputs['-tauri-apps-cli-releaseId'] }}" } - name: Trigger `tauri-cli` publishing workflow if: | diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index 895e2d48a..a18ca9633 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -115,19 +115,6 @@ jobs: repository: tauri-apps/tauri-docs event-type: update-docs - - name: Get `@tauri-apps/cli` release id - uses: actions/github-script@v6 - id: cliReleaseId - if: | - steps.covector.outputs.successfulPublish == 'true' && - contains(steps.covector.outputs.packagesPublished, '@tauri-apps/cli') - with: - result-encoding: string - script: | - const output = `${{ toJSON(steps.covector.outputs) }}`; - const [_, id] = /"-tauri-apps-cli-releaseId": "([0-9]+)"/g.exec(output); - return id; - - name: Trigger `@tauri-apps/cli` publishing workflow if: | steps.covector.outputs.successfulPublish == 'true' && @@ -137,7 +124,8 @@ jobs: token: ${{ secrets.ORG_TAURI_BOT_PAT }} repository: tauri-apps/tauri event-type: publish-js-cli - client-payload: '{"releaseId": "${{ steps.cliReleaseId.outputs.result }}" }' + client-payload: >- + {"releaseId": "${{ steps.covector.outputs['-tauri-apps-cli-releaseId'] }}" } - name: Trigger `tauri-cli` publishing workflow if: | From 9b230de7bc6690c2733f5324d50b999af1f7a6ef Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Mon, 18 Dec 2023 23:18:44 +0200 Subject: [PATCH 44/45] fix(utils/config): fix parsing `f64` values, closes #8252 (#8407) --- .changes/config-f64-deserialize.md | 5 +++++ core/tauri-utils/src/config.rs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changes/config-f64-deserialize.md diff --git a/.changes/config-f64-deserialize.md b/.changes/config-f64-deserialize.md new file mode 100644 index 000000000..bd2f145b0 --- /dev/null +++ b/.changes/config-f64-deserialize.md @@ -0,0 +1,5 @@ +--- +'tauri-utils': 'patch:bug' +--- + +Fix compile error when parsing config that includes float values. diff --git a/core/tauri-utils/src/config.rs b/core/tauri-utils/src/config.rs index 0a1e06f7a..87ede1b87 100644 --- a/core/tauri-utils/src/config.rs +++ b/core/tauri-utils/src/config.rs @@ -3214,7 +3214,7 @@ mod build { } else if num.is_f64() { // guaranteed f64 let num = num.as_f64().unwrap(); - quote! { #prefix::Number(#num.into()) } + quote! { #prefix::Number(::serde_json::Number::from_f64(#num).unwrap(/* safe to unwrap, guaranteed f64 */)) } } else { // invalid number quote! { #prefix::Null } From 50a3d170f242178d41fe7e8a3adf964541f6fe9c Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Tue, 19 Dec 2023 02:08:18 +0200 Subject: [PATCH 45/45] fix(core/dialog): reconstruct path using appropriate separator, closes #8074 (#8408) * fix(core/dialog): reconstruct path using appropraite separator, closes #8074 * Update dialog-window-forward-slash.md * Update dialog.rs * Update core/tauri/src/endpoints/dialog.rs --------- Co-authored-by: Lucas Fernandes Nogueira --- .changes/dialog-window-forward-slash.md | 5 +++++ core/tauri/src/endpoints/dialog.rs | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 .changes/dialog-window-forward-slash.md diff --git a/.changes/dialog-window-forward-slash.md b/.changes/dialog-window-forward-slash.md new file mode 100644 index 000000000..83fcda5eb --- /dev/null +++ b/.changes/dialog-window-forward-slash.md @@ -0,0 +1,5 @@ +--- +'tauri': 'patch:bug' +--- + +On Windows, fix `open` dialog `defaultPath`, when invoked from JS, not working if the path uses forward slash (`/`) diff --git a/core/tauri/src/endpoints/dialog.rs b/core/tauri/src/endpoints/dialog.rs index 137c8434d..f9f051477 100644 --- a/core/tauri/src/endpoints/dialog.rs +++ b/core/tauri/src/endpoints/dialog.rs @@ -301,6 +301,8 @@ fn set_default_path( mut dialog_builder: FileDialogBuilder, default_path: PathBuf, ) -> FileDialogBuilder { + // we need to adjust the separator on Windows: https://github.com/tauri-apps/tauri/issues/8074 + let default_path: PathBuf = default_path.components().collect(); if default_path.is_file() || !default_path.exists() { if let (Some(parent), Some(file_name)) = (default_path.parent(), default_path.file_name()) { if parent.components().count() > 0 {