diff --git a/.changes/add-total-transferred-field.md b/.changes/add-total-transferred-field.md
new file mode 100644
index 00000000..ac11352f
--- /dev/null
+++ b/.changes/add-total-transferred-field.md
@@ -0,0 +1,6 @@
+---
+"upload": "minor"
+"upload-js": "minor"
+---
+
+Added a new field `progressTotal` to track the total amount of data transferred during the upload/download process.
diff --git a/.changes/fix-inconsistent-webview-log-target.md b/.changes/fix-inconsistent-webview-log-target.md
new file mode 100644
index 00000000..16f96433
--- /dev/null
+++ b/.changes/fix-inconsistent-webview-log-target.md
@@ -0,0 +1,6 @@
+---
+'log-plugin': 'patch'
+'log-js': 'patch'
+---
+
+Make webview log target more consistent that it always starts with `webview`
diff --git a/.changes/fs-read-dir-broken-symlink.md b/.changes/fs-read-dir-broken-symlink.md
new file mode 100644
index 00000000..d1aa3d01
--- /dev/null
+++ b/.changes/fs-read-dir-broken-symlink.md
@@ -0,0 +1,7 @@
+---
+"fs": "patch"
+"fs-js": "patch"
+---
+
+Fix `readDir` function failing to read directories that contain broken symlinks.
+
diff --git a/Cargo.lock b/Cargo.lock
index 8dc5b710..c888bb6e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -377,7 +377,7 @@ version = "0.4.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "103db485efc3e41214fe4fda9f3dbeae2eb9082f48fd236e6095627a9422066e"
dependencies = [
- "brotli 7.0.0",
+ "brotli",
"flate2",
"futures-core",
"memchr",
@@ -466,7 +466,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -501,7 +501,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -549,7 +549,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471"
dependencies = [
"dirs 4.0.0",
- "thiserror",
+ "thiserror 1.0.64",
"winreg 0.10.1",
]
@@ -726,21 +726,10 @@ dependencies = [
"proc-macro-crate 2.0.2",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
"syn_derive",
]
-[[package]]
-name = "brotli"
-version = "6.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b"
-dependencies = [
- "alloc-no-stdlib",
- "alloc-stdlib",
- "brotli-decompressor",
-]
-
[[package]]
name = "brotli"
version = "7.0.0"
@@ -839,7 +828,7 @@ dependencies = [
"glib",
"libc",
"once_cell",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
@@ -882,7 +871,7 @@ dependencies = [
"semver",
"serde",
"serde_json",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
@@ -1379,7 +1368,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1389,7 +1378,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f"
dependencies = [
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1425,7 +1414,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1449,7 +1438,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1460,7 +1449,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1535,7 +1524,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1548,7 +1537,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustc_version",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1639,7 +1628,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1671,7 +1660,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -1850,7 +1839,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -2009,15 +1998,6 @@ dependencies = [
"miniz_oxide",
]
-[[package]]
-name = "fluent-uri"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d"
-dependencies = [
- "bitflags 1.3.2",
-]
-
[[package]]
name = "flume"
version = "0.11.0"
@@ -2062,7 +2042,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -2191,7 +2171,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -2419,7 +2399,7 @@ dependencies = [
"once_cell",
"pin-project-lite",
"smallvec",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
@@ -2455,7 +2435,7 @@ dependencies = [
"memchr",
"once_cell",
"smallvec",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
@@ -2469,7 +2449,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -2500,7 +2480,7 @@ dependencies = [
"objc2-app-kit",
"once_cell",
"serde",
- "thiserror",
+ "thiserror 1.0.64",
"windows-sys 0.59.0",
"x11-dl",
]
@@ -2576,7 +2556,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -3020,7 +3000,7 @@ dependencies = [
"stronghold-derive",
"stronghold-utils",
"stronghold_engine",
- "thiserror",
+ "thiserror 1.0.64",
"zeroize",
]
@@ -3107,7 +3087,7 @@ dependencies = [
"combine",
"jni-sys",
"log",
- "thiserror",
+ "thiserror 1.0.64",
"walkdir",
"windows-sys 0.45.0",
]
@@ -3135,23 +3115,22 @@ dependencies = [
[[package]]
name = "json-patch"
-version = "2.0.0"
+version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc"
+checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08"
dependencies = [
"jsonptr",
"serde",
"serde_json",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
name = "jsonptr"
-version = "0.4.7"
+version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627"
+checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70"
dependencies = [
- "fluent-uri",
"serde",
"serde_json",
]
@@ -3551,7 +3530,7 @@ dependencies = [
"once_cell",
"png",
"serde",
- "thiserror",
+ "thiserror 1.0.64",
"windows-sys 0.59.0",
]
@@ -3584,7 +3563,7 @@ dependencies = [
"ndk-sys",
"num_enum",
"raw-window-handle",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
@@ -3774,7 +3753,7 @@ dependencies = [
"proc-macro-crate 2.0.2",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -4089,7 +4068,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -4362,7 +4341,7 @@ dependencies = [
"phf_shared 0.11.2",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -4668,7 +4647,7 @@ dependencies = [
"rustc-hash",
"rustls",
"socket2",
- "thiserror",
+ "thiserror 1.0.64",
"tokio",
"tracing",
]
@@ -4685,7 +4664,7 @@ dependencies = [
"rustc-hash",
"rustls",
"slab",
- "thiserror",
+ "thiserror 1.0.64",
"tinyvec",
"tracing",
]
@@ -4833,7 +4812,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
dependencies = [
"getrandom 0.2.15",
"libredox",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
@@ -5240,7 +5219,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -5366,7 +5345,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -5377,7 +5356,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -5400,7 +5379,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -5451,7 +5430,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -5663,7 +5642,7 @@ checksum = "4ccbb212565d2dc177bc15ecb7b039d66c4490da892436a4eee5b394d620c9bc"
dependencies = [
"paste",
"specta-macros",
- "thiserror",
+ "thiserror 1.0.64",
]
[[package]]
@@ -5675,7 +5654,7 @@ dependencies = [
"Inflector",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -5754,7 +5733,7 @@ dependencies = [
"sha2",
"smallvec",
"sqlformat",
- "thiserror",
+ "thiserror 1.0.64",
"time",
"tokio",
"tokio-stream",
@@ -5773,7 +5752,7 @@ dependencies = [
"quote",
"sqlx-core",
"sqlx-macros-core",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -5796,7 +5775,7 @@ dependencies = [
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
- "syn 2.0.79",
+ "syn 2.0.87",
"tempfile",
"tokio",
"url",
@@ -5839,7 +5818,7 @@ dependencies = [
"smallvec",
"sqlx-core",
"stringprep",
- "thiserror",
+ "thiserror 1.0.64",
"time",
"tracing",
"whoami",
@@ -5878,7 +5857,7 @@ dependencies = [
"smallvec",
"sqlx-core",
"stringprep",
- "thiserror",
+ "thiserror 1.0.64",
"time",
"tracing",
"whoami",
@@ -5982,7 +5961,7 @@ dependencies = [
"nix 0.24.3",
"rand 0.8.5",
"serde",
- "thiserror",
+ "thiserror 1.0.64",
"windows 0.36.1",
"zeroize",
]
@@ -6011,7 +5990,7 @@ dependencies = [
"paste",
"serde",
"stronghold-runtime",
- "thiserror",
+ "thiserror 1.0.64",
"zeroize",
]
@@ -6051,9 +6030,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.79"
+version = "2.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590"
+checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
dependencies = [
"proc-macro2",
"quote",
@@ -6069,7 +6048,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -6126,9 +6105,9 @@ dependencies = [
[[package]]
name = "tao"
-version = "0.30.3"
+version = "0.30.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0dbbebe82d02044dfa481adca1550d6dd7bd16e086bc34fa0fbecceb5a63751"
+checksum = "0368f818393ddb38d84cf7446adbf343cca3896da7dd2c8c2311059c11cb1740"
dependencies = [
"bitflags 2.6.0",
"cocoa",
@@ -6171,7 +6150,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -6199,9 +6178,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tauri"
-version = "2.0.4"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44438500b50708bfc1e6083844e135d1b516325aae58710dcd8fb67e050ae87c"
+checksum = "e545de0a2dfe296fa67db208266cd397c5a55ae782da77973ef4c4fac90e9f2c"
dependencies = [
"anyhow",
"bytes",
@@ -6239,7 +6218,7 @@ dependencies = [
"tauri-runtime",
"tauri-runtime-wry",
"tauri-utils",
- "thiserror",
+ "thiserror 2.0.3",
"tokio",
"tray-icon",
"url",
@@ -6253,9 +6232,9 @@ dependencies = [
[[package]]
name = "tauri-build"
-version = "2.0.1"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "935f9b3c49b22b3e2e485a57f46d61cd1ae07b1cbb2ba87387a387caf2d8c4e7"
+checksum = "7bd2a4bcfaf5fb9f4be72520eefcb61ae565038f8ccba2a497d8c28f463b8c01"
dependencies = [
"anyhow",
"cargo_toml",
@@ -6277,12 +6256,12 @@ dependencies = [
[[package]]
name = "tauri-codegen"
-version = "2.0.1"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95d7443dd4f0b597704b6a14b964ee2ed16e99928d8e6292ae9825f09fbcd30e"
+checksum = "bf79faeecf301d3e969b1fae977039edb77a4c1f25cc0a961be298b54bff97cf"
dependencies = [
"base64 0.22.1",
- "brotli 6.0.0",
+ "brotli",
"ico",
"json-patch",
"plist",
@@ -6293,9 +6272,9 @@ dependencies = [
"serde",
"serde_json",
"sha2",
- "syn 2.0.79",
+ "syn 2.0.87",
"tauri-utils",
- "thiserror",
+ "thiserror 2.0.3",
"time",
"url",
"uuid",
@@ -6304,14 +6283,14 @@ dependencies = [
[[package]]
name = "tauri-macros"
-version = "2.0.1"
+version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d2c0963ccfc3f5194415f2cce7acc975942a8797fbabfb0aa1ed6f59326ae7f"
+checksum = "c52027c8c5afb83166dacddc092ee8fff50772f9646d461d8c33ee887e447a03"
dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
"tauri-codegen",
"tauri-utils",
]
@@ -6343,7 +6322,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6355,7 +6334,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6368,7 +6347,7 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6381,7 +6360,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6394,7 +6373,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6409,7 +6388,7 @@ dependencies = [
"tauri",
"tauri-plugin",
"tauri-utils",
- "thiserror",
+ "thiserror 2.0.3",
"url",
"windows-registry 0.3.0",
"windows-result 0.2.0",
@@ -6427,7 +6406,7 @@ dependencies = [
"tauri",
"tauri-plugin",
"tauri-plugin-fs",
- "thiserror",
+ "thiserror 2.0.3",
"url",
]
@@ -6447,7 +6426,7 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"url",
"uuid",
]
@@ -6462,7 +6441,7 @@ dependencies = [
"specta",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6475,7 +6454,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6488,7 +6467,7 @@ dependencies = [
"specta",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6505,7 +6484,7 @@ dependencies = [
"tauri",
"tauri-plugin",
"tauri-plugin-fs",
- "thiserror",
+ "thiserror 2.0.3",
"tokio",
"url",
"urlpattern",
@@ -6520,7 +6499,7 @@ dependencies = [
"serde",
"serde_json",
"tauri",
- "thiserror",
+ "thiserror 2.0.3",
"tiny_http",
]
@@ -6540,7 +6519,7 @@ dependencies = [
"swift-rs",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"time",
]
@@ -6554,7 +6533,7 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6572,7 +6551,7 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"time",
"url",
"win7-notifications",
@@ -6592,7 +6571,7 @@ dependencies = [
"sys-locale",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6606,7 +6585,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin-fs",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6619,7 +6598,7 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
@@ -6645,7 +6624,7 @@ dependencies = [
"shared_child",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"tokio",
]
@@ -6659,7 +6638,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin-deep-link",
- "thiserror",
+ "thiserror 2.0.3",
"windows-sys 0.59.0",
"zbus",
]
@@ -6676,7 +6655,7 @@ dependencies = [
"sqlx",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"time",
"tokio",
]
@@ -6691,7 +6670,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"tokio",
]
@@ -6712,7 +6691,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"zeroize",
]
@@ -6736,7 +6715,7 @@ dependencies = [
"tauri",
"tauri-plugin",
"tempfile",
- "thiserror",
+ "thiserror 2.0.3",
"time",
"tokio",
"url",
@@ -6757,7 +6736,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"tokio",
"tokio-util",
]
@@ -6774,7 +6753,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
"tokio",
"tokio-tungstenite",
]
@@ -6789,14 +6768,14 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror",
+ "thiserror 2.0.3",
]
[[package]]
name = "tauri-runtime"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8f437293d6f5e5dce829250f4dbdce4e0b52905e297a6689cc2963eb53ac728"
+checksum = "cce18d43f80d4aba3aa8a0c953bbe835f3d0f2370aca75e8dbb14bd4bab27958"
dependencies = [
"dpi",
"gtk",
@@ -6806,16 +6785,16 @@ dependencies = [
"serde",
"serde_json",
"tauri-utils",
- "thiserror",
+ "thiserror 2.0.3",
"url",
"windows 0.58.0",
]
[[package]]
name = "tauri-runtime-wry"
-version = "2.1.1"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1431602bcc71f2f840ad623915c9842ecc32999b867c4a787d975a17a9625cc6"
+checksum = "9f442a38863e10129ffe2cec7bd09c2dcf8a098a3a27801a476a304d5bb991d2"
dependencies = [
"gtk",
"http",
@@ -6839,18 +6818,19 @@ dependencies = [
[[package]]
name = "tauri-utils"
-version = "2.0.1"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c38b0230d6880cf6dd07b6d7dd7789a0869f98ac12146e0d18d1c1049215a045"
+checksum = "9271a88f99b4adea0dc71d0baca4505475a0bbd139fb135f62958721aaa8fe54"
dependencies = [
"aes-gcm",
- "brotli 6.0.0",
+ "brotli",
"cargo_metadata",
"ctor",
"dunce",
"getrandom 0.2.15",
"glob",
"html5ever",
+ "http",
"infer",
"json-patch",
"kuchikiki",
@@ -6868,7 +6848,7 @@ dependencies = [
"serde_with",
"serialize-to-javascript",
"swift-rs",
- "thiserror",
+ "thiserror 2.0.3",
"toml 0.8.2",
"url",
"urlpattern",
@@ -6942,7 +6922,16 @@ version = "1.0.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84"
dependencies = [
- "thiserror-impl",
+ "thiserror-impl 1.0.64",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa"
+dependencies = [
+ "thiserror-impl 2.0.3",
]
[[package]]
@@ -6953,7 +6942,18 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.87",
]
[[package]]
@@ -7063,7 +7063,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -7095,7 +7095,7 @@ checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f"
dependencies = [
"either",
"futures-util",
- "thiserror",
+ "thiserror 1.0.64",
"tokio",
]
@@ -7227,7 +7227,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -7256,7 +7256,7 @@ dependencies = [
"once_cell",
"png",
"serde",
- "thiserror",
+ "thiserror 1.0.64",
"windows-sys 0.59.0",
]
@@ -7289,7 +7289,7 @@ dependencies = [
"rustls",
"rustls-pki-types",
"sha1",
- "thiserror",
+ "thiserror 1.0.64",
"utf-8",
]
@@ -7610,7 +7610,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
"wasm-bindgen-shared",
]
@@ -7644,7 +7644,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -7827,7 +7827,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -7836,7 +7836,7 @@ version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886"
dependencies = [
- "thiserror",
+ "thiserror 1.0.64",
"windows 0.58.0",
"windows-core 0.58.0",
]
@@ -7987,7 +7987,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -7998,7 +7998,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -8009,7 +8009,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -8020,7 +8020,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -8365,12 +8365,13 @@ dependencies = [
[[package]]
name = "wry"
-version = "0.46.2"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fa1c8c760041c64ce6be99f83d6cb55fe3fcd85a1ad46d32895f6e65cee87ba"
+checksum = "553ca1ce149982123962fac2506aa75b8b76288779a77e72b12fa2fc34938647"
dependencies = [
"base64 0.22.1",
"block2",
+ "cookie",
"crossbeam-channel",
"dpi",
"dunce",
@@ -8394,7 +8395,8 @@ dependencies = [
"sha2",
"soup3",
"tao-macros",
- "thiserror",
+ "thiserror 1.0.64",
+ "url",
"webkit2gtk",
"webkit2gtk-sys",
"webview2-com",
@@ -8566,7 +8568,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -8587,7 +8589,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.79",
+ "syn 2.0.87",
]
[[package]]
@@ -8603,7 +8605,7 @@ dependencies = [
"flate2",
"indexmap 2.6.0",
"memchr",
- "thiserror",
+ "thiserror 1.0.64",
"zopfli",
]
diff --git a/Cargo.toml b/Cargo.toml
index a17d33ea..4143e048 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,12 +11,12 @@ resolver = "2"
[workspace.dependencies]
serde = { version = "1", features = ["derive"] }
log = "0.4"
-tauri = { version = "2.0.4", default-features = false }
-tauri-build = "2.0.1"
-tauri-plugin = "2.0.1"
-tauri-utils = "2.0.1"
+tauri = { version = "2", default-features = false }
+tauri-build = "2"
+tauri-plugin = "2"
+tauri-utils = "2"
serde_json = "1"
-thiserror = "1"
+thiserror = "2"
url = "2"
schemars = "0.8"
dunce = "1"
diff --git a/examples/api/package.json b/examples/api/package.json
index 693588b3..53b66b37 100644
--- a/examples/api/package.json
+++ b/examples/api/package.json
@@ -1,15 +1,16 @@
{
- "name": "svelte-app",
+ "name": "api",
"private": true,
"version": "2.0.2",
"type": "module",
"scripts": {
"dev": "vite --clearScreen false",
"build": "vite build",
- "serve": "vite preview"
+ "serve": "vite preview",
+ "tauri": "tauri"
},
"dependencies": {
- "@tauri-apps/api": "2.0.3",
+ "@tauri-apps/api": "2.1.1",
"@tauri-apps/plugin-barcode-scanner": "2.0.0",
"@tauri-apps/plugin-biometric": "2.0.0",
"@tauri-apps/plugin-cli": "2.0.0",
@@ -33,7 +34,7 @@
"@iconify-json/codicon": "^1.1.37",
"@iconify-json/ph": "^1.1.8",
"@sveltejs/vite-plugin-svelte": "^4.0.0",
- "@tauri-apps/cli": "2.0.4",
+ "@tauri-apps/cli": "2.1.0",
"@unocss/extractor-svelte": "^0.64.0",
"svelte": "^5.0.0",
"unocss": "^0.64.0",
diff --git a/examples/api/src-tauri/capabilities/mobile.json b/examples/api/src-tauri/capabilities/mobile.json
index 93d46ad2..da77f5e5 100644
--- a/examples/api/src-tauri/capabilities/mobile.json
+++ b/examples/api/src-tauri/capabilities/mobile.json
@@ -15,6 +15,10 @@
"geolocation:allow-check-permissions",
"geolocation:allow-request-permissions",
"geolocation:allow-watch-position",
- "geolocation:allow-get-current-position"
+ "geolocation:allow-get-current-position",
+ "haptics:allow-impact-feedback",
+ "haptics:allow-notification-feedback",
+ "haptics:allow-selection-feedback",
+ "haptics:allow-vibrate"
]
}
diff --git a/examples/api/src/App.svelte b/examples/api/src/App.svelte
index c5fcf55e..f93198c2 100644
--- a/examples/api/src/App.svelte
+++ b/examples/api/src/App.svelte
@@ -21,6 +21,7 @@
import Scanner from './views/Scanner.svelte'
import Biometric from './views/Biometric.svelte'
import Geolocation from './views/Geolocation.svelte'
+ import Haptics from './views/Haptics.svelte'
import { onMount, tick } from 'svelte'
import { ask } from '@tauri-apps/plugin-dialog'
@@ -130,6 +131,11 @@
label: 'Geolocation',
component: Geolocation,
icon: 'i-ph-map-pin'
+ },
+ isMobile && {
+ label: 'Haptics',
+ component: Haptics,
+ icon: 'i-ph-vibrate'
}
]
diff --git a/examples/api/src/views/Haptics.svelte b/examples/api/src/views/Haptics.svelte
new file mode 100644
index 00000000..9ddf15c1
--- /dev/null
+++ b/examples/api/src/views/Haptics.svelte
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Depending on your device settings for haptic feedback some of the buttons may
+ not work.
+
diff --git a/package.json b/package.json
index f1192e95..c6b9d7e6 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,8 @@
"build": "pnpm run -r --parallel --filter !plugins-workspace --filter !\"./plugins/*/examples/**\" --filter !\"./examples/*\" build",
"lint": "eslint .",
"format": "prettier --write .",
- "format:check": "prettier --check ."
+ "format:check": "prettier --check .",
+ "example:api:dev": "pnpm run --filter \"api\" tauri dev"
},
"devDependencies": {
"@eslint/js": "9.14.0",
@@ -20,10 +21,10 @@
"eslint-config-prettier": "9.1.0",
"eslint-plugin-security": "3.0.1",
"prettier": "3.3.3",
- "rollup": "4.24.4",
+ "rollup": "4.25.0",
"tslib": "2.8.1",
"typescript": "5.6.3",
- "typescript-eslint": "8.13.0"
+ "typescript-eslint": "8.14.0"
},
"resolutions": {
"semver": ">=7.5.2",
diff --git a/plugins/deep-link/api-iife.js b/plugins/deep-link/api-iife.js
index eba7152f..6d9e3e18 100644
--- a/plugins/deep-link/api-iife.js
+++ b/plugins/deep-link/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_DEEP_LINK__=function(e){"use strict";function n(e,n=!1){return window.__TAURI_INTERNALS__.transformCallback(e,n)}async function r(e,n={},r){return window.__TAURI_INTERNALS__.invoke(e,n,r)}var t;async function i(e,t,i){const a={kind:"Any"};return r("plugin:event|listen",{event:e,target:a,handler:n(t)}).then((n=>async()=>async function(e,n){await r("plugin:event|unlisten",{event:e,eventId:n})}(e,n)))}async function a(){return await r("plugin:deep-link|get_current")}return"function"==typeof SuppressedError&&SuppressedError,function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",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_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(t||(t={})),e.getCurrent=a,e.isRegistered=async function(e){return await r("plugin:deep-link|is_registered",{protocol:e})},e.onOpenUrl=async function(e){const n=await a();return n&&e(n),await i("deep-link://new-url",(n=>{e(n.payload)}))},e.register=async function(e){return await r("plugin:deep-link|register",{protocol:e})},e.unregister=async function(e){return await r("plugin:deep-link|unregister",{protocol:e})},e}({});Object.defineProperty(window.__TAURI__,"deepLink",{value:__TAURI_PLUGIN_DEEP_LINK__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_DEEP_LINK__=function(e){"use strict";function n(e,n=!1){return window.__TAURI_INTERNALS__.transformCallback(e,n)}async function r(e,n={},r){return window.__TAURI_INTERNALS__.invoke(e,n,r)}var t;async function i(e,t,i){const a={kind:"Any"};return r("plugin:event|listen",{event:e,target:a,handler:n(t)}).then((n=>async()=>async function(e,n){await r("plugin:event|unlisten",{event:e,eventId:n})}(e,n)))}return"function"==typeof SuppressedError&&SuppressedError,function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",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_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(t||(t={})),e.getCurrent=async function(){return await r("plugin:deep-link|get_current")},e.isRegistered=async function(e){return await r("plugin:deep-link|is_registered",{protocol:e})},e.onOpenUrl=async function(e){return await i("deep-link://new-url",(n=>{e(n.payload)}))},e.register=async function(e){return await r("plugin:deep-link|register",{protocol:e})},e.unregister=async function(e){return await r("plugin:deep-link|unregister",{protocol:e})},e}({});Object.defineProperty(window.__TAURI__,"deepLink",{value:__TAURI_PLUGIN_DEEP_LINK__})}
diff --git a/plugins/deep-link/examples/app/package.json b/plugins/deep-link/examples/app/package.json
index 3ec6e4ab..0e997a5c 100644
--- a/plugins/deep-link/examples/app/package.json
+++ b/plugins/deep-link/examples/app/package.json
@@ -10,11 +10,11 @@
"tauri": "tauri"
},
"dependencies": {
- "@tauri-apps/api": "2.0.3",
+ "@tauri-apps/api": "2.1.1",
"@tauri-apps/plugin-deep-link": "2.0.0"
},
"devDependencies": {
- "@tauri-apps/cli": "2.0.4",
+ "@tauri-apps/cli": "2.1.0",
"typescript": "^5.2.2",
"vite": "^5.4.7"
}
diff --git a/plugins/fs/api-iife.js b/plugins/fs/api-iife.js
index f1e5360b..e44a180b 100644
--- a/plugins/fs/api-iife.js
+++ b/plugins/fs/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_FS__=function(t){"use strict";function e(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function n(t,e,n,i,o){if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,n),n}var i,o,r,a,s,c;"function"==typeof SuppressedError&&SuppressedError;class f{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),o.set(this,0),r.set(this,{}),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:a})=>{if(a===e(this,o,"f")){n(this,o,a+1),e(this,i,"f").call(this,t);const s=Object.keys(e(this,r,"f"));if(s.length>0){let t=a+1;for(const n of s.sort()){if(parseInt(n)!==t)break;{const o=e(this,r,"f")[n];delete e(this,r,"f")[n],e(this,i,"f").call(this,o),t+=1}}n(this,o,t)}}else e(this,r,"f")[a.toString()]=t}))}set onmessage(t){n(this,i,t)}get onmessage(){return e(this,i,"f")}toJSON(){return`__CHANNEL__:${this.id}`}}async function l(t,e={},n){return window.__TAURI_INTERNALS__.invoke(t,e,n)}i=new WeakMap,o=new WeakMap,r=new WeakMap;class u{get rid(){return e(this,a,"f")}constructor(t){a.set(this,void 0),n(this,a,t)}async close(){return l("plugin:resources|close",{rid:this.rid})}}function p(t){return{isFile:t.isFile,isDirectory:t.isDirectory,isSymlink:t.isSymlink,size:t.size,mtime:null!==t.mtime?new Date(t.mtime):null,atime:null!==t.atime?new Date(t.atime):null,birthtime:null!==t.birthtime?new Date(t.birthtime):null,readonly:t.readonly,fileAttributes:t.fileAttributes,dev:t.dev,ino:t.ino,mode:t.mode,nlink:t.nlink,uid:t.uid,gid:t.gid,rdev:t.rdev,blksize:t.blksize,blocks:t.blocks}}a=new WeakMap,t.BaseDirectory=void 0,(s=t.BaseDirectory||(t.BaseDirectory={}))[s.Audio=1]="Audio",s[s.Cache=2]="Cache",s[s.Config=3]="Config",s[s.Data=4]="Data",s[s.LocalData=5]="LocalData",s[s.Document=6]="Document",s[s.Download=7]="Download",s[s.Picture=8]="Picture",s[s.Public=9]="Public",s[s.Video=10]="Video",s[s.Resource=11]="Resource",s[s.Temp=12]="Temp",s[s.AppConfig=13]="AppConfig",s[s.AppData=14]="AppData",s[s.AppLocalData=15]="AppLocalData",s[s.AppCache=16]="AppCache",s[s.AppLog=17]="AppLog",s[s.Desktop=18]="Desktop",s[s.Executable=19]="Executable",s[s.Font=20]="Font",s[s.Home=21]="Home",s[s.Runtime=22]="Runtime",s[s.Template=23]="Template",t.SeekMode=void 0,(c=t.SeekMode||(t.SeekMode={}))[c.Start=0]="Start",c[c.Current=1]="Current",c[c.End=2]="End";class w extends u{async read(t){if(0===t.byteLength)return 0;const e=await l("plugin:fs|read",{rid:this.rid,len:t.byteLength}),n=function(t){const e=new Uint8ClampedArray(t),n=e.byteLength;let i=0;for(let t=0;tt instanceof URL?t.toString():t)),options:i,onEvent:r});return()=>{h(a)}},t.watchImmediate=async function(t,e,n){const i={recursive:!1,...n,delayMs:null},o=Array.isArray(t)?t:[t];for(const t of o)if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const r=new f;r.onmessage=e;const a=await l("plugin:fs|watch",{paths:o.map((t=>t instanceof URL?t.toString():t)),options:i,onEvent:r});return()=>{h(a)}},t.writeFile=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");await l("plugin:fs|write_file",e,{headers:{path:encodeURIComponent(t instanceof URL?t.toString():t),options:JSON.stringify(n)}})},t.writeTextFile=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const i=new TextEncoder;await l("plugin:fs|write_text_file",i.encode(e),{headers:{path:encodeURIComponent(t instanceof URL?t.toString():t),options:JSON.stringify(n)}})},t}({});Object.defineProperty(window.__TAURI__,"fs",{value:__TAURI_PLUGIN_FS__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_FS__=function(t){"use strict";function e(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function n(t,e,n,i,o){if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,n),n}var i,o,r,a;"function"==typeof SuppressedError&&SuppressedError;const s="__TAURI_TO_IPC_KEY__";class c{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),o.set(this,0),r.set(this,{}),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:a})=>{if(a===e(this,o,"f")){n(this,o,a+1),e(this,i,"f").call(this,t);const s=Object.keys(e(this,r,"f"));if(s.length>0){let t=a+1;for(const n of s.sort()){if(parseInt(n)!==t)break;{const o=e(this,r,"f")[n];delete e(this,r,"f")[n],e(this,i,"f").call(this,o),t+=1}}n(this,o,t)}}else e(this,r,"f")[a.toString()]=t}))}set onmessage(t){n(this,i,t)}get onmessage(){return e(this,i,"f")}[(i=new WeakMap,o=new WeakMap,r=new WeakMap,s)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[s]()}}async function f(t,e={},n){return window.__TAURI_INTERNALS__.invoke(t,e,n)}class l{get rid(){return e(this,a,"f")}constructor(t){a.set(this,void 0),n(this,a,t)}async close(){return f("plugin:resources|close",{rid:this.rid})}}var u,p;function w(t){return{isFile:t.isFile,isDirectory:t.isDirectory,isSymlink:t.isSymlink,size:t.size,mtime:null!==t.mtime?new Date(t.mtime):null,atime:null!==t.atime?new Date(t.atime):null,birthtime:null!==t.birthtime?new Date(t.birthtime):null,readonly:t.readonly,fileAttributes:t.fileAttributes,dev:t.dev,ino:t.ino,mode:t.mode,nlink:t.nlink,uid:t.uid,gid:t.gid,rdev:t.rdev,blksize:t.blksize,blocks:t.blocks}}a=new WeakMap,t.BaseDirectory=void 0,(u=t.BaseDirectory||(t.BaseDirectory={}))[u.Audio=1]="Audio",u[u.Cache=2]="Cache",u[u.Config=3]="Config",u[u.Data=4]="Data",u[u.LocalData=5]="LocalData",u[u.Document=6]="Document",u[u.Download=7]="Download",u[u.Picture=8]="Picture",u[u.Public=9]="Public",u[u.Video=10]="Video",u[u.Resource=11]="Resource",u[u.Temp=12]="Temp",u[u.AppConfig=13]="AppConfig",u[u.AppData=14]="AppData",u[u.AppLocalData=15]="AppLocalData",u[u.AppCache=16]="AppCache",u[u.AppLog=17]="AppLog",u[u.Desktop=18]="Desktop",u[u.Executable=19]="Executable",u[u.Font=20]="Font",u[u.Home=21]="Home",u[u.Runtime=22]="Runtime",u[u.Template=23]="Template",t.SeekMode=void 0,(p=t.SeekMode||(t.SeekMode={}))[p.Start=0]="Start",p[p.Current=1]="Current",p[p.End=2]="End";class h extends l{async read(t){if(0===t.byteLength)return 0;const e=await f("plugin:fs|read",{rid:this.rid,len:t.byteLength}),n=function(t){const e=new Uint8ClampedArray(t),n=e.byteLength;let i=0;for(let t=0;tt instanceof URL?t.toString():t)),options:i,onEvent:r});return()=>{d(a)}},t.watchImmediate=async function(t,e,n){const i={recursive:!1,...n,delayMs:null},o=Array.isArray(t)?t:[t];for(const t of o)if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const r=new c;r.onmessage=e;const a=await f("plugin:fs|watch",{paths:o.map((t=>t instanceof URL?t.toString():t)),options:i,onEvent:r});return()=>{d(a)}},t.writeFile=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");await f("plugin:fs|write_file",e,{headers:{path:encodeURIComponent(t instanceof URL?t.toString():t),options:JSON.stringify(n)}})},t.writeTextFile=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const i=new TextEncoder;await f("plugin:fs|write_text_file",i.encode(e),{headers:{path:encodeURIComponent(t instanceof URL?t.toString():t),options:JSON.stringify(n)}})},t}({});Object.defineProperty(window.__TAURI__,"fs",{value:__TAURI_PLUGIN_FS__})}
diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts
index ed8749d7..dabfbc92 100644
--- a/plugins/fs/guest-js/index.ts
+++ b/plugins/fs/guest-js/index.ts
@@ -14,16 +14,29 @@
*
* The API has a scope configuration that forces you to restrict the paths that can be accessed using glob patterns.
*
- * The scope configuration is an array of glob patterns describing folder paths that are allowed.
- * For instance, this scope configuration only allows accessing files on the
- * *databases* folder of the {@link https://v2.tauri.app/reference/javascript/api/namespacepath/#appdatadir | `$APPDATA` directory}:
+ * The scope configuration is an array of glob patterns describing file/directory paths that are allowed.
+ * For instance, this scope configuration allows **all** enabled `fs` APIs to (only) access files in the
+ * *databases* directory of the {@link https://v2.tauri.app/reference/javascript/api/namespacepath/#appdatadir | `$APPDATA` directory}:
* ```json
* {
- * "plugins": {
- * "fs": {
- * "scope": ["$APPDATA/databases/*"]
+ * "permissions": [
+ * {
+ * "identifier": "fs:scope",
+ * "allow": [{ "path": "$APPDATA/databases/*" }]
* }
- * }
+ * ]
+ * }
+ * ```
+ *
+ * Scopes can also be applied to specific `fs` APIs by using the API's identifier instead of `fs:scope`:
+ * ```json
+ * {
+ * "permissions": [
+ * {
+ * "identifier": "fs:allow-exists",
+ * "allow": [{ "path": "$APPDATA/databases/*" }]
+ * }
+ * ]
* }
* ```
*
@@ -56,8 +69,6 @@
*
* Trying to execute any API with a URL not configured on the scope results in a promise rejection due to denied access.
*
- * Note that this scope applies to **all** APIs on this module.
- *
* @module
*/
diff --git a/plugins/fs/src/commands.rs b/plugins/fs/src/commands.rs
index 99eb5aa0..3b5cc44e 100644
--- a/plugins/fs/src/commands.rs
+++ b/plugins/fs/src/commands.rs
@@ -16,7 +16,7 @@ use std::{
borrow::Cow,
fs::File,
io::{BufReader, Lines, Read, Write},
- path::{Path, PathBuf},
+ path::PathBuf,
str::FromStr,
sync::Mutex,
time::{SystemTime, UNIX_EPOCH},
@@ -245,32 +245,12 @@ pub fn mkdir(
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct DirEntry {
- pub name: Option,
+ pub name: String,
pub is_directory: bool,
pub is_file: bool,
pub is_symlink: bool,
}
-fn read_dir_inner>(path: P) -> crate::Result> {
- let mut files_and_dirs: Vec = vec![];
- for entry in std::fs::read_dir(path)? {
- let path = entry?.path();
- let file_type = path.metadata()?.file_type();
- files_and_dirs.push(DirEntry {
- is_directory: file_type.is_dir(),
- is_file: file_type.is_file(),
- is_symlink: std::fs::symlink_metadata(&path)
- .map(|md| md.file_type().is_symlink())
- .unwrap_or(false),
- name: path
- .file_name()
- .map(|name| name.to_string_lossy())
- .map(|name| name.to_string()),
- });
- }
- Result::Ok(files_and_dirs)
-}
-
#[tauri::command]
pub async fn read_dir(
webview: Webview,
@@ -287,14 +267,37 @@ pub async fn read_dir(
options.as_ref().and_then(|o| o.base_dir),
)?;
- read_dir_inner(&resolved_path)
- .map_err(|e| {
- format!(
- "failed to read directory at path: {} with error: {e}",
- resolved_path.display()
- )
+ let entries = std::fs::read_dir(&resolved_path).map_err(|e| {
+ format!(
+ "failed to read directory at path: {} with error: {e}",
+ resolved_path.display()
+ )
+ })?;
+
+ let entries = entries
+ .filter_map(|entry| {
+ let entry = entry.ok()?;
+ let name = entry.file_name().into_string().ok()?;
+ let metadata = entry.file_type();
+ macro_rules! method_or_false {
+ ($method:ident) => {
+ if let Ok(metadata) = &metadata {
+ metadata.$method()
+ } else {
+ false
+ }
+ };
+ }
+ Some(DirEntry {
+ name,
+ is_file: method_or_false!(is_file),
+ is_directory: method_or_false!(is_dir),
+ is_symlink: method_or_false!(is_symlink),
+ })
})
- .map_err(Into::into)
+ .collect();
+
+ Ok(entries)
}
#[tauri::command]
diff --git a/plugins/geolocation/api-iife.js b/plugins/geolocation/api-iife.js
index 912c073e..5dcae251 100644
--- a/plugins/geolocation/api-iife.js
+++ b/plugins/geolocation/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_GEOLOCATION__=function(t){"use strict";function e(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function n(t,e,n,i,o){if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,n),n}var i,o,s;"function"==typeof SuppressedError&&SuppressedError;class r{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),o.set(this,0),s.set(this,{}),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:r})=>{if(r===e(this,o,"f")){n(this,o,r+1),e(this,i,"f").call(this,t);const a=Object.keys(e(this,s,"f"));if(a.length>0){let t=r+1;for(const n of a.sort()){if(parseInt(n)!==t)break;{const o=e(this,s,"f")[n];delete e(this,s,"f")[n],e(this,i,"f").call(this,o),t+=1}}n(this,o,t)}}else e(this,s,"f")[r.toString()]=t}))}set onmessage(t){n(this,i,t)}get onmessage(){return e(this,i,"f")}toJSON(){return`__CHANNEL__:${this.id}`}}async function a(t,e={},n){return window.__TAURI_INTERNALS__.invoke(t,e,n)}return i=new WeakMap,o=new WeakMap,s=new WeakMap,t.checkPermissions=async function(){return await async function(t){return a(`plugin:${t}|check_permissions`)}("geolocation")},t.clearWatch=async function(t){await a("plugin:geolocation|clear_watch",{channelId:t})},t.getCurrentPosition=async function(t){return await a("plugin:geolocation|get_current_position",{options:t})},t.requestPermissions=async function(t){return await a("plugin:geolocation|request_permissions",{permissions:t})},t.watchPosition=async function(t,e){const n=new r;return n.onmessage=t=>{"string"==typeof t?e(null,t):e(t)},await a("plugin:geolocation|watch_position",{options:t,channel:n}),n.id},t}({});Object.defineProperty(window.__TAURI__,"geolocation",{value:__TAURI_PLUGIN_GEOLOCATION__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_GEOLOCATION__=function(t){"use strict";function e(t,e,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(t):i?i.value:e.get(t)}function n(t,e,n,i,o){if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,n),n}var i,o,s;"function"==typeof SuppressedError&&SuppressedError;const r="__TAURI_TO_IPC_KEY__";class a{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),o.set(this,0),s.set(this,{}),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:r})=>{if(r===e(this,o,"f")){n(this,o,r+1),e(this,i,"f").call(this,t);const a=Object.keys(e(this,s,"f"));if(a.length>0){let t=r+1;for(const n of a.sort()){if(parseInt(n)!==t)break;{const o=e(this,s,"f")[n];delete e(this,s,"f")[n],e(this,i,"f").call(this,o),t+=1}}n(this,o,t)}}else e(this,s,"f")[r.toString()]=t}))}set onmessage(t){n(this,i,t)}get onmessage(){return e(this,i,"f")}[(i=new WeakMap,o=new WeakMap,s=new WeakMap,r)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[r]()}}async function c(t,e={},n){return window.__TAURI_INTERNALS__.invoke(t,e,n)}return t.checkPermissions=async function(){return await async function(t){return c(`plugin:${t}|check_permissions`)}("geolocation")},t.clearWatch=async function(t){await c("plugin:geolocation|clear_watch",{channelId:t})},t.getCurrentPosition=async function(t){return await c("plugin:geolocation|get_current_position",{options:t})},t.requestPermissions=async function(t){return await c("plugin:geolocation|request_permissions",{permissions:t})},t.watchPosition=async function(t,e){const n=new a;return n.onmessage=t=>{"string"==typeof t?e(null,t):e(t)},await c("plugin:geolocation|watch_position",{options:t,channel:n}),n.id},t}({});Object.defineProperty(window.__TAURI__,"geolocation",{value:__TAURI_PLUGIN_GEOLOCATION__})}
diff --git a/plugins/global-shortcut/api-iife.js b/plugins/global-shortcut/api-iife.js
index 67ec9e47..b78e4084 100644
--- a/plugins/global-shortcut/api-iife.js
+++ b/plugins/global-shortcut/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_GLOBAL_SHORTCUT__=function(t){"use strict";function e(t,e,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(t):s?s.value:e.get(t)}function r(t,e,r,s,n){if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,r),r}var s,n,i;"function"==typeof SuppressedError&&SuppressedError;class o{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,s.set(this,(()=>{})),n.set(this,0),i.set(this,{}),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:o})=>{if(o===e(this,n,"f")){r(this,n,o+1),e(this,s,"f").call(this,t);const a=Object.keys(e(this,i,"f"));if(a.length>0){let t=o+1;for(const r of a.sort()){if(parseInt(r)!==t)break;{const n=e(this,i,"f")[r];delete e(this,i,"f")[r],e(this,s,"f").call(this,n),t+=1}}r(this,n,t)}}else e(this,i,"f")[o.toString()]=t}))}set onmessage(t){r(this,s,t)}get onmessage(){return e(this,s,"f")}toJSON(){return`__CHANNEL__:${this.id}`}}async function a(t,e={},r){return window.__TAURI_INTERNALS__.invoke(t,e,r)}return s=new WeakMap,n=new WeakMap,i=new WeakMap,t.isRegistered=async function(t){return await a("plugin:global-shortcut|is_registered",{shortcut:t})},t.register=async function(t,e){const r=new o;return r.onmessage=e,await a("plugin:global-shortcut|register",{shortcuts:Array.isArray(t)?t:[t],handler:r})},t.unregister=async function(t){return await a("plugin:global-shortcut|unregister",{shortcuts:Array.isArray(t)?t:[t]})},t.unregisterAll=async function(){return await a("plugin:global-shortcut|unregister_all",{})},t}({});Object.defineProperty(window.__TAURI__,"globalShortcut",{value:__TAURI_PLUGIN_GLOBAL_SHORTCUT__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_GLOBAL_SHORTCUT__=function(t){"use strict";function e(t,e,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(t):s?s.value:e.get(t)}function r(t,e,r,s,n){if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,r),r}var s,n,i;"function"==typeof SuppressedError&&SuppressedError;const o="__TAURI_TO_IPC_KEY__";class a{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,s.set(this,(()=>{})),n.set(this,0),i.set(this,{}),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:o})=>{if(o===e(this,n,"f")){r(this,n,o+1),e(this,s,"f").call(this,t);const a=Object.keys(e(this,i,"f"));if(a.length>0){let t=o+1;for(const r of a.sort()){if(parseInt(r)!==t)break;{const n=e(this,i,"f")[r];delete e(this,i,"f")[r],e(this,s,"f").call(this,n),t+=1}}r(this,n,t)}}else e(this,i,"f")[o.toString()]=t}))}set onmessage(t){r(this,s,t)}get onmessage(){return e(this,s,"f")}[(s=new WeakMap,n=new WeakMap,i=new WeakMap,o)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[o]()}}async function _(t,e={},r){return window.__TAURI_INTERNALS__.invoke(t,e,r)}return t.isRegistered=async function(t){return await _("plugin:global-shortcut|is_registered",{shortcut:t})},t.register=async function(t,e){const r=new a;return r.onmessage=e,await _("plugin:global-shortcut|register",{shortcuts:Array.isArray(t)?t:[t],handler:r})},t.unregister=async function(t){return await _("plugin:global-shortcut|unregister",{shortcuts:Array.isArray(t)?t:[t]})},t.unregisterAll=async function(){return await _("plugin:global-shortcut|unregister_all",{})},t}({});Object.defineProperty(window.__TAURI__,"globalShortcut",{value:__TAURI_PLUGIN_GLOBAL_SHORTCUT__})}
diff --git a/plugins/log/Cargo.toml b/plugins/log/Cargo.toml
index ad7f6bb3..7b94e9a4 100644
--- a/plugins/log/Cargo.toml
+++ b/plugins/log/Cargo.toml
@@ -27,12 +27,12 @@ tauri-plugin = { workspace = true, features = ["build"] }
serde = { workspace = true }
serde_json = { workspace = true }
tauri = { workspace = true }
+thiserror = { workspace = true }
serde_repr = "0.1"
byte-unit = "5"
log = { workspace = true, features = ["kv_unstable"] }
time = { version = "0.3", features = ["formatting", "local-offset"] }
fern = "0.7"
-thiserror = "1"
[target."cfg(target_os = \"android\")".dependencies]
android_logger = "0.14"
diff --git a/plugins/log/api-iife.js b/plugins/log/api-iife.js
index 571b8566..47437526 100644
--- a/plugins/log/api-iife.js
+++ b/plugins/log/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_LOG__=function(e){"use strict";function n(e,n=!1){return window.__TAURI_INTERNALS__.transformCallback(e,n)}async function r(e,n={},r){return window.__TAURI_INTERNALS__.invoke(e,n,r)}var a,t;async function o(e,a,t){const o={kind:"Any"};return r("plugin:event|listen",{event:e,target:o,handler:n(a)}).then((n=>async()=>async function(e,n){await r("plugin:event|unlisten",{event:e,eventId:n})}(e,n)))}async function i(e,n,a){const t=(new Error).stack?.split("\n").map((e=>e.split("@"))),o=t?.filter((([e,n])=>e.length>0&&"[native code]"!==n)),{file:i,line:c,keyValues:u}=a??{};let l=o?.[0]?.filter((e=>e.length>0)).join("@");"Error"===l&&(l="webview::unknown"),await r("plugin:log|log",{level:e,message:n,location:l,file:i,line:c,keyValues:u})}async function c(e){return await o("log://log",(n=>{const{level:r}=n.payload;let{message:a}=n.payload;a=a.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),e({message:a,level:r})}))}return"function"==typeof SuppressedError&&SuppressedError,function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",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_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(a||(a={})),function(e){e[e.Trace=1]="Trace",e[e.Debug=2]="Debug",e[e.Info=3]="Info",e[e.Warn=4]="Warn",e[e.Error=5]="Error"}(t||(t={})),e.attachConsole=async function(){return await c((({level:e,message:n})=>{switch(e){case t.Trace:console.log(n);break;case t.Debug:console.debug(n);break;case t.Info:console.info(n);break;case t.Warn:console.warn(n);break;case t.Error:console.error(n);break;default:throw new Error(`unknown log level ${e}`)}}))},e.attachLogger=c,e.debug=async function(e,n){await i(t.Debug,e,n)},e.error=async function(e,n){await i(t.Error,e,n)},e.info=async function(e,n){await i(t.Info,e,n)},e.trace=async function(e,n){await i(t.Trace,e,n)},e.warn=async function(e,n){await i(t.Warn,e,n)},e}({});Object.defineProperty(window.__TAURI__,"log",{value:__TAURI_PLUGIN_LOG__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_LOG__=function(e){"use strict";function n(e,n=!1){return window.__TAURI_INTERNALS__.transformCallback(e,n)}async function r(e,n={},r){return window.__TAURI_INTERNALS__.invoke(e,n,r)}var a,t;async function o(e,a,t){const o={kind:"Any"};return r("plugin:event|listen",{event:e,target:o,handler:n(a)}).then((n=>async()=>async function(e,n){await r("plugin:event|unlisten",{event:e,eventId:n})}(e,n)))}async function i(e,n,a){const t=function(e){if(e){if(!e.startsWith("Error"))return e.split("\n").map((e=>e.split("@"))).filter((([e,n])=>e.length>0&&"[native code]"!==n))[2].filter((e=>e.length>0)).join("@");{const n=e.split("\n")[3].trim(),r=/at\s+(?.*?)\s+\((?.*?):(?\d+):(?\d+)\)/,a=n.match(r);if(a){const{functionName:e,fileName:n,lineNumber:r,columnNumber:t}=a.groups;return`${e}@${n}:${r}:${t}`}{const e=/at\s+(?.*?):(?\d+):(?\d+)/,r=n.match(e);if(r){const{fileName:e,lineNumber:n,columnNumber:a}=r.groups;return`@${e}:${n}:${a}`}}}}}((new Error).stack),{file:o,line:i,keyValues:u}=a??{};await r("plugin:log|log",{level:e,message:n,location:t,file:o,line:i,keyValues:u})}async function u(e){return await o("log://log",(n=>{const{level:r}=n.payload;let{message:a}=n.payload;a=a.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),e({message:a,level:r})}))}return"function"==typeof SuppressedError&&SuppressedError,function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",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_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(a||(a={})),function(e){e[e.Trace=1]="Trace",e[e.Debug=2]="Debug",e[e.Info=3]="Info",e[e.Warn=4]="Warn",e[e.Error=5]="Error"}(t||(t={})),e.attachConsole=async function(){return await u((({level:e,message:n})=>{switch(e){case t.Trace:console.log(n);break;case t.Debug:console.debug(n);break;case t.Info:console.info(n);break;case t.Warn:console.warn(n);break;case t.Error:console.error(n);break;default:throw new Error(`unknown log level ${e}`)}}))},e.attachLogger=u,e.debug=async function(e,n){await i(t.Debug,e,n)},e.error=async function(e,n){await i(t.Error,e,n)},e.info=async function(e,n){await i(t.Info,e,n)},e.trace=async function(e,n){await i(t.Trace,e,n)},e.warn=async function(e,n){await i(t.Warn,e,n)},e}({});Object.defineProperty(window.__TAURI__,"log",{value:__TAURI_PLUGIN_LOG__})}
diff --git a/plugins/log/guest-js/index.ts b/plugins/log/guest-js/index.ts
index bf9d7f98..6287f913 100644
--- a/plugins/log/guest-js/index.ts
+++ b/plugins/log/guest-js/index.ts
@@ -44,24 +44,78 @@ enum LogLevel {
Error
}
+function getCallerLocation(stack?: string) {
+ if (!stack) {
+ return
+ }
+
+ if (stack.startsWith('Error')) {
+ // Assume it's Chromium V8
+ //
+ // Error
+ // at baz (filename.js:10:15)
+ // at bar (filename.js:6:3)
+ // at foo (filename.js:2:3)
+ // at filename.js:13:1
+
+ const lines = stack.split('\n')
+ // Find the third line (caller's caller of the current location)
+ const callerLine = lines[3].trim()
+
+ const regex =
+ /at\s+(?.*?)\s+\((?.*?):(?\d+):(?\d+)\)/
+ const match = callerLine.match(regex)
+
+ if (match) {
+ const { functionName, fileName, lineNumber, columnNumber } =
+ match.groups as {
+ functionName: string
+ fileName: string
+ lineNumber: string
+ columnNumber: string
+ }
+ return `${functionName}@${fileName}:${lineNumber}:${columnNumber}`
+ } else {
+ // Handle cases where the regex does not match (e.g., last line without function name)
+ const regexNoFunction =
+ /at\s+(?.*?):(?\d+):(?\d+)/
+ const matchNoFunction = callerLine.match(regexNoFunction)
+ if (matchNoFunction) {
+ const { fileName, lineNumber, columnNumber } =
+ matchNoFunction.groups as {
+ fileName: string
+ lineNumber: string
+ columnNumber: string
+ }
+ return `@${fileName}:${lineNumber}:${columnNumber}`
+ }
+ }
+ } else {
+ // Assume it's Webkit JavaScriptCore, example:
+ //
+ // baz@filename.js:10:24
+ // bar@filename.js:6:6
+ // foo@filename.js:2:6
+ // global code@filename.js:13:4
+
+ const traces = stack.split('\n').map((line) => line.split('@'))
+ const filtered = traces.filter(([name, location]) => {
+ return name.length > 0 && location !== '[native code]'
+ })
+ // Find the third line (caller's caller of the current location)
+ return filtered[2].filter((v) => v.length > 0).join('@')
+ }
+}
+
async function log(
level: LogLevel,
message: string,
options?: LogOptions
): Promise {
- const traces = new Error().stack?.split('\n').map((line) => line.split('@'))
-
- const filtered = traces?.filter(([name, location]) => {
- return name.length > 0 && location !== '[native code]'
- })
+ const location = getCallerLocation(new Error().stack)
const { file, line, keyValues } = options ?? {}
- let location = filtered?.[0]?.filter((v) => v.length > 0).join('@')
- if (location === 'Error') {
- location = 'webview::unknown'
- }
-
await invoke('plugin:log|log', {
level,
message,
diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs
index 98035e4e..6df4e1c2 100644
--- a/plugins/log/src/lib.rs
+++ b/plugins/log/src/lib.rs
@@ -33,7 +33,7 @@ use tauri::{AppHandle, Emitter};
pub use fern;
use time::OffsetDateTime;
-pub const WEBVIEW_TARGET: &str = "Webview";
+pub const WEBVIEW_TARGET: &str = "webview";
#[cfg(target_os = "ios")]
mod ios {
@@ -230,22 +230,16 @@ fn log(
line: Option,
key_values: Option>,
) {
- let location = location.unwrap_or("webview");
-
let level = log::Level::from(level);
- let metadata = log::MetadataBuilder::new()
- .level(level)
- .target(WEBVIEW_TARGET)
- .build();
+ let target = if let Some(location) = location {
+ format!("{WEBVIEW_TARGET}:{location}")
+ } else {
+ WEBVIEW_TARGET.to_string()
+ };
let mut builder = RecordBuilder::new();
- builder
- .level(level)
- .metadata(metadata)
- .target(location)
- .file(file)
- .line(line);
+ builder.level(level).target(&target).file(file).line(line);
let key_values = key_values.unwrap_or_default();
let mut kv = HashMap::new();
@@ -380,8 +374,8 @@ impl Builder {
/// .clear_targets()
/// .targets([
/// Target::new(TargetKind::Webview),
- /// Target::new(TargetKind::LogDir { file_name: Some("webview".into()) }).filter(|metadata| metadata.target() == WEBVIEW_TARGET),
- /// Target::new(TargetKind::LogDir { file_name: Some("rust".into()) }).filter(|metadata| metadata.target() != WEBVIEW_TARGET),
+ /// Target::new(TargetKind::LogDir { file_name: Some("webview".into()) }).filter(|metadata| metadata.target().starts_with(WEBVIEW_TARGET)),
+ /// Target::new(TargetKind::LogDir { file_name: Some("rust".into()) }).filter(|metadata| !metadata.target().starts_with(WEBVIEW_TARGET)),
/// ]);
/// ```
pub fn targets(mut self, targets: impl IntoIterator- ) -> Self {
diff --git a/plugins/notification/api-iife.js b/plugins/notification/api-iife.js
index a78b2a6d..0d33ccac 100644
--- a/plugins/notification/api-iife.js
+++ b/plugins/notification/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_NOTIFICATION__=function(i){"use strict";function t(i,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?i!==t||!e:!t.has(i))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(i):e?e.value:t.get(i)}function n(i,t,n,e,o){if("function"==typeof t?i!==t||!o:!t.has(i))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(i,n),n}var e,o,a,r,c,s;"function"==typeof SuppressedError&&SuppressedError;class l{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,e.set(this,(()=>{})),o.set(this,0),a.set(this,{}),this.id=function(i,t=!1){return window.__TAURI_INTERNALS__.transformCallback(i,t)}((({message:i,id:r})=>{if(r===t(this,o,"f")){n(this,o,r+1),t(this,e,"f").call(this,i);const c=Object.keys(t(this,a,"f"));if(c.length>0){let i=r+1;for(const n of c.sort()){if(parseInt(n)!==i)break;{const o=t(this,a,"f")[n];delete t(this,a,"f")[n],t(this,e,"f").call(this,o),i+=1}}n(this,o,i)}}else t(this,a,"f")[r.toString()]=i}))}set onmessage(i){n(this,e,i)}get onmessage(){return t(this,e,"f")}toJSON(){return`__CHANNEL__:${this.id}`}}e=new WeakMap,o=new WeakMap,a=new WeakMap;class u{constructor(i,t,n){this.plugin=i,this.event=t,this.channelId=n}async unregister(){return d(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}}async function f(i,t,n){const e=new l;return e.onmessage=n,d(`plugin:${i}|registerListener`,{event:t,handler:e}).then((()=>new u(i,t,e.id)))}async function d(i,t={},n){return window.__TAURI_INTERNALS__.invoke(i,t,n)}i.ScheduleEvery=void 0,(r=i.ScheduleEvery||(i.ScheduleEvery={})).Year="year",r.Month="month",r.TwoWeeks="twoWeeks",r.Week="week",r.Day="day",r.Hour="hour",r.Minute="minute",r.Second="second";return i.Importance=void 0,(c=i.Importance||(i.Importance={}))[c.None=0]="None",c[c.Min=1]="Min",c[c.Low=2]="Low",c[c.Default=3]="Default",c[c.High=4]="High",i.Visibility=void 0,(s=i.Visibility||(i.Visibility={}))[s.Secret=-1]="Secret",s[s.Private=0]="Private",s[s.Public=1]="Public",i.Schedule=class{static at(i,t=!1,n=!1){return{at:{date:i,repeating:t,allowWhileIdle:n},interval:void 0,every:void 0}}static interval(i,t=!1){return{at:void 0,interval:{interval:i,allowWhileIdle:t},every:void 0}}static every(i,t,n=!1){return{at:void 0,interval:void 0,every:{interval:i,count:t,allowWhileIdle:n}}}},i.active=async function(){return await d("plugin:notification|get_active")},i.cancel=async function(i){await d("plugin:notification|cancel",{notifications:i})},i.cancelAll=async function(){await d("plugin:notification|cancel")},i.channels=async function(){return await d("plugin:notification|listChannels")},i.createChannel=async function(i){await d("plugin:notification|create_channel",{...i})},i.isPermissionGranted=async function(){return"default"!==window.Notification.permission?await Promise.resolve("granted"===window.Notification.permission):await d("plugin:notification|is_permission_granted")},i.onAction=async function(i){return await f("notification","actionPerformed",i)},i.onNotificationReceived=async function(i){return await f("notification","notification",i)},i.pending=async function(){return await d("plugin:notification|get_pending")},i.registerActionTypes=async function(i){await d("plugin:notification|register_action_types",{types:i})},i.removeActive=async function(i){await d("plugin:notification|remove_active",{notifications:i})},i.removeAllActive=async function(){await d("plugin:notification|remove_active")},i.removeChannel=async function(i){await d("plugin:notification|delete_channel",{id:i})},i.requestPermission=async function(){return await window.Notification.requestPermission()},i.sendNotification=function(i){"string"==typeof i?new window.Notification(i):new window.Notification(i.title,i)},i}({});Object.defineProperty(window.__TAURI__,"notification",{value:__TAURI_PLUGIN_NOTIFICATION__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_NOTIFICATION__=function(i){"use strict";function t(i,t,n,e){if("a"===n&&!e)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?i!==t||!e:!t.has(i))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?e:"a"===n?e.call(i):e?e.value:t.get(i)}function n(i,t,n,e,o){if("function"==typeof t?i!==t||!o:!t.has(i))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(i,n),n}var e,o,a;"function"==typeof SuppressedError&&SuppressedError;const r="__TAURI_TO_IPC_KEY__";class c{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,e.set(this,(()=>{})),o.set(this,0),a.set(this,{}),this.id=function(i,t=!1){return window.__TAURI_INTERNALS__.transformCallback(i,t)}((({message:i,id:r})=>{if(r===t(this,o,"f")){n(this,o,r+1),t(this,e,"f").call(this,i);const c=Object.keys(t(this,a,"f"));if(c.length>0){let i=r+1;for(const n of c.sort()){if(parseInt(n)!==i)break;{const o=t(this,a,"f")[n];delete t(this,a,"f")[n],t(this,e,"f").call(this,o),i+=1}}n(this,o,i)}}else t(this,a,"f")[r.toString()]=i}))}set onmessage(i){n(this,e,i)}get onmessage(){return t(this,e,"f")}[(e=new WeakMap,o=new WeakMap,a=new WeakMap,r)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[r]()}}class s{constructor(i,t,n){this.plugin=i,this.event=t,this.channelId=n}async unregister(){return u(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}}async function l(i,t,n){const e=new c;return e.onmessage=n,u(`plugin:${i}|registerListener`,{event:t,handler:e}).then((()=>new s(i,t,e.id)))}async function u(i,t={},n){return window.__TAURI_INTERNALS__.invoke(i,t,n)}var f,d,w;i.ScheduleEvery=void 0,(f=i.ScheduleEvery||(i.ScheduleEvery={})).Year="year",f.Month="month",f.TwoWeeks="twoWeeks",f.Week="week",f.Day="day",f.Hour="hour",f.Minute="minute",f.Second="second";return i.Importance=void 0,(d=i.Importance||(i.Importance={}))[d.None=0]="None",d[d.Min=1]="Min",d[d.Low=2]="Low",d[d.Default=3]="Default",d[d.High=4]="High",i.Visibility=void 0,(w=i.Visibility||(i.Visibility={}))[w.Secret=-1]="Secret",w[w.Private=0]="Private",w[w.Public=1]="Public",i.Schedule=class{static at(i,t=!1,n=!1){return{at:{date:i,repeating:t,allowWhileIdle:n},interval:void 0,every:void 0}}static interval(i,t=!1){return{at:void 0,interval:{interval:i,allowWhileIdle:t},every:void 0}}static every(i,t,n=!1){return{at:void 0,interval:void 0,every:{interval:i,count:t,allowWhileIdle:n}}}},i.active=async function(){return await u("plugin:notification|get_active")},i.cancel=async function(i){await u("plugin:notification|cancel",{notifications:i})},i.cancelAll=async function(){await u("plugin:notification|cancel")},i.channels=async function(){return await u("plugin:notification|listChannels")},i.createChannel=async function(i){await u("plugin:notification|create_channel",{...i})},i.isPermissionGranted=async function(){return"default"!==window.Notification.permission?await Promise.resolve("granted"===window.Notification.permission):await u("plugin:notification|is_permission_granted")},i.onAction=async function(i){return await l("notification","actionPerformed",i)},i.onNotificationReceived=async function(i){return await l("notification","notification",i)},i.pending=async function(){return await u("plugin:notification|get_pending")},i.registerActionTypes=async function(i){await u("plugin:notification|register_action_types",{types:i})},i.removeActive=async function(i){await u("plugin:notification|remove_active",{notifications:i})},i.removeAllActive=async function(){await u("plugin:notification|remove_active")},i.removeChannel=async function(i){await u("plugin:notification|delete_channel",{id:i})},i.requestPermission=async function(){return await window.Notification.requestPermission()},i.sendNotification=function(i){"string"==typeof i?new window.Notification(i):new window.Notification(i.title,i)},i}({});Object.defineProperty(window.__TAURI__,"notification",{value:__TAURI_PLUGIN_NOTIFICATION__})}
diff --git a/plugins/shell/api-iife.js b/plugins/shell/api-iife.js
index 25ba6d3e..ca3cc423 100644
--- a/plugins/shell/api-iife.js
+++ b/plugins/shell/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_SHELL__=function(e){"use strict";function t(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}function s(e,t,s,n,i){if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}var n,i,r;"function"==typeof SuppressedError&&SuppressedError;class o{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,n.set(this,(()=>{})),i.set(this,0),r.set(this,{}),this.id=function(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}((({message:e,id:o})=>{if(o===t(this,i,"f")){s(this,i,o+1),t(this,n,"f").call(this,e);const a=Object.keys(t(this,r,"f"));if(a.length>0){let e=o+1;for(const s of a.sort()){if(parseInt(s)!==e)break;{const i=t(this,r,"f")[s];delete t(this,r,"f")[s],t(this,n,"f").call(this,i),e+=1}}s(this,i,e)}}else t(this,r,"f")[o.toString()]=e}))}set onmessage(e){s(this,n,e)}get onmessage(){return t(this,n,"f")}toJSON(){return`__CHANNEL__:${this.id}`}}async function a(e,t={},s){return window.__TAURI_INTERNALS__.invoke(e,t,s)}n=new WeakMap,i=new WeakMap,r=new WeakMap;class h{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){const s=n=>{this.removeListener(e,s),t(n)};return this.addListener(e,s)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter((e=>e!==t))),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,t){if(e in this.eventListeners){const s=this.eventListeners[e];for(const e of s)e(t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){const s=n=>{this.removeListener(e,s),t(n)};return this.prependListener(e,s)}}class c{constructor(e){this.pid=e}async write(e){await a("plugin:shell|stdin_write",{pid:this.pid,buffer:e})}async kill(){await a("plugin:shell|kill",{cmd:"killChild",pid:this.pid})}}class l extends h{constructor(e,t=[],s){super(),this.stdout=new h,this.stderr=new h,this.program=e,this.args="string"==typeof t?[t]:t,this.options=s??{}}static create(e,t=[],s){return new l(e,t,s)}static sidecar(e,t=[],s){const n=new l(e,t,s);return n.options.sidecar=!0,n}async spawn(){const e=this.program,t=this.args,s=this.options;"object"==typeof t&&Object.freeze(t);const n=new o;return n.onmessage=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)}},await a("plugin:shell|spawn",{program:e,args:t,options:s,onEvent:n}).then((e=>new c(e)))}async execute(){const e=this.program,t=this.args,s=this.options;return"object"==typeof t&&Object.freeze(t),await a("plugin:shell|execute",{program:e,args:t,options:s})}}return e.Child=c,e.Command=l,e.EventEmitter=h,e.open=async function(e,t){await a("plugin:shell|open",{path:e,with:t})},e}({});Object.defineProperty(window.__TAURI__,"shell",{value:__TAURI_PLUGIN_SHELL__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_SHELL__=function(e){"use strict";function t(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}function s(e,t,s,n,i){if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}var n,i,r;"function"==typeof SuppressedError&&SuppressedError;const o="__TAURI_TO_IPC_KEY__";class a{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,n.set(this,(()=>{})),i.set(this,0),r.set(this,{}),this.id=function(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}((({message:e,id:o})=>{if(o===t(this,i,"f")){s(this,i,o+1),t(this,n,"f").call(this,e);const a=Object.keys(t(this,r,"f"));if(a.length>0){let e=o+1;for(const s of a.sort()){if(parseInt(s)!==e)break;{const i=t(this,r,"f")[s];delete t(this,r,"f")[s],t(this,n,"f").call(this,i),e+=1}}s(this,i,e)}}else t(this,r,"f")[o.toString()]=e}))}set onmessage(e){s(this,n,e)}get onmessage(){return t(this,n,"f")}[(n=new WeakMap,i=new WeakMap,r=new WeakMap,o)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[o]()}}async function h(e,t={},s){return window.__TAURI_INTERNALS__.invoke(e,t,s)}class c{constructor(){this.eventListeners=Object.create(null)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}on(e,t){return e in this.eventListeners?this.eventListeners[e].push(t):this.eventListeners[e]=[t],this}once(e,t){const s=n=>{this.removeListener(e,s),t(n)};return this.addListener(e,s)}off(e,t){return e in this.eventListeners&&(this.eventListeners[e]=this.eventListeners[e].filter((e=>e!==t))),this}removeAllListeners(e){return e?delete this.eventListeners[e]:this.eventListeners=Object.create(null),this}emit(e,t){if(e in this.eventListeners){const s=this.eventListeners[e];for(const e of s)e(t);return!0}return!1}listenerCount(e){return e in this.eventListeners?this.eventListeners[e].length:0}prependListener(e,t){return e in this.eventListeners?this.eventListeners[e].unshift(t):this.eventListeners[e]=[t],this}prependOnceListener(e,t){const s=n=>{this.removeListener(e,s),t(n)};return this.prependListener(e,s)}}class l{constructor(e){this.pid=e}async write(e){await h("plugin:shell|stdin_write",{pid:this.pid,buffer:e})}async kill(){await h("plugin:shell|kill",{cmd:"killChild",pid:this.pid})}}class u extends c{constructor(e,t=[],s){super(),this.stdout=new c,this.stderr=new c,this.program=e,this.args="string"==typeof t?[t]:t,this.options=s??{}}static create(e,t=[],s){return new u(e,t,s)}static sidecar(e,t=[],s){const n=new u(e,t,s);return n.options.sidecar=!0,n}async spawn(){const e=this.program,t=this.args,s=this.options;"object"==typeof t&&Object.freeze(t);const n=new a;return n.onmessage=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)}},await h("plugin:shell|spawn",{program:e,args:t,options:s,onEvent:n}).then((e=>new l(e)))}async execute(){const e=this.program,t=this.args,s=this.options;return"object"==typeof t&&Object.freeze(t),await h("plugin:shell|execute",{program:e,args:t,options:s})}}return e.Child=l,e.Command=u,e.EventEmitter=c,e.open=async function(e,t){await h("plugin:shell|open",{path:e,with:t})},e}({});Object.defineProperty(window.__TAURI__,"shell",{value:__TAURI_PLUGIN_SHELL__})}
diff --git a/plugins/single-instance/examples/vanilla/package.json b/plugins/single-instance/examples/vanilla/package.json
index 1ecf30c5..790657d0 100644
--- a/plugins/single-instance/examples/vanilla/package.json
+++ b/plugins/single-instance/examples/vanilla/package.json
@@ -9,6 +9,6 @@
"author": "",
"license": "MIT",
"devDependencies": {
- "@tauri-apps/cli": "2.0.4"
+ "@tauri-apps/cli": "2.1.0"
}
}
diff --git a/plugins/store/examples/AppSettingsManager/package.json b/plugins/store/examples/AppSettingsManager/package.json
index 50692647..c1fe41cc 100644
--- a/plugins/store/examples/AppSettingsManager/package.json
+++ b/plugins/store/examples/AppSettingsManager/package.json
@@ -8,7 +8,7 @@
"tauri": "tauri"
},
"devDependencies": {
- "@tauri-apps/cli": "2.0.4",
+ "@tauri-apps/cli": "2.1.0",
"vite": "^5.0.12",
"typescript": "^5.4.7"
}
diff --git a/plugins/updater/api-iife.js b/plugins/updater/api-iife.js
index 2b10e2e7..87294903 100644
--- a/plugins/updater/api-iife.js
+++ b/plugins/updater/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_UPDATER__=function(e){"use strict";function t(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}function s(e,t,s,n,i){if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}var n,i,r,a;"function"==typeof SuppressedError&&SuppressedError;class o{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,n.set(this,(()=>{})),i.set(this,0),r.set(this,{}),this.id=function(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}((({message:e,id:a})=>{if(a===t(this,i,"f")){s(this,i,a+1),t(this,n,"f").call(this,e);const o=Object.keys(t(this,r,"f"));if(o.length>0){let e=a+1;for(const s of o.sort()){if(parseInt(s)!==e)break;{const i=t(this,r,"f")[s];delete t(this,r,"f")[s],t(this,n,"f").call(this,i),e+=1}}s(this,i,e)}}else t(this,r,"f")[a.toString()]=e}))}set onmessage(e){s(this,n,e)}get onmessage(){return t(this,n,"f")}toJSON(){return`__CHANNEL__:${this.id}`}}async function d(e,t={},s){return window.__TAURI_INTERNALS__.invoke(e,t,s)}n=new WeakMap,i=new WeakMap,r=new WeakMap;class l{get rid(){return t(this,a,"f")}constructor(e){a.set(this,void 0),s(this,a,e)}async close(){return d("plugin:resources|close",{rid:this.rid})}}a=new WeakMap;class c extends l{constructor(e){super(e.rid),this.available=e.available,this.currentVersion=e.currentVersion,this.version=e.version,this.date=e.date,this.body=e.body}async download(e,t){const s=new o;e&&(s.onmessage=e);const n=await d("plugin:updater|download",{onEvent:s,rid:this.rid,...t});this.downloadedBytes=new l(n)}async install(){if(!this.downloadedBytes)throw new Error("Update.install called before Update.download");await d("plugin:updater|install",{updateRid:this.rid,bytesRid:this.downloadedBytes.rid}),this.downloadedBytes=void 0}async downloadAndInstall(e,t){const s=new o;e&&(s.onmessage=e),await d("plugin:updater|download_and_install",{onEvent:s,rid:this.rid,...t})}async close(){await(this.downloadedBytes?.close()),await super.close()}}return e.Update=c,e.check=async function(e){return e?.headers&&(e.headers=Array.from(new Headers(e.headers).entries())),await d("plugin:updater|check",{...e}).then((e=>e.available?new c(e):null))},e}({});Object.defineProperty(window.__TAURI__,"updater",{value:__TAURI_PLUGIN_UPDATER__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_UPDATER__=function(e){"use strict";function t(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}function s(e,t,s,n,i){if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}var n,i,r,a;"function"==typeof SuppressedError&&SuppressedError;const o="__TAURI_TO_IPC_KEY__";class d{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,n.set(this,(()=>{})),i.set(this,0),r.set(this,{}),this.id=function(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}((({message:e,id:a})=>{if(a===t(this,i,"f")){s(this,i,a+1),t(this,n,"f").call(this,e);const o=Object.keys(t(this,r,"f"));if(o.length>0){let e=a+1;for(const s of o.sort()){if(parseInt(s)!==e)break;{const i=t(this,r,"f")[s];delete t(this,r,"f")[s],t(this,n,"f").call(this,i),e+=1}}s(this,i,e)}}else t(this,r,"f")[a.toString()]=e}))}set onmessage(e){s(this,n,e)}get onmessage(){return t(this,n,"f")}[(n=new WeakMap,i=new WeakMap,r=new WeakMap,o)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[o]()}}async function l(e,t={},s){return window.__TAURI_INTERNALS__.invoke(e,t,s)}class c{get rid(){return t(this,a,"f")}constructor(e){a.set(this,void 0),s(this,a,e)}async close(){return l("plugin:resources|close",{rid:this.rid})}}a=new WeakMap;class h extends c{constructor(e){super(e.rid),this.available=e.available,this.currentVersion=e.currentVersion,this.version=e.version,this.date=e.date,this.body=e.body}async download(e,t){const s=new d;e&&(s.onmessage=e);const n=await l("plugin:updater|download",{onEvent:s,rid:this.rid,...t});this.downloadedBytes=new c(n)}async install(){if(!this.downloadedBytes)throw new Error("Update.install called before Update.download");await l("plugin:updater|install",{updateRid:this.rid,bytesRid:this.downloadedBytes.rid}),this.downloadedBytes=void 0}async downloadAndInstall(e,t){const s=new d;e&&(s.onmessage=e),await l("plugin:updater|download_and_install",{onEvent:s,rid:this.rid,...t})}async close(){await(this.downloadedBytes?.close()),await super.close()}}return e.Update=h,e.check=async function(e){return e?.headers&&(e.headers=Array.from(new Headers(e.headers).entries())),await l("plugin:updater|check",{...e}).then((e=>e.available?new h(e):null))},e}({});Object.defineProperty(window.__TAURI__,"updater",{value:__TAURI_PLUGIN_UPDATER__})}
diff --git a/plugins/upload/api-iife.js b/plugins/upload/api-iife.js
index 188b262a..3dfe99be 100644
--- a/plugins/upload/api-iife.js
+++ b/plugins/upload/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_UPLOAD__=function(e){"use strict";function t(e,t,n,o){if("a"===n&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?o:"a"===n?o.call(e):o?o.value:t.get(e)}function n(e,t,n,o,s){if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,n),n}var o,s,r;"function"==typeof SuppressedError&&SuppressedError;class i{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,o.set(this,(()=>{})),s.set(this,0),r.set(this,{}),this.id=function(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}((({message:e,id:i})=>{if(i===t(this,s,"f")){n(this,s,i+1),t(this,o,"f").call(this,e);const a=Object.keys(t(this,r,"f"));if(a.length>0){let e=i+1;for(const n of a.sort()){if(parseInt(n)!==e)break;{const s=t(this,r,"f")[n];delete t(this,r,"f")[n],t(this,o,"f").call(this,s),e+=1}}n(this,s,e)}}else t(this,r,"f")[i.toString()]=e}))}set onmessage(e){n(this,o,e)}get onmessage(){return t(this,o,"f")}toJSON(){return`__CHANNEL__:${this.id}`}}async function a(e,t={},n){return window.__TAURI_INTERNALS__.invoke(e,t,n)}return o=new WeakMap,s=new WeakMap,r=new WeakMap,e.download=async function(e,t,n,o){const s=new Uint32Array(1);window.crypto.getRandomValues(s);const r=s[0],c=new i;n&&(c.onmessage=n),await a("plugin:upload|download",{id:r,url:e,filePath:t,headers:o??{},onProgress:c})},e.upload=async function(e,t,n,o){const s=new Uint32Array(1);window.crypto.getRandomValues(s);const r=s[0],c=new i;return n&&(c.onmessage=n),await a("plugin:upload|upload",{id:r,url:e,filePath:t,headers:o??{},onProgress:c})},e}({});Object.defineProperty(window.__TAURI__,"upload",{value:__TAURI_PLUGIN_UPLOAD__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_UPLOAD__=function(t){"use strict";function e(t,e,n,s){if("a"===n&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?s:"a"===n?s.call(t):s?s.value:e.get(t)}function n(t,e,n,s,o){if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,n),n}var s,o,r;"function"==typeof SuppressedError&&SuppressedError;const i="__TAURI_TO_IPC_KEY__";class a{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,s.set(this,(()=>{})),o.set(this,0),r.set(this,{}),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:i})=>{if(i===e(this,o,"f")){n(this,o,i+1),e(this,s,"f").call(this,t);const a=Object.keys(e(this,r,"f"));if(a.length>0){let t=i+1;for(const n of a.sort()){if(parseInt(n)!==t)break;{const o=e(this,r,"f")[n];delete e(this,r,"f")[n],e(this,s,"f").call(this,o),t+=1}}n(this,o,t)}}else e(this,r,"f")[i.toString()]=t}))}set onmessage(t){n(this,s,t)}get onmessage(){return e(this,s,"f")}[(s=new WeakMap,o=new WeakMap,r=new WeakMap,i)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[i]()}}async function _(t,e={},n){return window.__TAURI_INTERNALS__.invoke(t,e,n)}return t.download=async function(t,e,n,s){const o=new Uint32Array(1);window.crypto.getRandomValues(o);const r=o[0],i=new a;n&&(i.onmessage=n),await _("plugin:upload|download",{id:r,url:t,filePath:e,headers:s??{},onProgress:i})},t.upload=async function(t,e,n,s){const o=new Uint32Array(1);window.crypto.getRandomValues(o);const r=o[0],i=new a;return n&&(i.onmessage=n),await _("plugin:upload|upload",{id:r,url:t,filePath:e,headers:s??{},onProgress:i})},t}({});Object.defineProperty(window.__TAURI__,"upload",{value:__TAURI_PLUGIN_UPLOAD__})}
diff --git a/plugins/upload/guest-js/index.ts b/plugins/upload/guest-js/index.ts
index 7c5bf796..d036f00a 100644
--- a/plugins/upload/guest-js/index.ts
+++ b/plugins/upload/guest-js/index.ts
@@ -6,6 +6,7 @@ import { invoke, Channel } from '@tauri-apps/api/core'
interface ProgressPayload {
progress: number
+ progressTotal: number
total: number
transferSpeed: number
}
diff --git a/plugins/upload/src/lib.rs b/plugins/upload/src/lib.rs
index 6a399fd1..d8f5f43c 100644
--- a/plugins/upload/src/lib.rs
+++ b/plugins/upload/src/lib.rs
@@ -61,6 +61,7 @@ impl Serialize for Error {
#[serde(rename_all = "camelCase")]
struct ProgressPayload {
progress: u64,
+ progress_total: u64,
total: u64,
transfer_speed: u64,
}
@@ -99,6 +100,7 @@ async fn download(
stats.record_chunk_transfer(chunk.len());
let _ = on_progress.send(ProgressPayload {
progress: chunk.len() as u64,
+ progress_total: stats.total_transferred,
total,
transfer_speed: stats.transfer_speed,
});
@@ -153,6 +155,7 @@ fn file_to_body(channel: Channel, file: File) -> reqwest::Body
stats.record_chunk_transfer(progress as usize);
let _ = channel.send(ProgressPayload {
progress,
+ progress_total: stats.total_transferred,
total,
transfer_speed: stats.transfer_speed,
});
diff --git a/plugins/upload/src/transfer_stats.rs b/plugins/upload/src/transfer_stats.rs
index 0ae32ec8..2f3a3946 100644
--- a/plugins/upload/src/transfer_stats.rs
+++ b/plugins/upload/src/transfer_stats.rs
@@ -4,11 +4,12 @@
use std::time::Instant;
-// The TransferStats struct is used to track and calculate the transfer speed of data chunks over time.
+// The TransferStats struct tracks both transfer speed and cumulative transfer progress.
pub struct TransferStats {
accumulated_chunk_len: usize, // Total length of chunks transferred in the current period
accumulated_time: u128, // Total time taken for the transfers in the current period
pub transfer_speed: u64, // Calculated transfer speed in bytes per second
+ pub total_transferred: u64, // Cumulative total of all transferred data
start_time: Instant, // Time when the current period started
granularity: u32, // Time period (in milliseconds) over which the transfer speed is calculated
}
@@ -20,18 +21,20 @@ impl TransferStats {
accumulated_chunk_len: 0,
accumulated_time: 0,
transfer_speed: 0,
+ total_transferred: 0,
start_time: Instant::now(),
granularity,
}
}
- // Records the transfer of a data chunk and updates the transfer speed if the granularity period has elapsed.
+ // Records the transfer of a data chunk and updates both transfer speed and total progress.
pub fn record_chunk_transfer(&mut self, chunk_len: usize) {
let now = Instant::now();
let it_took = now.duration_since(self.start_time).as_millis();
self.accumulated_chunk_len += chunk_len;
+ self.total_transferred += chunk_len as u64;
self.accumulated_time += it_took;
- // If the accumulated time exceeds the granularity, calculate the transfer speed.
+ // Calculate transfer speed if accumulated time exceeds granularity.
if self.accumulated_time >= self.granularity as u128 {
self.transfer_speed =
(self.accumulated_chunk_len as u128 / self.accumulated_time * 1024) as u64;
@@ -47,6 +50,6 @@ impl TransferStats {
// Provides a default implementation for TransferStats with a granularity of 500 milliseconds.
impl Default for TransferStats {
fn default() -> Self {
- Self::start(500) // Default granularity is 500
+ Self::start(500) // Default granularity is 500 ms
}
}
diff --git a/plugins/websocket/README.md b/plugins/websocket/README.md
index a9c3a267..3383bc54 100644
--- a/plugins/websocket/README.md
+++ b/plugins/websocket/README.md
@@ -1,6 +1,6 @@

-Expose a WebSocket server to your Tauri frontend.
+Open a WebSocket connection using a Rust client in JS.
| Platform | Supported |
| -------- | --------- |
diff --git a/plugins/websocket/examples/tauri-app/package.json b/plugins/websocket/examples/tauri-app/package.json
index ca13ac24..33b62a51 100644
--- a/plugins/websocket/examples/tauri-app/package.json
+++ b/plugins/websocket/examples/tauri-app/package.json
@@ -9,7 +9,7 @@
"preview": "vite preview"
},
"devDependencies": {
- "@tauri-apps/cli": "2.0.4",
+ "@tauri-apps/cli": "2.1.0",
"typescript": "^5.3.3",
"vite": "^5.4.7"
},
diff --git a/plugins/window-state/api-iife.js b/plugins/window-state/api-iife.js
index de6e9613..3cfdbf94 100644
--- a/plugins/window-state/api-iife.js
+++ b/plugins/window-state/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_WINDOW_STATE__=function(e){"use strict";var t,i,n,a;function l(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}async function s(e,t={},i){return window.__TAURI_INTERNALS__.invoke(e,t,i)}"function"==typeof SuppressedError&&SuppressedError;class r{get rid(){return function(e,t,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(e):n?n.value:t.get(e)}(this,t,"f")}constructor(e){t.set(this,void 0),function(e,t,i,n,a){if("function"==typeof t?e!==t||!a:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");t.set(e,i)}(this,t,e)}async close(){return s("plugin:resources|close",{rid:this.rid})}}t=new WeakMap;class o{constructor(e,t){this.type="Logical",this.width=e,this.height=t}toPhysical(e){return new u(this.width*e,this.height*e)}}class u{constructor(e,t){this.type="Physical",this.width=e,this.height=t}toLogical(e){return new o(this.width/e,this.height/e)}}class c{constructor(e,t){this.type="Logical",this.x=e,this.y=t}toPhysical(e){return new d(this.x*e,this.x*e)}}class d{constructor(e,t){this.type="Physical",this.x=e,this.y=t}toLogical(e){return new c(this.x/e,this.y/e)}}async function h(e,t){await s("plugin:event|unlisten",{event:e,eventId:t})}async function w(e,t,i){var n;const a="string"==typeof(null==i?void 0:i.target)?{kind:"AnyLabel",label:i.target}:null!==(n=null==i?void 0:i.target)&&void 0!==n?n:{kind:"Any"};return s("plugin:event|listen",{event:e,target:a,handler:l(t)}).then((t=>async()=>h(e,t)))}!function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",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_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(i||(i={}));class b extends r{constructor(e){super(e)}static async new(e,t,i){return s("plugin:image|new",{rgba:y(e),width:t,height:i}).then((e=>new b(e)))}static async fromBytes(e){return s("plugin:image|from_bytes",{bytes:y(e)}).then((e=>new b(e)))}static async fromPath(e){return s("plugin:image|from_path",{path:e}).then((e=>new b(e)))}async rgba(){return s("plugin:image|rgba",{rid:this.rid}).then((e=>new Uint8Array(e)))}async size(){return s("plugin:image|size",{rid:this.rid})}}function y(e){return null==e?null:"string"==typeof e?e:e instanceof b?e.rid:e}!function(e){e[e.Critical=1]="Critical",e[e.Informational=2]="Informational"}(n||(n={}));class p{constructor(e){this._preventDefault=!1,this.event=e.event,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}function g(){return new v(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function _(){return s("plugin:window|get_all_windows").then((e=>e.map((e=>new v(e,{skip:!0})))))}!function(e){e.None="none",e.Normal="normal",e.Indeterminate="indeterminate",e.Paused="paused",e.Error="error"}(a||(a={}));const m=["tauri://created","tauri://error"];class v{constructor(e,t={}){var i;this.label=e,this.listeners=Object.create(null),(null==t?void 0:t.skip)||s("plugin:window|create",{options:{...t,parent:"string"==typeof t.parent?t.parent:null===(i=t.parent)||void 0===i?void 0:i.label,label:e}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var t;return null!==(t=(await _()).find((t=>t.label===e)))&&void 0!==t?t:null}static getCurrent(){return g()}static async getAll(){return _()}static async getFocusedWindow(){for(const e of await _())if(await e.isFocused())return e;return null}async listen(e,t){return this._handleTauriEvent(e,t)?()=>{const i=this.listeners[e];i.splice(i.indexOf(t),1)}:w(e,t,{target:{kind:"Window",label:this.label}})}async once(e,t){return this._handleTauriEvent(e,t)?()=>{const i=this.listeners[e];i.splice(i.indexOf(t),1)}:async function(e,t,i){return w(e,(i=>{h(e,i.id),t(i)}),i)}(e,t,{target:{kind:"Window",label:this.label}})}async emit(e,t){if(!m.includes(e))return async function(e,t){await s("plugin:event|emit",{event:e,payload:t})}(e,t);for(const i of this.listeners[e]||[])i({event:e,id:-1,payload:t})}async emitTo(e,t,i){if(!m.includes(t))return async function(e,t,i){const n="string"==typeof e?{kind:"AnyLabel",label:e}:e;await s("plugin:event|emit_to",{target:n,event:t,payload:i})}(e,t,i);for(const e of this.listeners[t]||[])e({event:t,id:-1,payload:i})}_handleTauriEvent(e,t){return!!m.includes(e)&&(e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t],!0)}async scaleFactor(){return s("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return s("plugin:window|inner_position",{label:this.label}).then((({x:e,y:t})=>new d(e,t)))}async outerPosition(){return s("plugin:window|outer_position",{label:this.label}).then((({x:e,y:t})=>new d(e,t)))}async innerSize(){return s("plugin:window|inner_size",{label:this.label}).then((({width:e,height:t})=>new u(e,t)))}async outerSize(){return s("plugin:window|outer_size",{label:this.label}).then((({width:e,height:t})=>new u(e,t)))}async isFullscreen(){return s("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return s("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return s("plugin:window|is_maximized",{label:this.label})}async isFocused(){return s("plugin:window|is_focused",{label:this.label})}async isDecorated(){return s("plugin:window|is_decorated",{label:this.label})}async isResizable(){return s("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return s("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return s("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return s("plugin:window|is_closable",{label:this.label})}async isVisible(){return s("plugin:window|is_visible",{label:this.label})}async title(){return s("plugin:window|title",{label:this.label})}async theme(){return s("plugin:window|theme",{label:this.label})}async center(){return s("plugin:window|center",{label:this.label})}async requestUserAttention(e){let t=null;return e&&(t=e===n.Critical?{type:"Critical"}:{type:"Informational"}),s("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(e){return s("plugin:window|set_resizable",{label:this.label,value:e})}async setEnabled(e){return s("plugin:window|set_enabled",{label:this.label,value:e})}async isEnabled(){return s("plugin:window|is_enabled",{label:this.label})}async setMaximizable(e){return s("plugin:window|set_maximizable",{label:this.label,value:e})}async setMinimizable(e){return s("plugin:window|set_minimizable",{label:this.label,value:e})}async setClosable(e){return s("plugin:window|set_closable",{label:this.label,value:e})}async setTitle(e){return s("plugin:window|set_title",{label:this.label,value:e})}async maximize(){return s("plugin:window|maximize",{label:this.label})}async unmaximize(){return s("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return s("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return s("plugin:window|minimize",{label:this.label})}async unminimize(){return s("plugin:window|unminimize",{label:this.label})}async show(){return s("plugin:window|show",{label:this.label})}async hide(){return s("plugin:window|hide",{label:this.label})}async close(){return s("plugin:window|close",{label:this.label})}async destroy(){return s("plugin:window|destroy",{label:this.label})}async setDecorations(e){return s("plugin:window|set_decorations",{label:this.label,value:e})}async setShadow(e){return s("plugin:window|set_shadow",{label:this.label,value:e})}async setEffects(e){return s("plugin:window|set_effects",{label:this.label,value:e})}async clearEffects(){return s("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(e){return s("plugin:window|set_always_on_top",{label:this.label,value:e})}async setAlwaysOnBottom(e){return s("plugin:window|set_always_on_bottom",{label:this.label,value:e})}async setContentProtected(e){return s("plugin:window|set_content_protected",{label:this.label,value:e})}async setSize(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `size` argument must be either a LogicalSize or a PhysicalSize instance");const t={};return t[`${e.type}`]={width:e.width,height:e.height},s("plugin:window|set_size",{label:this.label,value:t})}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");let t=null;return e&&(t={},t[`${e.type}`]={width:e.width,height:e.height}),s("plugin:window|set_min_size",{label:this.label,value:t})}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");let t=null;return e&&(t={},t[`${e.type}`]={width:e.width,height:e.height}),s("plugin:window|set_max_size",{label:this.label,value:t})}async setSizeConstraints(e){function t(e){return e?{Logical:e}:null}return s("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(null==e?void 0:e.minWidth),minHeight:t(null==e?void 0:e.minHeight),maxWidth:t(null==e?void 0:e.maxWidth),maxHeight:t(null==e?void 0:e.maxHeight)}})}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");const t={};return t[`${e.type}`]={x:e.x,y:e.y},s("plugin:window|set_position",{label:this.label,value:t})}async setFullscreen(e){return s("plugin:window|set_fullscreen",{label:this.label,value:e})}async setFocus(){return s("plugin:window|set_focus",{label:this.label})}async setIcon(e){return s("plugin:window|set_icon",{label:this.label,value:y(e)})}async setSkipTaskbar(e){return s("plugin:window|set_skip_taskbar",{label:this.label,value:e})}async setCursorGrab(e){return s("plugin:window|set_cursor_grab",{label:this.label,value:e})}async setCursorVisible(e){return s("plugin:window|set_cursor_visible",{label:this.label,value:e})}async setCursorIcon(e){return s("plugin:window|set_cursor_icon",{label:this.label,value:e})}async setCursorPosition(e){if(!e||"Logical"!==e.type&&"Physical"!==e.type)throw new Error("the `position` argument must be either a LogicalPosition or a PhysicalPosition instance");const t={};return t[`${e.type}`]={x:e.x,y:e.y},s("plugin:window|set_cursor_position",{label:this.label,value:t})}async setIgnoreCursorEvents(e){return s("plugin:window|set_ignore_cursor_events",{label:this.label,value:e})}async startDragging(){return s("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(e){return s("plugin:window|start_resize_dragging",{label:this.label,value:e})}async setProgressBar(e){return s("plugin:window|set_progress_bar",{label:this.label,value:e})}async setVisibleOnAllWorkspaces(e){return s("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:e})}async setTitleBarStyle(e){return s("plugin:window|set_title_bar_style",{label:this.label,value:e})}async setTheme(e){return s("plugin:window|set_theme",{label:this.label,value:e})}async onResized(e){return this.listen(i.WINDOW_RESIZED,(t=>{var i;t.payload=(i=t.payload,new u(i.width,i.height)),e(t)}))}async onMoved(e){return this.listen(i.WINDOW_MOVED,(t=>{t.payload=I(t.payload),e(t)}))}async onCloseRequested(e){return this.listen(i.WINDOW_CLOSE_REQUESTED,(async t=>{const i=new p(t);await e(i),i.isPreventDefault()||await this.destroy()}))}async onDragDropEvent(e){const t=await this.listen(i.DRAG_ENTER,(t=>{e({...t,payload:{type:"enter",paths:t.payload.paths,position:I(t.payload.position)}})})),n=await this.listen(i.DRAG_OVER,(t=>{e({...t,payload:{type:"over",position:I(t.payload.position)}})})),a=await this.listen(i.DRAG_DROP,(t=>{e({...t,payload:{type:"drop",paths:t.payload.paths,position:I(t.payload.position)}})})),l=await this.listen(i.DRAG_LEAVE,(t=>{e({...t,payload:{type:"leave"}})}));return()=>{t(),a(),n(),l()}}async onFocusChanged(e){const t=await this.listen(i.WINDOW_FOCUS,(t=>{e({...t,payload:!0})})),n=await this.listen(i.WINDOW_BLUR,(t=>{e({...t,payload:!1})}));return()=>{t(),n()}}async onScaleChanged(e){return this.listen(i.WINDOW_SCALE_FACTOR_CHANGED,e)}async onThemeChanged(e){return this.listen(i.WINDOW_THEME_CHANGED,e)}}var f,E,D;function I(e){return new d(e.x,e.y)}async function S(e,t){await s("plugin:window-state|restore_state",{label:e,flags:t})}return function(e){e.AppearanceBased="appearanceBased",e.Light="light",e.Dark="dark",e.MediumLight="mediumLight",e.UltraDark="ultraDark",e.Titlebar="titlebar",e.Selection="selection",e.Menu="menu",e.Popover="popover",e.Sidebar="sidebar",e.HeaderView="headerView",e.Sheet="sheet",e.WindowBackground="windowBackground",e.HudWindow="hudWindow",e.FullScreenUI="fullScreenUI",e.Tooltip="tooltip",e.ContentBackground="contentBackground",e.UnderWindowBackground="underWindowBackground",e.UnderPageBackground="underPageBackground",e.Mica="mica",e.Blur="blur",e.Acrylic="acrylic",e.Tabbed="tabbed",e.TabbedDark="tabbedDark",e.TabbedLight="tabbedLight"}(f||(f={})),function(e){e.FollowsWindowActiveState="followsWindowActiveState",e.Active="active",e.Inactive="inactive"}(E||(E={})),e.StateFlags=void 0,(D=e.StateFlags||(e.StateFlags={}))[D.SIZE=1]="SIZE",D[D.POSITION=2]="POSITION",D[D.MAXIMIZED=4]="MAXIMIZED",D[D.VISIBLE=8]="VISIBLE",D[D.DECORATIONS=16]="DECORATIONS",D[D.FULLSCREEN=32]="FULLSCREEN",D[D.ALL=63]="ALL",e.filename=async function(){return await s("plugin:window-state|filename")},e.restoreState=S,e.restoreStateCurrent=async function(e){await S(g().label,e)},e.saveWindowState=async function(e){await s("plugin:window-state|save_window_state",{flags:e})},e}({});Object.defineProperty(window.__TAURI__,"windowState",{value:__TAURI_PLUGIN_WINDOW_STATE__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_WINDOW_STATE__=function(e){"use strict";var t;"function"==typeof SuppressedError&&SuppressedError;const i="__TAURI_TO_IPC_KEY__";function n(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}async function a(e,t={},i){return window.__TAURI_INTERNALS__.invoke(e,t,i)}class s{get rid(){return function(e,t,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(e):n?n.value:t.get(e)}(this,t,"f")}constructor(e){t.set(this,void 0),function(e,t,i,n,a){if("function"==typeof t?e!==t||!a:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");t.set(e,i)}(this,t,e)}async close(){return a("plugin:resources|close",{rid:this.rid})}}t=new WeakMap;class l{constructor(...e){this.type="Logical",1===e.length?"Logical"in e[0]?(this.width=e[0].Logical.width,this.height=e[0].Logical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toPhysical(e){return new r(this.width*e,this.height*e)}[i](){return{width:this.width,height:this.height}}toJSON(){return this[i]()}}class r{constructor(...e){this.type="Physical",1===e.length?"Physical"in e[0]?(this.width=e[0].Physical.width,this.height=e[0].Physical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toLogical(e){return new l(this.width/e,this.height/e)}[i](){return{width:this.width,height:this.height}}toJSON(){return this[i]()}}class o{constructor(e){this.size=e}toLogical(e){return this.size instanceof l?this.size:this.size.toLogical(e)}toPhysical(e){return this.size instanceof r?this.size:this.size.toPhysical(e)}[i](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[i]()}}class u{constructor(...e){this.type="Logical",1===e.length?"Logical"in e[0]?(this.x=e[0].Logical.x,this.y=e[0].Logical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toPhysical(e){return new c(this.x*e,this.y*e)}[i](){return{x:this.x,y:this.y}}toJSON(){return this[i]()}}class c{constructor(...e){this.type="Physical",1===e.length?"Physical"in e[0]?(this.x=e[0].Physical.x,this.y=e[0].Physical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toLogical(e){return new u(this.x/e,this.y/e)}[i](){return{x:this.x,y:this.y}}toJSON(){return this[i]()}}class h{constructor(e){this.position=e}toLogical(e){return this.position instanceof u?this.position:this.position.toLogical(e)}toPhysical(e){return this.position instanceof c?this.position:this.position.toPhysical(e)}[i](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[i]()}}var d,w,b;async function g(e,t){await a("plugin:event|unlisten",{event:e,eventId:t})}async function y(e,t,i){var s;const l="string"==typeof(null==i?void 0:i.target)?{kind:"AnyLabel",label:i.target}:null!==(s=null==i?void 0:i.target)&&void 0!==s?s:{kind:"Any"};return a("plugin:event|listen",{event:e,target:l,handler:n(t)}).then((t=>async()=>g(e,t)))}!function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",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_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"}(d||(d={}));class p extends s{constructor(e){super(e)}static async new(e,t,i){return a("plugin:image|new",{rgba:_(e),width:t,height:i}).then((e=>new p(e)))}static async fromBytes(e){return a("plugin:image|from_bytes",{bytes:_(e)}).then((e=>new p(e)))}static async fromPath(e){return a("plugin:image|from_path",{path:e}).then((e=>new p(e)))}async rgba(){return a("plugin:image|rgba",{rid:this.rid}).then((e=>new Uint8Array(e)))}async size(){return a("plugin:image|size",{rid:this.rid})}}function _(e){return null==e?null:"string"==typeof e?e:e instanceof p?e.rid:e}!function(e){e[e.Critical=1]="Critical",e[e.Informational=2]="Informational"}(w||(w={}));class v{constructor(e){this._preventDefault=!1,this.event=e.event,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}function f(){return new D(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function m(){return a("plugin:window|get_all_windows").then((e=>e.map((e=>new D(e,{skip:!0})))))}!function(e){e.None="none",e.Normal="normal",e.Indeterminate="indeterminate",e.Paused="paused",e.Error="error"}(b||(b={}));const E=["tauri://created","tauri://error"];class D{constructor(e,t={}){var i;this.label=e,this.listeners=Object.create(null),(null==t?void 0:t.skip)||a("plugin:window|create",{options:{...t,parent:"string"==typeof t.parent?t.parent:null===(i=t.parent)||void 0===i?void 0:i.label,label:e}}).then((async()=>this.emit("tauri://created"))).catch((async e=>this.emit("tauri://error",e)))}static async getByLabel(e){var t;return null!==(t=(await m()).find((t=>t.label===e)))&&void 0!==t?t:null}static getCurrent(){return f()}static async getAll(){return m()}static async getFocusedWindow(){for(const e of await m())if(await e.isFocused())return e;return null}async listen(e,t){return this._handleTauriEvent(e,t)?()=>{const i=this.listeners[e];i.splice(i.indexOf(t),1)}:y(e,t,{target:{kind:"Window",label:this.label}})}async once(e,t){return this._handleTauriEvent(e,t)?()=>{const i=this.listeners[e];i.splice(i.indexOf(t),1)}:async function(e,t,i){return y(e,(i=>{g(e,i.id),t(i)}),i)}(e,t,{target:{kind:"Window",label:this.label}})}async emit(e,t){if(!E.includes(e))return async function(e,t){await a("plugin:event|emit",{event:e,payload:t})}(e,t);for(const i of this.listeners[e]||[])i({event:e,id:-1,payload:t})}async emitTo(e,t,i){if(!E.includes(t))return async function(e,t,i){const n="string"==typeof e?{kind:"AnyLabel",label:e}:e;await a("plugin:event|emit_to",{target:n,event:t,payload:i})}(e,t,i);for(const e of this.listeners[t]||[])e({event:t,id:-1,payload:i})}_handleTauriEvent(e,t){return!!E.includes(e)&&(e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t],!0)}async scaleFactor(){return a("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return a("plugin:window|inner_position",{label:this.label}).then((e=>new c(e)))}async outerPosition(){return a("plugin:window|outer_position",{label:this.label}).then((e=>new c(e)))}async innerSize(){return a("plugin:window|inner_size",{label:this.label}).then((e=>new r(e)))}async outerSize(){return a("plugin:window|outer_size",{label:this.label}).then((e=>new r(e)))}async isFullscreen(){return a("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return a("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return a("plugin:window|is_maximized",{label:this.label})}async isFocused(){return a("plugin:window|is_focused",{label:this.label})}async isDecorated(){return a("plugin:window|is_decorated",{label:this.label})}async isResizable(){return a("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return a("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return a("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return a("plugin:window|is_closable",{label:this.label})}async isVisible(){return a("plugin:window|is_visible",{label:this.label})}async title(){return a("plugin:window|title",{label:this.label})}async theme(){return a("plugin:window|theme",{label:this.label})}async center(){return a("plugin:window|center",{label:this.label})}async requestUserAttention(e){let t=null;return e&&(t=e===w.Critical?{type:"Critical"}:{type:"Informational"}),a("plugin:window|request_user_attention",{label:this.label,value:t})}async setResizable(e){return a("plugin:window|set_resizable",{label:this.label,value:e})}async setEnabled(e){return a("plugin:window|set_enabled",{label:this.label,value:e})}async isEnabled(){return a("plugin:window|is_enabled",{label:this.label})}async setMaximizable(e){return a("plugin:window|set_maximizable",{label:this.label,value:e})}async setMinimizable(e){return a("plugin:window|set_minimizable",{label:this.label,value:e})}async setClosable(e){return a("plugin:window|set_closable",{label:this.label,value:e})}async setTitle(e){return a("plugin:window|set_title",{label:this.label,value:e})}async maximize(){return a("plugin:window|maximize",{label:this.label})}async unmaximize(){return a("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return a("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return a("plugin:window|minimize",{label:this.label})}async unminimize(){return a("plugin:window|unminimize",{label:this.label})}async show(){return a("plugin:window|show",{label:this.label})}async hide(){return a("plugin:window|hide",{label:this.label})}async close(){return a("plugin:window|close",{label:this.label})}async destroy(){return a("plugin:window|destroy",{label:this.label})}async setDecorations(e){return a("plugin:window|set_decorations",{label:this.label,value:e})}async setShadow(e){return a("plugin:window|set_shadow",{label:this.label,value:e})}async setEffects(e){return a("plugin:window|set_effects",{label:this.label,value:e})}async clearEffects(){return a("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(e){return a("plugin:window|set_always_on_top",{label:this.label,value:e})}async setAlwaysOnBottom(e){return a("plugin:window|set_always_on_bottom",{label:this.label,value:e})}async setContentProtected(e){return a("plugin:window|set_content_protected",{label:this.label,value:e})}async setSize(e){return a("plugin:window|set_size",{label:this.label,value:e instanceof o?e:new o(e)})}async setMinSize(e){return a("plugin:window|set_min_size",{label:this.label,value:e instanceof o?e:e?new o(e):null})}async setMaxSize(e){return a("plugin:window|set_max_size",{label:this.label,value:e instanceof o?e:e?new o(e):null})}async setSizeConstraints(e){function t(e){return e?{Logical:e}:null}return a("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:t(null==e?void 0:e.minWidth),minHeight:t(null==e?void 0:e.minHeight),maxWidth:t(null==e?void 0:e.maxWidth),maxHeight:t(null==e?void 0:e.maxHeight)}})}async setPosition(e){return a("plugin:window|set_position",{label:this.label,value:e instanceof h?e:new h(e)})}async setFullscreen(e){return a("plugin:window|set_fullscreen",{label:this.label,value:e})}async setFocus(){return a("plugin:window|set_focus",{label:this.label})}async setIcon(e){return a("plugin:window|set_icon",{label:this.label,value:_(e)})}async setSkipTaskbar(e){return a("plugin:window|set_skip_taskbar",{label:this.label,value:e})}async setCursorGrab(e){return a("plugin:window|set_cursor_grab",{label:this.label,value:e})}async setCursorVisible(e){return a("plugin:window|set_cursor_visible",{label:this.label,value:e})}async setCursorIcon(e){return a("plugin:window|set_cursor_icon",{label:this.label,value:e})}async setBackgroundColor(e){return a("plugin:window|set_background_color",{color:e})}async setCursorPosition(e){return a("plugin:window|set_cursor_position",{label:this.label,value:e instanceof h?e:new h(e)})}async setIgnoreCursorEvents(e){return a("plugin:window|set_ignore_cursor_events",{label:this.label,value:e})}async startDragging(){return a("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(e){return a("plugin:window|start_resize_dragging",{label:this.label,value:e})}async setProgressBar(e){return a("plugin:window|set_progress_bar",{label:this.label,value:e})}async setVisibleOnAllWorkspaces(e){return a("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:e})}async setTitleBarStyle(e){return a("plugin:window|set_title_bar_style",{label:this.label,value:e})}async setTheme(e){return a("plugin:window|set_theme",{label:this.label,value:e})}async onResized(e){return this.listen(d.WINDOW_RESIZED,(t=>{t.payload=new r(t.payload),e(t)}))}async onMoved(e){return this.listen(d.WINDOW_MOVED,(t=>{t.payload=new c(t.payload),e(t)}))}async onCloseRequested(e){return this.listen(d.WINDOW_CLOSE_REQUESTED,(async t=>{const i=new v(t);await e(i),i.isPreventDefault()||await this.destroy()}))}async onDragDropEvent(e){const t=await this.listen(d.DRAG_ENTER,(t=>{e({...t,payload:{type:"enter",paths:t.payload.paths,position:new c(t.payload.position)}})})),i=await this.listen(d.DRAG_OVER,(t=>{e({...t,payload:{type:"over",position:new c(t.payload.position)}})})),n=await this.listen(d.DRAG_DROP,(t=>{e({...t,payload:{type:"drop",paths:t.payload.paths,position:new c(t.payload.position)}})})),a=await this.listen(d.DRAG_LEAVE,(t=>{e({...t,payload:{type:"leave"}})}));return()=>{t(),n(),i(),a()}}async onFocusChanged(e){const t=await this.listen(d.WINDOW_FOCUS,(t=>{e({...t,payload:!0})})),i=await this.listen(d.WINDOW_BLUR,(t=>{e({...t,payload:!1})}));return()=>{t(),i()}}async onScaleChanged(e){return this.listen(d.WINDOW_SCALE_FACTOR_CHANGED,e)}async onThemeChanged(e){return this.listen(d.WINDOW_THEME_CHANGED,e)}}var I,S,W;async function z(e,t){await a("plugin:window-state|restore_state",{label:e,flags:t})}return function(e){e.AppearanceBased="appearanceBased",e.Light="light",e.Dark="dark",e.MediumLight="mediumLight",e.UltraDark="ultraDark",e.Titlebar="titlebar",e.Selection="selection",e.Menu="menu",e.Popover="popover",e.Sidebar="sidebar",e.HeaderView="headerView",e.Sheet="sheet",e.WindowBackground="windowBackground",e.HudWindow="hudWindow",e.FullScreenUI="fullScreenUI",e.Tooltip="tooltip",e.ContentBackground="contentBackground",e.UnderWindowBackground="underWindowBackground",e.UnderPageBackground="underPageBackground",e.Mica="mica",e.Blur="blur",e.Acrylic="acrylic",e.Tabbed="tabbed",e.TabbedDark="tabbedDark",e.TabbedLight="tabbedLight"}(I||(I={})),function(e){e.FollowsWindowActiveState="followsWindowActiveState",e.Active="active",e.Inactive="inactive"}(S||(S={})),e.StateFlags=void 0,(W=e.StateFlags||(e.StateFlags={}))[W.SIZE=1]="SIZE",W[W.POSITION=2]="POSITION",W[W.MAXIMIZED=4]="MAXIMIZED",W[W.VISIBLE=8]="VISIBLE",W[W.DECORATIONS=16]="DECORATIONS",W[W.FULLSCREEN=32]="FULLSCREEN",W[W.ALL=63]="ALL",e.filename=async function(){return await a("plugin:window-state|filename")},e.restoreState=z,e.restoreStateCurrent=async function(e){await z(f().label,e)},e.saveWindowState=async function(e){await a("plugin:window-state|save_window_state",{flags:e})},e}({});Object.defineProperty(window.__TAURI__,"windowState",{value:__TAURI_PLUGIN_WINDOW_STATE__})}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2c7a6604..85cc899d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,13 +17,13 @@ importers:
version: 9.14.0
'@rollup/plugin-node-resolve':
specifier: 15.3.0
- version: 15.3.0(rollup@4.24.4)
+ version: 15.3.0(rollup@4.25.0)
'@rollup/plugin-terser':
specifier: 0.4.4
- version: 0.4.4(rollup@4.24.4)
+ version: 0.4.4(rollup@4.25.0)
'@rollup/plugin-typescript':
specifier: 11.1.6
- version: 11.1.6(rollup@4.24.4)(tslib@2.8.1)(typescript@5.6.3)
+ version: 11.1.6(rollup@4.25.0)(tslib@2.8.1)(typescript@5.6.3)
'@types/eslint__js':
specifier: 8.42.3
version: 8.42.3
@@ -43,8 +43,8 @@ importers:
specifier: 3.3.3
version: 3.3.3
rollup:
- specifier: 4.24.4
- version: 4.24.4
+ specifier: 4.25.0
+ version: 4.25.0
tslib:
specifier: 2.8.1
version: 2.8.1
@@ -52,14 +52,14 @@ importers:
specifier: 5.6.3
version: 5.6.3
typescript-eslint:
- specifier: 8.13.0
- version: 8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ specifier: 8.14.0
+ version: 8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
examples/api:
dependencies:
'@tauri-apps/api':
- specifier: 2.0.3
- version: 2.0.3
+ specifier: 2.1.1
+ version: 2.1.1
'@tauri-apps/plugin-barcode-scanner':
specifier: 2.0.0
version: link:../../plugins/barcode-scanner
@@ -125,8 +125,8 @@ importers:
specifier: ^4.0.0
version: 4.0.0(svelte@5.1.9)(vite@5.4.8(terser@5.34.1))
'@tauri-apps/cli':
- specifier: 2.0.4
- version: 2.0.4
+ specifier: 2.1.0
+ version: 2.1.0
'@unocss/extractor-svelte':
specifier: ^0.64.0
version: 0.64.0
@@ -135,7 +135,7 @@ importers:
version: 5.1.9
unocss:
specifier: ^0.64.0
- version: 0.64.0(postcss@8.4.47)(rollup@4.24.4)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+ version: 0.64.0(postcss@8.4.47)(rollup@4.25.0)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
vite:
specifier: ^5.4.7
version: 5.4.8(terser@5.34.1)
@@ -144,50 +144,50 @@ importers:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/barcode-scanner:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/biometric:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/cli:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/clipboard-manager:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/deep-link:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/deep-link/examples/app:
dependencies:
'@tauri-apps/api':
- specifier: 2.0.3
- version: 2.0.3
+ specifier: 2.1.1
+ version: 2.1.1
'@tauri-apps/plugin-deep-link':
specifier: 2.0.0
version: link:../..
devDependencies:
'@tauri-apps/cli':
- specifier: 2.0.4
- version: 2.0.4
+ specifier: 2.1.0
+ version: 2.1.0
typescript:
specifier: ^5.2.2
version: 5.6.3
@@ -199,103 +199,103 @@ importers:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/fs:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/geolocation:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/global-shortcut:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/haptics:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/http:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/log:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/nfc:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/notification:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/os:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/positioner:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/process:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/shell:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/single-instance/examples/vanilla:
devDependencies:
'@tauri-apps/cli':
- specifier: 2.0.4
- version: 2.0.4
+ specifier: 2.1.0
+ version: 2.1.0
plugins/sql:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/store:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/store/examples/AppSettingsManager:
devDependencies:
'@tauri-apps/cli':
- specifier: 2.0.4
- version: 2.0.4
+ specifier: 2.1.0
+ version: 2.1.0
typescript:
specifier: ^5.4.7
version: 5.6.3
@@ -307,25 +307,25 @@ importers:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/updater:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/upload:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/websocket:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
plugins/websocket/examples/tauri-app:
dependencies:
@@ -334,8 +334,8 @@ importers:
version: link:../..
devDependencies:
'@tauri-apps/cli':
- specifier: 2.0.4
- version: 2.0.4
+ specifier: 2.1.0
+ version: 2.1.0
typescript:
specifier: ^5.3.3
version: 5.6.3
@@ -347,7 +347,7 @@ importers:
dependencies:
'@tauri-apps/api':
specifier: ^2.0.0
- version: 2.0.3
+ version: 2.1.1
packages:
@@ -862,93 +862,93 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.24.4':
- resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==}
+ '@rollup/rollup-android-arm-eabi@4.25.0':
+ resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.24.4':
- resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==}
+ '@rollup/rollup-android-arm64@4.25.0':
+ resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.24.4':
- resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==}
+ '@rollup/rollup-darwin-arm64@4.25.0':
+ resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.24.4':
- resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==}
+ '@rollup/rollup-darwin-x64@4.25.0':
+ resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.24.4':
- resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==}
+ '@rollup/rollup-freebsd-arm64@4.25.0':
+ resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.24.4':
- resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==}
+ '@rollup/rollup-freebsd-x64@4.25.0':
+ resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.24.4':
- resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.25.0':
+ resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.24.4':
- resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==}
+ '@rollup/rollup-linux-arm-musleabihf@4.25.0':
+ resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.24.4':
- resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==}
+ '@rollup/rollup-linux-arm64-gnu@4.25.0':
+ resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.24.4':
- resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==}
+ '@rollup/rollup-linux-arm64-musl@4.25.0':
+ resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.24.4':
- resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==}
+ '@rollup/rollup-linux-powerpc64le-gnu@4.25.0':
+ resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.24.4':
- resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==}
+ '@rollup/rollup-linux-riscv64-gnu@4.25.0':
+ resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.24.4':
- resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==}
+ '@rollup/rollup-linux-s390x-gnu@4.25.0':
+ resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.24.4':
- resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==}
+ '@rollup/rollup-linux-x64-gnu@4.25.0':
+ resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.24.4':
- resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==}
+ '@rollup/rollup-linux-x64-musl@4.25.0':
+ resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.24.4':
- resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==}
+ '@rollup/rollup-win32-arm64-msvc@4.25.0':
+ resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.24.4':
- resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==}
+ '@rollup/rollup-win32-ia32-msvc@4.25.0':
+ resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.24.4':
- resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==}
+ '@rollup/rollup-win32-x64-msvc@4.25.0':
+ resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==}
cpu: [x64]
os: [win32]
@@ -967,71 +967,71 @@ packages:
svelte: ^5.0.0-next.96 || ^5.0.0
vite: ^5.0.0
- '@tauri-apps/api@2.0.3':
- resolution: {integrity: sha512-840qk6n8rbXBXMA5/aAgTYsg5JAubKO0nXw5wf7IzGnUuYKGbB4oFBIZtXOIWy+E0kNTDI3qhq5iqsoMJfwp8g==}
+ '@tauri-apps/api@2.1.1':
+ resolution: {integrity: sha512-fzUfFFKo4lknXGJq8qrCidkUcKcH2UHhfaaCNt4GzgzGaW2iS26uFOg4tS3H4P8D6ZEeUxtiD5z0nwFF0UN30A==}
- '@tauri-apps/cli-darwin-arm64@2.0.4':
- resolution: {integrity: sha512-siH7rOHobb16rPbc11k64p1mxIpiRCkWmzs2qmL5IX21Gx9K5onI3Tk67Oqpf2uNupbYzItrOttaDT4NHFC7tw==}
+ '@tauri-apps/cli-darwin-arm64@2.1.0':
+ resolution: {integrity: sha512-ESc6J6CE8hl1yKH2vJ+ALF+thq4Be+DM1mvmTyUCQObvezNCNhzfS6abIUd3ou4x5RGH51ouiANeT3wekU6dCw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@tauri-apps/cli-darwin-x64@2.0.4':
- resolution: {integrity: sha512-zIccfbCoZMfmUpnk6PFCV0keFyfVj1A9XV3Oiiitj/dkTZ9CQvzjhX3XC0XcK4rsTWegfr2PjSrK06aiPAROAw==}
+ '@tauri-apps/cli-darwin-x64@2.1.0':
+ resolution: {integrity: sha512-TasHS442DFs8cSH2eUQzuDBXUST4ECjCd0yyP+zZzvAruiB0Bg+c8A+I/EnqCvBQ2G2yvWLYG8q/LI7c87A5UA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@tauri-apps/cli-linux-arm-gnueabihf@2.0.4':
- resolution: {integrity: sha512-fgQqJzefOGWCBNg4yrVA82Rg4s1XQr5K0dc2rCxBhJfa696e8dQ1LDrnWq/AiO5r+uHfVaoQTIUvxxpFicYRSA==}
+ '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0':
+ resolution: {integrity: sha512-aP7ZBGNL4ny07Cbb6kKpUOSrmhcIK2KhjviTzYlh+pPhAptxnC78xQGD3zKQkTi2WliJLPmBYbOHWWQa57lQ9w==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
- '@tauri-apps/cli-linux-arm64-gnu@2.0.4':
- resolution: {integrity: sha512-u8wbt5tPA9pI6j+d7jGrfOz9UVCiTp+IYzKNiIqlrDsAjqAUFaNXYHKqOUboeFWEmI4zoCWj6LgpS2OJTQ5FKg==}
+ '@tauri-apps/cli-linux-arm64-gnu@2.1.0':
+ resolution: {integrity: sha512-ZTdgD5gLeMCzndMT2f358EkoYkZ5T+Qy6zPzU+l5vv5M7dHVN9ZmblNAYYXmoOuw7y+BY4X/rZvHV9pcGrcanQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tauri-apps/cli-linux-arm64-musl@2.0.4':
- resolution: {integrity: sha512-hntF1V8e3V1hlrESm93PsghDhf3lA5pbvFrRfYxU1c+fVD/jRXGVw8BH3O1lW8MWwhEg1YdhKk01oAgsuHLuig==}
+ '@tauri-apps/cli-linux-arm64-musl@2.1.0':
+ resolution: {integrity: sha512-NzwqjUCilhnhJzusz3d/0i0F1GFrwCQbkwR6yAHUxItESbsGYkZRJk0yMEWkg3PzFnyK4cWTlQJMEU52TjhEzA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tauri-apps/cli-linux-x64-gnu@2.0.4':
- resolution: {integrity: sha512-Iq1GGJb+oT1T0ZV8izrgf0cBtlzPCJaWcNueRbf1ZXquMf+FSTyQv+/Lo8rq5T6buOIJOH7cAOTuEWWqiCZteg==}
+ '@tauri-apps/cli-linux-x64-gnu@2.1.0':
+ resolution: {integrity: sha512-TyiIpMEtZxNOQmuFyfJwaaYbg3movSthpBJLIdPlKxSAB2BW0VWLY3/ZfIxm/G2YGHyREkjJvimzYE0i37PnMA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tauri-apps/cli-linux-x64-musl@2.0.4':
- resolution: {integrity: sha512-9NTk6Pf0bSwXqCBdAA+PDYts9HeHebZzIo8mbRzRyUbER6QngG5HZb9Ka36Z1QWtJjdRy6uxSb4zb/9NuTeHfA==}
+ '@tauri-apps/cli-linux-x64-musl@2.1.0':
+ resolution: {integrity: sha512-/dQd0TlaxBdJACrR72DhynWftzHDaX32eBtS5WBrNJ+nnNb+znM3gON6nJ9tSE9jgDa6n1v2BkI/oIDtypfUXw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tauri-apps/cli-win32-arm64-msvc@2.0.4':
- resolution: {integrity: sha512-OF2e9oxiBFR8A8wVMOhUx9QGN/I1ZkquWC7gVQBnA56nx9PabJlDT08QBy5UD8USqZFVznnfNr2ehlheQahb3g==}
+ '@tauri-apps/cli-win32-arm64-msvc@2.1.0':
+ resolution: {integrity: sha512-NdQJO7SmdYqOcE+JPU7bwg7+odfZMWO6g8xF9SXYCMdUzvM2Gv/AQfikNXz5yS7ralRhNFuW32i5dcHlxh4pDg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@tauri-apps/cli-win32-ia32-msvc@2.0.4':
- resolution: {integrity: sha512-T+hCKB3rFP6q0saHHtR02hm6wr1ZPJ0Mkii3oRTxjPG6BBXoVzHNCYzvdgEGJPTA2sFuAQtJH764NRtNlDMifw==}
+ '@tauri-apps/cli-win32-ia32-msvc@2.1.0':
+ resolution: {integrity: sha512-f5h8gKT/cB8s1ticFRUpNmHqkmaLutT62oFDB7N//2YTXnxst7EpMIn1w+QimxTvTk2gcx6EcW6bEk/y2hZGzg==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
- '@tauri-apps/cli-win32-x64-msvc@2.0.4':
- resolution: {integrity: sha512-GVaiI3KWRFLomjJmApHqihhYlkJ+7FqhumhVfBO6Z2tWzZjQyVQgTdNp0kYEuW2WoAYEj0dKY6qd4YM33xYcUA==}
+ '@tauri-apps/cli-win32-x64-msvc@2.1.0':
+ resolution: {integrity: sha512-P/+LrdSSb5Xbho1LRP4haBjFHdyPdjWvGgeopL96OVtrFpYnfC+RctB45z2V2XxqFk3HweDDxk266btjttfjGw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@tauri-apps/cli@2.0.4':
- resolution: {integrity: sha512-Hl9eFXz+O366+6su9PfaSzu2EJdFe1p8K8ghkWmi40dz8VmSE7vsMTaOStD0I71ckSOkh2ICDX7FQTBgjlpjWw==}
+ '@tauri-apps/cli@2.1.0':
+ resolution: {integrity: sha512-K2VhcKqBhAeS5pNOVdnR/xQRU6jwpgmkSL2ejHXcl0m+kaTggT0WRDQnFtPq6NljA7aE03cvwsbCAoFG7vtkJw==}
engines: {node: '>= 10'}
hasBin: true
@@ -1056,8 +1056,8 @@ packages:
'@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
- '@typescript-eslint/eslint-plugin@8.13.0':
- resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==}
+ '@typescript-eslint/eslint-plugin@8.14.0':
+ resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@@ -1067,8 +1067,8 @@ packages:
typescript:
optional: true
- '@typescript-eslint/parser@8.13.0':
- resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==}
+ '@typescript-eslint/parser@8.14.0':
+ resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1077,12 +1077,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/scope-manager@8.13.0':
- resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==}
+ '@typescript-eslint/scope-manager@8.14.0':
+ resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@8.13.0':
- resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==}
+ '@typescript-eslint/type-utils@8.14.0':
+ resolution: {integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -1090,12 +1090,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/types@8.13.0':
- resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==}
+ '@typescript-eslint/types@8.14.0':
+ resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.13.0':
- resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==}
+ '@typescript-eslint/typescript-estree@8.14.0':
+ resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -1103,14 +1103,14 @@ packages:
typescript:
optional: true
- '@typescript-eslint/utils@8.13.0':
- resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==}
+ '@typescript-eslint/utils@8.14.0':
+ resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- '@typescript-eslint/visitor-keys@8.13.0':
- resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==}
+ '@typescript-eslint/visitor-keys@8.14.0':
+ resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unocss/astro@0.64.0':
@@ -2048,8 +2048,8 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- rollup@4.24.4:
- resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==}
+ rollup@4.25.0:
+ resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -2206,8 +2206,8 @@ packages:
resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==}
engines: {node: '>=8'}
- typescript-eslint@8.13.0:
- resolution: {integrity: sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==}
+ typescript-eslint@8.14.0:
+ resolution: {integrity: sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -2424,9 +2424,9 @@ snapshots:
- encoding
- mocha
- '@covector/assemble@0.12.0(mocha@10.7.3)':
+ '@covector/assemble@0.12.0':
dependencies:
- '@covector/command': 0.8.0(mocha@10.7.3)
+ '@covector/command': 0.8.0
'@covector/files': 0.8.0
effection: 2.0.8(mocha@10.7.3)
js-yaml: 4.1.0
@@ -2437,10 +2437,9 @@ snapshots:
unified: 9.2.2
transitivePeerDependencies:
- encoding
- - mocha
- supports-color
- '@covector/changelog@0.12.0(mocha@10.7.3)':
+ '@covector/changelog@0.12.0':
dependencies:
'@covector/files': 0.8.0
effection: 2.0.8(mocha@10.7.3)
@@ -2450,16 +2449,14 @@ snapshots:
unified: 9.2.2
transitivePeerDependencies:
- encoding
- - mocha
- supports-color
- '@covector/command@0.8.0(mocha@10.7.3)':
+ '@covector/command@0.8.0':
dependencies:
- '@effection/process': 2.1.4(mocha@10.7.3)
+ '@effection/process': 2.1.4
effection: 2.0.8(mocha@10.7.3)
transitivePeerDependencies:
- encoding
- - mocha
'@covector/files@0.8.0':
dependencies:
@@ -2506,8 +2503,10 @@ snapshots:
dependencies:
effection: 2.0.8(mocha@10.7.3)
mocha: 10.7.3
+ transitivePeerDependencies:
+ - encoding
- '@effection/process@2.1.4(mocha@10.7.3)':
+ '@effection/process@2.1.4':
dependencies:
cross-spawn: 7.0.3
ctrlc-windows: 2.1.0
@@ -2515,7 +2514,6 @@ snapshots:
shellwords: 0.1.1
transitivePeerDependencies:
- encoding
- - mocha
'@effection/stream@2.0.6':
dependencies:
@@ -2777,93 +2775,93 @@ snapshots:
'@polka/url@1.0.0-next.28': {}
- '@rollup/plugin-node-resolve@15.3.0(rollup@4.24.4)':
+ '@rollup/plugin-node-resolve@15.3.0(rollup@4.25.0)':
dependencies:
- '@rollup/pluginutils': 5.1.3(rollup@4.24.4)
+ '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.8
optionalDependencies:
- rollup: 4.24.4
+ rollup: 4.25.0
- '@rollup/plugin-terser@0.4.4(rollup@4.24.4)':
+ '@rollup/plugin-terser@0.4.4(rollup@4.25.0)':
dependencies:
serialize-javascript: 6.0.2
smob: 1.5.0
terser: 5.34.1
optionalDependencies:
- rollup: 4.24.4
+ rollup: 4.25.0
- '@rollup/plugin-typescript@11.1.6(rollup@4.24.4)(tslib@2.8.1)(typescript@5.6.3)':
+ '@rollup/plugin-typescript@11.1.6(rollup@4.25.0)(tslib@2.8.1)(typescript@5.6.3)':
dependencies:
- '@rollup/pluginutils': 5.1.3(rollup@4.24.4)
+ '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
resolve: 1.22.8
typescript: 5.6.3
optionalDependencies:
- rollup: 4.24.4
+ rollup: 4.25.0
tslib: 2.8.1
- '@rollup/pluginutils@5.1.3(rollup@4.24.4)':
+ '@rollup/pluginutils@5.1.3(rollup@4.25.0)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
- rollup: 4.24.4
+ rollup: 4.25.0
- '@rollup/rollup-android-arm-eabi@4.24.4':
+ '@rollup/rollup-android-arm-eabi@4.25.0':
optional: true
- '@rollup/rollup-android-arm64@4.24.4':
+ '@rollup/rollup-android-arm64@4.25.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.24.4':
+ '@rollup/rollup-darwin-arm64@4.25.0':
optional: true
- '@rollup/rollup-darwin-x64@4.24.4':
+ '@rollup/rollup-darwin-x64@4.25.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.24.4':
+ '@rollup/rollup-freebsd-arm64@4.25.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.24.4':
+ '@rollup/rollup-freebsd-x64@4.25.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.24.4':
+ '@rollup/rollup-linux-arm-gnueabihf@4.25.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.24.4':
+ '@rollup/rollup-linux-arm-musleabihf@4.25.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.24.4':
+ '@rollup/rollup-linux-arm64-gnu@4.25.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.24.4':
+ '@rollup/rollup-linux-arm64-musl@4.25.0':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.24.4':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.25.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.24.4':
+ '@rollup/rollup-linux-riscv64-gnu@4.25.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.24.4':
+ '@rollup/rollup-linux-s390x-gnu@4.25.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.24.4':
+ '@rollup/rollup-linux-x64-gnu@4.25.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.24.4':
+ '@rollup/rollup-linux-x64-musl@4.25.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.24.4':
+ '@rollup/rollup-win32-arm64-msvc@4.25.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.24.4':
+ '@rollup/rollup-win32-ia32-msvc@4.25.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.24.4':
+ '@rollup/rollup-win32-x64-msvc@4.25.0':
optional: true
'@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.0(svelte@5.1.9)(vite@5.4.8(terser@5.34.1)))(svelte@5.1.9)(vite@5.4.8(terser@5.34.1))':
@@ -2888,50 +2886,50 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tauri-apps/api@2.0.3': {}
+ '@tauri-apps/api@2.1.1': {}
- '@tauri-apps/cli-darwin-arm64@2.0.4':
+ '@tauri-apps/cli-darwin-arm64@2.1.0':
optional: true
- '@tauri-apps/cli-darwin-x64@2.0.4':
+ '@tauri-apps/cli-darwin-x64@2.1.0':
optional: true
- '@tauri-apps/cli-linux-arm-gnueabihf@2.0.4':
+ '@tauri-apps/cli-linux-arm-gnueabihf@2.1.0':
optional: true
- '@tauri-apps/cli-linux-arm64-gnu@2.0.4':
+ '@tauri-apps/cli-linux-arm64-gnu@2.1.0':
optional: true
- '@tauri-apps/cli-linux-arm64-musl@2.0.4':
+ '@tauri-apps/cli-linux-arm64-musl@2.1.0':
optional: true
- '@tauri-apps/cli-linux-x64-gnu@2.0.4':
+ '@tauri-apps/cli-linux-x64-gnu@2.1.0':
optional: true
- '@tauri-apps/cli-linux-x64-musl@2.0.4':
+ '@tauri-apps/cli-linux-x64-musl@2.1.0':
optional: true
- '@tauri-apps/cli-win32-arm64-msvc@2.0.4':
+ '@tauri-apps/cli-win32-arm64-msvc@2.1.0':
optional: true
- '@tauri-apps/cli-win32-ia32-msvc@2.0.4':
+ '@tauri-apps/cli-win32-ia32-msvc@2.1.0':
optional: true
- '@tauri-apps/cli-win32-x64-msvc@2.0.4':
+ '@tauri-apps/cli-win32-x64-msvc@2.1.0':
optional: true
- '@tauri-apps/cli@2.0.4':
+ '@tauri-apps/cli@2.1.0':
optionalDependencies:
- '@tauri-apps/cli-darwin-arm64': 2.0.4
- '@tauri-apps/cli-darwin-x64': 2.0.4
- '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.4
- '@tauri-apps/cli-linux-arm64-gnu': 2.0.4
- '@tauri-apps/cli-linux-arm64-musl': 2.0.4
- '@tauri-apps/cli-linux-x64-gnu': 2.0.4
- '@tauri-apps/cli-linux-x64-musl': 2.0.4
- '@tauri-apps/cli-win32-arm64-msvc': 2.0.4
- '@tauri-apps/cli-win32-ia32-msvc': 2.0.4
- '@tauri-apps/cli-win32-x64-msvc': 2.0.4
+ '@tauri-apps/cli-darwin-arm64': 2.1.0
+ '@tauri-apps/cli-darwin-x64': 2.1.0
+ '@tauri-apps/cli-linux-arm-gnueabihf': 2.1.0
+ '@tauri-apps/cli-linux-arm64-gnu': 2.1.0
+ '@tauri-apps/cli-linux-arm64-musl': 2.1.0
+ '@tauri-apps/cli-linux-x64-gnu': 2.1.0
+ '@tauri-apps/cli-linux-x64-musl': 2.1.0
+ '@tauri-apps/cli-win32-arm64-msvc': 2.1.0
+ '@tauri-apps/cli-win32-ia32-msvc': 2.1.0
+ '@tauri-apps/cli-win32-x64-msvc': 2.1.0
'@types/eslint@9.6.1':
dependencies:
@@ -2954,14 +2952,14 @@ snapshots:
'@types/unist@2.0.11': {}
- '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3))(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
+ '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3))(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
- '@typescript-eslint/scope-manager': 8.13.0
- '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
- '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
- '@typescript-eslint/visitor-keys': 8.13.0
+ '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ '@typescript-eslint/scope-manager': 8.14.0
+ '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ '@typescript-eslint/visitor-keys': 8.14.0
eslint: 9.14.0(jiti@2.0.0)
graphemer: 1.4.0
ignore: 5.3.2
@@ -2972,12 +2970,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
+ '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.13.0
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
- '@typescript-eslint/visitor-keys': 8.13.0
+ '@typescript-eslint/scope-manager': 8.14.0
+ '@typescript-eslint/types': 8.14.0
+ '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3)
+ '@typescript-eslint/visitor-keys': 8.14.0
debug: 4.3.7(supports-color@8.1.1)
eslint: 9.14.0(jiti@2.0.0)
optionalDependencies:
@@ -2985,15 +2983,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.13.0':
+ '@typescript-eslint/scope-manager@8.14.0':
dependencies:
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/visitor-keys': 8.13.0
+ '@typescript-eslint/types': 8.14.0
+ '@typescript-eslint/visitor-keys': 8.14.0
- '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
+ '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
- '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
debug: 4.3.7(supports-color@8.1.1)
ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies:
@@ -3002,12 +3000,12 @@ snapshots:
- eslint
- supports-color
- '@typescript-eslint/types@8.13.0': {}
+ '@typescript-eslint/types@8.14.0': {}
- '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.3)':
+ '@typescript-eslint/typescript-estree@8.14.0(typescript@5.6.3)':
dependencies:
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/visitor-keys': 8.13.0
+ '@typescript-eslint/types': 8.14.0
+ '@typescript-eslint/visitor-keys': 8.14.0
debug: 4.3.7(supports-color@8.1.1)
fast-glob: 3.3.2
is-glob: 4.0.3
@@ -3019,27 +3017,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
+ '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.0.0))
- '@typescript-eslint/scope-manager': 8.13.0
- '@typescript-eslint/types': 8.13.0
- '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3)
+ '@typescript-eslint/scope-manager': 8.14.0
+ '@typescript-eslint/types': 8.14.0
+ '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3)
eslint: 9.14.0(jiti@2.0.0)
transitivePeerDependencies:
- supports-color
- typescript
- '@typescript-eslint/visitor-keys@8.13.0':
+ '@typescript-eslint/visitor-keys@8.14.0':
dependencies:
- '@typescript-eslint/types': 8.13.0
+ '@typescript-eslint/types': 8.14.0
eslint-visitor-keys: 3.4.3
- '@unocss/astro@0.64.0(rollup@4.24.4)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
+ '@unocss/astro@0.64.0(rollup@4.25.0)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
dependencies:
'@unocss/core': 0.64.0
'@unocss/reset': 0.64.0
- '@unocss/vite': 0.64.0(rollup@4.24.4)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+ '@unocss/vite': 0.64.0(rollup@4.25.0)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
optionalDependencies:
vite: 5.4.8(terser@5.34.1)
transitivePeerDependencies:
@@ -3047,10 +3045,10 @@ snapshots:
- supports-color
- vue
- '@unocss/cli@0.64.0(rollup@4.24.4)':
+ '@unocss/cli@0.64.0(rollup@4.25.0)':
dependencies:
'@ampproject/remapping': 2.3.0
- '@rollup/pluginutils': 5.1.3(rollup@4.24.4)
+ '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
'@unocss/config': 0.64.0
'@unocss/core': 0.64.0
'@unocss/preset-uno': 0.64.0
@@ -3172,10 +3170,10 @@ snapshots:
dependencies:
'@unocss/core': 0.64.0
- '@unocss/vite@0.64.0(rollup@4.24.4)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
+ '@unocss/vite@0.64.0(rollup@4.25.0)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
dependencies:
'@ampproject/remapping': 2.3.0
- '@rollup/pluginutils': 5.1.3(rollup@4.24.4)
+ '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
'@unocss/config': 0.64.0
'@unocss/core': 0.64.0
'@unocss/inspector': 0.64.0(vue@3.5.12(typescript@5.6.3))
@@ -3386,9 +3384,9 @@ snapshots:
dependencies:
'@clack/prompts': 0.7.0
'@covector/apply': 0.10.0(mocha@10.7.3)
- '@covector/assemble': 0.12.0(mocha@10.7.3)
- '@covector/changelog': 0.12.0(mocha@10.7.3)
- '@covector/command': 0.8.0(mocha@10.7.3)
+ '@covector/assemble': 0.12.0
+ '@covector/changelog': 0.12.0
+ '@covector/command': 0.8.0
'@covector/files': 0.8.0
effection: 2.0.8(mocha@10.7.3)
globby: 11.1.0
@@ -4114,28 +4112,28 @@ snapshots:
reusify@1.0.4: {}
- rollup@4.24.4:
+ rollup@4.25.0:
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.24.4
- '@rollup/rollup-android-arm64': 4.24.4
- '@rollup/rollup-darwin-arm64': 4.24.4
- '@rollup/rollup-darwin-x64': 4.24.4
- '@rollup/rollup-freebsd-arm64': 4.24.4
- '@rollup/rollup-freebsd-x64': 4.24.4
- '@rollup/rollup-linux-arm-gnueabihf': 4.24.4
- '@rollup/rollup-linux-arm-musleabihf': 4.24.4
- '@rollup/rollup-linux-arm64-gnu': 4.24.4
- '@rollup/rollup-linux-arm64-musl': 4.24.4
- '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4
- '@rollup/rollup-linux-riscv64-gnu': 4.24.4
- '@rollup/rollup-linux-s390x-gnu': 4.24.4
- '@rollup/rollup-linux-x64-gnu': 4.24.4
- '@rollup/rollup-linux-x64-musl': 4.24.4
- '@rollup/rollup-win32-arm64-msvc': 4.24.4
- '@rollup/rollup-win32-ia32-msvc': 4.24.4
- '@rollup/rollup-win32-x64-msvc': 4.24.4
+ '@rollup/rollup-android-arm-eabi': 4.25.0
+ '@rollup/rollup-android-arm64': 4.25.0
+ '@rollup/rollup-darwin-arm64': 4.25.0
+ '@rollup/rollup-darwin-x64': 4.25.0
+ '@rollup/rollup-freebsd-arm64': 4.25.0
+ '@rollup/rollup-freebsd-x64': 4.25.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.25.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.25.0
+ '@rollup/rollup-linux-arm64-gnu': 4.25.0
+ '@rollup/rollup-linux-arm64-musl': 4.25.0
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.25.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.25.0
+ '@rollup/rollup-linux-s390x-gnu': 4.25.0
+ '@rollup/rollup-linux-x64-gnu': 4.25.0
+ '@rollup/rollup-linux-x64-musl': 4.25.0
+ '@rollup/rollup-win32-arm64-msvc': 4.25.0
+ '@rollup/rollup-win32-ia32-msvc': 4.25.0
+ '@rollup/rollup-win32-x64-msvc': 4.25.0
fsevents: 2.3.3
run-parallel@1.2.0:
@@ -4286,11 +4284,11 @@ snapshots:
type-fest@0.7.1: {}
- typescript-eslint@8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3):
+ typescript-eslint@8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3))(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
- '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
- '@typescript-eslint/utils': 8.13.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3))(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.0.0))(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.3
transitivePeerDependencies:
@@ -4323,10 +4321,10 @@ snapshots:
dependencies:
'@types/unist': 2.0.11
- unocss@0.64.0(postcss@8.4.47)(rollup@4.24.4)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3)):
+ unocss@0.64.0(postcss@8.4.47)(rollup@4.25.0)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3)):
dependencies:
- '@unocss/astro': 0.64.0(rollup@4.24.4)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
- '@unocss/cli': 0.64.0(rollup@4.24.4)
+ '@unocss/astro': 0.64.0(rollup@4.25.0)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+ '@unocss/cli': 0.64.0(rollup@4.25.0)
'@unocss/core': 0.64.0
'@unocss/postcss': 0.64.0(postcss@8.4.47)
'@unocss/preset-attributify': 0.64.0
@@ -4341,7 +4339,7 @@ snapshots:
'@unocss/transformer-compile-class': 0.64.0
'@unocss/transformer-directives': 0.64.0
'@unocss/transformer-variant-group': 0.64.0
- '@unocss/vite': 0.64.0(rollup@4.24.4)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+ '@unocss/vite': 0.64.0(rollup@4.25.0)(vite@5.4.8(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
optionalDependencies:
vite: 5.4.8(terser@5.34.1)
transitivePeerDependencies:
@@ -4370,7 +4368,7 @@ snapshots:
dependencies:
esbuild: 0.21.5
postcss: 8.4.47
- rollup: 4.24.4
+ rollup: 4.25.0
optionalDependencies:
fsevents: 2.3.3
terser: 5.34.1