diff --git a/.changes/add-allow-downgrades.md b/.changes/add-allow-downgrades.md
new file mode 100644
index 00000000..dd888671
--- /dev/null
+++ b/.changes/add-allow-downgrades.md
@@ -0,0 +1,8 @@
+---
+"updater": minor
+"updater-js": minor
+---
+
+Add allowDowngrades parameter to check command
+
+Added a new optional `allowDowngrades` parameter to the JavaScript check command that allows the updater to consider versions that are lower than the current version as valid updates. When enabled, the version comparator will accept any version that is different from the current version, effectively allowing downgrades.
diff --git a/.changes/autostart-feature.md b/.changes/autostart-feature.md
new file mode 100644
index 00000000..1d5d956e
--- /dev/null
+++ b/.changes/autostart-feature.md
@@ -0,0 +1,6 @@
+---
+autostart: minor
+autostart-js: minor
+---
+
+Added a new builder method app_name() to allow customizing the application name in the autostart entry.
\ No newline at end of file
diff --git a/.github/workflows/audit-javascript.yml b/.github/workflows/audit-javascript.yml
index 702811c2..f1a3ec3f 100644
--- a/.github/workflows/audit-javascript.yml
+++ b/.github/workflows/audit-javascript.yml
@@ -46,7 +46,7 @@ jobs:
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
- version: 9.x.x
+ version: 10.x.x
run_install: true
- name: audit
run: pnpm audit
diff --git a/.github/workflows/check-generated-files.yml b/.github/workflows/check-generated-files.yml
index d91cc2da..6a513b23 100644
--- a/.github/workflows/check-generated-files.yml
+++ b/.github/workflows/check-generated-files.yml
@@ -167,7 +167,7 @@ jobs:
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
- version: 9.x.x
+ version: 10.x.x
run_install: true
- name: build api
diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml
index 22e945af..34bd0178 100644
--- a/.github/workflows/covector-version-or-publish.yml
+++ b/.github/workflows/covector-version-or-publish.yml
@@ -39,7 +39,7 @@ jobs:
- uses: pnpm/action-setup@v4
with:
- version: 9.x.x
+ version: 10.x.x
run_install: true
- name: cargo login
@@ -75,7 +75,7 @@ jobs:
- name: Create Pull Request With Versions Bumped
id: cpr
- uses: tauri-apps/create-pull-request@v3
+ uses: peter-evans/create-pull-request@dd2324fc52d5d43c699a5636bcf19fceaa70c284 # 7.0.7
if: steps.covector.outputs.commandRan == 'version'
with:
title: 'Publish New Versions (${{ github.ref_name }})'
diff --git a/.github/workflows/fmt.yml b/.github/workflows/fmt.yml
index bd378799..087b7674 100644
--- a/.github/workflows/fmt.yml
+++ b/.github/workflows/fmt.yml
@@ -38,7 +38,7 @@ jobs:
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
- version: 9.x.x
+ version: 10.x.x
run_install: true
- run: pnpm format:check
diff --git a/.github/workflows/lint-javascript.yml b/.github/workflows/lint-javascript.yml
index df6b17d9..4c9db35e 100644
--- a/.github/workflows/lint-javascript.yml
+++ b/.github/workflows/lint-javascript.yml
@@ -49,7 +49,7 @@ jobs:
node-version: 'lts/*'
- uses: pnpm/action-setup@v4
with:
- version: 9.x.x
+ version: 10.x.x
run_install: true
- name: eslint
run: pnpm lint
diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml
index 3b8e70db..6764cf8a 100644
--- a/.github/workflows/sync.yml
+++ b/.github/workflows/sync.yml
@@ -38,7 +38,7 @@ jobs:
- uses: pnpm/action-setup@v4
with:
- version: 9.x.x
+ version: 10.x.x
run_install: true
- name: Build packages
diff --git a/.gitignore b/.gitignore
index 72e5a397..56b2e525 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,8 @@ target/
# .vscode workspace settings file
.vscode/settings.json
+.vscode/launch.json
+.vscode/tasks.json
# npm, yarn and bun lock files
package-lock.json
diff --git a/Cargo.lock b/Cargo.lock
index dcff853f..3f3071de 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -84,7 +84,7 @@ dependencies = [
"cfg-if",
"once_cell",
"version_check",
- "zerocopy",
+ "zerocopy 0.7.35",
]
[[package]]
@@ -125,15 +125,15 @@ checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
[[package]]
name = "android_log-sys"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937"
+checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d"
[[package]]
name = "android_logger"
-version = "0.14.1"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05b07e8e73d720a1f2e4b6014766e6039fd2e96a4fa44e2a78d0e1fa2ff49826"
+checksum = "f6f39be698127218cca460cb624878c9aa4e2b47dba3b277963d2bf00bad263b"
dependencies = [
"android_log-sys",
"env_filter",
@@ -190,23 +190,24 @@ dependencies = [
[[package]]
name = "anstyle-wincon"
-version = "3.0.6"
+version = "3.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125"
+checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
dependencies = [
"anstyle",
+ "once_cell",
"windows-sys 0.59.0",
]
[[package]]
name = "anyhow"
-version = "1.0.93"
+version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775"
+checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
[[package]]
name = "api"
-version = "2.0.18"
+version = "2.0.26"
dependencies = [
"log",
"serde",
@@ -233,6 +234,7 @@ dependencies = [
"tauri-plugin-store",
"tauri-plugin-updater",
"tauri-plugin-window-state",
+ "time",
"tiny_http",
]
@@ -283,19 +285,22 @@ dependencies = [
[[package]]
name = "arboard"
-version = "3.4.1"
+version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4"
+checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70"
dependencies = [
"clipboard-win",
- "core-graphics 0.23.2",
"image",
"log",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-foundation 0.3.0",
"parking_lot",
- "windows-sys 0.48.0",
+ "percent-encoding",
+ "windows-sys 0.59.0",
+ "wl-clipboard-rs",
"x11rb",
]
@@ -319,22 +324,19 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
[[package]]
name = "ashpd"
-version = "0.10.2"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3"
+checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df"
dependencies = [
"enumflags2",
"futures-channel",
"futures-util",
- "rand 0.8.5",
+ "rand 0.9.0",
"raw-window-handle",
"serde",
"serde_repr",
"tokio",
"url",
- "wayland-backend",
- "wayland-client",
- "wayland-protocols",
"zbus",
]
@@ -350,9 +352,9 @@ dependencies = [
[[package]]
name = "async-broadcast"
-version = "0.7.1"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e"
+checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
dependencies = [
"event-listener",
"event-listener-strategy",
@@ -374,9 +376,9 @@ dependencies = [
[[package]]
name = "async-compression"
-version = "0.4.18"
+version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522"
+checksum = "59a194f9d963d8099596278594b3107448656ba73831c9d8c783e613ce86da64"
dependencies = [
"brotli",
"flate2",
@@ -384,6 +386,8 @@ dependencies = [
"memchr",
"pin-project-lite",
"tokio",
+ "zstd",
+ "zstd-safe",
]
[[package]]
@@ -423,7 +427,7 @@ dependencies = [
"futures-lite",
"parking",
"polling",
- "rustix",
+ "rustix 0.38.44",
"slab",
"tracing",
"windows-sys 0.59.0",
@@ -455,7 +459,7 @@ dependencies = [
"cfg-if",
"event-listener",
"futures-lite",
- "rustix",
+ "rustix 0.38.44",
"tracing",
]
@@ -467,7 +471,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -482,7 +486,7 @@ dependencies = [
"cfg-if",
"futures-core",
"futures-io",
- "rustix",
+ "rustix 0.38.44",
"signal-hook-registry",
"slab",
"windows-sys 0.59.0",
@@ -496,20 +500,20 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
[[package]]
name = "async-trait"
-version = "0.1.83"
+version = "0.1.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
+checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "atk"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4"
+checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b"
dependencies = [
"atk-sys",
"glib",
@@ -518,9 +522,9 @@ dependencies = [
[[package]]
name = "atk-sys"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009"
+checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086"
dependencies = [
"glib-sys",
"gobject-sys",
@@ -622,9 +626,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.7.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
dependencies = [
"serde",
]
@@ -652,21 +656,15 @@ dependencies = [
[[package]]
name = "blake2b_simd"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780"
+checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99"
dependencies = [
"arrayref",
"arrayvec",
"constant_time_eq 0.3.1",
]
-[[package]]
-name = "block"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
-
[[package]]
name = "block-buffer"
version = "0.10.4"
@@ -685,32 +683,22 @@ dependencies = [
"generic-array",
]
-[[package]]
-name = "block-sys"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7"
-dependencies = [
- "objc-sys",
-]
-
[[package]]
name = "block2"
-version = "0.4.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e58aa60e59d8dbfcc36138f5f18be5f24394d33b38b24f7fd0b1caa33095f22f"
+checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
dependencies = [
- "block-sys",
- "objc2",
+ "objc2 0.5.2",
]
[[package]]
name = "block2"
-version = "0.5.1"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
+checksum = "1d59b4c170e16f0405a2e95aff44432a0d41aa97675f3d52623effe95792a037"
dependencies = [
- "objc2",
+ "objc2 0.6.0",
]
[[package]]
@@ -728,9 +716,9 @@ dependencies = [
[[package]]
name = "borsh"
-version = "1.5.3"
+version = "1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03"
+checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce"
dependencies = [
"borsh-derive",
"cfg_aliases",
@@ -738,15 +726,15 @@ dependencies = [
[[package]]
name = "borsh-derive"
-version = "1.5.3"
+version = "1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244"
+checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3"
dependencies = [
"once_cell",
- "proc-macro-crate 3.2.0",
+ "proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -762,9 +750,9 @@ dependencies = [
[[package]]
name = "brotli-decompressor"
-version = "4.0.1"
+version = "4.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362"
+checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -772,9 +760,9 @@ dependencies = [
[[package]]
name = "bumpalo"
-version = "3.16.0"
+version = "3.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
[[package]]
name = "byte-unit"
@@ -811,9 +799,9 @@ dependencies = [
[[package]]
name = "bytemuck"
-version = "1.20.0"
+version = "1.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a"
+checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540"
[[package]]
name = "byteorder"
@@ -829,9 +817,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
[[package]]
name = "bytes"
-version = "1.9.0"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
dependencies = [
"serde",
]
@@ -842,7 +830,7 @@ version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"cairo-sys-rs",
"glib",
"libc",
@@ -895,20 +883,22 @@ dependencies = [
[[package]]
name = "cargo_toml"
-version = "0.21.0"
+version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fbd1fe9db3ebf71b89060adaf7b0504c2d6a425cf061313099547e382c2e472"
+checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257"
dependencies = [
"serde",
- "toml 0.8.19",
+ "toml",
]
[[package]]
name = "cc"
-version = "1.2.2"
+version = "1.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc"
+checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362"
dependencies = [
+ "jobserver",
+ "libc",
"shlex",
]
@@ -977,15 +967,15 @@ dependencies = [
[[package]]
name = "chrono"
-version = "0.4.38"
+version = "0.4.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
dependencies = [
"android-tzdata",
"iana-time-zone",
"num-traits",
"serde",
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
@@ -1007,18 +997,18 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.5.21"
+version = "4.5.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f"
+checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
-version = "4.5.21"
+version = "4.5.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec"
+checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5"
dependencies = [
"anstream",
"anstyle",
@@ -1028,9 +1018,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.7.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7"
+checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
[[package]]
name = "clipboard-win"
@@ -1041,36 +1031,6 @@ dependencies = [
"error-code",
]
-[[package]]
-name = "cocoa"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2"
-dependencies = [
- "bitflags 2.7.0",
- "block",
- "cocoa-foundation",
- "core-foundation 0.10.0",
- "core-graphics 0.24.0",
- "foreign-types 0.5.0",
- "libc",
- "objc",
-]
-
-[[package]]
-name = "cocoa-foundation"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d"
-dependencies = [
- "bitflags 2.7.0",
- "block",
- "core-foundation 0.10.0",
- "core-graphics-types 0.2.0",
- "libc",
- "objc",
-]
-
[[package]]
name = "color-backtrace"
version = "0.7.0"
@@ -1089,12 +1049,12 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
[[package]]
name = "colored"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
+checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
dependencies = [
"lazy_static",
- "windows-sys 0.48.0",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1215,50 +1175,26 @@ version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
-[[package]]
-name = "core-graphics"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
-dependencies = [
- "bitflags 1.3.2",
- "core-foundation 0.9.4",
- "core-graphics-types 0.1.3",
- "foreign-types 0.5.0",
- "libc",
-]
-
[[package]]
name = "core-graphics"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"core-foundation 0.10.0",
- "core-graphics-types 0.2.0",
+ "core-graphics-types",
"foreign-types 0.5.0",
"libc",
]
-[[package]]
-name = "core-graphics-types"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
-dependencies = [
- "bitflags 1.3.2",
- "core-foundation 0.9.4",
- "libc",
-]
-
[[package]]
name = "core-graphics-types"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"core-foundation 0.10.0",
"libc",
]
@@ -1274,9 +1210,9 @@ dependencies = [
[[package]]
name = "cpufeatures"
-version = "0.2.16"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
"libc",
]
@@ -1307,33 +1243,33 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
-version = "0.5.13"
+version = "0.5.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2"
+checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-queue"
-version = "0.3.11"
+version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
+checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
-version = "0.8.20"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crunchy"
-version = "0.2.2"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
[[package]]
name = "crypto-bigint"
@@ -1382,7 +1318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -1392,7 +1328,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
dependencies = [
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -1428,14 +1364,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "darling"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
@@ -1443,27 +1379,27 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "darling_macro"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -1474,9 +1410,9 @@ checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728"
[[package]]
name = "data-encoding"
-version = "2.6.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
+checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
[[package]]
name = "data-url"
@@ -1511,9 +1447,9 @@ dependencies = [
[[package]]
name = "deranged"
-version = "0.3.11"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
dependencies = [
"powerfmt",
"serde",
@@ -1527,20 +1463,20 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "derive_more"
-version = "0.99.18"
+version = "0.99.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
+checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f"
dependencies = [
"convert_case",
"proc-macro2",
"quote",
"rustc_version",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -1564,15 +1500,6 @@ dependencies = [
"dirs-sys 0.3.7",
]
-[[package]]
-name = "dirs"
-version = "5.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
-dependencies = [
- "dirs-sys 0.4.1",
-]
-
[[package]]
name = "dirs"
version = "6.0.0"
@@ -1603,18 +1530,6 @@ dependencies = [
"winapi",
]
-[[package]]
-name = "dirs-sys"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
-dependencies = [
- "libc",
- "option-ext",
- "redox_users 0.4.6",
- "windows-sys 0.48.0",
-]
-
[[package]]
name = "dirs-sys"
version = "0.5.0"
@@ -1645,23 +1560,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
[[package]]
-name = "displaydoc"
-version = "0.2.5"
+name = "dispatch2"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+checksum = "1a0d569e003ff27784e0e14e4a594048698e0c0f0b66cabcb51511be55a7caa0"
dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.90",
+ "bitflags 2.9.0",
+ "block2 0.6.0",
+ "libc",
+ "objc2 0.6.0",
]
[[package]]
-name = "dlib"
-version = "0.5.2"
+name = "displaydoc"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
- "libloading 0.8.6",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
]
[[package]]
@@ -1684,7 +1602,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -1698,9 +1616,9 @@ dependencies = [
[[package]]
name = "document-features"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0"
+checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
dependencies = [
"litrs",
]
@@ -1728,9 +1646,9 @@ dependencies = [
[[package]]
name = "dtoa"
-version = "1.0.9"
+version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
+checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04"
[[package]]
name = "dtoa-short"
@@ -1749,9 +1667,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
[[package]]
name = "dyn-clone"
-version = "1.0.17"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
+checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005"
[[package]]
name = "ecdsa"
@@ -1793,9 +1711,9 @@ dependencies = [
[[package]]
name = "either"
-version = "1.13.0"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
dependencies = [
"serde",
]
@@ -1821,14 +1739,14 @@ dependencies = [
[[package]]
name = "embed-resource"
-version = "2.5.1"
+version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b68b6f9f63a0b6a38bc447d4ce84e2b388f3ec95c99c641c8ff0dd3ef89a6379"
+checksum = "7fbc6e0d8e0c03a655b53ca813f0463d2c956bc4db8138dbc89f120b066551e3"
dependencies = [
"cc",
"memchr",
"rustc_version",
- "toml 0.8.19",
+ "toml",
"vswhom",
"winreg 0.52.0",
]
@@ -1856,9 +1774,9 @@ checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
[[package]]
name = "enumflags2"
-version = "0.7.10"
+version = "0.7.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d"
+checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147"
dependencies = [
"enumflags2_derive",
"serde",
@@ -1866,20 +1784,20 @@ dependencies = [
[[package]]
name = "enumflags2_derive"
-version = "0.7.10"
+version = "0.7.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
+checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "env_filter"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab"
+checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
dependencies = [
"log",
"regex",
@@ -1887,15 +1805,15 @@ dependencies = [
[[package]]
name = "equivalent"
-version = "1.0.1"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "erased-serde"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d"
+checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
dependencies = [
"serde",
"typeid",
@@ -1903,9 +1821,9 @@ dependencies = [
[[package]]
name = "errno"
-version = "0.3.10"
+version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
+checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
dependencies = [
"libc",
"windows-sys 0.59.0",
@@ -1930,9 +1848,9 @@ dependencies = [
[[package]]
name = "event-listener"
-version = "5.3.1"
+version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
+checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
dependencies = [
"concurrent-queue",
"parking",
@@ -1941,9 +1859,9 @@ dependencies = [
[[package]]
name = "event-listener-strategy"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2"
+checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
dependencies = [
"event-listener",
"pin-project-lite",
@@ -1951,24 +1869,24 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "fdeflate"
-version = "0.3.6"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07c6f4c64c1d33a3111c4466f7365ebdcc37c5bd1ea0d62aae2e3d722aacbedb"
+checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
dependencies = [
"simd-adler32",
]
[[package]]
name = "fern"
-version = "0.7.0"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69ff9c9d5fb3e6da8ac2f77ab76fe7e8087d512ce095200f8f29ac5b656cf6dc"
+checksum = "4316185f709b23713e41e3195f90edef7fb00c3ed4adc79769cf09cc762a3b29"
dependencies = [
"colored",
"log",
@@ -1976,9 +1894,9 @@ dependencies = [
[[package]]
name = "ff"
-version = "0.13.0"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
dependencies = [
"rand_core 0.6.4",
"subtle",
@@ -2021,11 +1939,17 @@ dependencies = [
"windows-sys 0.59.0",
]
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
[[package]]
name = "flate2"
-version = "1.0.35"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c"
+checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -2048,6 +1972,12 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+[[package]]
+name = "foldhash"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+
[[package]]
name = "foreign-types"
version = "0.3.2"
@@ -2075,7 +2005,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -2185,9 +2115,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]]
name = "futures-lite"
-version = "2.5.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1"
+checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
dependencies = [
"fastrand",
"futures-core",
@@ -2204,7 +2134,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -2248,9 +2178,9 @@ dependencies = [
[[package]]
name = "gdk"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646"
+checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691"
dependencies = [
"cairo-rs",
"gdk-pixbuf",
@@ -2289,9 +2219,9 @@ dependencies = [
[[package]]
name = "gdk-sys"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2"
+checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@@ -2306,9 +2236,9 @@ dependencies = [
[[package]]
name = "gdkwayland-sys"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a"
+checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69"
dependencies = [
"gdk-sys",
"glib-sys",
@@ -2320,9 +2250,9 @@ dependencies = [
[[package]]
name = "gdkx11"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce"
+checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe"
dependencies = [
"gdk",
"gdkx11-sys",
@@ -2334,9 +2264,9 @@ dependencies = [
[[package]]
name = "gdkx11-sys"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043"
+checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d"
dependencies = [
"gdk-sys",
"glib-sys",
@@ -2368,11 +2298,11 @@ dependencies = [
[[package]]
name = "gethostname"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fd4b8790c0792e3b11895efdf5f289ebe8b59107a6624f1cce68f24ff8c7035"
+checksum = "ed7131e57abbde63513e0e6636f76668a1ca9798dcae2df4e283cae9ee83859e"
dependencies = [
- "rustix",
+ "rustix 1.0.5",
"windows-targets 0.52.6",
]
@@ -2400,6 +2330,20 @@ dependencies = [
"wasm-bindgen",
]
+[[package]]
+name = "getrandom"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "r-efi",
+ "wasi 0.14.2+wasi-0.2.4",
+ "wasm-bindgen",
+]
+
[[package]]
name = "ghash"
version = "0.5.1"
@@ -2454,7 +2398,7 @@ version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"futures-channel",
"futures-core",
"futures-executor",
@@ -2482,7 +2426,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -2497,25 +2441,26 @@ dependencies = [
[[package]]
name = "glob"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
[[package]]
name = "global-hotkey"
-version = "0.6.3"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b00d88f1be7bf4cd2e61623ce08e84be2dfa4eab458e5d632d3dab95f16c1f64"
+checksum = "b9247516746aa8e53411a0db9b62b0e24efbcf6a76e0ba73e5a91b512ddabed7"
dependencies = [
"crossbeam-channel",
"keyboard-types",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
"once_cell",
"serde",
- "thiserror 1.0.69",
+ "thiserror 2.0.12",
"windows-sys 0.59.0",
- "x11-dl",
+ "x11rb",
+ "xkeysym",
]
[[package]]
@@ -2542,9 +2487,9 @@ dependencies = [
[[package]]
name = "gtk"
-version = "0.18.1"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c"
+checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a"
dependencies = [
"atk",
"cairo-rs",
@@ -2563,9 +2508,9 @@ dependencies = [
[[package]]
name = "gtk-sys"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722"
+checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414"
dependencies = [
"atk-sys",
"cairo-sys-rs",
@@ -2581,22 +2526,22 @@ dependencies = [
[[package]]
name = "gtk3-macros"
-version = "0.18.0"
+version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e"
+checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d"
dependencies = [
"proc-macro-crate 1.3.1",
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "h2"
-version = "0.4.7"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e"
+checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633"
dependencies = [
"atomic-waker",
"bytes",
@@ -2604,7 +2549,7 @@ dependencies = [
"futures-core",
"futures-sink",
"http",
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"slab",
"tokio",
"tokio-util",
@@ -2635,14 +2580,19 @@ name = "hashbrown"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
+dependencies = [
+ "allocator-api2",
+ "equivalent",
+ "foldhash",
+]
[[package]]
name = "hashlink"
-version = "0.9.1"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af"
+checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
dependencies = [
- "hashbrown 0.14.5",
+ "hashbrown 0.15.2",
]
[[package]]
@@ -2712,13 +2662,13 @@ dependencies = [
[[package]]
name = "http"
-version = "1.1.0"
+version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
+checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
dependencies = [
"bytes",
"fnv",
- "itoa 1.0.14",
+ "itoa 1.0.15",
]
[[package]]
@@ -2733,12 +2683,12 @@ dependencies = [
[[package]]
name = "http-body-util"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
+checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
dependencies = [
"bytes",
- "futures-util",
+ "futures-core",
"http",
"http-body",
"pin-project-lite",
@@ -2752,9 +2702,9 @@ checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
[[package]]
name = "httparse"
-version = "1.9.5"
+version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
[[package]]
name = "httpdate"
@@ -2764,9 +2714,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hyper"
-version = "1.5.1"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f"
+checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
dependencies = [
"bytes",
"futures-channel",
@@ -2776,7 +2726,7 @@ dependencies = [
"http-body",
"httparse",
"httpdate",
- "itoa 1.0.14",
+ "itoa 1.0.15",
"pin-project-lite",
"smallvec",
"tokio",
@@ -2785,9 +2735,9 @@ dependencies = [
[[package]]
name = "hyper-rustls"
-version = "0.27.3"
+version = "0.27.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333"
+checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
dependencies = [
"futures-util",
"http",
@@ -2820,9 +2770,9 @@ dependencies = [
[[package]]
name = "hyper-util"
-version = "0.1.10"
+version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
+checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
dependencies = [
"bytes",
"futures-channel",
@@ -2830,6 +2780,7 @@ dependencies = [
"http",
"http-body",
"hyper",
+ "libc",
"pin-project-lite",
"socket2",
"tokio",
@@ -2839,16 +2790,17 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.61"
+version = "0.1.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
+ "log",
"wasm-bindgen",
- "windows-core 0.52.0",
+ "windows-core",
]
[[package]]
@@ -2862,24 +2814,14 @@ dependencies = [
[[package]]
name = "ico"
-version = "0.3.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae"
+checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98"
dependencies = [
"byteorder",
"png",
]
-[[package]]
-name = "icrate"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fb69199826926eb864697bddd27f73d9fddcffc004f5733131e15b465e30642"
-dependencies = [
- "block2 0.4.0",
- "objc2",
-]
-
[[package]]
name = "icu_collections"
version = "1.5.0"
@@ -2921,9 +2863,9 @@ dependencies = [
[[package]]
name = "icu_locid_transform_data"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
+checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d"
[[package]]
name = "icu_normalizer"
@@ -2945,9 +2887,9 @@ dependencies = [
[[package]]
name = "icu_normalizer_data"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
+checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7"
[[package]]
name = "icu_properties"
@@ -2966,9 +2908,9 @@ dependencies = [
[[package]]
name = "icu_properties_data"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
+checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2"
[[package]]
name = "icu_provider"
@@ -2995,7 +2937,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -3027,9 +2969,9 @@ dependencies = [
[[package]]
name = "image"
-version = "0.25.5"
+version = "0.25.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b"
+checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a"
dependencies = [
"bytemuck",
"byteorder-lite",
@@ -3051,24 +2993,15 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.7.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
+checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
dependencies = [
"equivalent",
"hashbrown 0.15.2",
"serde",
]
-[[package]]
-name = "infer"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847"
-dependencies = [
- "cfb",
-]
-
[[package]]
name = "infer"
version = "0.19.0"
@@ -3084,7 +3017,7 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"inotify-sys",
"libc",
]
@@ -3100,9 +3033,9 @@ dependencies = [
[[package]]
name = "inout"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01"
dependencies = [
"block-padding",
"generic-array",
@@ -3162,9 +3095,9 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.10.1"
+version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
+checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
[[package]]
name = "is-docker"
@@ -3205,9 +3138,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "itoa"
-version = "1.0.14"
+version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "javascriptcore-rs"
@@ -3254,6 +3187,16 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+[[package]]
+name = "jobserver"
+version = "0.1.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
+dependencies = [
+ "getrandom 0.3.2",
+ "libc",
+]
+
[[package]]
name = "jpeg-decoder"
version = "0.3.1"
@@ -3262,9 +3205,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
[[package]]
name = "js-sys"
-version = "0.3.74"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -3311,7 +3254,7 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"serde",
"unicode-segmentation",
]
@@ -3378,15 +3321,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf"
dependencies = [
"gtk-sys",
- "libloading 0.7.4",
+ "libloading",
"once_cell",
]
[[package]]
name = "libc"
-version = "0.2.167"
+version = "0.2.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc"
+checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
[[package]]
name = "libflate"
@@ -3422,16 +3365,6 @@ dependencies = [
"winapi",
]
-[[package]]
-name = "libloading"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
-dependencies = [
- "cfg-if",
- "windows-targets 0.52.6",
-]
-
[[package]]
name = "libm"
version = "0.2.11"
@@ -3444,16 +3377,16 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"libc",
"redox_syscall",
]
[[package]]
name = "libsodium-sys-stable"
-version = "1.22.1"
+version = "1.22.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "798a1c6d8c3424c0686ca46f2929d81809b371ef61a68c5d1880570584d32b85"
+checksum = "b023d38f2afdfe36f81e15a9d7232097701d7b107e3a93ba903083985e235239"
dependencies = [
"cc",
"libc",
@@ -3463,7 +3396,7 @@ dependencies = [
"tar",
"ureq",
"vcpkg",
- "zip",
+ "zip 2.6.1",
]
[[package]]
@@ -3479,12 +3412,18 @@ dependencies = [
[[package]]
name = "linux-raw-sys"
-version = "0.4.14"
+version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
+checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
-name = "litemap"
+name = "linux-raw-sys"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
+
+[[package]]
+name = "litemap"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
@@ -3513,9 +3452,9 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e"
[[package]]
name = "log"
-version = "0.4.22"
+version = "0.4.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
dependencies = [
"value-bag",
]
@@ -3528,26 +3467,16 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
[[package]]
name = "mac-notification-sys"
-version = "0.6.2"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dce8f34f3717aa37177e723df6c1fc5fb02b2a1087374ea3fe0ea42316dc8f91"
+checksum = "0b95dfb34071d1592b45622bf93e315e3a72d414b6782aca9a015c12bec367ef"
dependencies = [
"cc",
- "dirs-next",
- "objc-foundation",
- "objc_id",
+ "objc2 0.6.0",
+ "objc2-foundation 0.3.0",
"time",
]
-[[package]]
-name = "malloc_buf"
-version = "0.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
-dependencies = [
- "libc",
-]
-
[[package]]
name = "maplit"
version = "1.0.2"
@@ -3632,15 +3561,15 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "minisign-verify"
-version = "0.2.2"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a05b5d0594e0cb1ad8cee3373018d2b84e25905dc75b2468114cc9a8e86cfc20"
+checksum = "6367d84fb54d4242af283086402907277715b8fe46976963af5ebf173f8efba3"
[[package]]
name = "miniz_oxide"
-version = "0.8.0"
+version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
+checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
dependencies = [
"adler2",
"simd-adler32",
@@ -3660,9 +3589,9 @@ dependencies = [
[[package]]
name = "mockito"
-version = "1.6.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "652cd6d169a36eaf9d1e6bce1a221130439a966d7f27858af66a33a66e9c4ee2"
+checksum = "7760e0e418d9b7e5777c0374009ca4c93861b9066f18cb334a20ce50ab63aa48"
dependencies = [
"assert-json-diff",
"bytes",
@@ -3674,7 +3603,7 @@ dependencies = [
"hyper",
"hyper-util",
"log",
- "rand 0.8.5",
+ "rand 0.9.0",
"regex",
"serde_json",
"serde_urlencoded",
@@ -3684,21 +3613,22 @@ dependencies = [
[[package]]
name = "muda"
-version = "0.15.3"
+version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484"
+checksum = "4de14a9b5d569ca68d7c891d613b390cf5ab4f851c77aaa2f9e435555d3d9492"
dependencies = [
"crossbeam-channel",
"dpi",
"gtk",
"keyboard-types",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.0",
"once_cell",
"png",
"serde",
- "thiserror 1.0.69",
+ "thiserror 2.0.12",
"windows-sys 0.59.0",
]
@@ -3725,7 +3655,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"jni-sys",
"log",
"ndk-sys",
@@ -3773,7 +3703,7 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"cfg-if",
"cfg_aliases",
"libc",
@@ -3802,7 +3732,7 @@ version = "8.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"filetime",
"fsevent-sys",
"inotify",
@@ -3830,10 +3760,11 @@ dependencies = [
[[package]]
name = "notify-rust"
-version = "4.11.4"
+version = "4.11.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96ae13fb6065b0865d2310dfa55ce319245052ed95fbbe2bc87c99962c58d73f"
+checksum = "6442248665a5aa2514e794af3b39661a8e73033b1cc5e59899e1276117ee4400"
dependencies = [
+ "futures-lite",
"log",
"mac-notification-sys",
"serde",
@@ -3918,10 +3849,10 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
dependencies = [
- "proc-macro-crate 3.2.0",
+ "proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -3933,34 +3864,11 @@ dependencies = [
"libc",
]
-[[package]]
-name = "objc"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
-dependencies = [
- "malloc_buf",
-]
-
-[[package]]
-name = "objc-foundation"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
-dependencies = [
- "block",
- "objc",
- "objc_id",
-]
-
[[package]]
name = "objc-sys"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
-dependencies = [
- "cc",
-]
[[package]]
name = "objc2"
@@ -3972,87 +3880,103 @@ dependencies = [
"objc2-encode",
]
+[[package]]
+name = "objc2"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59"
+dependencies = [
+ "objc2-encode",
+ "objc2-exception-helper",
+]
+
[[package]]
name = "objc2-app-kit"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
+checksum = "5906f93257178e2f7ae069efb89fbd6ee94f0592740b5f8a1512ca498814d0fb"
dependencies = [
- "bitflags 2.7.0",
- "block2 0.5.1",
+ "bitflags 2.9.0",
+ "block2 0.6.0",
"libc",
- "objc2",
+ "objc2 0.6.0",
+ "objc2-cloud-kit",
"objc2-core-data",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
"objc2-core-image",
- "objc2-foundation",
- "objc2-quartz-core",
+ "objc2-foundation 0.3.0",
+ "objc2-quartz-core 0.3.0",
]
[[package]]
name = "objc2-cloud-kit"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
+checksum = "6c1948a9be5f469deadbd6bcb86ad7ff9e47b4f632380139722f7d9840c0d42c"
dependencies = [
- "bitflags 2.7.0",
- "block2 0.5.1",
- "objc2",
- "objc2-core-location",
- "objc2-foundation",
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
+ "objc2-foundation 0.3.0",
]
[[package]]
-name = "objc2-contacts"
-version = "0.2.2"
+name = "objc2-core-data"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
+checksum = "1f860f8e841f6d32f754836f51e6bc7777cd7e7053cf18528233f6811d3eceb4"
dependencies = [
- "block2 0.5.1",
- "objc2",
- "objc2-foundation",
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
+ "objc2-foundation 0.3.0",
]
[[package]]
-name = "objc2-core-data"
-version = "0.2.2"
+name = "objc2-core-foundation"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
+checksum = "daeaf60f25471d26948a1c2f840e3f7d86f4109e3af4e8e4b5cd70c39690d925"
dependencies = [
- "bitflags 2.7.0",
- "block2 0.5.1",
- "objc2",
- "objc2-foundation",
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
]
[[package]]
-name = "objc2-core-image"
-version = "0.2.2"
+name = "objc2-core-graphics"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
+checksum = "f8dca602628b65356b6513290a21a6405b4d4027b8b250f0b98dddbb28b7de02"
dependencies = [
- "block2 0.5.1",
- "objc2",
- "objc2-foundation",
- "objc2-metal",
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
+ "objc2-core-foundation",
+ "objc2-io-surface",
]
[[package]]
-name = "objc2-core-location"
-version = "0.2.2"
+name = "objc2-core-image"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
+checksum = "6ffa6bea72bf42c78b0b34e89c0bafac877d5f80bf91e159a5d96ea7f693ca56"
dependencies = [
- "block2 0.5.1",
- "objc2",
- "objc2-contacts",
- "objc2-foundation",
+ "objc2 0.6.0",
+ "objc2-foundation 0.3.0",
]
[[package]]
name = "objc2-encode"
-version = "4.0.3"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
+
+[[package]]
+name = "objc2-exception-helper"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8"
+checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a"
+dependencies = [
+ "cc",
+]
[[package]]
name = "objc2-foundation"
@@ -4060,23 +3984,34 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"block2 0.5.1",
- "dispatch",
"libc",
- "objc2",
+ "objc2 0.5.2",
]
[[package]]
-name = "objc2-link-presentation"
-version = "0.2.2"
+name = "objc2-foundation"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
+checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998"
dependencies = [
- "block2 0.5.1",
- "objc2",
- "objc2-app-kit",
- "objc2-foundation",
+ "bitflags 2.9.0",
+ "block2 0.6.0",
+ "libc",
+ "objc2 0.6.0",
+ "objc2-core-foundation",
+]
+
+[[package]]
+name = "objc2-io-surface"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "161a8b87e32610086e1a7a9e9ec39f84459db7b3a0881c1f16ca5a2605581c19"
+dependencies = [
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
+ "objc2-core-foundation",
]
[[package]]
@@ -4085,22 +4020,22 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"block2 0.5.1",
- "objc2",
- "objc2-foundation",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
]
[[package]]
name = "objc2-osa-kit"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6788b04a18ea31e3dc3ab256b8546639e5bbae07c1a0dc4ea8615252bc6aee9a"
+checksum = "a1ac59da3ceebc4a82179b35dc550431ad9458f9cc326e053f49ba371ce76c5a"
dependencies = [
- "bitflags 2.7.0",
- "objc2",
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-foundation 0.3.0",
]
[[package]]
@@ -4109,104 +4044,64 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"block2 0.5.1",
- "objc2",
- "objc2-foundation",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
"objc2-metal",
]
[[package]]
-name = "objc2-symbols"
-version = "0.2.2"
+name = "objc2-quartz-core"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
+checksum = "6fb3794501bb1bee12f08dcad8c61f2a5875791ad1c6f47faa71a0f033f20071"
dependencies = [
- "objc2",
- "objc2-foundation",
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
+ "objc2-foundation 0.3.0",
]
[[package]]
name = "objc2-ui-kit"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
-dependencies = [
- "bitflags 2.7.0",
- "block2 0.5.1",
- "objc2",
- "objc2-cloud-kit",
- "objc2-core-data",
- "objc2-core-image",
- "objc2-core-location",
- "objc2-foundation",
- "objc2-link-presentation",
- "objc2-quartz-core",
- "objc2-symbols",
- "objc2-uniform-type-identifiers",
- "objc2-user-notifications",
-]
-
-[[package]]
-name = "objc2-uniform-type-identifiers"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
-dependencies = [
- "block2 0.5.1",
- "objc2",
- "objc2-foundation",
-]
-
-[[package]]
-name = "objc2-user-notifications"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
+checksum = "777a571be14a42a3990d4ebedaeb8b54cd17377ec21b92e8200ac03797b3bee1"
dependencies = [
- "bitflags 2.7.0",
- "block2 0.5.1",
- "objc2",
- "objc2-core-location",
- "objc2-foundation",
+ "bitflags 2.9.0",
+ "objc2 0.6.0",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.0",
]
[[package]]
name = "objc2-web-kit"
-version = "0.2.2"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65"
+checksum = "b717127e4014b0f9f3e8bba3d3f2acec81f1bde01f656823036e823ed2c94dce"
dependencies = [
- "bitflags 2.7.0",
- "block2 0.5.1",
- "objc2",
+ "bitflags 2.9.0",
+ "block2 0.6.0",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
-]
-
-[[package]]
-name = "objc_id"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
-dependencies = [
- "objc",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.0",
]
[[package]]
name = "object"
-version = "0.36.5"
+version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
-version = "1.20.2"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "opaque-debug"
@@ -4216,10 +4111,11 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
[[package]]
name = "open"
-version = "5.3.1"
+version = "5.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ecd52f0b8d15c40ce4820aa251ed5de032e5d91fab27f7db2f40d42a8bdf69c"
+checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95"
dependencies = [
+ "dunce",
"is-wsl",
"libc",
"pathdiff",
@@ -4227,11 +4123,11 @@ dependencies = [
[[package]]
name = "openssl"
-version = "0.10.68"
+version = "0.10.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5"
+checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"cfg-if",
"foreign-types 0.3.2",
"libc",
@@ -4248,29 +4144,29 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "openssl-probe"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
[[package]]
name = "openssl-src"
-version = "300.4.1+3.4.0"
+version = "300.5.0+3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c"
+checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f"
dependencies = [
"cc",
]
[[package]]
name = "openssl-sys"
-version = "0.9.104"
+version = "0.9.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741"
+checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07"
dependencies = [
"cc",
"libc",
@@ -4307,9 +4203,9 @@ dependencies = [
[[package]]
name = "os_info"
-version = "3.9.0"
+version = "3.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5ca711d8b83edbb00b44d504503cd247c9c0bd8b0fa2694f2a1a3d8165379ce"
+checksum = "2a604e53c24761286860eba4e2c8b23a0161526476b1de520139d69cdb85a6b5"
dependencies = [
"log",
"serde",
@@ -4328,16 +4224,16 @@ dependencies = [
[[package]]
name = "osakit"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35366a452fce3f8947eb2f33226a133aaf0cacedef2af67ade348d58be7f85d0"
+checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b"
dependencies = [
- "icrate",
- "objc2-foundation",
+ "objc2 0.6.0",
+ "objc2-foundation 0.3.0",
"objc2-osa-kit",
"serde",
"serde_json",
- "thiserror 1.0.69",
+ "thiserror 2.0.12",
]
[[package]]
@@ -4431,6 +4327,16 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+[[package]]
+name = "petgraph"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.9.0",
+]
+
[[package]]
name = "phf"
version = "0.8.0"
@@ -4453,12 +4359,12 @@ dependencies = [
[[package]]
name = "phf"
-version = "0.11.2"
+version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
dependencies = [
- "phf_macros 0.11.2",
- "phf_shared 0.11.2",
+ "phf_macros 0.11.3",
+ "phf_shared 0.11.3",
]
[[package]]
@@ -4503,11 +4409,11 @@ dependencies = [
[[package]]
name = "phf_generator"
-version = "0.11.2"
+version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
dependencies = [
- "phf_shared 0.11.2",
+ "phf_shared 0.11.3",
"rand 0.8.5",
]
@@ -4527,15 +4433,15 @@ dependencies = [
[[package]]
name = "phf_macros"
-version = "0.11.2"
+version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
dependencies = [
- "phf_generator 0.11.2",
- "phf_shared 0.11.2",
+ "phf_generator 0.11.3",
+ "phf_shared 0.11.3",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -4544,7 +4450,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
dependencies = [
- "siphasher",
+ "siphasher 0.3.11",
]
[[package]]
@@ -4553,23 +4459,23 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
dependencies = [
- "siphasher",
+ "siphasher 0.3.11",
]
[[package]]
name = "phf_shared"
-version = "0.11.2"
+version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
dependencies = [
- "siphasher",
+ "siphasher 1.0.1",
]
[[package]]
name = "pin-project-lite"
-version = "0.2.15"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
[[package]]
name = "pin-utils"
@@ -4611,18 +4517,18 @@ dependencies = [
[[package]]
name = "pkg-config"
-version = "0.3.31"
+version = "0.3.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
+checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "plist"
-version = "1.7.0"
+version = "1.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016"
+checksum = "eac26e981c03a6e53e0aee43c113e3202f5581d5360dae7bd2c70e800dd0451d"
dependencies = [
"base64 0.22.1",
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"quick-xml 0.32.0",
"serde",
"time",
@@ -4630,9 +4536,9 @@ dependencies = [
[[package]]
name = "png"
-version = "0.17.14"
+version = "0.17.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0"
+checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
dependencies = [
"bitflags 1.3.2",
"crc32fast",
@@ -4651,7 +4557,7 @@ dependencies = [
"concurrent-queue",
"hermit-abi",
"pin-project-lite",
- "rustix",
+ "rustix 0.38.44",
"tracing",
"windows-sys 0.59.0",
]
@@ -4687,11 +4593,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
-version = "0.2.20"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
- "zerocopy",
+ "zerocopy 0.8.24",
]
[[package]]
@@ -4721,11 +4627,11 @@ dependencies = [
[[package]]
name = "proc-macro-crate"
-version = "3.2.0"
+version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b"
+checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
dependencies = [
- "toml_edit 0.22.22",
+ "toml_edit 0.22.24",
]
[[package]]
@@ -4760,9 +4666,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.92"
+version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
dependencies = [
"unicode-ident",
]
@@ -4809,15 +4715,6 @@ version = "1.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-[[package]]
-name = "quick-xml"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "quick-xml"
version = "0.32.0"
@@ -4829,46 +4726,48 @@ dependencies = [
[[package]]
name = "quick-xml"
-version = "0.36.2"
+version = "0.37.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
+checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369"
dependencies = [
"memchr",
]
[[package]]
name = "quinn"
-version = "0.11.6"
+version = "0.11.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef"
+checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012"
dependencies = [
"bytes",
+ "cfg_aliases",
"pin-project-lite",
"quinn-proto",
"quinn-udp",
"rustc-hash",
"rustls",
"socket2",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tokio",
"tracing",
+ "web-time",
]
[[package]]
name = "quinn-proto"
-version = "0.11.9"
+version = "0.11.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d"
+checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc"
dependencies = [
"bytes",
- "getrandom 0.2.15",
- "rand 0.8.5",
+ "getrandom 0.3.2",
+ "rand 0.9.0",
"ring",
"rustc-hash",
"rustls",
"rustls-pki-types",
"slab",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tinyvec",
"tracing",
"web-time",
@@ -4876,9 +4775,9 @@ dependencies = [
[[package]]
name = "quinn-udp"
-version = "0.5.7"
+version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da"
+checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5"
dependencies = [
"cfg_aliases",
"libc",
@@ -4890,13 +4789,19 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.37"
+version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
dependencies = [
"proc-macro2",
]
+[[package]]
+name = "r-efi"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
+
[[package]]
name = "radium"
version = "0.7.0"
@@ -4928,6 +4833,17 @@ dependencies = [
"rand_core 0.6.4",
]
+[[package]]
+name = "rand"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
+dependencies = [
+ "rand_chacha 0.9.0",
+ "rand_core 0.9.3",
+ "zerocopy 0.8.24",
+]
+
[[package]]
name = "rand_chacha"
version = "0.2.2"
@@ -4948,6 +4864,16 @@ dependencies = [
"rand_core 0.6.4",
]
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.3",
+]
+
[[package]]
name = "rand_core"
version = "0.5.1"
@@ -4966,6 +4892,15 @@ dependencies = [
"getrandom 0.2.15",
]
+[[package]]
+name = "rand_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
+dependencies = [
+ "getrandom 0.3.2",
+]
+
[[package]]
name = "rand_hc"
version = "0.2.0"
@@ -5003,11 +4938,11 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.5.7"
+version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"
+checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
]
[[package]]
@@ -5029,7 +4964,7 @@ checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b"
dependencies = [
"getrandom 0.2.15",
"libredox",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
@@ -5072,9 +5007,9 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.12.9"
+version = "0.12.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f"
+checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb"
dependencies = [
"async-compression",
"base64 0.22.1",
@@ -5117,6 +5052,7 @@ dependencies = [
"tokio-rustls",
"tokio-socks",
"tokio-util",
+ "tower",
"tower-service",
"url",
"wasm-bindgen",
@@ -5124,7 +5060,7 @@ dependencies = [
"wasm-streams",
"web-sys",
"webpki-roots",
- "windows-registry 0.2.0",
+ "windows-registry 0.4.0",
]
[[package]]
@@ -5139,38 +5075,39 @@ dependencies = [
[[package]]
name = "rfd"
-version = "0.15.1"
+version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46f6f80a9b882647d9014673ca9925d30ffc9750f2eed2b4490e189eaebd01e8"
+checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d"
dependencies = [
"ashpd",
- "block2 0.5.1",
+ "block2 0.6.0",
+ "dispatch2",
"glib-sys",
"gobject-sys",
"gtk-sys",
"js-sys",
"log",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.0",
"raw-window-handle",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
- "windows-sys 0.48.0",
+ "windows-sys 0.59.0",
]
[[package]]
name = "ring"
-version = "0.17.8"
+version = "0.17.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
+checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
"cc",
"cfg-if",
"getrandom 0.2.15",
"libc",
- "spin",
"untrusted",
"windows-sys 0.52.0",
]
@@ -5212,9 +5149,9 @@ checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
[[package]]
name = "rsa"
-version = "0.9.7"
+version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519"
+checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b"
dependencies = [
"const-oid",
"digest",
@@ -5266,9 +5203,9 @@ dependencies = [
[[package]]
name = "rust_decimal"
-version = "1.36.0"
+version = "1.37.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555"
+checksum = "faa7de2ba56ac291bd90c6b9bece784a52ae1411f9506544b3eae36dd2356d50"
dependencies = [
"arrayvec",
"borsh",
@@ -5288,9 +5225,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
[[package]]
name = "rustc-hash"
-version = "2.1.0"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497"
+checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
name = "rustc_version"
@@ -5303,22 +5240,35 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.41"
+version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6"
+checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"errno",
"libc",
- "linux-raw-sys",
- "windows-sys 0.52.0",
+ "linux-raw-sys 0.4.15",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "rustix"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
+dependencies = [
+ "bitflags 2.9.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.9.4",
+ "windows-sys 0.59.0",
]
[[package]]
name = "rustls"
-version = "0.23.19"
+version = "0.23.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1"
+checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0"
dependencies = [
"once_cell",
"ring",
@@ -5337,7 +5287,7 @@ dependencies = [
"openssl-probe",
"rustls-pki-types",
"schannel",
- "security-framework 3.0.1",
+ "security-framework 3.2.0",
]
[[package]]
@@ -5351,24 +5301,30 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
-version = "1.10.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b"
+checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
dependencies = [
"web-time",
]
[[package]]
name = "rustls-webpki"
-version = "0.102.8"
+version = "0.103.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
+checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03"
dependencies = [
"ring",
"rustls-pki-types",
"untrusted",
]
+[[package]]
+name = "rustversion"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
+
[[package]]
name = "rusty-fork"
version = "0.3.0"
@@ -5383,9 +5339,9 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.18"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "salsa20"
@@ -5416,9 +5372,9 @@ dependencies = [
[[package]]
name = "schemars"
-version = "0.8.21"
+version = "0.8.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92"
+checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
dependencies = [
"dyn-clone",
"indexmap 1.9.3",
@@ -5431,22 +5387,16 @@ dependencies = [
[[package]]
name = "schemars_derive"
-version = "0.8.21"
+version = "0.8.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e"
+checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d"
dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
- "syn 2.0.90",
+ "syn 2.0.100",
]
-[[package]]
-name = "scoped-tls"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
-
[[package]]
name = "scopeguard"
version = "1.2.0"
@@ -5490,7 +5440,7 @@ version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"core-foundation 0.9.4",
"core-foundation-sys",
"libc",
@@ -5499,11 +5449,11 @@ dependencies = [
[[package]]
name = "security-framework"
-version = "3.0.1"
+version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8"
+checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"core-foundation 0.10.0",
"core-foundation-sys",
"libc",
@@ -5512,9 +5462,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
-version = "2.12.1"
+version = "2.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2"
+checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
dependencies = [
"core-foundation-sys",
"libc",
@@ -5542,27 +5492,27 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.23"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
dependencies = [
"serde",
]
[[package]]
name = "serde"
-version = "1.0.215"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde-untagged"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2676ba99bd82f75cae5cbd2c8eda6fa0b8760f18978ea840e980dd5567b5c5b6"
+checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e"
dependencies = [
"erased-serde",
"serde",
@@ -5571,13 +5521,13 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.215"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -5588,16 +5538,16 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "serde_json"
-version = "1.0.133"
+version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
dependencies = [
- "itoa 1.0.14",
+ "itoa 1.0.15",
"memchr",
"ryu",
"serde",
@@ -5605,13 +5555,13 @@ dependencies = [
[[package]]
name = "serde_repr"
-version = "0.1.19"
+version = "0.1.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
+checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -5630,22 +5580,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
- "itoa 1.0.14",
+ "itoa 1.0.15",
"ryu",
"serde",
]
[[package]]
name = "serde_with"
-version = "3.11.0"
+version = "3.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817"
+checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa"
dependencies = [
"base64 0.22.1",
"chrono",
"hex",
"indexmap 1.9.3",
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"serde",
"serde_derive",
"serde_json",
@@ -5655,14 +5605,14 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "3.11.0"
+version = "3.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d"
+checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e"
dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -5768,9 +5718,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
[[package]]
name = "similar"
-version = "2.6.0"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e"
+checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"
[[package]]
name = "single-instance-example"
@@ -5790,6 +5740,12 @@ version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+[[package]]
+name = "siphasher"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+
[[package]]
name = "slab"
version = "0.4.9"
@@ -5801,18 +5757,18 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.13.2"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
dependencies = [
"serde",
]
[[package]]
name = "socket2"
-version = "0.5.8"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8"
+checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
dependencies = [
"libc",
"windows-sys 0.52.0",
@@ -5826,13 +5782,13 @@ checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08"
dependencies = [
"bytemuck",
"cfg_aliases",
- "core-graphics 0.24.0",
+ "core-graphics",
"foreign-types 0.5.0",
"js-sys",
"log",
- "objc2",
- "objc2-foundation",
- "objc2-quartz-core",
+ "objc2 0.5.2",
+ "objc2-foundation 0.2.2",
+ "objc2-quartz-core 0.2.2",
"raw-window-handle",
"redox_syscall",
"wasm-bindgen",
@@ -5868,9 +5824,9 @@ dependencies = [
[[package]]
name = "specta"
-version = "2.0.0-rc.20"
+version = "2.0.0-rc.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ccbb212565d2dc177bc15ecb7b039d66c4490da892436a4eee5b394d620c9bc"
+checksum = "ab7f01e9310a820edd31c80fde3cae445295adde21a3f9416517d7d65015b971"
dependencies = [
"paste",
"specta-macros",
@@ -5879,14 +5835,14 @@ dependencies = [
[[package]]
name = "specta-macros"
-version = "2.0.0-rc.17"
+version = "2.0.0-rc.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68999d29816965eb9e5201f60aec02a76512139811661a7e8e653abc810b8f72"
+checksum = "c0074b9e30ed84c6924eb63ad8d2fe71cdc82628525d84b1fcb1f2fd40676517"
dependencies = [
"Inflector",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -5908,21 +5864,11 @@ dependencies = [
"der",
]
-[[package]]
-name = "sqlformat"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790"
-dependencies = [
- "nom",
- "unicode_categories",
-]
-
[[package]]
name = "sqlx"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e"
+checksum = "f3c3a85280daca669cfd3bcb68a337882a8bc57ec882f72c5d13a430613a738e"
dependencies = [
"sqlx-core",
"sqlx-macros",
@@ -5933,39 +5879,33 @@ dependencies = [
[[package]]
name = "sqlx-core"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e"
+checksum = "f743f2a3cea30a58cd479013f75550e879009e3a02f616f18ca699335aa248c3"
dependencies = [
- "atoi",
- "byteorder",
+ "base64 0.22.1",
"bytes",
"crc",
"crossbeam-queue",
"either",
"event-listener",
- "futures-channel",
"futures-core",
"futures-intrusive",
"futures-io",
"futures-util",
- "hashbrown 0.14.5",
+ "hashbrown 0.15.2",
"hashlink",
- "hex",
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"log",
"memchr",
"once_cell",
- "paste",
"percent-encoding",
"rustls",
- "rustls-pemfile",
"serde",
"serde_json",
"sha2",
"smallvec",
- "sqlformat",
- "thiserror 1.0.69",
+ "thiserror 2.0.12",
"time",
"tokio",
"tokio-stream",
@@ -5976,22 +5916,22 @@ dependencies = [
[[package]]
name = "sqlx-macros"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657"
+checksum = "7f4200e0fde19834956d4252347c12a083bdcb237d7a1a1446bffd8768417dce"
dependencies = [
"proc-macro2",
"quote",
"sqlx-core",
"sqlx-macros-core",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "sqlx-macros-core"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5"
+checksum = "882ceaa29cade31beca7129b6beeb05737f44f82dbe2a9806ecea5a7093d00b7"
dependencies = [
"dotenvy",
"either",
@@ -6007,7 +5947,7 @@ dependencies = [
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
- "syn 2.0.90",
+ "syn 2.0.100",
"tempfile",
"tokio",
"url",
@@ -6015,13 +5955,13 @@ dependencies = [
[[package]]
name = "sqlx-mysql"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a"
+checksum = "0afdd3aa7a629683c2d750c2df343025545087081ab5942593a5288855b1b7a7"
dependencies = [
"atoi",
"base64 0.22.1",
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"byteorder",
"bytes",
"crc",
@@ -6036,7 +5976,7 @@ dependencies = [
"hex",
"hkdf",
"hmac",
- "itoa 1.0.14",
+ "itoa 1.0.15",
"log",
"md-5",
"memchr",
@@ -6050,7 +5990,7 @@ dependencies = [
"smallvec",
"sqlx-core",
"stringprep",
- "thiserror 1.0.69",
+ "thiserror 2.0.12",
"time",
"tracing",
"whoami",
@@ -6058,26 +5998,25 @@ dependencies = [
[[package]]
name = "sqlx-postgres"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8"
+checksum = "a0bedbe1bbb5e2615ef347a5e9d8cd7680fb63e77d9dafc0f29be15e53f1ebe6"
dependencies = [
"atoi",
"base64 0.22.1",
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"byteorder",
"crc",
"dotenvy",
"etcetera",
"futures-channel",
"futures-core",
- "futures-io",
"futures-util",
"hex",
"hkdf",
"hmac",
"home",
- "itoa 1.0.14",
+ "itoa 1.0.15",
"log",
"md-5",
"memchr",
@@ -6089,7 +6028,7 @@ dependencies = [
"smallvec",
"sqlx-core",
"stringprep",
- "thiserror 1.0.69",
+ "thiserror 2.0.12",
"time",
"tracing",
"whoami",
@@ -6097,9 +6036,9 @@ dependencies = [
[[package]]
name = "sqlx-sqlite"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680"
+checksum = "c26083e9a520e8eb87a06b12347679b142dc2ea29e6e409f805644a7a979a5bc"
dependencies = [
"atoi",
"flume",
@@ -6114,6 +6053,7 @@ dependencies = [
"serde",
"serde_urlencoded",
"sqlx-core",
+ "thiserror 2.0.12",
"time",
"tracing",
"url",
@@ -6133,26 +6073,25 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "string_cache"
-version = "0.8.7"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
dependencies = [
"new_debug_unreachable",
- "once_cell",
"parking_lot",
- "phf_shared 0.10.0",
+ "phf_shared 0.11.3",
"precomputed-hash",
"serde",
]
[[package]]
name = "string_cache_codegen"
-version = "0.5.2"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
dependencies = [
- "phf_generator 0.10.0",
- "phf_shared 0.10.0",
+ "phf_generator 0.11.3",
+ "phf_shared 0.11.3",
"proc-macro2",
"quote",
]
@@ -6262,9 +6201,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.90"
+version = "2.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
+checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
dependencies = [
"proc-macro2",
"quote",
@@ -6288,7 +6227,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -6306,7 +6245,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"core-foundation 0.9.4",
"system-configuration-sys",
]
@@ -6330,20 +6269,19 @@ dependencies = [
"cfg-expr",
"heck 0.5.0",
"pkg-config",
- "toml 0.8.19",
+ "toml",
"version-compare",
]
[[package]]
name = "tao"
-version = "0.31.1"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3731d04d4ac210cd5f344087733943b9bfb1a32654387dad4d1c70de21aee2c9"
+checksum = "1e59c1f38e657351a2e822eadf40d6a2ad4627b9c25557bc1180ec1b3295ef82"
dependencies = [
- "bitflags 2.7.0",
- "cocoa",
+ "bitflags 2.9.0",
"core-foundation 0.10.0",
- "core-graphics 0.24.0",
+ "core-graphics",
"crossbeam-channel",
"dispatch",
"dlopen2",
@@ -6358,7 +6296,9 @@ dependencies = [
"ndk",
"ndk-context",
"ndk-sys",
- "objc",
+ "objc2 0.6.0",
+ "objc2-app-kit",
+ "objc2-foundation 0.3.0",
"once_cell",
"parking_lot",
"raw-window-handle",
@@ -6366,8 +6306,8 @@ dependencies = [
"tao-macros",
"unicode-segmentation",
"url",
- "windows 0.58.0",
- "windows-core 0.58.0",
+ "windows 0.61.1",
+ "windows-core",
"windows-version",
"x11-dl",
]
@@ -6380,7 +6320,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -6391,9 +6331,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "tar"
-version = "0.4.43"
+version = "0.4.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6"
+checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a"
dependencies = [
"filetime",
"libc",
@@ -6408,13 +6348,13 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tauri"
-version = "2.2.2"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2979ec5ec5a9310b15d1548db3b8de98d8f75abf2b5b00fec9cd5c0553ecc09c"
+checksum = "be03adf68fba02f87c4653da7bd73f40b0ecf9c6b7c2c39830f6981d0651912f"
dependencies = [
"anyhow",
"bytes",
- "dirs 5.0.1",
+ "dirs 6.0.0",
"dunce",
"embed_plist",
"futures-util",
@@ -6430,9 +6370,10 @@ dependencies = [
"log",
"mime",
"muda",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-foundation 0.3.0",
+ "objc2-ui-kit",
"percent-encoding",
"plist",
"raw-window-handle",
@@ -6448,7 +6389,7 @@ dependencies = [
"tauri-runtime",
"tauri-runtime-wry",
"tauri-utils",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tokio",
"tray-icon",
"url",
@@ -6457,18 +6398,18 @@ dependencies = [
"webkit2gtk",
"webview2-com",
"window-vibrancy",
- "windows 0.58.0",
+ "windows 0.61.1",
]
[[package]]
name = "tauri-build"
-version = "2.0.5"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e950124f6779c6cf98e3260c7a6c8488a74aa6350dd54c6950fdaa349bca2df"
+checksum = "d7a0350f0df1db385ca5c02888a83e0e66655c245b7443db8b78a70da7d7f8fc"
dependencies = [
"anyhow",
"cargo_toml",
- "dirs 5.0.1",
+ "dirs 6.0.0",
"glob",
"heck 0.5.0",
"json-patch",
@@ -6480,15 +6421,15 @@ dependencies = [
"tauri-codegen",
"tauri-utils",
"tauri-winres",
- "toml 0.8.19",
+ "toml",
"walkdir",
]
[[package]]
name = "tauri-codegen"
-version = "2.0.4"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f77894f9ddb5cb6c04fcfe8c8869ebe0aded4dabf19917118d48be4a95599ab5"
+checksum = "f93f035551bf7b11b3f51ad9bc231ebbe5e085565527991c16cf326aa38cdf47"
dependencies = [
"base64 0.22.1",
"brotli",
@@ -6502,9 +6443,9 @@ dependencies = [
"serde",
"serde_json",
"sha2",
- "syn 2.0.90",
+ "syn 2.0.100",
"tauri-utils",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"time",
"url",
"uuid",
@@ -6513,23 +6454,23 @@ dependencies = [
[[package]]
name = "tauri-macros"
-version = "2.0.4"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3240a5caed760a532e8f687be6f05b2c7d11a1d791fb53ccc08cfeb3e5308736"
+checksum = "8db4df25e2d9d45de0c4c910da61cd5500190da14ae4830749fee3466dddd112"
dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
"tauri-codegen",
"tauri-utils",
]
[[package]]
name = "tauri-plugin"
-version = "2.0.4"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5841b9a0200e954ef7457f8d327091424328891e267a97b641dc246cc54d0dec"
+checksum = "37a5ebe6a610d1b78a94650896e6f7c9796323f408800cef436e0fa0539de601"
dependencies = [
"anyhow",
"glob",
@@ -6538,20 +6479,20 @@ dependencies = [
"serde",
"serde_json",
"tauri-utils",
- "toml 0.8.19",
+ "toml",
"walkdir",
]
[[package]]
name = "tauri-plugin-autostart"
-version = "2.2.0"
+version = "2.3.0"
dependencies = [
"auto-launch",
"serde",
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
@@ -6563,12 +6504,12 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-biometric"
-version = "2.2.0"
+version = "2.2.1"
dependencies = [
"log",
"serde",
@@ -6576,7 +6517,7 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
@@ -6589,12 +6530,12 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-clipboard-manager"
-version = "2.2.1"
+version = "2.2.2"
dependencies = [
"arboard",
"log",
@@ -6602,12 +6543,12 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-deep-link"
-version = "2.2.0"
+version = "2.3.0"
dependencies = [
"dunce",
"rust-ini",
@@ -6616,16 +6557,16 @@ dependencies = [
"tauri",
"tauri-plugin",
"tauri-utils",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tracing",
"url",
- "windows-registry 0.5.0",
- "windows-result 0.3.1",
+ "windows-registry 0.5.1",
+ "windows-result",
]
[[package]]
name = "tauri-plugin-dialog"
-version = "2.2.0"
+version = "2.2.2"
dependencies = [
"log",
"raw-window-handle",
@@ -6635,13 +6576,13 @@ dependencies = [
"tauri",
"tauri-plugin",
"tauri-plugin-fs",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"url",
]
[[package]]
name = "tauri-plugin-fs"
-version = "2.2.0"
+version = "2.3.0"
dependencies = [
"anyhow",
"dunce",
@@ -6656,15 +6597,14 @@ dependencies = [
"tauri",
"tauri-plugin",
"tauri-utils",
- "thiserror 2.0.9",
- "toml 0.8.19",
+ "thiserror 2.0.12",
+ "toml",
"url",
- "uuid",
]
[[package]]
name = "tauri-plugin-geolocation"
-version = "2.2.3"
+version = "2.2.4"
dependencies = [
"log",
"serde",
@@ -6672,12 +6612,12 @@ dependencies = [
"specta",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-global-shortcut"
-version = "2.2.0"
+version = "2.2.1"
dependencies = [
"global-hotkey",
"log",
@@ -6685,12 +6625,12 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-haptics"
-version = "2.2.3"
+version = "2.2.4"
dependencies = [
"log",
"serde",
@@ -6698,13 +6638,15 @@ dependencies = [
"specta",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-http"
-version = "2.3.0"
+version = "2.4.4"
dependencies = [
+ "bytes",
+ "cookie_store",
"data-url",
"http",
"regex",
@@ -6715,7 +6657,7 @@ dependencies = [
"tauri",
"tauri-plugin",
"tauri-plugin-fs",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tokio",
"tracing",
"url",
@@ -6731,28 +6673,29 @@ dependencies = [
"serde",
"serde_json",
"tauri",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tiny_http",
]
[[package]]
name = "tauri-plugin-log"
-version = "2.2.2"
+version = "2.4.0"
dependencies = [
"android_logger",
"byte-unit",
"fern",
"log",
- "objc2",
- "objc2-foundation",
+ "objc2 0.6.0",
+ "objc2-foundation 0.3.0",
"serde",
"serde_json",
"serde_repr",
"swift-rs",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"time",
+ "tracing",
]
[[package]]
@@ -6765,12 +6708,12 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-notification"
-version = "2.2.1"
+version = "2.2.2"
dependencies = [
"color-backtrace",
"ctor",
@@ -6783,7 +6726,7 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"time",
"url",
"win7-notifications",
@@ -6792,29 +6735,29 @@ dependencies = [
[[package]]
name = "tauri-plugin-opener"
-version = "2.2.5"
+version = "2.2.7"
dependencies = [
"dunce",
"glob",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-foundation 0.3.0",
"open",
"schemars",
"serde",
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"url",
- "windows 0.58.0",
+ "windows 0.61.1",
"zbus",
]
[[package]]
name = "tauri-plugin-os"
-version = "2.2.0"
+version = "2.2.1"
dependencies = [
- "gethostname 1.0.0",
+ "gethostname 1.0.1",
"log",
"os_info",
"serde",
@@ -6823,12 +6766,12 @@ dependencies = [
"sys-locale",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-persisted-scope"
-version = "2.2.0"
+version = "2.2.2"
dependencies = [
"aho-corasick",
"bincode",
@@ -6837,7 +6780,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin-fs",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
@@ -6850,12 +6793,12 @@ dependencies = [
"serde_repr",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-plugin-process"
-version = "2.2.0"
+version = "2.2.1"
dependencies = [
"tauri",
"tauri-plugin",
@@ -6863,7 +6806,7 @@ dependencies = [
[[package]]
name = "tauri-plugin-shell"
-version = "2.2.0"
+version = "2.2.1"
dependencies = [
"encoding_rs",
"log",
@@ -6876,20 +6819,20 @@ dependencies = [
"shared_child",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tokio",
]
[[package]]
name = "tauri-plugin-single-instance"
-version = "2.2.2"
+version = "2.2.4"
dependencies = [
"semver",
"serde",
"serde_json",
"tauri",
"tauri-plugin-deep-link",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tracing",
"windows-sys 0.59.0",
"zbus",
@@ -6900,14 +6843,14 @@ name = "tauri-plugin-sql"
version = "2.2.0"
dependencies = [
"futures-core",
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"log",
"serde",
"serde_json",
"sqlx",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"time",
"tokio",
]
@@ -6921,7 +6864,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tokio",
"tracing",
]
@@ -6943,20 +6886,21 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"zeroize",
]
[[package]]
name = "tauri-plugin-updater"
-version = "2.5.1"
+version = "2.7.1"
dependencies = [
"base64 0.22.1",
"dirs 6.0.0",
"flate2",
"futures-util",
"http",
- "infer 0.19.0",
+ "infer",
+ "log",
"minisign-verify",
"osakit",
"percent-encoding",
@@ -6968,12 +6912,12 @@ dependencies = [
"tauri",
"tauri-plugin",
"tempfile",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"time",
"tokio",
"url",
"windows-sys 0.59.0",
- "zip",
+ "zip 4.0.0",
]
[[package]]
@@ -6989,7 +6933,7 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tokio",
"tokio-util",
]
@@ -7006,56 +6950,60 @@ dependencies = [
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"tokio",
"tokio-tungstenite",
]
[[package]]
name = "tauri-plugin-window-state"
-version = "2.2.1"
+version = "2.2.2"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"log",
"serde",
"serde_json",
"tauri",
"tauri-plugin",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
]
[[package]]
name = "tauri-runtime"
-version = "2.3.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2274ef891ccc0a8d318deffa9d70053f947664d12d58b9c0d1ae5e89237e01f7"
+checksum = "00f004905d549854069e6774533d742b03cacfd6f03deb08940a8677586cbe39"
dependencies = [
+ "cookie",
"dpi",
"gtk",
"http",
"jni",
+ "objc2 0.6.0",
+ "objc2-ui-kit",
"raw-window-handle",
"serde",
"serde_json",
"tauri-utils",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"url",
- "windows 0.58.0",
+ "windows 0.61.1",
]
[[package]]
name = "tauri-runtime-wry"
-version = "2.3.0"
+version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3707b40711d3b9f6519150869e358ffbde7c57567fb9b5a8b51150606939b2a0"
+checksum = "f85d056f4d4b014fe874814034f3416d57114b617a493a4fe552580851a3f3a2"
dependencies = [
"gtk",
"http",
"jni",
"log",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-foundation 0.3.0",
+ "once_cell",
"percent-encoding",
"raw-window-handle",
"softbuffer",
@@ -7065,17 +7013,18 @@ dependencies = [
"url",
"webkit2gtk",
"webview2-com",
- "windows 0.58.0",
+ "windows 0.61.1",
"wry",
]
[[package]]
name = "tauri-utils"
-version = "2.1.1"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96fb10e7cc97456b2d5b9c03e335b5de5da982039a303a20d10006885e4523a0"
+checksum = "b2900399c239a471bcff7f15c4399eb1a8c4fe511ba2853e07c996d771a5e0a4"
dependencies = [
"aes-gcm",
+ "anyhow",
"brotli",
"cargo_metadata",
"ctor",
@@ -7084,12 +7033,12 @@ dependencies = [
"glob",
"html5ever",
"http",
- "infer 0.16.0",
+ "infer",
"json-patch",
"kuchikiki",
"log",
"memchr",
- "phf 0.11.2",
+ "phf 0.11.3",
"proc-macro2",
"quote",
"regex",
@@ -7101,8 +7050,8 @@ dependencies = [
"serde_with",
"serialize-to-javascript",
"swift-rs",
- "thiserror 2.0.9",
- "toml 0.8.19",
+ "thiserror 2.0.12",
+ "toml",
"url",
"urlpattern",
"uuid",
@@ -7111,35 +7060,36 @@ dependencies = [
[[package]]
name = "tauri-winres"
-version = "0.1.1"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb"
+checksum = "56eaa45f707bedf34d19312c26d350bc0f3c59a47e58e8adbeecdc850d2c13a0"
dependencies = [
"embed-resource",
- "toml 0.7.8",
+ "toml",
]
[[package]]
name = "tauri-winrt-notification"
-version = "0.2.1"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f89f5fb70d6f62381f5d9b2ba9008196150b40b75f3068eb24faeddf1c686871"
+checksum = "0b1e66e07de489fe43a46678dd0b8df65e0c973909df1b60ba33874e297ba9b9"
dependencies = [
- "quick-xml 0.31.0",
- "windows 0.56.0",
+ "quick-xml 0.37.4",
+ "thiserror 2.0.12",
+ "windows 0.61.1",
"windows-version",
]
[[package]]
name = "tempfile"
-version = "3.14.0"
+version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c"
+checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf"
dependencies = [
- "cfg-if",
"fastrand",
+ "getrandom 0.3.2",
"once_cell",
- "rustix",
+ "rustix 1.0.5",
"windows-sys 0.59.0",
]
@@ -7180,11 +7130,11 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "2.0.9"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
dependencies = [
- "thiserror-impl 2.0.9",
+ "thiserror-impl 2.0.12",
]
[[package]]
@@ -7195,18 +7145,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "thiserror-impl"
-version = "2.0.9"
+version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -7222,12 +7172,12 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.36"
+version = "0.3.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
dependencies = [
"deranged",
- "itoa 1.0.14",
+ "itoa 1.0.15",
"libc",
"num-conv",
"num_threads",
@@ -7239,15 +7189,15 @@ dependencies = [
[[package]]
name = "time-core"
-version = "0.1.2"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
[[package]]
name = "time-macros"
-version = "0.2.18"
+version = "0.2.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
+checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
dependencies = [
"num-conv",
"time-core",
@@ -7286,9 +7236,9 @@ dependencies = [
[[package]]
name = "tinyvec"
-version = "1.8.0"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
+checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
dependencies = [
"tinyvec_macros",
]
@@ -7301,9 +7251,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.41.1"
+version = "1.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33"
+checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
dependencies = [
"backtrace",
"bytes",
@@ -7320,13 +7270,13 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "2.4.0"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -7341,12 +7291,11 @@ dependencies = [
[[package]]
name = "tokio-rustls"
-version = "0.26.0"
+version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4"
+checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
dependencies = [
"rustls",
- "rustls-pki-types",
"tokio",
]
@@ -7364,9 +7313,9 @@ dependencies = [
[[package]]
name = "tokio-stream"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1"
+checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite",
@@ -7375,9 +7324,9 @@ dependencies = [
[[package]]
name = "tokio-tungstenite"
-version = "0.26.1"
+version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4bf6fecd69fcdede0ec680aaf474cdab988f9de6bc73d3758f0160e3b7025a"
+checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084"
dependencies = [
"futures-util",
"log",
@@ -7394,9 +7343,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.12"
+version = "0.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
+checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034"
dependencies = [
"bytes",
"futures-core",
@@ -7407,26 +7356,14 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.7.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
-dependencies = [
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_edit 0.19.15",
-]
-
-[[package]]
-name = "toml"
-version = "0.8.19"
+version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
+checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
- "toml_edit 0.22.22",
+ "toml_edit 0.22.24",
]
[[package]]
@@ -7444,9 +7381,7 @@ version = "0.19.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [
- "indexmap 2.7.0",
- "serde",
- "serde_spanned",
+ "indexmap 2.9.0",
"toml_datetime",
"winnow 0.5.40",
]
@@ -7457,24 +7392,45 @@ version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
dependencies = [
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"toml_datetime",
"winnow 0.5.40",
]
[[package]]
name = "toml_edit"
-version = "0.22.22"
+version = "0.22.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
+checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
dependencies = [
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"serde",
"serde_spanned",
"toml_datetime",
- "winnow 0.6.20",
+ "winnow 0.7.6",
]
+[[package]]
+name = "tower"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
[[package]]
name = "tower-service"
version = "0.3.3"
@@ -7501,7 +7457,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -7515,25 +7471,39 @@ dependencies = [
[[package]]
name = "tray-icon"
-version = "0.19.2"
+version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d48a05076dd272615d03033bf04f480199f7d1b66a8ac64d75c625fc4a70c06b"
+checksum = "d433764348e7084bad2c5ea22c96c71b61b17afe3a11645710f533bd72b6a2b5"
dependencies = [
- "core-graphics 0.24.0",
"crossbeam-channel",
- "dirs 5.0.1",
+ "dirs 6.0.0",
"libappindicator",
"muda",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-core-foundation",
+ "objc2-core-graphics",
+ "objc2-foundation 0.3.0",
"once_cell",
"png",
"serde",
- "thiserror 1.0.69",
+ "thiserror 2.0.12",
"windows-sys 0.59.0",
]
+[[package]]
+name = "tree_magic_mini"
+version = "3.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aac5e8971f245c3389a5a76e648bfc80803ae066a1243a75db0064d7c1129d63"
+dependencies = [
+ "fnv",
+ "memchr",
+ "nom",
+ "once_cell",
+ "petgraph",
+]
+
[[package]]
name = "trim-in-place"
version = "0.1.7"
@@ -7548,36 +7518,35 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "tungstenite"
-version = "0.26.1"
+version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "413083a99c579593656008130e29255e54dcaae495be556cc26888f211648c24"
+checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13"
dependencies = [
- "byteorder",
"bytes",
"data-encoding",
"http",
"httparse",
"log",
"native-tls",
- "rand 0.8.5",
+ "rand 0.9.0",
"rustls",
"rustls-pki-types",
"sha1",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"utf-8",
]
[[package]]
name = "typeid"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e"
+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
[[package]]
name = "typenum"
-version = "1.17.0"
+version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
[[package]]
name = "uds_windows"
@@ -7633,21 +7602,21 @@ dependencies = [
[[package]]
name = "unicase"
-version = "2.8.0"
+version = "2.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df"
+checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
[[package]]
name = "unicode-bidi"
-version = "0.3.17"
+version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893"
+checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
[[package]]
name = "unicode-ident"
-version = "1.0.14"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-normalization"
@@ -7670,12 +7639,6 @@ version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
-[[package]]
-name = "unicode_categories"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
-
[[package]]
name = "universal-hash"
version = "0.5.1"
@@ -7707,9 +7670,9 @@ dependencies = [
[[package]]
name = "ureq"
-version = "2.10.1"
+version = "2.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a"
+checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d"
dependencies = [
"base64 0.22.1",
"log",
@@ -7773,19 +7736,19 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
-version = "1.11.0"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a"
+checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
dependencies = [
- "getrandom 0.2.15",
+ "getrandom 0.3.2",
"serde",
]
[[package]]
name = "value-bag"
-version = "1.10.0"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2"
+checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5"
[[package]]
name = "vcpkg"
@@ -7817,9 +7780,9 @@ dependencies = [
[[package]]
name = "vswhom-sys"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
+checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150"
dependencies = [
"cc",
"libc",
@@ -7827,9 +7790,9 @@ dependencies = [
[[package]]
name = "wait-timeout"
-version = "0.2.0"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11"
dependencies = [
"libc",
]
@@ -7865,6 +7828,15 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+[[package]]
+name = "wasi"
+version = "0.14.2+wasi-0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
+dependencies = [
+ "wit-bindgen-rt",
+]
+
[[package]]
name = "wasite"
version = "0.1.0"
@@ -7873,35 +7845,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
[[package]]
name = "wasm-bindgen"
-version = "0.2.97"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
dependencies = [
"cfg-if",
"once_cell",
+ "rustversion",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.97"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
dependencies = [
"bumpalo",
"log",
- "once_cell",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
-version = "0.4.47"
+version = "0.4.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dfaf8f50e5f293737ee323940c7d8b08a66a95a419223d9f41610ca08b0833d"
+checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
dependencies = [
"cfg-if",
"js-sys",
@@ -7912,9 +7884,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.97"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -7922,22 +7894,25 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.97"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.97"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
[[package]]
name = "wasm-streams"
@@ -7954,69 +7929,79 @@ dependencies = [
[[package]]
name = "wayland-backend"
-version = "0.3.7"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6"
+checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf"
dependencies = [
"cc",
"downcast-rs",
- "rustix",
- "scoped-tls",
+ "rustix 0.38.44",
"smallvec",
"wayland-sys",
]
[[package]]
name = "wayland-client"
-version = "0.31.7"
+version = "0.31.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280"
+checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f"
dependencies = [
- "bitflags 2.7.0",
- "rustix",
+ "bitflags 2.9.0",
+ "rustix 0.38.44",
"wayland-backend",
"wayland-scanner",
]
[[package]]
name = "wayland-protocols"
-version = "0.32.5"
+version = "0.32.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e"
+checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc"
dependencies = [
- "bitflags 2.7.0",
+ "bitflags 2.9.0",
"wayland-backend",
"wayland-client",
"wayland-scanner",
]
+[[package]]
+name = "wayland-protocols-wlr"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2"
+dependencies = [
+ "bitflags 2.9.0",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-scanner",
+]
+
[[package]]
name = "wayland-scanner"
-version = "0.31.5"
+version = "0.31.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3"
+checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484"
dependencies = [
"proc-macro2",
- "quick-xml 0.36.2",
+ "quick-xml 0.37.4",
"quote",
]
[[package]]
name = "wayland-sys"
-version = "0.31.5"
+version = "0.31.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09"
+checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615"
dependencies = [
- "dlib",
- "log",
"pkg-config",
]
[[package]]
name = "web-sys"
-version = "0.3.74"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c"
+checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -8078,9 +8063,9 @@ dependencies = [
[[package]]
name = "webpki-roots"
-version = "0.26.7"
+version = "0.26.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e"
+checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
dependencies = [
"rustls-pki-types",
]
@@ -8101,16 +8086,16 @@ dependencies = [
[[package]]
name = "webview2-com"
-version = "0.34.0"
+version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "823e7ebcfaea51e78f72c87fc3b65a1e602c321f407a0b36dbb327d7bb7cd921"
+checksum = "b542b5cfbd9618c46c2784e4d41ba218c336ac70d44c55e47b251033e7d85601"
dependencies = [
"webview2-com-macros",
"webview2-com-sys",
- "windows 0.58.0",
- "windows-core 0.58.0",
- "windows-implement 0.58.0",
- "windows-interface 0.58.0",
+ "windows 0.61.1",
+ "windows-core",
+ "windows-implement",
+ "windows-interface",
]
[[package]]
@@ -8121,18 +8106,18 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "webview2-com-sys"
-version = "0.34.0"
+version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a82bce72db6e5ee83c68b5de1e2cd6ea195b9fbff91cb37df5884cbe3222df4"
+checksum = "8ae2d11c4a686e4409659d7891791254cf9286d3cfe0eef54df1523533d22295"
dependencies = [
- "thiserror 1.0.69",
- "windows 0.58.0",
- "windows-core 0.58.0",
+ "thiserror 2.0.12",
+ "windows 0.61.1",
+ "windows-core",
]
[[package]]
@@ -8143,9 +8128,9 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
[[package]]
name = "whoami"
-version = "1.5.2"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d"
+checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7"
dependencies = [
"redox_syscall",
"wasite",
@@ -8194,13 +8179,14 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "window-vibrancy"
-version = "0.5.2"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150"
+checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c"
dependencies = [
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.0",
"raw-window-handle",
"windows-sys 0.59.0",
"windows-version",
@@ -8221,172 +8207,132 @@ dependencies = [
[[package]]
name = "windows"
-version = "0.56.0"
+version = "0.61.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132"
+checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419"
dependencies = [
- "windows-core 0.56.0",
- "windows-targets 0.52.6",
-]
-
-[[package]]
-name = "windows"
-version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
-dependencies = [
- "windows-core 0.58.0",
- "windows-targets 0.52.6",
-]
-
-[[package]]
-name = "windows-core"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
-dependencies = [
- "windows-targets 0.52.6",
+ "windows-collections",
+ "windows-core",
+ "windows-future",
+ "windows-link",
+ "windows-numerics",
]
[[package]]
-name = "windows-core"
-version = "0.56.0"
+name = "windows-collections"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6"
+checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
dependencies = [
- "windows-implement 0.56.0",
- "windows-interface 0.56.0",
- "windows-result 0.1.2",
- "windows-targets 0.52.6",
+ "windows-core",
]
[[package]]
name = "windows-core"
-version = "0.58.0"
+version = "0.61.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
+checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
dependencies = [
- "windows-implement 0.58.0",
- "windows-interface 0.58.0",
- "windows-result 0.2.0",
- "windows-strings 0.1.0",
- "windows-targets 0.52.6",
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings 0.4.0",
]
[[package]]
-name = "windows-implement"
-version = "0.56.0"
+name = "windows-future"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b"
+checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32"
dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.90",
+ "windows-core",
+ "windows-link",
]
[[package]]
name = "windows-implement"
-version = "0.58.0"
+version = "0.60.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "windows-interface"
-version = "0.56.0"
+version = "0.59.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
-]
-
-[[package]]
-name = "windows-interface"
-version = "0.58.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "windows-link"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3"
+checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
[[package]]
-name = "windows-registry"
+name = "windows-numerics"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0"
+checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
dependencies = [
- "windows-result 0.2.0",
- "windows-strings 0.1.0",
- "windows-targets 0.52.6",
+ "windows-core",
+ "windows-link",
]
[[package]]
name = "windows-registry"
-version = "0.5.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c44a98275e31bfd112bb06ba96c8ab13c03383a3753fdddd715406a1824c7e0"
+checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
dependencies = [
- "windows-link",
- "windows-result 0.3.1",
+ "windows-result",
"windows-strings 0.3.1",
+ "windows-targets 0.53.0",
]
[[package]]
-name = "windows-result"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8"
-dependencies = [
- "windows-targets 0.52.6",
-]
-
-[[package]]
-name = "windows-result"
-version = "0.2.0"
+name = "windows-registry"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
+checksum = "ad1da3e436dc7653dfdf3da67332e22bff09bb0e28b0239e1624499c7830842e"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-link",
+ "windows-result",
+ "windows-strings 0.4.0",
]
[[package]]
name = "windows-result"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189"
+checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
dependencies = [
"windows-link",
]
[[package]]
name = "windows-strings"
-version = "0.1.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
+checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
dependencies = [
- "windows-result 0.2.0",
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
name = "windows-strings"
-version = "0.3.1"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
+checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
dependencies = [
"windows-link",
]
@@ -8466,20 +8412,36 @@ dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
- "windows_i686_gnullvm",
+ "windows_i686_gnullvm 0.52.6",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
+[[package]]
+name = "windows-targets"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b"
+dependencies = [
+ "windows_aarch64_gnullvm 0.53.0",
+ "windows_aarch64_msvc 0.53.0",
+ "windows_i686_gnu 0.53.0",
+ "windows_i686_gnullvm 0.53.0",
+ "windows_i686_msvc 0.53.0",
+ "windows_x86_64_gnu 0.53.0",
+ "windows_x86_64_gnullvm 0.53.0",
+ "windows_x86_64_msvc 0.53.0",
+]
+
[[package]]
name = "windows-version"
-version = "0.1.1"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515"
+checksum = "e04a5c6627e310a23ad2358483286c7df260c964eb2d003d8efd6d0f4e79265c"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-link",
]
[[package]]
@@ -8500,6 +8462,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.36.1"
@@ -8524,6 +8492,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
+
[[package]]
name = "windows_i686_gnu"
version = "0.36.1"
@@ -8548,12 +8522,24 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
+
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
+
[[package]]
name = "windows_i686_msvc"
version = "0.36.1"
@@ -8578,6 +8564,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.36.1"
@@ -8602,6 +8594,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@@ -8620,6 +8618,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.36.1"
@@ -8644,6 +8648,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+
[[package]]
name = "winnow"
version = "0.5.40"
@@ -8655,9 +8665,9 @@ dependencies = [
[[package]]
name = "winnow"
-version = "0.6.20"
+version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b"
+checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10"
dependencies = [
"memchr",
]
@@ -8681,6 +8691,34 @@ dependencies = [
"windows-sys 0.48.0",
]
+[[package]]
+name = "wit-bindgen-rt"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
+dependencies = [
+ "bitflags 2.9.0",
+]
+
+[[package]]
+name = "wl-clipboard-rs"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5ff8d0e60065f549fafd9d6cb626203ea64a798186c80d8e7df4f8af56baeb"
+dependencies = [
+ "libc",
+ "log",
+ "os_pipe",
+ "rustix 0.38.44",
+ "tempfile",
+ "thiserror 2.0.12",
+ "tree_magic_mini",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-protocols-wlr",
+]
+
[[package]]
name = "write16"
version = "1.0.0"
@@ -8695,12 +8733,12 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
[[package]]
name = "wry"
-version = "0.48.0"
+version = "0.51.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e644bf458e27b11b0ecafc9e5633d1304fdae82baca1d42185669752fe6ca4f"
+checksum = "c886a0a9d2a94fd90cfa1d929629b79cfefb1546e2c7430c63a47f0664c0e4e2"
dependencies = [
"base64 0.22.1",
- "block2 0.5.1",
+ "block2 0.6.0",
"cookie",
"crossbeam-channel",
"dpi",
@@ -8714,9 +8752,10 @@ dependencies = [
"kuchikiki",
"libc",
"ndk",
- "objc2",
+ "objc2 0.6.0",
"objc2-app-kit",
- "objc2-foundation",
+ "objc2-core-foundation",
+ "objc2-foundation 0.3.0",
"objc2-ui-kit",
"objc2-web-kit",
"once_cell",
@@ -8725,13 +8764,13 @@ dependencies = [
"sha2",
"soup3",
"tao-macros",
- "thiserror 2.0.9",
+ "thiserror 2.0.12",
"url",
"webkit2gtk",
"webkit2gtk-sys",
"webview2-com",
- "windows 0.58.0",
- "windows-core 0.58.0",
+ "windows 0.61.1",
+ "windows-core",
"windows-version",
"x11-dl",
]
@@ -8773,7 +8812,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12"
dependencies = [
"gethostname 0.4.3",
- "rustix",
+ "rustix 0.38.44",
"x11rb-protocol",
]
@@ -8796,13 +8835,12 @@ dependencies = [
[[package]]
name = "xattr"
-version = "1.3.1"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
+checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e"
dependencies = [
"libc",
- "linux-raw-sys",
- "rustix",
+ "rustix 1.0.5",
]
[[package]]
@@ -8815,6 +8853,12 @@ dependencies = [
"windows-sys 0.59.0",
]
+[[package]]
+name = "xkeysym"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
+
[[package]]
name = "yoke"
version = "0.7.5"
@@ -8835,15 +8879,15 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
"synstructure",
]
[[package]]
name = "zbus"
-version = "5.3.0"
+version = "5.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "192a0d989036cd60a1e91a54c9851fb9ad5bd96125d41803eed79d2e2ef74bd7"
+checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236"
dependencies = [
"async-broadcast",
"async-executor",
@@ -8858,7 +8902,7 @@ dependencies = [
"enumflags2",
"event-listener",
"futures-core",
- "futures-util",
+ "futures-lite",
"hex",
"nix 0.29.0",
"ordered-stream",
@@ -8869,7 +8913,7 @@ dependencies = [
"tracing",
"uds_windows",
"windows-sys 0.59.0",
- "winnow 0.6.20",
+ "winnow 0.7.6",
"xdg-home",
"zbus_macros",
"zbus_names",
@@ -8878,14 +8922,14 @@ dependencies = [
[[package]]
name = "zbus_macros"
-version = "5.3.0"
+version = "5.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3685b5c81fce630efc3e143a4ded235b107f1b1cdf186c3f115529e5e5ae4265"
+checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0"
dependencies = [
- "proc-macro-crate 3.2.0",
+ "proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
"zbus_names",
"zvariant",
"zvariant_utils",
@@ -8893,13 +8937,13 @@ dependencies = [
[[package]]
name = "zbus_names"
-version = "4.1.1"
+version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "519629a3f80976d89c575895b05677cbc45eaf9f70d62a364d819ba646409cc8"
+checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97"
dependencies = [
"serde",
"static_assertions",
- "winnow 0.6.20",
+ "winnow 0.7.6",
"zvariant",
]
@@ -8909,8 +8953,16 @@ version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
dependencies = [
- "byteorder",
- "zerocopy-derive",
+ "zerocopy-derive 0.7.35",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
+dependencies = [
+ "zerocopy-derive 0.8.24",
]
[[package]]
@@ -8921,7 +8973,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
]
[[package]]
@@ -8935,13 +8998,13 @@ dependencies = [
[[package]]
name = "zerofrom-derive"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
"synstructure",
]
@@ -8963,7 +9026,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
@@ -8985,26 +9048,36 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
]
[[package]]
name = "zip"
-version = "2.2.1"
+version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99d52293fc86ea7cf13971b3bb81eb21683636e7ae24c729cdaf1b7c4157a352"
+checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744"
dependencies = [
"arbitrary",
"crc32fast",
"crossbeam-utils",
- "displaydoc",
"flate2",
- "indexmap 2.7.0",
+ "indexmap 2.9.0",
"memchr",
- "thiserror 2.0.9",
"zopfli",
]
+[[package]]
+name = "zip"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "153a6fff49d264c4babdcfa6b4d534747f520e56e8f0f384f3b808c4b64cc1fd"
+dependencies = [
+ "arbitrary",
+ "crc32fast",
+ "indexmap 2.9.0",
+ "memchr",
+]
+
[[package]]
name = "zopfli"
version = "0.8.1"
@@ -9019,45 +9092,73 @@ dependencies = [
"simd-adler32",
]
+[[package]]
+name = "zstd"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "7.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d"
+dependencies = [
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.15+zstd.1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
+
[[package]]
name = "zvariant"
-version = "5.2.0"
+version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55e6b9b5f1361de2d5e7d9fd1ee5f6f7fcb6060618a1f82f3472f58f2b8d4be9"
+checksum = "b2df9ee044893fcffbdc25de30546edef3e32341466811ca18421e3cd6c5a3ac"
dependencies = [
"endi",
"enumflags2",
"serde",
"static_assertions",
"url",
- "winnow 0.6.20",
+ "winnow 0.7.6",
"zvariant_derive",
"zvariant_utils",
]
[[package]]
name = "zvariant_derive"
-version = "5.2.0"
+version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "573a8dd76961957108b10f7a45bac6ab1ea3e9b7fe01aff88325dc57bb8f5c8b"
+checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f"
dependencies = [
- "proc-macro-crate 3.2.0",
+ "proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.90",
+ "syn 2.0.100",
"zvariant_utils",
]
[[package]]
name = "zvariant_utils"
-version = "3.1.0"
+version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddd46446ea2a1f353bfda53e35f17633afa79f4fe290a611c94645c69fe96a50"
+checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34"
dependencies = [
"proc-macro2",
"quote",
"serde",
"static_assertions",
- "syn 2.0.90",
- "winnow 0.6.20",
+ "syn 2.0.100",
+ "winnow 0.7.6",
]
diff --git a/examples/api/CHANGELOG.md b/examples/api/CHANGELOG.md
index 137ca0b6..6cc04295 100644
--- a/examples/api/CHANGELOG.md
+++ b/examples/api/CHANGELOG.md
@@ -1,5 +1,71 @@
# Changelog
+## \[2.0.22]
+
+### Dependencies
+
+- Upgraded to `fs-js@2.3.0`
+- Upgraded to `global-shortcut-js@2.2.1`
+- Upgraded to `http-js@2.4.4`
+- Upgraded to `opener-js@2.2.7`
+- Upgraded to `dialog-js@2.2.2`
+
+## \[2.0.21]
+
+### Dependencies
+
+- Upgraded to `log-js@2.4.0`
+- Upgraded to `biometric-js@2.2.1`
+- Upgraded to `updater-js@2.7.1`
+
+## \[2.0.20]
+
+### Dependencies
+
+- Upgraded to `http-js@2.4.3`
+- Upgraded to `shell-js@2.2.1`
+- Upgraded to `fs-js@2.2.1`
+- Upgraded to `process-js@2.2.1`
+- Upgraded to `updater-js@2.7.0`
+- Upgraded to `dialog-js@2.2.1`
+
+## \[2.0.19]
+
+### Dependencies
+
+- Upgraded to `http-js@2.4.2`
+- Upgraded to `updater-js@2.6.1`
+
+## \[2.0.18]
+
+### Dependencies
+
+- Upgraded to `http-js@2.4.1`
+
+## \[2.0.17]
+
+### Dependencies
+
+- Upgraded to `log-js@2.3.1`
+
+## \[2.0.16]
+
+### Dependencies
+
+- Upgraded to `clipboard-manager-js@2.2.2`
+- Upgraded to `notification-js@2.2.2`
+- Upgraded to `os-js@2.2.1`
+- Upgraded to `http-js@2.4.0`
+- Upgraded to `log-js@2.3.0`
+- Upgraded to `updater-js@2.6.0`
+
+## \[2.0.15]
+
+### Dependencies
+
+- Upgraded to `log-js@2.2.3`
+- Upgraded to `opener-js@2.2.6`
+
## \[2.0.14]
### Dependencies
diff --git a/examples/api/package.json b/examples/api/package.json
index caa92ca8..74a618eb 100644
--- a/examples/api/package.json
+++ b/examples/api/package.json
@@ -1,7 +1,7 @@
{
"name": "api",
"private": true,
- "version": "2.0.14",
+ "version": "2.0.22",
"type": "module",
"scripts": {
"dev": "vite --clearScreen false",
@@ -10,35 +10,35 @@
"tauri": "tauri"
},
"dependencies": {
- "@tauri-apps/api": "2.2.0",
+ "@tauri-apps/api": "2.5.0",
"@tauri-apps/plugin-barcode-scanner": "^2.2.0",
- "@tauri-apps/plugin-biometric": "^2.2.0",
+ "@tauri-apps/plugin-biometric": "^2.2.1",
"@tauri-apps/plugin-cli": "^2.2.0",
- "@tauri-apps/plugin-clipboard-manager": "^2.2.1",
- "@tauri-apps/plugin-dialog": "^2.2.0",
- "@tauri-apps/plugin-fs": "^2.2.0",
+ "@tauri-apps/plugin-clipboard-manager": "^2.2.2",
+ "@tauri-apps/plugin-dialog": "^2.2.2",
+ "@tauri-apps/plugin-fs": "^2.3.0",
"@tauri-apps/plugin-geolocation": "^2.2.0",
- "@tauri-apps/plugin-global-shortcut": "^2.2.0",
- "@tauri-apps/plugin-opener": "^2.2.5",
+ "@tauri-apps/plugin-global-shortcut": "^2.2.1",
"@tauri-apps/plugin-haptics": "^2.2.0",
- "@tauri-apps/plugin-http": "^2.3.0",
+ "@tauri-apps/plugin-http": "^2.4.4",
"@tauri-apps/plugin-nfc": "^2.2.0",
- "@tauri-apps/plugin-notification": "^2.2.1",
- "@tauri-apps/plugin-os": "^2.2.0",
- "@tauri-apps/plugin-process": "^2.2.0",
- "@tauri-apps/plugin-shell": "^2.2.0",
+ "@tauri-apps/plugin-notification": "^2.2.2",
+ "@tauri-apps/plugin-opener": "^2.2.7",
+ "@tauri-apps/plugin-os": "^2.2.1",
+ "@tauri-apps/plugin-process": "^2.2.1",
+ "@tauri-apps/plugin-shell": "^2.2.1",
"@tauri-apps/plugin-store": "^2.2.0",
- "@tauri-apps/plugin-updater": "^2.5.1",
+ "@tauri-apps/plugin-updater": "^2.7.1",
"@zerodevx/svelte-json-view": "1.0.11"
},
"devDependencies": {
- "@iconify-json/codicon": "^1.2.6",
- "@iconify-json/ph": "^1.2.1",
- "@sveltejs/vite-plugin-svelte": "^5.0.1",
- "@tauri-apps/cli": "2.2.7",
+ "@iconify-json/codicon": "^1.2.12",
+ "@iconify-json/ph": "^1.2.2",
+ "@sveltejs/vite-plugin-svelte": "^5.0.3",
+ "@tauri-apps/cli": "2.5.0",
"@unocss/extractor-svelte": "^66.0.0",
- "svelte": "^5.10.0",
+ "svelte": "^5.20.4",
"unocss": "^66.0.0",
- "vite": "^6.0.3"
+ "vite": "^6.2.6"
}
}
diff --git a/examples/api/src-tauri/CHANGELOG.md b/examples/api/src-tauri/CHANGELOG.md
index dd6e80af..7399722d 100644
--- a/examples/api/src-tauri/CHANGELOG.md
+++ b/examples/api/src-tauri/CHANGELOG.md
@@ -1,5 +1,73 @@
# Changelog
+## \[2.0.26]
+
+### Dependencies
+
+- Upgraded to `fs@2.3.0`
+- Upgraded to `global-shortcut@2.2.1`
+- Upgraded to `http@2.4.4`
+- Upgraded to `opener@2.2.7`
+- Upgraded to `dialog@2.2.2`
+
+## \[2.0.25]
+
+### Dependencies
+
+- Upgraded to `log@2.4.0`
+- Upgraded to `biometric@2.2.1`
+- Upgraded to `updater@2.7.1`
+
+## \[2.0.24]
+
+### Dependencies
+
+- Upgraded to `http@2.4.3`
+- Upgraded to `shell@2.2.1`
+- Upgraded to `fs@2.2.1`
+- Upgraded to `process@2.2.1`
+- Upgraded to `updater@2.7.0`
+- Upgraded to `dialog@2.2.1`
+
+## \[2.0.23]
+
+### Dependencies
+
+- Upgraded to `http@2.4.2`
+- Upgraded to `updater@2.6.1`
+
+## \[2.0.22]
+
+### Dependencies
+
+- Upgraded to `http@2.4.1`
+
+## \[2.0.21]
+
+### Dependencies
+
+- Upgraded to `log@2.3.1`
+
+## \[2.0.20]
+
+### Dependencies
+
+- Upgraded to `clipboard-manager@2.2.2`
+- Upgraded to `geolocation@2.2.4`
+- Upgraded to `haptics@2.2.4`
+- Upgraded to `notification@2.2.2`
+- Upgraded to `os@2.2.1`
+- Upgraded to `http@2.4.0`
+- Upgraded to `log@2.3.0`
+- Upgraded to `updater@2.6.0`
+
+## \[2.0.19]
+
+### Dependencies
+
+- Upgraded to `log@2.2.3`
+- Upgraded to `opener@2.2.6`
+
## \[2.0.18]
### Dependencies
diff --git a/examples/api/src-tauri/Cargo.toml b/examples/api/src-tauri/Cargo.toml
index 51e7f223..e8e291fe 100644
--- a/examples/api/src-tauri/Cargo.toml
+++ b/examples/api/src-tauri/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "api"
publish = false
-version = "2.0.18"
+version = "2.0.26"
description = "An example Tauri Application showcasing the api"
edition = "2021"
rust-version = { workspace = true }
@@ -18,23 +18,25 @@ tauri-build = { workspace = true, features = ["codegen", "isolation"] }
serde_json = { workspace = true }
serde = { workspace = true }
tiny_http = "0.12"
+time = "0.3"
log = { workspace = true }
-tauri-plugin-log = { path = "../../../plugins/log", version = "2.2.2" }
-tauri-plugin-fs = { path = "../../../plugins/fs", version = "2.2.0", features = [
+tauri-plugin-log = { path = "../../../plugins/log", version = "2.4.0" }
+tauri-plugin-fs = { path = "../../../plugins/fs", version = "2.3.0", features = [
"watch",
] }
-tauri-plugin-clipboard-manager = { path = "../../../plugins/clipboard-manager", version = "2.2.1" }
-tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "2.2.0" }
+tauri-plugin-clipboard-manager = { path = "../../../plugins/clipboard-manager", version = "2.2.2" }
+tauri-plugin-dialog = { path = "../../../plugins/dialog", version = "2.2.2" }
tauri-plugin-http = { path = "../../../plugins/http", features = [
"multipart",
-], version = "2.3.0" }
-tauri-plugin-notification = { path = "../../../plugins/notification", version = "2.2.1", features = [
+ "cookies",
+], version = "2.4.4" }
+tauri-plugin-notification = { path = "../../../plugins/notification", version = "2.2.2", features = [
"windows7-compat",
] }
-tauri-plugin-os = { path = "../../../plugins/os", version = "2.2.0" }
-tauri-plugin-process = { path = "../../../plugins/process", version = "2.2.0" }
-tauri-plugin-opener = { path = "../../../plugins/opener", version = "2.2.5" }
-tauri-plugin-shell = { path = "../../../plugins/shell", version = "2.2.0" }
+tauri-plugin-os = { path = "../../../plugins/os", version = "2.2.1" }
+tauri-plugin-process = { path = "../../../plugins/process", version = "2.2.1" }
+tauri-plugin-opener = { path = "../../../plugins/opener", version = "2.2.7" }
+tauri-plugin-shell = { path = "../../../plugins/shell", version = "2.2.1" }
tauri-plugin-store = { path = "../../../plugins/store", version = "2.2.0" }
[dependencies.tauri]
@@ -52,16 +54,16 @@ features = [
[target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies]
tauri-plugin-cli = { path = "../../../plugins/cli", version = "2.2.0" }
-tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut", version = "2.2.0" }
-tauri-plugin-updater = { path = "../../../plugins/updater", version = "2.5.1" }
+tauri-plugin-global-shortcut = { path = "../../../plugins/global-shortcut", version = "2.2.1" }
+tauri-plugin-updater = { path = "../../../plugins/updater", version = "2.7.1" }
tauri-plugin-window-state = { path = "../../../plugins/window-state", version = "2.2.0" }
[target."cfg(any(target_os = \"android\", target_os = \"ios\"))".dependencies]
tauri-plugin-barcode-scanner = { path = "../../../plugins/barcode-scanner/", version = "2.2.0" }
tauri-plugin-nfc = { path = "../../../plugins/nfc", version = "2.2.0" }
-tauri-plugin-biometric = { path = "../../../plugins/biometric/", version = "2.2.0" }
-tauri-plugin-geolocation = { path = "../../../plugins/geolocation/", version = "2.2.3" }
-tauri-plugin-haptics = { path = "../../../plugins/haptics/", version = "2.2.3" }
+tauri-plugin-biometric = { path = "../../../plugins/biometric/", version = "2.2.1" }
+tauri-plugin-geolocation = { path = "../../../plugins/geolocation/", version = "2.2.4" }
+tauri-plugin-haptics = { path = "../../../plugins/haptics/", version = "2.2.4" }
[features]
prod = ["tauri/custom-protocol"]
diff --git a/examples/api/src-tauri/capabilities/base.json b/examples/api/src-tauri/capabilities/base.json
index 92532e7d..cefc4d8a 100644
--- a/examples/api/src-tauri/capabilities/base.json
+++ b/examples/api/src-tauri/capabilities/base.json
@@ -53,7 +53,7 @@
}
]
},
- "shell:allow-open",
+ "shell:default",
"shell:allow-kill",
"shell:allow-stdin-write",
"process:allow-exit",
@@ -69,6 +69,7 @@
"fs:allow-mkdir",
"fs:allow-remove",
"fs:allow-write-text-file",
+ "fs:read-meta",
"fs:scope-download-recursive",
"fs:scope-resource-recursive",
{
diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs
index dc133799..a19992b0 100644
--- a/examples/api/src-tauri/src/lib.rs
+++ b/examples/api/src-tauri/src/lib.rs
@@ -102,9 +102,28 @@ pub fn run() {
if let Ok(mut request) = server.recv() {
let mut body = Vec::new();
let _ = request.as_reader().read_to_end(&mut body);
+ let mut headers = request.headers().to_vec();
+
+ if !headers.iter().any(|header| header.field == tiny_http::HeaderField::from_bytes(b"Cookie").unwrap()) {
+ let expires = time::OffsetDateTime::now_utc() + time::Duration::days(1);
+ // RFC 1123 format
+ let format = time::macros::format_description!(
+ "[weekday repr:short], [day] [month repr:short] [year] [hour]:[minute]:[second] GMT"
+ );
+ let expires_str = expires.format(format).unwrap();
+ headers.push(
+ tiny_http::Header::from_bytes(
+ &b"Set-Cookie"[..],
+ format!("session-token=test-value; Secure; Path=/; Expires={expires_str}")
+ .as_bytes(),
+ )
+ .unwrap(),
+ );
+ }
+
let response = tiny_http::Response::new(
tiny_http::StatusCode(200),
- request.headers().to_vec(),
+ headers,
std::io::Cursor::new(body),
request.body_length(),
None,
diff --git a/examples/api/src/views/FileSystem.svelte b/examples/api/src/views/FileSystem.svelte
index f7222ef8..baf9f607 100644
--- a/examples/api/src/views/FileSystem.svelte
+++ b/examples/api/src/views/FileSystem.svelte
@@ -2,16 +2,18 @@
import * as fs from "@tauri-apps/plugin-fs";
import { convertFileSrc } from "@tauri-apps/api/core";
import { arrayBufferToBase64 } from "../lib/utils";
+ import { onDestroy } from "svelte";
export let onMessage;
export let insecureRenderHtml;
let path = "";
let img;
+ /** @type {fs.FileHandle} */
let file;
let renameTo;
let watchPath = "";
- let watchDebounceDelay = 0;
+ let watchDebounceDelay = "0";
let watchRecursive = false;
let unwatchFn;
let unwatchPath = "";
@@ -118,7 +120,7 @@
.getElementById("file-save")
.addEventListener("click", function () {
fs.writeTextFile(path, fileInput.value, {
- dir: getDir(),
+ baseDir: getDir(),
}).catch(onMessage);
});
});
@@ -170,6 +172,15 @@
unwatchFn = undefined;
unwatchPath = undefined;
}
+
+ onDestroy(() => {
+ if (file) {
+ file.close();
+ }
+ if (unwatchFn) {
+ unwatchFn();
+ }
+ })
diff --git a/examples/api/src/views/Updater.svelte b/examples/api/src/views/Updater.svelte
index 2fa5e436..26d074a6 100644
--- a/examples/api/src/views/Updater.svelte
+++ b/examples/api/src/views/Updater.svelte
@@ -12,10 +12,14 @@
isChecking = true
try {
const update = await check()
- onMessage(`Should update: ${update.available}`)
- onMessage(update)
+ if (update) {
+ onMessage(`Should update: ${update.available}`)
+ onMessage(update)
- newUpdate = update
+ newUpdate = update
+ } else {
+ onMessage('No update available')
+ }
} catch (e) {
onMessage(e)
} finally {
diff --git a/package.json b/package.json
index c0ae19e1..3a238bce 100644
--- a/package.json
+++ b/package.json
@@ -11,25 +11,29 @@
"example:api:dev": "pnpm run --filter \"api\" tauri dev"
},
"devDependencies": {
- "@eslint/js": "9.21.0",
- "@rollup/plugin-node-resolve": "16.0.0",
+ "@eslint/js": "9.28.0",
+ "@rollup/plugin-node-resolve": "16.0.1",
"@rollup/plugin-terser": "0.4.4",
- "@rollup/plugin-typescript": "11.1.6",
- "covector": "^0.12.3",
- "eslint": "9.21.0",
- "eslint-config-prettier": "10.0.1",
+ "@rollup/plugin-typescript": "12.1.2",
+ "covector": "^0.12.4",
+ "eslint": "9.28.0",
+ "eslint-config-prettier": "10.1.5",
"eslint-plugin-security": "3.0.1",
- "prettier": "3.5.2",
- "rollup": "4.34.8",
+ "prettier": "3.5.3",
+ "rollup": "4.41.1",
"tslib": "2.8.1",
- "typescript": "5.7.3",
- "typescript-eslint": "8.25.0"
+ "typescript": "5.8.3",
+ "typescript-eslint": "8.33.1"
},
- "resolutions": {
- "semver": ">=7.5.2",
- "optionator": ">=0.9.3"
+ "pnpm": {
+ "overrides": {
+ "esbuild@<0.25.0": ">=0.25.0"
+ },
+ "onlyBuiltDependencies": [
+ "esbuild"
+ ]
},
"engines": {
- "pnpm": "^9.0.0"
+ "pnpm": "^10.0.0"
}
}
diff --git a/plugins/autostart/CHANGELOG.md b/plugins/autostart/CHANGELOG.md
index 85b3d5c1..2a2f31e5 100644
--- a/plugins/autostart/CHANGELOG.md
+++ b/plugins/autostart/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## \[2.3.0]
+
+- [`8ecb418a`](https://github.com/tauri-apps/plugins-workspace/commit/8ecb418a1a35d7f234dc5d833746ac2d8e062aec) ([#2569](https://github.com/tauri-apps/plugins-workspace/pull/2569)) Add a `Builder` for more flexible settings
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/autostart/Cargo.toml b/plugins/autostart/Cargo.toml
index d0a80ddf..9a30eff9 100644
--- a/plugins/autostart/Cargo.toml
+++ b/plugins/autostart/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-autostart"
-version = "2.2.0"
+version = "2.3.0"
description = "Automatically launch your application at startup."
authors = { workspace = true }
license = { workspace = true }
diff --git a/plugins/autostart/README.md b/plugins/autostart/README.md
index 76d68f73..cef284d6 100644
--- a/plugins/autostart/README.md
+++ b/plugins/autostart/README.md
@@ -57,11 +57,12 @@ First you need to register the core plugin with Tauri:
`src-tauri/src/lib.rs`
```rust
-use tauri_plugin_autostart::MacosLauncher;
-
fn main() {
tauri::Builder::default()
- .plugin(tauri_plugin_autostart::init(MacosLauncher::LaunchAgent, Some(vec!["--flag1", "--flag2"]) /* arbitrary number of args to pass to your app */))
+ .plugin(tauri_plugin_autostart::Builder::new()
+ .args(["--flag1", "--flag2"])
+ .app_name("My Custom Name")
+ .build())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
diff --git a/plugins/autostart/package.json b/plugins/autostart/package.json
index 876d9295..c2840616 100644
--- a/plugins/autostart/package.json
+++ b/plugins/autostart/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-autostart",
- "version": "2.2.0",
+ "version": "2.3.0",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/autostart/permissions/autogenerated/reference.md b/plugins/autostart/permissions/autogenerated/reference.md
index 6e40fdb7..6adb2be4 100644
--- a/plugins/autostart/permissions/autogenerated/reference.md
+++ b/plugins/autostart/permissions/autogenerated/reference.md
@@ -11,6 +11,8 @@ disable the automatic start on boot.
+#### This default permission set includes the following:
+
- `allow-enable`
- `allow-disable`
- `allow-is-enabled`
diff --git a/plugins/autostart/permissions/schemas/schema.json b/plugins/autostart/permissions/schemas/schema.json
index 59c81f52..af681221 100644
--- a/plugins/autostart/permissions/schemas/schema.json
+++ b/plugins/autostart/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use
headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,37 +297,44 @@
{
"description": "Enables the disable command without any pre-configured scope.",
"type": "string",
- "const": "allow-disable"
+ "const": "allow-disable",
+ "markdownDescription": "Enables the disable command without any pre-configured scope."
},
{
"description": "Denies the disable command without any pre-configured scope.",
"type": "string",
- "const": "deny-disable"
+ "const": "deny-disable",
+ "markdownDescription": "Denies the disable command without any pre-configured scope."
},
{
"description": "Enables the enable command without any pre-configured scope.",
"type": "string",
- "const": "allow-enable"
+ "const": "allow-enable",
+ "markdownDescription": "Enables the enable command without any pre-configured scope."
},
{
"description": "Denies the enable command without any pre-configured scope.",
"type": "string",
- "const": "deny-enable"
+ "const": "deny-enable",
+ "markdownDescription": "Denies the enable command without any pre-configured scope."
},
{
"description": "Enables the is_enabled command without any pre-configured scope.",
"type": "string",
- "const": "allow-is-enabled"
+ "const": "allow-is-enabled",
+ "markdownDescription": "Enables the is_enabled command without any pre-configured scope."
},
{
"description": "Denies the is_enabled command without any pre-configured scope.",
"type": "string",
- "const": "deny-is-enabled"
+ "const": "deny-is-enabled",
+ "markdownDescription": "Denies the is_enabled command without any pre-configured scope."
},
{
- "description": "This permission set configures if your\napplication can enable or disable auto\nstarting the application on boot.\n\n#### Granted Permissions\n\nIt allows all to check, enable and\ndisable the automatic start on boot.\n\n",
+ "description": "This permission set configures if your\napplication can enable or disable auto\nstarting the application on boot.\n\n#### Granted Permissions\n\nIt allows all to check, enable and\ndisable the automatic start on boot.\n\n\n#### This default permission set includes:\n\n- `allow-enable`\n- `allow-disable`\n- `allow-is-enabled`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures if your\napplication can enable or disable auto\nstarting the application on boot.\n\n#### Granted Permissions\n\nIt allows all to check, enable and\ndisable the automatic start on boot.\n\n\n#### This default permission set includes:\n\n- `allow-enable`\n- `allow-disable`\n- `allow-is-enabled`"
}
]
}
diff --git a/plugins/autostart/src/lib.rs b/plugins/autostart/src/lib.rs
index 5550bfa1..4b4c7c23 100644
--- a/plugins/autostart/src/lib.rs
+++ b/plugins/autostart/src/lib.rs
@@ -14,7 +14,7 @@ use auto_launch::{AutoLaunch, AutoLaunchBuilder};
use serde::{ser::Serializer, Serialize};
use tauri::{
command,
- plugin::{Builder, TauriPlugin},
+ plugin::{Builder as PluginBuilder, TauriPlugin},
Manager, Runtime, State,
};
@@ -22,8 +22,9 @@ use std::env::current_exe;
type Result = std::result::Result;
-#[derive(Debug, Copy, Clone)]
+#[derive(Debug, Default, Copy, Clone)]
pub enum MacosLauncher {
+ #[default]
LaunchAgent,
AppleScript,
}
@@ -71,10 +72,12 @@ impl AutoLaunchManager {
}
pub trait ManagerExt {
+ /// TODO: Rename these to `autostart` or `auto_start` in v3
fn autolaunch(&self) -> State<'_, AutoLaunchManager>;
}
impl> ManagerExt for T {
+ /// TODO: Rename these to `autostart` or `auto_start` in v3
fn autolaunch(&self) -> State<'_, AutoLaunchManager> {
self.state::()
}
@@ -95,59 +98,153 @@ async fn is_enabled(manager: State<'_, AutoLaunchManager>) -> Result {
manager.is_enabled()
}
+#[derive(Default)]
+pub struct Builder {
+ #[cfg(target_os = "macos")]
+ macos_launcher: MacosLauncher,
+ args: Vec,
+ app_name: Option,
+}
+
+impl Builder {
+ /// Create a new auto start builder with default settings
+ pub fn new() -> Self {
+ Self::default()
+ }
+
+ /// Adds an argument to pass to your app on startup.
+ ///
+ /// ## Examples
+ ///
+ /// ```no_run
+ /// Builder::new()
+ /// .arg("--from-autostart")
+ /// .arg("--hey")
+ /// .build();
+ /// ```
+ pub fn arg>(mut self, arg: S) -> Self {
+ self.args.push(arg.into());
+ self
+ }
+
+ /// Adds multiple arguments to pass to your app on startup.
+ ///
+ /// ## Examples
+ ///
+ /// ```no_run
+ /// Builder::new()
+ /// .args(["--from-autostart", "--hey"])
+ /// .build();
+ /// ```
+ pub fn args(mut self, args: I) -> Self
+ where
+ I: IntoIterator- ,
+ S: Into
,
+ {
+ for arg in args {
+ self = self.arg(arg);
+ }
+ self
+ }
+
+ /// Sets whether to use launch agent or apple script to be used to enable auto start,
+ /// the builder's default is [`MacosLauncher::LaunchAgent`]
+ #[cfg(target_os = "macos")]
+ pub fn macos_launcher(mut self, macos_launcher: MacosLauncher) -> Self {
+ self.macos_launcher = macos_launcher;
+ self
+ }
+
+ /// Sets the app name to be used for the auto start entry.
+ ///
+ /// ## Examples
+ ///
+ /// ```no_run
+ /// Builder::new()
+ /// .app_name("My Custom Name"))
+ /// .build();
+ /// ```
+ pub fn app_name>(mut self, app_name: S) -> Self {
+ self.app_name = Some(app_name.into());
+ self
+ }
+
+ pub fn build(self) -> TauriPlugin {
+ PluginBuilder::new("autostart")
+ .invoke_handler(tauri::generate_handler![enable, disable, is_enabled])
+ .setup(move |app, _api| {
+ let mut builder = AutoLaunchBuilder::new();
+
+ let app_name = self
+ .app_name
+ .as_ref()
+ .unwrap_or_else(|| &app.package_info().name);
+ builder.set_app_name(app_name);
+
+ builder.set_args(&self.args);
+
+ let current_exe = current_exe()?;
+
+ #[cfg(windows)]
+ builder.set_app_path(¤t_exe.display().to_string());
+
+ #[cfg(target_os = "macos")]
+ {
+ builder.set_use_launch_agent(matches!(
+ self.macos_launcher,
+ MacosLauncher::LaunchAgent
+ ));
+ // on macOS, current_exe gives path to /Applications/Example.app/MacOS/Example
+ // but this results in seeing a Unix Executable in macOS login items
+ // It must be: /Applications/Example.app
+ // If it didn't find exactly a single occurance of .app, it will default to
+ // exe path to not break it.
+ let exe_path = current_exe.canonicalize()?.display().to_string();
+ let parts: Vec<&str> = exe_path.split(".app/").collect();
+ let app_path = if parts.len() == 2
+ && matches!(self.macos_launcher, MacosLauncher::AppleScript)
+ {
+ format!("{}.app", parts.first().unwrap())
+ } else {
+ exe_path
+ };
+ builder.set_app_path(&app_path);
+ }
+
+ #[cfg(target_os = "linux")]
+ if let Some(appimage) = app
+ .env()
+ .appimage
+ .and_then(|p| p.to_str().map(|s| s.to_string()))
+ {
+ builder.set_app_path(&appimage);
+ } else {
+ builder.set_app_path(¤t_exe.display().to_string());
+ }
+
+ app.manage(AutoLaunchManager(
+ builder.build().map_err(|e| e.to_string())?,
+ ));
+ Ok(())
+ })
+ .build()
+ }
+}
+
/// Initializes the plugin.
///
/// `args` - are passed to your app on startup.
pub fn init(
- macos_launcher: MacosLauncher,
+ #[allow(unused)] macos_launcher: MacosLauncher,
args: Option>,
) -> TauriPlugin {
- Builder::new("autostart")
- .invoke_handler(tauri::generate_handler![enable, disable, is_enabled])
- .setup(move |app, _api| {
- let mut builder = AutoLaunchBuilder::new();
- builder.set_app_name(&app.package_info().name);
- if let Some(args) = args {
- builder.set_args(&args);
- }
- builder.set_use_launch_agent(matches!(macos_launcher, MacosLauncher::LaunchAgent));
-
- let current_exe = current_exe()?;
-
- #[cfg(windows)]
- builder.set_app_path(¤t_exe.display().to_string());
- #[cfg(target_os = "macos")]
- {
- // on macOS, current_exe gives path to /Applications/Example.app/MacOS/Example
- // but this results in seeing a Unix Executable in macOS login items
- // It must be: /Applications/Example.app
- // If it didn't find exactly a single occurance of .app, it will default to
- // exe path to not break it.
- let exe_path = current_exe.canonicalize()?.display().to_string();
- let parts: Vec<&str> = exe_path.split(".app/").collect();
- let app_path =
- if parts.len() == 2 && matches!(macos_launcher, MacosLauncher::AppleScript) {
- format!("{}.app", parts.first().unwrap())
- } else {
- exe_path
- };
- builder.set_app_path(&app_path);
- }
- #[cfg(target_os = "linux")]
- if let Some(appimage) = app
- .env()
- .appimage
- .and_then(|p| p.to_str().map(|s| s.to_string()))
- {
- builder.set_app_path(&appimage);
- } else {
- builder.set_app_path(¤t_exe.display().to_string());
- }
-
- app.manage(AutoLaunchManager(
- builder.build().map_err(|e| e.to_string())?,
- ));
- Ok(())
- })
- .build()
+ let mut builder = Builder::new();
+ if let Some(args) = args {
+ builder = builder.args(args)
+ }
+ #[cfg(target_os = "macos")]
+ {
+ builder = builder.macos_launcher(macos_launcher);
+ }
+ builder.build()
}
diff --git a/plugins/barcode-scanner/permissions/autogenerated/reference.md b/plugins/barcode-scanner/permissions/autogenerated/reference.md
index 50cbcf99..9cc9f3c6 100644
--- a/plugins/barcode-scanner/permissions/autogenerated/reference.md
+++ b/plugins/barcode-scanner/permissions/autogenerated/reference.md
@@ -9,6 +9,8 @@ It allows all barcode related features.
+#### This default permission set includes the following:
+
- `allow-cancel`
- `allow-check-permissions`
- `allow-open-app-settings`
diff --git a/plugins/barcode-scanner/permissions/schemas/schema.json b/plugins/barcode-scanner/permissions/schemas/schema.json
index f41214b4..69fb0d5d 100644
--- a/plugins/barcode-scanner/permissions/schemas/schema.json
+++ b/plugins/barcode-scanner/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,67 +297,80 @@
{
"description": "Enables the cancel command without any pre-configured scope.",
"type": "string",
- "const": "allow-cancel"
+ "const": "allow-cancel",
+ "markdownDescription": "Enables the cancel command without any pre-configured scope."
},
{
"description": "Denies the cancel command without any pre-configured scope.",
"type": "string",
- "const": "deny-cancel"
+ "const": "deny-cancel",
+ "markdownDescription": "Denies the cancel command without any pre-configured scope."
},
{
"description": "Enables the check_permissions command without any pre-configured scope.",
"type": "string",
- "const": "allow-check-permissions"
+ "const": "allow-check-permissions",
+ "markdownDescription": "Enables the check_permissions command without any pre-configured scope."
},
{
"description": "Denies the check_permissions command without any pre-configured scope.",
"type": "string",
- "const": "deny-check-permissions"
+ "const": "deny-check-permissions",
+ "markdownDescription": "Denies the check_permissions command without any pre-configured scope."
},
{
"description": "Enables the open_app_settings command without any pre-configured scope.",
"type": "string",
- "const": "allow-open-app-settings"
+ "const": "allow-open-app-settings",
+ "markdownDescription": "Enables the open_app_settings command without any pre-configured scope."
},
{
"description": "Denies the open_app_settings command without any pre-configured scope.",
"type": "string",
- "const": "deny-open-app-settings"
+ "const": "deny-open-app-settings",
+ "markdownDescription": "Denies the open_app_settings command without any pre-configured scope."
},
{
"description": "Enables the request_permissions command without any pre-configured scope.",
"type": "string",
- "const": "allow-request-permissions"
+ "const": "allow-request-permissions",
+ "markdownDescription": "Enables the request_permissions command without any pre-configured scope."
},
{
"description": "Denies the request_permissions command without any pre-configured scope.",
"type": "string",
- "const": "deny-request-permissions"
+ "const": "deny-request-permissions",
+ "markdownDescription": "Denies the request_permissions command without any pre-configured scope."
},
{
"description": "Enables the scan command without any pre-configured scope.",
"type": "string",
- "const": "allow-scan"
+ "const": "allow-scan",
+ "markdownDescription": "Enables the scan command without any pre-configured scope."
},
{
"description": "Denies the scan command without any pre-configured scope.",
"type": "string",
- "const": "deny-scan"
+ "const": "deny-scan",
+ "markdownDescription": "Denies the scan command without any pre-configured scope."
},
{
"description": "Enables the vibrate command without any pre-configured scope.",
"type": "string",
- "const": "allow-vibrate"
+ "const": "allow-vibrate",
+ "markdownDescription": "Enables the vibrate command without any pre-configured scope."
},
{
"description": "Denies the vibrate command without any pre-configured scope.",
"type": "string",
- "const": "deny-vibrate"
+ "const": "deny-vibrate",
+ "markdownDescription": "Denies the vibrate command without any pre-configured scope."
},
{
- "description": "This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n",
+ "description": "This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n\n#### This default permission set includes:\n\n- `allow-cancel`\n- `allow-check-permissions`\n- `allow-open-app-settings`\n- `allow-request-permissions`\n- `allow-scan`\n- `allow-vibrate`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures which\nbarcode scanning features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all barcode related features.\n\n\n#### This default permission set includes:\n\n- `allow-cancel`\n- `allow-check-permissions`\n- `allow-open-app-settings`\n- `allow-request-permissions`\n- `allow-scan`\n- `allow-vibrate`"
}
]
}
diff --git a/plugins/biometric/CHANGELOG.md b/plugins/biometric/CHANGELOG.md
index 4cd2731d..5ebbe50f 100644
--- a/plugins/biometric/CHANGELOG.md
+++ b/plugins/biometric/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## \[2.2.1]
+
+### bug
+
+- [`10f9e66e`](https://github.com/tauri-apps/plugins-workspace/commit/10f9e66e32141dd35f4bf884fbf9102691187e92) ([#2633](https://github.com/tauri-apps/plugins-workspace/pull/2633) by [@pjf-dev](https://github.com/tauri-apps/plugins-workspace/../../pjf-dev)) Fix biometric plugin ignoring fallback logic when biometry status is unavailable or not enrolled on iOS.
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/biometric/Cargo.toml b/plugins/biometric/Cargo.toml
index b96f55b3..2b76fea4 100644
--- a/plugins/biometric/Cargo.toml
+++ b/plugins/biometric/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-biometric"
-version = "2.2.0"
+version = "2.2.1"
description = "Prompt the user for biometric authentication on Android and iOS."
edition = { workspace = true }
authors = { workspace = true }
diff --git a/plugins/biometric/ios/Sources/BiometricPlugin.swift b/plugins/biometric/ios/Sources/BiometricPlugin.swift
index 3c9a192a..c295904a 100644
--- a/plugins/biometric/ios/Sources/BiometricPlugin.swift
+++ b/plugins/biometric/ios/Sources/BiometricPlugin.swift
@@ -98,7 +98,12 @@ class BiometricPlugin: Plugin {
}
@objc func authenticate(_ invoke: Invoke) throws {
- guard self.status.available else {
+ let args = try invoke.parseArgs(AuthOptions.self)
+
+ let allowDeviceCredential = args.allowDeviceCredential ?? false
+
+ guard self.status.available || allowDeviceCredential else {
+ // Biometry unavailable, fallback disabled
invoke.reject(
self.status.errorReason ?? "",
code: self.status.errorCode ?? ""
@@ -106,15 +111,11 @@ class BiometricPlugin: Plugin {
return
}
- let args = try invoke.parseArgs(AuthOptions.self)
-
let context = LAContext()
context.localizedFallbackTitle = args.fallbackTitle
context.localizedCancelTitle = args.cancelTitle
context.touchIDAuthenticationAllowableReuseDuration = 0
- let allowDeviceCredential = args.allowDeviceCredential ?? false
-
// force system default fallback title if an empty string is provided (the OS hides the fallback button in this case)
if allowDeviceCredential,
let fallbackTitle = context.localizedFallbackTitle,
diff --git a/plugins/biometric/package.json b/plugins/biometric/package.json
index fe689d45..2307d67b 100644
--- a/plugins/biometric/package.json
+++ b/plugins/biometric/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-biometric",
- "version": "2.2.0",
+ "version": "2.2.1",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/biometric/permissions/autogenerated/reference.md b/plugins/biometric/permissions/autogenerated/reference.md
index bba4563a..c5a21286 100644
--- a/plugins/biometric/permissions/autogenerated/reference.md
+++ b/plugins/biometric/permissions/autogenerated/reference.md
@@ -9,6 +9,8 @@ It allows acccess to all biometric commands.
+#### This default permission set includes the following:
+
- `allow-authenticate`
- `allow-status`
diff --git a/plugins/biometric/permissions/schemas/schema.json b/plugins/biometric/permissions/schemas/schema.json
index 6eeaa655..116eae2e 100644
--- a/plugins/biometric/permissions/schemas/schema.json
+++ b/plugins/biometric/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,12 +297,14 @@
{
"description": "Enables the authenticate command without any pre-configured scope.",
"type": "string",
- "const": "allow-authenticate"
+ "const": "allow-authenticate",
+ "markdownDescription": "Enables the authenticate command without any pre-configured scope."
},
{
"description": "Denies the authenticate command without any pre-configured scope.",
"type": "string",
- "const": "deny-authenticate"
+ "const": "deny-authenticate",
+ "markdownDescription": "Denies the authenticate command without any pre-configured scope."
},
{
"description": "Enables the biometric_cipher command without any pre-configured scope.",
@@ -317,17 +319,20 @@
{
"description": "Enables the status command without any pre-configured scope.",
"type": "string",
- "const": "allow-status"
+ "const": "allow-status",
+ "markdownDescription": "Enables the status command without any pre-configured scope."
},
{
"description": "Denies the status command without any pre-configured scope.",
"type": "string",
- "const": "deny-status"
+ "const": "deny-status",
+ "markdownDescription": "Denies the status command without any pre-configured scope."
},
{
- "description": "This permission set configures which\nbiometric features are by default exposed.\n\n#### Granted Permissions\n\nIt allows acccess to all biometric commands.\n\n",
+ "description": "This permission set configures which\nbiometric features are by default exposed.\n\n#### Granted Permissions\n\nIt allows acccess to all biometric commands.\n\n\n#### This default permission set includes:\n\n- `allow-authenticate`\n- `allow-status`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures which\nbiometric features are by default exposed.\n\n#### Granted Permissions\n\nIt allows acccess to all biometric commands.\n\n\n#### This default permission set includes:\n\n- `allow-authenticate`\n- `allow-status`"
}
]
}
diff --git a/plugins/cli/permissions/autogenerated/reference.md b/plugins/cli/permissions/autogenerated/reference.md
index a920b749..cfa83f0a 100644
--- a/plugins/cli/permissions/autogenerated/reference.md
+++ b/plugins/cli/permissions/autogenerated/reference.md
@@ -2,6 +2,8 @@
Allows reading the CLI matches
+#### This default permission set includes the following:
+
- `allow-cli-matches`
## Permission Table
diff --git a/plugins/cli/permissions/schemas/schema.json b/plugins/cli/permissions/schemas/schema.json
index b376890e..45941514 100644
--- a/plugins/cli/permissions/schemas/schema.json
+++ b/plugins/cli/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,17 +297,20 @@
{
"description": "Enables the cli_matches command without any pre-configured scope.",
"type": "string",
- "const": "allow-cli-matches"
+ "const": "allow-cli-matches",
+ "markdownDescription": "Enables the cli_matches command without any pre-configured scope."
},
{
"description": "Denies the cli_matches command without any pre-configured scope.",
"type": "string",
- "const": "deny-cli-matches"
+ "const": "deny-cli-matches",
+ "markdownDescription": "Denies the cli_matches command without any pre-configured scope."
},
{
- "description": "Allows reading the CLI matches",
+ "description": "Allows reading the CLI matches\n#### This default permission set includes:\n\n- `allow-cli-matches`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "Allows reading the CLI matches\n#### This default permission set includes:\n\n- `allow-cli-matches`"
}
]
}
diff --git a/plugins/clipboard-manager/CHANGELOG.md b/plugins/clipboard-manager/CHANGELOG.md
index 91cfc44d..895d8c71 100644
--- a/plugins/clipboard-manager/CHANGELOG.md
+++ b/plugins/clipboard-manager/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## \[2.2.2]
+
+### bug
+
+- [`d37bbdef`](https://github.com/tauri-apps/plugins-workspace/commit/d37bbdef8dc70e61e59f9fe0bb8b2a48999d0aa1) ([#2507](https://github.com/tauri-apps/plugins-workspace/pull/2507) by [@SquitchYT](https://github.com/tauri-apps/plugins-workspace/../../SquitchYT)) Fix clipboard-manager Wayland support.
+
## \[2.2.1]
- [`ce11079f`](https://github.com/tauri-apps/plugins-workspace/commit/ce11079f19852fbefdecf0e4c7d947af3624fee0) ([#2280](https://github.com/tauri-apps/plugins-workspace/pull/2280) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Explicitly drop `arboard::Clipboard` on exit. Add recommendation to not use read methods on the mainthread.
diff --git a/plugins/clipboard-manager/Cargo.toml b/plugins/clipboard-manager/Cargo.toml
index 5b486fcf..0c35e591 100644
--- a/plugins/clipboard-manager/Cargo.toml
+++ b/plugins/clipboard-manager/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-clipboard-manager"
-version = "2.2.1"
+version = "2.2.2"
description = "Read and write to the system clipboard."
edition = { workspace = true }
authors = { workspace = true }
@@ -36,4 +36,4 @@ thiserror = { workspace = true }
tauri = { workspace = true, features = ["wry"] }
[target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\", target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"openbsd\", target_os = \"netbsd\"))".dependencies]
-arboard = "3"
+arboard = { version = "3", features = ["wayland-data-control"] }
diff --git a/plugins/clipboard-manager/guest-js/index.ts b/plugins/clipboard-manager/guest-js/index.ts
index 19851fe0..a37bbfab 100644
--- a/plugins/clipboard-manager/guest-js/index.ts
+++ b/plugins/clipboard-manager/guest-js/index.ts
@@ -91,7 +91,7 @@ async function writeImage(
* import { readImage } from '@tauri-apps/plugin-clipboard-manager';
*
* const clipboardImage = await readImage();
- * const blob = new Blob([await clipboardImage.rbga()], { type: 'image' })
+ * const blob = new Blob([await clipboardImage.rgba()], { type: 'image' })
* const url = URL.createObjectURL(blob)
* ```
* @since 2.0.0
diff --git a/plugins/clipboard-manager/package.json b/plugins/clipboard-manager/package.json
index ff1ba9e7..9b78843b 100644
--- a/plugins/clipboard-manager/package.json
+++ b/plugins/clipboard-manager/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-clipboard-manager",
- "version": "2.2.1",
+ "version": "2.2.2",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/clipboard-manager/permissions/autogenerated/reference.md b/plugins/clipboard-manager/permissions/autogenerated/reference.md
index 6b8bf14f..f8bed009 100644
--- a/plugins/clipboard-manager/permissions/autogenerated/reference.md
+++ b/plugins/clipboard-manager/permissions/autogenerated/reference.md
@@ -7,6 +7,8 @@ application specific if read and/or write access is needed.
Clipboard interaction needs to be explicitly enabled.
+#### This default permission set includes the following:
+
## Permission Table
diff --git a/plugins/clipboard-manager/permissions/schemas/schema.json b/plugins/clipboard-manager/permissions/schemas/schema.json
index c2763492..891c6f0d 100644
--- a/plugins/clipboard-manager/permissions/schemas/schema.json
+++ b/plugins/clipboard-manager/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,67 +297,80 @@
{
"description": "Enables the clear command without any pre-configured scope.",
"type": "string",
- "const": "allow-clear"
+ "const": "allow-clear",
+ "markdownDescription": "Enables the clear command without any pre-configured scope."
},
{
"description": "Denies the clear command without any pre-configured scope.",
"type": "string",
- "const": "deny-clear"
+ "const": "deny-clear",
+ "markdownDescription": "Denies the clear command without any pre-configured scope."
},
{
"description": "Enables the read_image command without any pre-configured scope.",
"type": "string",
- "const": "allow-read-image"
+ "const": "allow-read-image",
+ "markdownDescription": "Enables the read_image command without any pre-configured scope."
},
{
"description": "Denies the read_image command without any pre-configured scope.",
"type": "string",
- "const": "deny-read-image"
+ "const": "deny-read-image",
+ "markdownDescription": "Denies the read_image command without any pre-configured scope."
},
{
"description": "Enables the read_text command without any pre-configured scope.",
"type": "string",
- "const": "allow-read-text"
+ "const": "allow-read-text",
+ "markdownDescription": "Enables the read_text command without any pre-configured scope."
},
{
"description": "Denies the read_text command without any pre-configured scope.",
"type": "string",
- "const": "deny-read-text"
+ "const": "deny-read-text",
+ "markdownDescription": "Denies the read_text command without any pre-configured scope."
},
{
"description": "Enables the write_html command without any pre-configured scope.",
"type": "string",
- "const": "allow-write-html"
+ "const": "allow-write-html",
+ "markdownDescription": "Enables the write_html command without any pre-configured scope."
},
{
"description": "Denies the write_html command without any pre-configured scope.",
"type": "string",
- "const": "deny-write-html"
+ "const": "deny-write-html",
+ "markdownDescription": "Denies the write_html command without any pre-configured scope."
},
{
"description": "Enables the write_image command without any pre-configured scope.",
"type": "string",
- "const": "allow-write-image"
+ "const": "allow-write-image",
+ "markdownDescription": "Enables the write_image command without any pre-configured scope."
},
{
"description": "Denies the write_image command without any pre-configured scope.",
"type": "string",
- "const": "deny-write-image"
+ "const": "deny-write-image",
+ "markdownDescription": "Denies the write_image command without any pre-configured scope."
},
{
"description": "Enables the write_text command without any pre-configured scope.",
"type": "string",
- "const": "allow-write-text"
+ "const": "allow-write-text",
+ "markdownDescription": "Enables the write_text command without any pre-configured scope."
},
{
"description": "Denies the write_text command without any pre-configured scope.",
"type": "string",
- "const": "deny-write-text"
+ "const": "deny-write-text",
+ "markdownDescription": "Denies the write_text command without any pre-configured scope."
},
{
"description": "No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n"
}
]
}
diff --git a/plugins/deep-link/CHANGELOG.md b/plugins/deep-link/CHANGELOG.md
index 4c3c9b9a..742f392b 100644
--- a/plugins/deep-link/CHANGELOG.md
+++ b/plugins/deep-link/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## \[2.3.0]
+
+- [`4d10acee`](https://github.com/tauri-apps/plugins-workspace/commit/4d10acee61bad8045705508121424ed5f2d381f6) ([#993](https://github.com/tauri-apps/plugins-workspace/pull/993) by [@m00nwtchr](https://github.com/tauri-apps/plugins-workspace/../../m00nwtchr)) Exposed Android's `path`, `pathPattern` and `pathSuffix` configurations.
+- [`4d10acee`](https://github.com/tauri-apps/plugins-workspace/commit/4d10acee61bad8045705508121424ed5f2d381f6) ([#993](https://github.com/tauri-apps/plugins-workspace/pull/993) by [@m00nwtchr](https://github.com/tauri-apps/plugins-workspace/../../m00nwtchr)) Added a `scheme` configuration to set a scheme other than http/https. This is only supported on Android and will still default to http,https if not set.
+
+## \[2.2.1]
+
+### bug
+
+- [`38deef43`](https://github.com/tauri-apps/plugins-workspace/commit/38deef43dca9d5a09a38ed2da45b0f86c6afa1c5) ([#2483](https://github.com/tauri-apps/plugins-workspace/pull/2483)) Fix `is_registered` not being able to pickup deep link registered in `HKEY_LOCAL_MACHINE` on Windows
+- [`38deef43`](https://github.com/tauri-apps/plugins-workspace/commit/38deef43dca9d5a09a38ed2da45b0f86c6afa1c5) ([#2483](https://github.com/tauri-apps/plugins-workspace/pull/2483)) Fix `unregister` not being able to remove deep link registered in `HKEY_LOCAL_MACHINE` on Windows
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/deep-link/Cargo.toml b/plugins/deep-link/Cargo.toml
index 068cad08..8dcdef04 100644
--- a/plugins/deep-link/Cargo.toml
+++ b/plugins/deep-link/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-deep-link"
-version = "2.2.0"
+version = "2.3.0"
description = "Set your Tauri application as the default handler for an URL"
authors = { workspace = true }
license = { workspace = true }
diff --git a/plugins/deep-link/build.rs b/plugins/deep-link/build.rs
index 4bb909cb..418746b2 100644
--- a/plugins/deep-link/build.rs
+++ b/plugins/deep-link/build.rs
@@ -9,25 +9,50 @@ use config::{AssociatedDomain, Config};
const COMMANDS: &[&str] = &["get_current", "register", "unregister", "is_registered"];
// TODO: Consider using activity-alias in case users may have multiple activities in their app.
-// TODO: Do we want to support the other path* configs too?
fn intent_filter(domain: &AssociatedDomain) -> String {
format!(
r#"
-
-
+ {}
{}
+ {}
+ {}
+ {}
"#,
+ domain
+ .scheme
+ .iter()
+ .map(|scheme| format!(r#" "#))
+ .collect::>()
+ .join("\n "),
domain.host,
+ domain
+ .path
+ .iter()
+ .map(|path| format!(r#" "#))
+ .collect::>()
+ .join("\n "),
+ domain
+ .path_pattern
+ .iter()
+ .map(|pattern| format!(r#" "#))
+ .collect::>()
+ .join("\n "),
domain
.path_prefix
.iter()
.map(|prefix| format!(r#" "#))
.collect::>()
- .join("\n ")
+ .join("\n "),
+ domain
+ .path_suffix
+ .iter()
+ .map(|suffix| format!(r#" "#))
+ .collect::>()
+ .join("\n "),
)
}
diff --git a/plugins/deep-link/examples/app/CHANGELOG.md b/plugins/deep-link/examples/app/CHANGELOG.md
index 5e89d0f4..5a363c8e 100644
--- a/plugins/deep-link/examples/app/CHANGELOG.md
+++ b/plugins/deep-link/examples/app/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## \[2.2.2]
+
+### Dependencies
+
+- Upgraded to `deep-link-js@2.3.0`
+
+## \[2.2.1]
+
+### Dependencies
+
+- Upgraded to `deep-link-js@2.2.1`
+
## \[2.2.0]
### Dependencies
diff --git a/plugins/deep-link/examples/app/package.json b/plugins/deep-link/examples/app/package.json
index 8cd45fa1..34a43538 100644
--- a/plugins/deep-link/examples/app/package.json
+++ b/plugins/deep-link/examples/app/package.json
@@ -1,7 +1,7 @@
{
"name": "deep-link-example",
"private": true,
- "version": "2.2.0",
+ "version": "2.2.2",
"type": "module",
"scripts": {
"dev": "vite",
@@ -10,12 +10,12 @@
"tauri": "tauri"
},
"dependencies": {
- "@tauri-apps/api": "2.2.0",
- "@tauri-apps/plugin-deep-link": "2.2.0"
+ "@tauri-apps/api": "2.5.0",
+ "@tauri-apps/plugin-deep-link": "2.3.0"
},
"devDependencies": {
- "@tauri-apps/cli": "2.2.7",
- "typescript": "^5.2.2",
- "vite": "^6.0.0"
+ "@tauri-apps/cli": "2.5.0",
+ "typescript": "^5.7.3",
+ "vite": "^6.2.6"
}
}
diff --git a/plugins/deep-link/package.json b/plugins/deep-link/package.json
index 0b05dd86..6e9e82d2 100644
--- a/plugins/deep-link/package.json
+++ b/plugins/deep-link/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-deep-link",
- "version": "2.2.0",
+ "version": "2.3.0",
"description": "Set your Tauri application as the default handler for an URL",
"license": "MIT OR Apache-2.0",
"authors": [
diff --git a/plugins/deep-link/permissions/autogenerated/reference.md b/plugins/deep-link/permissions/autogenerated/reference.md
index 3b84f1c5..a8ef1874 100644
--- a/plugins/deep-link/permissions/autogenerated/reference.md
+++ b/plugins/deep-link/permissions/autogenerated/reference.md
@@ -2,6 +2,8 @@
Allows reading the opened deep link via the get_current command
+#### This default permission set includes the following:
+
- `allow-get-current`
## Permission Table
diff --git a/plugins/deep-link/permissions/schemas/schema.json b/plugins/deep-link/permissions/schemas/schema.json
index 7d887dc2..c9fc2ceb 100644
--- a/plugins/deep-link/permissions/schemas/schema.json
+++ b/plugins/deep-link/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,47 +297,56 @@
{
"description": "Enables the get_current command without any pre-configured scope.",
"type": "string",
- "const": "allow-get-current"
+ "const": "allow-get-current",
+ "markdownDescription": "Enables the get_current command without any pre-configured scope."
},
{
"description": "Denies the get_current command without any pre-configured scope.",
"type": "string",
- "const": "deny-get-current"
+ "const": "deny-get-current",
+ "markdownDescription": "Denies the get_current command without any pre-configured scope."
},
{
"description": "Enables the is_registered command without any pre-configured scope.",
"type": "string",
- "const": "allow-is-registered"
+ "const": "allow-is-registered",
+ "markdownDescription": "Enables the is_registered command without any pre-configured scope."
},
{
"description": "Denies the is_registered command without any pre-configured scope.",
"type": "string",
- "const": "deny-is-registered"
+ "const": "deny-is-registered",
+ "markdownDescription": "Denies the is_registered command without any pre-configured scope."
},
{
"description": "Enables the register command without any pre-configured scope.",
"type": "string",
- "const": "allow-register"
+ "const": "allow-register",
+ "markdownDescription": "Enables the register command without any pre-configured scope."
},
{
"description": "Denies the register command without any pre-configured scope.",
"type": "string",
- "const": "deny-register"
+ "const": "deny-register",
+ "markdownDescription": "Denies the register command without any pre-configured scope."
},
{
"description": "Enables the unregister command without any pre-configured scope.",
"type": "string",
- "const": "allow-unregister"
+ "const": "allow-unregister",
+ "markdownDescription": "Enables the unregister command without any pre-configured scope."
},
{
"description": "Denies the unregister command without any pre-configured scope.",
"type": "string",
- "const": "deny-unregister"
+ "const": "deny-unregister",
+ "markdownDescription": "Denies the unregister command without any pre-configured scope."
},
{
- "description": "Allows reading the opened deep link via the get_current command",
+ "description": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "Allows reading the opened deep link via the get_current command\n#### This default permission set includes:\n\n- `allow-get-current`"
}
]
}
diff --git a/plugins/deep-link/src/config.rs b/plugins/deep-link/src/config.rs
index d7bad5b4..88222a24 100644
--- a/plugins/deep-link/src/config.rs
+++ b/plugins/deep-link/src/config.rs
@@ -9,10 +9,25 @@ use tauri_utils::config::DeepLinkProtocol;
#[derive(Deserialize, Clone)]
pub struct AssociatedDomain {
+ #[serde(default = "default_schemes")]
+ pub scheme: Vec,
+
#[serde(deserialize_with = "deserialize_associated_host")]
pub host: String,
+
+ #[serde(default)]
+ pub path: Vec,
+ #[serde(default, alias = "path-pattern", rename = "pathPattern")]
+ pub path_pattern: Vec,
#[serde(default, alias = "path-prefix", rename = "pathPrefix")]
pub path_prefix: Vec,
+ #[serde(default, alias = "path-suffix", rename = "pathSuffix")]
+ pub path_suffix: Vec,
+}
+
+// TODO: Consider removing this in v3
+fn default_schemes() -> Vec {
+ vec!["https".to_string(), "http".to_string()]
}
fn deserialize_associated_host<'de, D>(deserializer: D) -> Result
diff --git a/plugins/deep-link/src/lib.rs b/plugins/deep-link/src/lib.rs
index c259e6b2..d74864db 100644
--- a/plugins/deep-link/src/lib.rs
+++ b/plugins/deep-link/src/lib.rs
@@ -114,8 +114,8 @@ mod imp {
/// ## Platform-specific:
///
/// - **Windows / Linux**: This function reads the command line arguments and checks if there's only one value, which must be an URL with scheme matching one of the configured values.
- /// Note that you must manually check the arguments when registering deep link schemes dynamically with [`Self::register`].
- /// Additionally, the deep link might have been provided as a CLI argument so you should check if its format matches what you expect.
+ /// Note that you must manually check the arguments when registering deep link schemes dynamically with [`Self::register`].
+ /// Additionally, the deep link might have been provided as a CLI argument so you should check if its format matches what you expect.
pub fn get_current(&self) -> crate::Result>> {
self.plugin_handle
.run_mobile_plugin::("getCurrent", ())
@@ -172,7 +172,7 @@ mod imp {
use tauri::Manager;
use tauri::{AppHandle, Runtime};
#[cfg(windows)]
- use windows_registry::CURRENT_USER;
+ use windows_registry::{CLASSES_ROOT, CURRENT_USER, LOCAL_MACHINE};
/// Access to the deep-link APIs.
pub struct DeepLink {
@@ -226,8 +226,8 @@ mod imp {
/// ## Platform-specific:
///
/// - **Windows / Linux**: This function reads the command line arguments and checks if there's only one value, which must be an URL with scheme matching one of the configured values.
- /// Note that you must manually check the arguments when registering deep link schemes dynamically with [`Self::register`].
- /// Additionally, the deep link might have been provided as a CLI argument so you should check if its format matches what you expect.
+ /// Note that you must manually check the arguments when registering deep link schemes dynamically with [`Self::register`].
+ /// Additionally, the deep link might have been provided as a CLI argument so you should check if its format matches what you expect.
pub fn get_current(&self) -> crate::Result>> {
return Ok(self.current.lock().unwrap().clone());
}
@@ -258,25 +258,23 @@ mod imp {
pub fn register>(&self, _protocol: S) -> crate::Result<()> {
#[cfg(windows)]
{
- let key_base = format!("Software\\Classes\\{}", _protocol.as_ref());
+ let protocol = _protocol.as_ref();
+ let key_base = format!("Software\\Classes\\{protocol}");
let exe = dunce::simplified(&tauri::utils::platform::current_exe()?)
.display()
.to_string();
let key_reg = CURRENT_USER.create(&key_base)?;
- key_reg.set_string(
- "",
- &format!("URL:{} protocol", self.app.config().identifier),
- )?;
+ key_reg.set_string("", format!("URL:{} protocol", self.app.config().identifier))?;
key_reg.set_string("URL Protocol", "")?;
let icon_reg = CURRENT_USER.create(format!("{key_base}\\DefaultIcon"))?;
- icon_reg.set_string("", &format!("{exe},0"))?;
+ icon_reg.set_string("", format!("{exe},0"))?;
let cmd_reg = CURRENT_USER.create(format!("{key_base}\\shell\\open\\command"))?;
- cmd_reg.set_string("", &format!("\"{exe}\" \"%1\""))?;
+ cmd_reg.set_string("", format!("\"{exe}\" \"%1\""))?;
Ok(())
}
@@ -351,13 +349,21 @@ mod imp {
///
/// ## Platform-specific:
///
+ /// - **Windows**: Requires admin rights if the protocol is registered on local machine
+ /// (this can happen when registered from the NSIS installer when the install mode is set to both or per machine)
/// - **Linux**: Can only unregister the scheme if it was initially registered with [`register`](`Self::register`). May not work on older distros.
/// - **macOS / Android / iOS**: Unsupported, will return [`Error::UnsupportedPlatform`](`crate::Error::UnsupportedPlatform`).
pub fn unregister>(&self, _protocol: S) -> crate::Result<()> {
#[cfg(windows)]
{
- CURRENT_USER.remove_tree(format!("Software\\Classes\\{}", _protocol.as_ref()))?;
-
+ let protocol = _protocol.as_ref();
+ let path = format!("Software\\Classes\\{protocol}");
+ if LOCAL_MACHINE.open(&path).is_ok() {
+ LOCAL_MACHINE.remove_tree(&path)?;
+ }
+ if CURRENT_USER.open(&path).is_ok() {
+ CURRENT_USER.remove_tree(&path)?;
+ }
Ok(())
}
@@ -401,10 +407,11 @@ mod imp {
pub fn is_registered>(&self, _protocol: S) -> crate::Result {
#[cfg(windows)]
{
- let cmd_reg = CURRENT_USER.open(format!(
- "Software\\Classes\\{}\\shell\\open\\command",
- _protocol.as_ref()
- ))?;
+ let protocol = _protocol.as_ref();
+ let Ok(cmd_reg) = CLASSES_ROOT.open(format!("{protocol}\\shell\\open\\command"))
+ else {
+ return Ok(false);
+ };
let registered_cmd = cmd_reg.get_string("")?;
diff --git a/plugins/dialog/CHANGELOG.md b/plugins/dialog/CHANGELOG.md
index 07989c79..e86fa202 100644
--- a/plugins/dialog/CHANGELOG.md
+++ b/plugins/dialog/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## \[2.2.2]
+
+### Dependencies
+
+- Upgraded to `fs-js@2.3.0`
+
+## \[2.2.1]
+
+### Dependencies
+
+- Upgraded to `fs-js@2.2.1`
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/dialog/Cargo.toml b/plugins/dialog/Cargo.toml
index 3ca0df2d..906cdeab 100644
--- a/plugins/dialog/Cargo.toml
+++ b/plugins/dialog/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-dialog"
-version = "2.2.0"
+version = "2.2.2"
description = "Native system dialogs for opening and saving files along with message dialogs on your Tauri application."
edition = { workspace = true }
authors = { workspace = true }
@@ -34,7 +34,7 @@ tauri = { workspace = true }
log = { workspace = true }
thiserror = { workspace = true }
url = { workspace = true }
-tauri-plugin-fs = { path = "../fs", version = "2.2.0" }
+tauri-plugin-fs = { path = "../fs", version = "2.3.0" }
[target.'cfg(target_os = "ios")'.dependencies]
tauri = { workspace = true, features = ["wry"] }
diff --git a/plugins/dialog/package.json b/plugins/dialog/package.json
index 52fef579..78b71623 100644
--- a/plugins/dialog/package.json
+++ b/plugins/dialog/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-dialog",
- "version": "2.2.0",
+ "version": "2.2.2",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/dialog/permissions/autogenerated/reference.md b/plugins/dialog/permissions/autogenerated/reference.md
index d93595d1..246c7733 100644
--- a/plugins/dialog/permissions/autogenerated/reference.md
+++ b/plugins/dialog/permissions/autogenerated/reference.md
@@ -10,6 +10,8 @@ All dialog types are enabled.
+#### This default permission set includes the following:
+
- `allow-ask`
- `allow-confirm`
- `allow-message`
diff --git a/plugins/dialog/permissions/schemas/schema.json b/plugins/dialog/permissions/schemas/schema.json
index ed8c0733..b47417ec 100644
--- a/plugins/dialog/permissions/schemas/schema.json
+++ b/plugins/dialog/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,57 +297,68 @@
{
"description": "Enables the ask command without any pre-configured scope.",
"type": "string",
- "const": "allow-ask"
+ "const": "allow-ask",
+ "markdownDescription": "Enables the ask command without any pre-configured scope."
},
{
"description": "Denies the ask command without any pre-configured scope.",
"type": "string",
- "const": "deny-ask"
+ "const": "deny-ask",
+ "markdownDescription": "Denies the ask command without any pre-configured scope."
},
{
"description": "Enables the confirm command without any pre-configured scope.",
"type": "string",
- "const": "allow-confirm"
+ "const": "allow-confirm",
+ "markdownDescription": "Enables the confirm command without any pre-configured scope."
},
{
"description": "Denies the confirm command without any pre-configured scope.",
"type": "string",
- "const": "deny-confirm"
+ "const": "deny-confirm",
+ "markdownDescription": "Denies the confirm command without any pre-configured scope."
},
{
"description": "Enables the message command without any pre-configured scope.",
"type": "string",
- "const": "allow-message"
+ "const": "allow-message",
+ "markdownDescription": "Enables the message command without any pre-configured scope."
},
{
"description": "Denies the message command without any pre-configured scope.",
"type": "string",
- "const": "deny-message"
+ "const": "deny-message",
+ "markdownDescription": "Denies the message command without any pre-configured scope."
},
{
"description": "Enables the open command without any pre-configured scope.",
"type": "string",
- "const": "allow-open"
+ "const": "allow-open",
+ "markdownDescription": "Enables the open command without any pre-configured scope."
},
{
"description": "Denies the open command without any pre-configured scope.",
"type": "string",
- "const": "deny-open"
+ "const": "deny-open",
+ "markdownDescription": "Denies the open command without any pre-configured scope."
},
{
"description": "Enables the save command without any pre-configured scope.",
"type": "string",
- "const": "allow-save"
+ "const": "allow-save",
+ "markdownDescription": "Enables the save command without any pre-configured scope."
},
{
"description": "Denies the save command without any pre-configured scope.",
"type": "string",
- "const": "deny-save"
+ "const": "deny-save",
+ "markdownDescription": "Denies the save command without any pre-configured scope."
},
{
- "description": "This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n",
+ "description": "This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n\n#### This default permission set includes:\n\n- `allow-ask`\n- `allow-confirm`\n- `allow-message`\n- `allow-save`\n- `allow-open`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n\n#### This default permission set includes:\n\n- `allow-ask`\n- `allow-confirm`\n- `allow-message`\n- `allow-save`\n- `allow-open`"
}
]
}
diff --git a/plugins/fs/CHANGELOG.md b/plugins/fs/CHANGELOG.md
index 533714ad..85bff34c 100644
--- a/plugins/fs/CHANGELOG.md
+++ b/plugins/fs/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## \[2.3.0]
+
+- [`dac4d537`](https://github.com/tauri-apps/plugins-workspace/commit/dac4d53724bb3430a00a3f0119857cba32a031e8) ([#2613](https://github.com/tauri-apps/plugins-workspace/pull/2613) by [@Legend-Master](https://github.com/tauri-apps/plugins-workspace/../../Legend-Master)) Reduce the overhead of `watch` and `unwatch`
+
+## \[2.2.1]
+
+### bug
+
+- [`831c35ff`](https://github.com/tauri-apps/plugins-workspace/commit/831c35ff3940e841fe4418bb4cb104038b03304b) ([#2550](https://github.com/tauri-apps/plugins-workspace/pull/2550)) Fix `writeFile` ReadableStream handling due to missing async iterator support on macOS platform
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/fs/Cargo.toml b/plugins/fs/Cargo.toml
index 5768da73..bd7a3cb5 100644
--- a/plugins/fs/Cargo.toml
+++ b/plugins/fs/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-fs"
-version = "2.2.0"
+version = "2.3.0"
description = "Access the file system."
authors = { workspace = true }
license = { workspace = true }
@@ -14,7 +14,7 @@ rustc-args = ["--cfg", "docsrs"]
rustdoc-args = ["--cfg", "docsrs"]
[package.metadata.platforms.support]
-windows = { level = "full", notes = "Apps installed via MSI or NSIS in `perMachine` and `both` mode require admin permissions for write acces in `$RESOURCES` folder" }
+windows = { level = "full", notes = "Apps installed via MSI or NSIS in `perMachine` and `both` mode require admin permissions for write access in `$RESOURCES` folder" }
linux = { level = "full", notes = "No write access to `$RESOURCES` folder" }
macos = { level = "full", notes = "No write access to `$RESOURCES` folder" }
android = { level = "partial", notes = "Access is restricted to Application folder by default" }
@@ -35,7 +35,6 @@ tauri = { workspace = true }
thiserror = { workspace = true }
url = { workspace = true }
anyhow = "1"
-uuid = { version = "1", features = ["v4"] }
glob = { workspace = true }
# TODO: Remove `serialization-compat-6` in v3
notify = { version = "8", optional = true, features = [
diff --git a/plugins/fs/README.md b/plugins/fs/README.md
index dea88824..33031177 100644
--- a/plugins/fs/README.md
+++ b/plugins/fs/README.md
@@ -68,9 +68,9 @@ fn main() {
Afterwards all the plugin's APIs are available through the JavaScript guest bindings:
```javascript
-import { metadata } from '@tauri-apps/plugin-fs'
+import { stat } from '@tauri-apps/plugin-fs'
-await metadata('/path/to/file')
+await stat('/path/to/file')
```
## Contributing
diff --git a/plugins/fs/api-iife.js b/plugins/fs/api-iife.js
index 8c164cd4..02063a22 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("function"==typeof e||!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||!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 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"))for(e(this,i,"f").call(this,t),n(this,o,e(this,o,"f")+1);e(this,o,"f")in e(this,r,"f");){const t=e(this,r,"f")[e(this,o,"f")];e(this,i,"f").call(this,t),delete e(this,r,"f")[e(this,o,"f")],n(this,o,e(this,o,"f")+1)}else e(this,r,"f")[a]=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 c(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 c("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 c("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()=>{y(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 c("plugin:fs|watch",{paths:o.map((t=>t instanceof URL?t.toString():t)),options:i,onEvent:r});return()=>{y(a)}},t.writeFile=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");if(e instanceof ReadableStream){const i=await d(t,n);for await(const t of e)await i.write(t);await i.close()}else await c("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 c("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("function"==typeof e||!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||!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;"function"==typeof SuppressedError&&SuppressedError;const c="__TAURI_TO_IPC_KEY__";class f{constructor(t){i.set(this,void 0),o.set(this,0),r.set(this,[]),a.set(this,void 0),n(this,i,t||(()=>{})),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((t=>{const s=t.index;if("end"in t)return void(s==e(this,o,"f")?this.cleanupCallback():n(this,a,s));const c=t.message;if(s==e(this,o,"f")){for(e(this,i,"f").call(this,c),n(this,o,e(this,o,"f")+1);e(this,o,"f")in e(this,r,"f");){const t=e(this,r,"f")[e(this,o,"f")];e(this,i,"f").call(this,t),delete e(this,r,"f")[e(this,o,"f")],n(this,o,e(this,o,"f")+1)}e(this,o,"f")===e(this,a,"f")&&this.cleanupCallback()}else e(this,r,"f")[s]=c}))}cleanupCallback(){Reflect.deleteProperty(window,`_${this.id}`)}set onmessage(t){n(this,i,t)}get onmessage(){return e(this,i,"f")}[(i=new WeakMap,o=new WeakMap,r=new WeakMap,a=new WeakMap,c)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[c]()}}async function l(t,e={},n){return window.__TAURI_INTERNALS__.invoke(t,e,n)}class u{get rid(){return e(this,s,"f")}constructor(t){s.set(this,void 0),n(this,s,t)}async close(){return l("plugin:resources|close",{rid:this.rid})}}var p,w;function d(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}}s=new WeakMap,t.BaseDirectory=void 0,(p=t.BaseDirectory||(t.BaseDirectory={}))[p.Audio=1]="Audio",p[p.Cache=2]="Cache",p[p.Config=3]="Config",p[p.Data=4]="Data",p[p.LocalData=5]="LocalData",p[p.Document=6]="Document",p[p.Download=7]="Download",p[p.Picture=8]="Picture",p[p.Public=9]="Public",p[p.Video=10]="Video",p[p.Resource=11]="Resource",p[p.Temp=12]="Temp",p[p.AppConfig=13]="AppConfig",p[p.AppData=14]="AppData",p[p.AppLocalData=15]="AppLocalData",p[p.AppCache=16]="AppCache",p[p.AppLog=17]="AppLog",p[p.Desktop=18]="Desktop",p[p.Executable=19]="Executable",p[p.Font=20]="Font",p[p.Home=21]="Home",p[p.Runtime=22]="Runtime",p[p.Template=23]="Template",t.SeekMode=void 0,(w=t.SeekMode||(t.SeekMode={}))[w.Start=0]="Start",w[w.Current=1]="Current",w[w.End=2]="End";class h 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:n,onEvent:o}),a=new L(r);return()=>{a.close()}}return t.FileHandle=h,t.copyFile=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol||e instanceof URL&&"file:"!==e.protocol)throw new TypeError("Must be a file URL.");await l("plugin:fs|copy_file",{fromPath:t instanceof URL?t.toString():t,toPath:e instanceof URL?e.toString():e,options:n})},t.create=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const n=await l("plugin:fs|create",{path:t instanceof URL?t.toString():t,options:e});return new h(n)},t.exists=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");return await l("plugin:fs|exists",{path:t instanceof URL?t.toString():t,options:e})},t.lstat=async function(t,e){return d(await l("plugin:fs|lstat",{path:t instanceof URL?t.toString():t,options:e}))},t.mkdir=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");await l("plugin:fs|mkdir",{path:t instanceof URL?t.toString():t,options:e})},t.open=y,t.readDir=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");return await l("plugin:fs|read_dir",{path:t instanceof URL?t.toString():t,options:e})},t.readFile=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const n=await l("plugin:fs|read_file",{path:t instanceof URL?t.toString():t,options:e});return n instanceof ArrayBuffer?new Uint8Array(n):Uint8Array.from(n)},t.readTextFile=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const n=await l("plugin:fs|read_text_file",{path:t instanceof URL?t.toString():t,options:e}),i=n instanceof ArrayBuffer?n:Uint8Array.from(n);return(new TextDecoder).decode(i)},t.readTextFileLines=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");const n=t instanceof URL?t.toString():t;return await Promise.resolve({path:n,rid:null,async next(){null===this.rid&&(this.rid=await l("plugin:fs|read_text_file_lines",{path:n,options:e}));const t=await l("plugin:fs|read_text_file_lines_next",{rid:this.rid}),i=t instanceof ArrayBuffer?new Uint8Array(t):Uint8Array.from(t),o=1===i[i.byteLength-1];if(o)return this.rid=null,{value:null,done:o};return{value:(new TextDecoder).decode(i.slice(0,i.byteLength)),done:o}},[Symbol.asyncIterator](){return this}})},t.remove=async function(t,e){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");await l("plugin:fs|remove",{path:t instanceof URL?t.toString():t,options:e})},t.rename=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol||e instanceof URL&&"file:"!==e.protocol)throw new TypeError("Must be a file URL.");await l("plugin:fs|rename",{oldPath:t instanceof URL?t.toString():t,newPath:e instanceof URL?e.toString():e,options:n})},t.size=async function(t){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");return await l("plugin:fs|size",{path:t instanceof URL?t.toString():t})},t.stat=async function(t,e){return d(await l("plugin:fs|stat",{path:t instanceof URL?t.toString():t,options:e}))},t.truncate=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");await l("plugin:fs|truncate",{path:t instanceof URL?t.toString():t,len:e,options:n})},t.watch=async function(t,e,n){return await R(t,e,{delayMs:2e3,...n})},t.watchImmediate=async function(t,e,n){return await R(t,e,{...n,delayMs:void 0})},t.writeFile=async function(t,e,n){if(t instanceof URL&&"file:"!==t.protocol)throw new TypeError("Must be a file URL.");if(e instanceof ReadableStream){const i=await y(t,n),o=e.getReader();try{for(;;){const{done:t,value:e}=await o.read();if(t)break;await i.write(e)}}finally{o.releaseLock(),await i.close()}}else 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__})}
diff --git a/plugins/fs/build.rs b/plugins/fs/build.rs
index 9c34586e..47e27003 100644
--- a/plugins/fs/build.rs
+++ b/plugins/fs/build.rs
@@ -101,6 +101,7 @@ const COMMANDS: &[(&str, &[&str])] = &[
("fstat", &[]),
("exists", &[]),
("watch", &[]),
+ // TODO: Remove this in v3
("unwatch", &[]),
("size", &[]),
];
diff --git a/plugins/fs/guest-js/index.ts b/plugins/fs/guest-js/index.ts
index e0438d58..b3e49e5c 100644
--- a/plugins/fs/guest-js/index.ts
+++ b/plugins/fs/guest-js/index.ts
@@ -1075,10 +1075,18 @@ async function writeFile(
if (data instanceof ReadableStream) {
const file = await open(path, options)
- for await (const chunk of data) {
- await file.write(chunk)
+ const reader = data.getReader()
+
+ try {
+ while (true) {
+ const { done, value } = await reader.read()
+ if (done) break
+ await file.write(value)
+ }
+ } finally {
+ reader.releaseLock()
+ await file.close()
}
- await file.close()
} else {
await invoke('plugin:fs|write_file', data, {
headers: {
@@ -1237,31 +1245,19 @@ type WatchEventKindRemove =
| { kind: 'folder' }
| { kind: 'other' }
+// TODO: Remove this in v3, return `Watcher` instead
/**
* @since 2.0.0
*/
type UnwatchFn = () => void
-async function unwatch(rid: number): Promise {
- await invoke('plugin:fs|unwatch', { rid })
-}
+class Watcher extends Resource {}
-/**
- * Watch changes (after a delay) on files or directories.
- *
- * @since 2.0.0
- */
-async function watch(
+async function watchInternal(
paths: string | string[] | URL | URL[],
cb: (event: WatchEvent) => void,
- options?: DebouncedWatchOptions
+ options: DebouncedWatchOptions
): Promise {
- const opts = {
- recursive: false,
- delayMs: 2000,
- ...options
- }
-
const watchPaths = Array.isArray(paths) ? paths : [paths]
for (const path of watchPaths) {
@@ -1275,15 +1271,35 @@ async function watch(
const rid: number = await invoke('plugin:fs|watch', {
paths: watchPaths.map((p) => (p instanceof URL ? p.toString() : p)),
- options: opts,
+ options,
onEvent
})
+ const watcher = new Watcher(rid)
+
return () => {
- void unwatch(rid)
+ void watcher.close()
}
}
+// TODO: Return `Watcher` instead in v3
+/**
+ * Watch changes (after a delay) on files or directories.
+ *
+ * @since 2.0.0
+ */
+async function watch(
+ paths: string | string[] | URL | URL[],
+ cb: (event: WatchEvent) => void,
+ options?: DebouncedWatchOptions
+): Promise {
+ return await watchInternal(paths, cb, {
+ delayMs: 2000,
+ ...options
+ })
+}
+
+// TODO: Return `Watcher` instead in v3
/**
* Watch changes on files or directories.
*
@@ -1294,32 +1310,10 @@ async function watchImmediate(
cb: (event: WatchEvent) => void,
options?: WatchOptions
): Promise {
- const opts = {
- recursive: false,
+ return await watchInternal(paths, cb, {
...options,
- delayMs: null
- }
-
- const watchPaths = Array.isArray(paths) ? paths : [paths]
-
- for (const path of watchPaths) {
- if (path instanceof URL && path.protocol !== 'file:') {
- throw new TypeError('Must be a file URL.')
- }
- }
-
- const onEvent = new Channel()
- onEvent.onmessage = cb
-
- const rid: number = await invoke('plugin:fs|watch', {
- paths: watchPaths.map((p) => (p instanceof URL ? p.toString() : p)),
- options: opts,
- onEvent
+ delayMs: undefined
})
-
- return () => {
- void unwatch(rid)
- }
}
/**
diff --git a/plugins/fs/package.json b/plugins/fs/package.json
index 09efc93d..ce73027a 100644
--- a/plugins/fs/package.json
+++ b/plugins/fs/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-fs",
- "version": "2.2.0",
+ "version": "2.3.0",
"description": "Access the file system.",
"license": "MIT OR Apache-2.0",
"authors": [
diff --git a/plugins/fs/permissions/autogenerated/reference.md b/plugins/fs/permissions/autogenerated/reference.md
index 3cec32ed..35ef551f 100644
--- a/plugins/fs/permissions/autogenerated/reference.md
+++ b/plugins/fs/permissions/autogenerated/reference.md
@@ -24,8 +24,8 @@ This default permission set prevents access to critical components
of the Tauri application by default.
On Windows the webview data folder access is denied.
-#### Included permissions within this default permission set:
+#### This default permission set includes the following:
- `create-app-specific-dirs`
- `read-app-specific-dirs-recursive`
diff --git a/plugins/fs/permissions/default.toml b/plugins/fs/permissions/default.toml
index 4cc7bd51..78836df7 100644
--- a/plugins/fs/permissions/default.toml
+++ b/plugins/fs/permissions/default.toml
@@ -25,8 +25,6 @@ the `mkdir` command.
This default permission set prevents access to critical components
of the Tauri application by default.
On Windows the webview data folder access is denied.
-
-#### Included permissions within this default permission set:
"""
permissions = [
"create-app-specific-dirs",
diff --git a/plugins/fs/permissions/schemas/schema.json b/plugins/fs/permissions/schemas/schema.json
index 2c13d5c6..54c6798b 100644
--- a/plugins/fs/permissions/schemas/schema.json
+++ b/plugins/fs/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -295,1444 +295,1732 @@
"type": "string",
"oneOf": [
{
- "description": "This allows full recursive read access to the complete application folders, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete application folders, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-app-recursive`",
"type": "string",
- "const": "allow-app-read-recursive"
+ "const": "allow-app-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete application folders, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-app-recursive`"
},
{
- "description": "This allows full recursive write access to the complete application folders, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete application folders, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-app-recursive`",
"type": "string",
- "const": "allow-app-write-recursive"
+ "const": "allow-app-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete application folders, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-app-recursive`"
},
{
- "description": "This allows non-recursive read access to the application folders.",
+ "description": "This allows non-recursive read access to the application folders.\n#### This permission set includes:\n\n- `read-all`\n- `scope-app`",
"type": "string",
- "const": "allow-app-read"
+ "const": "allow-app-read",
+ "markdownDescription": "This allows non-recursive read access to the application folders.\n#### This permission set includes:\n\n- `read-all`\n- `scope-app`"
},
{
- "description": "This allows non-recursive write access to the application folders.",
+ "description": "This allows non-recursive write access to the application folders.\n#### This permission set includes:\n\n- `write-all`\n- `scope-app`",
"type": "string",
- "const": "allow-app-write"
+ "const": "allow-app-write",
+ "markdownDescription": "This allows non-recursive write access to the application folders.\n#### This permission set includes:\n\n- `write-all`\n- `scope-app`"
},
{
- "description": "This allows full recursive read access to metadata of the application folders, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the application folders, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-app-recursive`",
"type": "string",
- "const": "allow-app-meta-recursive"
+ "const": "allow-app-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the application folders, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-app-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the application folders, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the application folders, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-app-index`",
"type": "string",
- "const": "allow-app-meta"
+ "const": "allow-app-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the application folders, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-app-index`"
},
{
"description": "This scope permits recursive access to the complete application folders, including sub directories and files.",
"type": "string",
- "const": "scope-app-recursive"
+ "const": "scope-app-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete application folders, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the application folders.",
"type": "string",
- "const": "scope-app"
+ "const": "scope-app",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the application folders."
},
{
"description": "This scope permits to list all files and folders in the application directories.",
"type": "string",
- "const": "scope-app-index"
+ "const": "scope-app-index",
+ "markdownDescription": "This scope permits to list all files and folders in the application directories."
},
{
- "description": "This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appcache-recursive`",
"type": "string",
- "const": "allow-appcache-read-recursive"
+ "const": "allow-appcache-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appcache-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appcache-recursive`",
"type": "string",
- "const": "allow-appcache-write-recursive"
+ "const": "allow-appcache-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appcache-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$APPCACHE` folder.",
+ "description": "This allows non-recursive read access to the `$APPCACHE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appcache`",
"type": "string",
- "const": "allow-appcache-read"
+ "const": "allow-appcache-read",
+ "markdownDescription": "This allows non-recursive read access to the `$APPCACHE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appcache`"
},
{
- "description": "This allows non-recursive write access to the `$APPCACHE` folder.",
+ "description": "This allows non-recursive write access to the `$APPCACHE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appcache`",
"type": "string",
- "const": "allow-appcache-write"
+ "const": "allow-appcache-write",
+ "markdownDescription": "This allows non-recursive write access to the `$APPCACHE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appcache`"
},
{
- "description": "This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appcache-recursive`",
"type": "string",
- "const": "allow-appcache-meta-recursive"
+ "const": "allow-appcache-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appcache-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appcache-index`",
"type": "string",
- "const": "allow-appcache-meta"
+ "const": "allow-appcache-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appcache-index`"
},
{
"description": "This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.",
"type": "string",
- "const": "scope-appcache-recursive"
+ "const": "scope-appcache-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder.",
"type": "string",
- "const": "scope-appcache"
+ "const": "scope-appcache",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$APPCACHE` folder."
},
{
"description": "This scope permits to list all files and folders in the `$APPCACHE`folder.",
"type": "string",
- "const": "scope-appcache-index"
+ "const": "scope-appcache-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$APPCACHE`folder."
},
{
- "description": "This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appconfig-recursive`",
"type": "string",
- "const": "allow-appconfig-read-recursive"
+ "const": "allow-appconfig-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appconfig-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appconfig-recursive`",
"type": "string",
- "const": "allow-appconfig-write-recursive"
+ "const": "allow-appconfig-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appconfig-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$APPCONFIG` folder.",
+ "description": "This allows non-recursive read access to the `$APPCONFIG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appconfig`",
"type": "string",
- "const": "allow-appconfig-read"
+ "const": "allow-appconfig-read",
+ "markdownDescription": "This allows non-recursive read access to the `$APPCONFIG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appconfig`"
},
{
- "description": "This allows non-recursive write access to the `$APPCONFIG` folder.",
+ "description": "This allows non-recursive write access to the `$APPCONFIG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appconfig`",
"type": "string",
- "const": "allow-appconfig-write"
+ "const": "allow-appconfig-write",
+ "markdownDescription": "This allows non-recursive write access to the `$APPCONFIG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appconfig`"
},
{
- "description": "This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appconfig-recursive`",
"type": "string",
- "const": "allow-appconfig-meta-recursive"
+ "const": "allow-appconfig-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appconfig-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appconfig-index`",
"type": "string",
- "const": "allow-appconfig-meta"
+ "const": "allow-appconfig-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appconfig-index`"
},
{
"description": "This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.",
"type": "string",
- "const": "scope-appconfig-recursive"
+ "const": "scope-appconfig-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder.",
"type": "string",
- "const": "scope-appconfig"
+ "const": "scope-appconfig",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$APPCONFIG` folder."
},
{
"description": "This scope permits to list all files and folders in the `$APPCONFIG`folder.",
"type": "string",
- "const": "scope-appconfig-index"
+ "const": "scope-appconfig-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$APPCONFIG`folder."
},
{
- "description": "This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appdata-recursive`",
"type": "string",
- "const": "allow-appdata-read-recursive"
+ "const": "allow-appdata-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appdata-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appdata-recursive`",
"type": "string",
- "const": "allow-appdata-write-recursive"
+ "const": "allow-appdata-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appdata-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$APPDATA` folder.",
+ "description": "This allows non-recursive read access to the `$APPDATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appdata`",
"type": "string",
- "const": "allow-appdata-read"
+ "const": "allow-appdata-read",
+ "markdownDescription": "This allows non-recursive read access to the `$APPDATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-appdata`"
},
{
- "description": "This allows non-recursive write access to the `$APPDATA` folder.",
+ "description": "This allows non-recursive write access to the `$APPDATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appdata`",
"type": "string",
- "const": "allow-appdata-write"
+ "const": "allow-appdata-write",
+ "markdownDescription": "This allows non-recursive write access to the `$APPDATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-appdata`"
},
{
- "description": "This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appdata-recursive`",
"type": "string",
- "const": "allow-appdata-meta-recursive"
+ "const": "allow-appdata-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appdata-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appdata-index`",
"type": "string",
- "const": "allow-appdata-meta"
+ "const": "allow-appdata-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-appdata-index`"
},
{
"description": "This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.",
"type": "string",
- "const": "scope-appdata-recursive"
+ "const": "scope-appdata-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$APPDATA` folder.",
"type": "string",
- "const": "scope-appdata"
+ "const": "scope-appdata",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$APPDATA` folder."
},
{
"description": "This scope permits to list all files and folders in the `$APPDATA`folder.",
"type": "string",
- "const": "scope-appdata-index"
+ "const": "scope-appdata-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$APPDATA`folder."
},
{
- "description": "This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applocaldata-recursive`",
"type": "string",
- "const": "allow-applocaldata-read-recursive"
+ "const": "allow-applocaldata-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applocaldata-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applocaldata-recursive`",
"type": "string",
- "const": "allow-applocaldata-write-recursive"
+ "const": "allow-applocaldata-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applocaldata-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$APPLOCALDATA` folder.",
+ "description": "This allows non-recursive read access to the `$APPLOCALDATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applocaldata`",
"type": "string",
- "const": "allow-applocaldata-read"
+ "const": "allow-applocaldata-read",
+ "markdownDescription": "This allows non-recursive read access to the `$APPLOCALDATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applocaldata`"
},
{
- "description": "This allows non-recursive write access to the `$APPLOCALDATA` folder.",
+ "description": "This allows non-recursive write access to the `$APPLOCALDATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applocaldata`",
"type": "string",
- "const": "allow-applocaldata-write"
+ "const": "allow-applocaldata-write",
+ "markdownDescription": "This allows non-recursive write access to the `$APPLOCALDATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applocaldata`"
},
{
- "description": "This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applocaldata-recursive`",
"type": "string",
- "const": "allow-applocaldata-meta-recursive"
+ "const": "allow-applocaldata-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applocaldata-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applocaldata-index`",
"type": "string",
- "const": "allow-applocaldata-meta"
+ "const": "allow-applocaldata-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applocaldata-index`"
},
{
"description": "This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.",
"type": "string",
- "const": "scope-applocaldata-recursive"
+ "const": "scope-applocaldata-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder.",
"type": "string",
- "const": "scope-applocaldata"
+ "const": "scope-applocaldata",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA` folder."
},
{
"description": "This scope permits to list all files and folders in the `$APPLOCALDATA`folder.",
"type": "string",
- "const": "scope-applocaldata-index"
+ "const": "scope-applocaldata-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$APPLOCALDATA`folder."
},
{
- "description": "This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applog-recursive`",
"type": "string",
- "const": "allow-applog-read-recursive"
+ "const": "allow-applog-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applog-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applog-recursive`",
"type": "string",
- "const": "allow-applog-write-recursive"
+ "const": "allow-applog-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applog-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$APPLOG` folder.",
+ "description": "This allows non-recursive read access to the `$APPLOG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applog`",
"type": "string",
- "const": "allow-applog-read"
+ "const": "allow-applog-read",
+ "markdownDescription": "This allows non-recursive read access to the `$APPLOG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-applog`"
},
{
- "description": "This allows non-recursive write access to the `$APPLOG` folder.",
+ "description": "This allows non-recursive write access to the `$APPLOG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applog`",
"type": "string",
- "const": "allow-applog-write"
+ "const": "allow-applog-write",
+ "markdownDescription": "This allows non-recursive write access to the `$APPLOG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-applog`"
},
{
- "description": "This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applog-recursive`",
"type": "string",
- "const": "allow-applog-meta-recursive"
+ "const": "allow-applog-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applog-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applog-index`",
"type": "string",
- "const": "allow-applog-meta"
+ "const": "allow-applog-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-applog-index`"
},
{
"description": "This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.",
"type": "string",
- "const": "scope-applog-recursive"
+ "const": "scope-applog-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$APPLOG` folder.",
"type": "string",
- "const": "scope-applog"
+ "const": "scope-applog",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$APPLOG` folder."
},
{
"description": "This scope permits to list all files and folders in the `$APPLOG`folder.",
"type": "string",
- "const": "scope-applog-index"
+ "const": "scope-applog-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$APPLOG`folder."
},
{
- "description": "This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-audio-recursive`",
"type": "string",
- "const": "allow-audio-read-recursive"
+ "const": "allow-audio-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-audio-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-audio-recursive`",
"type": "string",
- "const": "allow-audio-write-recursive"
+ "const": "allow-audio-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-audio-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$AUDIO` folder.",
+ "description": "This allows non-recursive read access to the `$AUDIO` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-audio`",
"type": "string",
- "const": "allow-audio-read"
+ "const": "allow-audio-read",
+ "markdownDescription": "This allows non-recursive read access to the `$AUDIO` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-audio`"
},
{
- "description": "This allows non-recursive write access to the `$AUDIO` folder.",
+ "description": "This allows non-recursive write access to the `$AUDIO` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-audio`",
"type": "string",
- "const": "allow-audio-write"
+ "const": "allow-audio-write",
+ "markdownDescription": "This allows non-recursive write access to the `$AUDIO` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-audio`"
},
{
- "description": "This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-audio-recursive`",
"type": "string",
- "const": "allow-audio-meta-recursive"
+ "const": "allow-audio-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-audio-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-audio-index`",
"type": "string",
- "const": "allow-audio-meta"
+ "const": "allow-audio-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-audio-index`"
},
{
"description": "This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.",
"type": "string",
- "const": "scope-audio-recursive"
+ "const": "scope-audio-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$AUDIO` folder.",
"type": "string",
- "const": "scope-audio"
+ "const": "scope-audio",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$AUDIO` folder."
},
{
"description": "This scope permits to list all files and folders in the `$AUDIO`folder.",
"type": "string",
- "const": "scope-audio-index"
+ "const": "scope-audio-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$AUDIO`folder."
},
{
- "description": "This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-cache-recursive`",
"type": "string",
- "const": "allow-cache-read-recursive"
+ "const": "allow-cache-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-cache-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-cache-recursive`",
"type": "string",
- "const": "allow-cache-write-recursive"
+ "const": "allow-cache-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-cache-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$CACHE` folder.",
+ "description": "This allows non-recursive read access to the `$CACHE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-cache`",
"type": "string",
- "const": "allow-cache-read"
+ "const": "allow-cache-read",
+ "markdownDescription": "This allows non-recursive read access to the `$CACHE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-cache`"
},
{
- "description": "This allows non-recursive write access to the `$CACHE` folder.",
+ "description": "This allows non-recursive write access to the `$CACHE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-cache`",
"type": "string",
- "const": "allow-cache-write"
+ "const": "allow-cache-write",
+ "markdownDescription": "This allows non-recursive write access to the `$CACHE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-cache`"
},
{
- "description": "This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-cache-recursive`",
"type": "string",
- "const": "allow-cache-meta-recursive"
+ "const": "allow-cache-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-cache-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-cache-index`",
"type": "string",
- "const": "allow-cache-meta"
+ "const": "allow-cache-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-cache-index`"
},
{
"description": "This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.",
"type": "string",
- "const": "scope-cache-recursive"
+ "const": "scope-cache-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$CACHE` folder.",
"type": "string",
- "const": "scope-cache"
+ "const": "scope-cache",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$CACHE` folder."
},
{
"description": "This scope permits to list all files and folders in the `$CACHE`folder.",
"type": "string",
- "const": "scope-cache-index"
+ "const": "scope-cache-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$CACHE`folder."
},
{
- "description": "This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-config-recursive`",
"type": "string",
- "const": "allow-config-read-recursive"
+ "const": "allow-config-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-config-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-config-recursive`",
"type": "string",
- "const": "allow-config-write-recursive"
+ "const": "allow-config-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-config-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$CONFIG` folder.",
+ "description": "This allows non-recursive read access to the `$CONFIG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-config`",
"type": "string",
- "const": "allow-config-read"
+ "const": "allow-config-read",
+ "markdownDescription": "This allows non-recursive read access to the `$CONFIG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-config`"
},
{
- "description": "This allows non-recursive write access to the `$CONFIG` folder.",
+ "description": "This allows non-recursive write access to the `$CONFIG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-config`",
"type": "string",
- "const": "allow-config-write"
+ "const": "allow-config-write",
+ "markdownDescription": "This allows non-recursive write access to the `$CONFIG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-config`"
},
{
- "description": "This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-config-recursive`",
"type": "string",
- "const": "allow-config-meta-recursive"
+ "const": "allow-config-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-config-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-config-index`",
"type": "string",
- "const": "allow-config-meta"
+ "const": "allow-config-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-config-index`"
},
{
"description": "This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.",
"type": "string",
- "const": "scope-config-recursive"
+ "const": "scope-config-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$CONFIG` folder.",
"type": "string",
- "const": "scope-config"
+ "const": "scope-config",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$CONFIG` folder."
},
{
"description": "This scope permits to list all files and folders in the `$CONFIG`folder.",
"type": "string",
- "const": "scope-config-index"
+ "const": "scope-config-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$CONFIG`folder."
},
{
- "description": "This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-data-recursive`",
"type": "string",
- "const": "allow-data-read-recursive"
+ "const": "allow-data-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-data-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-data-recursive`",
"type": "string",
- "const": "allow-data-write-recursive"
+ "const": "allow-data-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-data-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$DATA` folder.",
+ "description": "This allows non-recursive read access to the `$DATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-data`",
"type": "string",
- "const": "allow-data-read"
+ "const": "allow-data-read",
+ "markdownDescription": "This allows non-recursive read access to the `$DATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-data`"
},
{
- "description": "This allows non-recursive write access to the `$DATA` folder.",
+ "description": "This allows non-recursive write access to the `$DATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-data`",
"type": "string",
- "const": "allow-data-write"
+ "const": "allow-data-write",
+ "markdownDescription": "This allows non-recursive write access to the `$DATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-data`"
},
{
- "description": "This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-data-recursive`",
"type": "string",
- "const": "allow-data-meta-recursive"
+ "const": "allow-data-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-data-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-data-index`",
"type": "string",
- "const": "allow-data-meta"
+ "const": "allow-data-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-data-index`"
},
{
"description": "This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.",
"type": "string",
- "const": "scope-data-recursive"
+ "const": "scope-data-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$DATA` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$DATA` folder.",
"type": "string",
- "const": "scope-data"
+ "const": "scope-data",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$DATA` folder."
},
{
"description": "This scope permits to list all files and folders in the `$DATA`folder.",
"type": "string",
- "const": "scope-data-index"
+ "const": "scope-data-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$DATA`folder."
},
{
- "description": "This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-desktop-recursive`",
"type": "string",
- "const": "allow-desktop-read-recursive"
+ "const": "allow-desktop-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-desktop-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-desktop-recursive`",
"type": "string",
- "const": "allow-desktop-write-recursive"
+ "const": "allow-desktop-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-desktop-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$DESKTOP` folder.",
+ "description": "This allows non-recursive read access to the `$DESKTOP` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-desktop`",
"type": "string",
- "const": "allow-desktop-read"
+ "const": "allow-desktop-read",
+ "markdownDescription": "This allows non-recursive read access to the `$DESKTOP` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-desktop`"
},
{
- "description": "This allows non-recursive write access to the `$DESKTOP` folder.",
+ "description": "This allows non-recursive write access to the `$DESKTOP` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-desktop`",
"type": "string",
- "const": "allow-desktop-write"
+ "const": "allow-desktop-write",
+ "markdownDescription": "This allows non-recursive write access to the `$DESKTOP` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-desktop`"
},
{
- "description": "This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-desktop-recursive`",
"type": "string",
- "const": "allow-desktop-meta-recursive"
+ "const": "allow-desktop-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-desktop-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-desktop-index`",
"type": "string",
- "const": "allow-desktop-meta"
+ "const": "allow-desktop-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-desktop-index`"
},
{
"description": "This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.",
"type": "string",
- "const": "scope-desktop-recursive"
+ "const": "scope-desktop-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder.",
"type": "string",
- "const": "scope-desktop"
+ "const": "scope-desktop",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$DESKTOP` folder."
},
{
"description": "This scope permits to list all files and folders in the `$DESKTOP`folder.",
"type": "string",
- "const": "scope-desktop-index"
+ "const": "scope-desktop-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$DESKTOP`folder."
},
{
- "description": "This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-document-recursive`",
"type": "string",
- "const": "allow-document-read-recursive"
+ "const": "allow-document-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-document-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-document-recursive`",
"type": "string",
- "const": "allow-document-write-recursive"
+ "const": "allow-document-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-document-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$DOCUMENT` folder.",
+ "description": "This allows non-recursive read access to the `$DOCUMENT` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-document`",
"type": "string",
- "const": "allow-document-read"
+ "const": "allow-document-read",
+ "markdownDescription": "This allows non-recursive read access to the `$DOCUMENT` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-document`"
},
{
- "description": "This allows non-recursive write access to the `$DOCUMENT` folder.",
+ "description": "This allows non-recursive write access to the `$DOCUMENT` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-document`",
"type": "string",
- "const": "allow-document-write"
+ "const": "allow-document-write",
+ "markdownDescription": "This allows non-recursive write access to the `$DOCUMENT` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-document`"
},
{
- "description": "This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-document-recursive`",
"type": "string",
- "const": "allow-document-meta-recursive"
+ "const": "allow-document-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-document-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-document-index`",
"type": "string",
- "const": "allow-document-meta"
+ "const": "allow-document-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-document-index`"
},
{
"description": "This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.",
"type": "string",
- "const": "scope-document-recursive"
+ "const": "scope-document-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder.",
"type": "string",
- "const": "scope-document"
+ "const": "scope-document",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$DOCUMENT` folder."
},
{
"description": "This scope permits to list all files and folders in the `$DOCUMENT`folder.",
"type": "string",
- "const": "scope-document-index"
+ "const": "scope-document-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$DOCUMENT`folder."
},
{
- "description": "This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-download-recursive`",
"type": "string",
- "const": "allow-download-read-recursive"
+ "const": "allow-download-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-download-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-download-recursive`",
"type": "string",
- "const": "allow-download-write-recursive"
+ "const": "allow-download-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-download-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$DOWNLOAD` folder.",
+ "description": "This allows non-recursive read access to the `$DOWNLOAD` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-download`",
"type": "string",
- "const": "allow-download-read"
+ "const": "allow-download-read",
+ "markdownDescription": "This allows non-recursive read access to the `$DOWNLOAD` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-download`"
},
{
- "description": "This allows non-recursive write access to the `$DOWNLOAD` folder.",
+ "description": "This allows non-recursive write access to the `$DOWNLOAD` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-download`",
"type": "string",
- "const": "allow-download-write"
+ "const": "allow-download-write",
+ "markdownDescription": "This allows non-recursive write access to the `$DOWNLOAD` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-download`"
},
{
- "description": "This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-download-recursive`",
"type": "string",
- "const": "allow-download-meta-recursive"
+ "const": "allow-download-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-download-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-download-index`",
"type": "string",
- "const": "allow-download-meta"
+ "const": "allow-download-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-download-index`"
},
{
"description": "This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.",
"type": "string",
- "const": "scope-download-recursive"
+ "const": "scope-download-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder.",
"type": "string",
- "const": "scope-download"
+ "const": "scope-download",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$DOWNLOAD` folder."
},
{
"description": "This scope permits to list all files and folders in the `$DOWNLOAD`folder.",
"type": "string",
- "const": "scope-download-index"
+ "const": "scope-download-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$DOWNLOAD`folder."
},
{
- "description": "This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-exe-recursive`",
"type": "string",
- "const": "allow-exe-read-recursive"
+ "const": "allow-exe-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-exe-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-exe-recursive`",
"type": "string",
- "const": "allow-exe-write-recursive"
+ "const": "allow-exe-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-exe-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$EXE` folder.",
+ "description": "This allows non-recursive read access to the `$EXE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-exe`",
"type": "string",
- "const": "allow-exe-read"
+ "const": "allow-exe-read",
+ "markdownDescription": "This allows non-recursive read access to the `$EXE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-exe`"
},
{
- "description": "This allows non-recursive write access to the `$EXE` folder.",
+ "description": "This allows non-recursive write access to the `$EXE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-exe`",
"type": "string",
- "const": "allow-exe-write"
+ "const": "allow-exe-write",
+ "markdownDescription": "This allows non-recursive write access to the `$EXE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-exe`"
},
{
- "description": "This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-exe-recursive`",
"type": "string",
- "const": "allow-exe-meta-recursive"
+ "const": "allow-exe-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-exe-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-exe-index`",
"type": "string",
- "const": "allow-exe-meta"
+ "const": "allow-exe-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-exe-index`"
},
{
"description": "This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.",
"type": "string",
- "const": "scope-exe-recursive"
+ "const": "scope-exe-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$EXE` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$EXE` folder.",
"type": "string",
- "const": "scope-exe"
+ "const": "scope-exe",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$EXE` folder."
},
{
"description": "This scope permits to list all files and folders in the `$EXE`folder.",
"type": "string",
- "const": "scope-exe-index"
+ "const": "scope-exe-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$EXE`folder."
},
{
- "description": "This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-font-recursive`",
"type": "string",
- "const": "allow-font-read-recursive"
+ "const": "allow-font-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-font-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-font-recursive`",
"type": "string",
- "const": "allow-font-write-recursive"
+ "const": "allow-font-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-font-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$FONT` folder.",
+ "description": "This allows non-recursive read access to the `$FONT` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-font`",
"type": "string",
- "const": "allow-font-read"
+ "const": "allow-font-read",
+ "markdownDescription": "This allows non-recursive read access to the `$FONT` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-font`"
},
{
- "description": "This allows non-recursive write access to the `$FONT` folder.",
+ "description": "This allows non-recursive write access to the `$FONT` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-font`",
"type": "string",
- "const": "allow-font-write"
+ "const": "allow-font-write",
+ "markdownDescription": "This allows non-recursive write access to the `$FONT` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-font`"
},
{
- "description": "This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-font-recursive`",
"type": "string",
- "const": "allow-font-meta-recursive"
+ "const": "allow-font-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-font-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-font-index`",
"type": "string",
- "const": "allow-font-meta"
+ "const": "allow-font-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-font-index`"
},
{
"description": "This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.",
"type": "string",
- "const": "scope-font-recursive"
+ "const": "scope-font-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$FONT` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$FONT` folder.",
"type": "string",
- "const": "scope-font"
+ "const": "scope-font",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$FONT` folder."
},
{
"description": "This scope permits to list all files and folders in the `$FONT`folder.",
"type": "string",
- "const": "scope-font-index"
+ "const": "scope-font-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$FONT`folder."
},
{
- "description": "This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-home-recursive`",
"type": "string",
- "const": "allow-home-read-recursive"
+ "const": "allow-home-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-home-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-home-recursive`",
"type": "string",
- "const": "allow-home-write-recursive"
+ "const": "allow-home-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-home-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$HOME` folder.",
+ "description": "This allows non-recursive read access to the `$HOME` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-home`",
"type": "string",
- "const": "allow-home-read"
+ "const": "allow-home-read",
+ "markdownDescription": "This allows non-recursive read access to the `$HOME` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-home`"
},
{
- "description": "This allows non-recursive write access to the `$HOME` folder.",
+ "description": "This allows non-recursive write access to the `$HOME` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-home`",
"type": "string",
- "const": "allow-home-write"
+ "const": "allow-home-write",
+ "markdownDescription": "This allows non-recursive write access to the `$HOME` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-home`"
},
{
- "description": "This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-home-recursive`",
"type": "string",
- "const": "allow-home-meta-recursive"
+ "const": "allow-home-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-home-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-home-index`",
"type": "string",
- "const": "allow-home-meta"
+ "const": "allow-home-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-home-index`"
},
{
"description": "This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.",
"type": "string",
- "const": "scope-home-recursive"
+ "const": "scope-home-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$HOME` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$HOME` folder.",
"type": "string",
- "const": "scope-home"
+ "const": "scope-home",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$HOME` folder."
},
{
"description": "This scope permits to list all files and folders in the `$HOME`folder.",
"type": "string",
- "const": "scope-home-index"
+ "const": "scope-home-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$HOME`folder."
},
{
- "description": "This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-localdata-recursive`",
"type": "string",
- "const": "allow-localdata-read-recursive"
+ "const": "allow-localdata-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-localdata-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-localdata-recursive`",
"type": "string",
- "const": "allow-localdata-write-recursive"
+ "const": "allow-localdata-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-localdata-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$LOCALDATA` folder.",
+ "description": "This allows non-recursive read access to the `$LOCALDATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-localdata`",
"type": "string",
- "const": "allow-localdata-read"
+ "const": "allow-localdata-read",
+ "markdownDescription": "This allows non-recursive read access to the `$LOCALDATA` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-localdata`"
},
{
- "description": "This allows non-recursive write access to the `$LOCALDATA` folder.",
+ "description": "This allows non-recursive write access to the `$LOCALDATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-localdata`",
"type": "string",
- "const": "allow-localdata-write"
+ "const": "allow-localdata-write",
+ "markdownDescription": "This allows non-recursive write access to the `$LOCALDATA` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-localdata`"
},
{
- "description": "This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-localdata-recursive`",
"type": "string",
- "const": "allow-localdata-meta-recursive"
+ "const": "allow-localdata-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-localdata-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-localdata-index`",
"type": "string",
- "const": "allow-localdata-meta"
+ "const": "allow-localdata-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-localdata-index`"
},
{
"description": "This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.",
"type": "string",
- "const": "scope-localdata-recursive"
+ "const": "scope-localdata-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder.",
"type": "string",
- "const": "scope-localdata"
+ "const": "scope-localdata",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$LOCALDATA` folder."
},
{
"description": "This scope permits to list all files and folders in the `$LOCALDATA`folder.",
"type": "string",
- "const": "scope-localdata-index"
+ "const": "scope-localdata-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$LOCALDATA`folder."
},
{
- "description": "This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-log-recursive`",
"type": "string",
- "const": "allow-log-read-recursive"
+ "const": "allow-log-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-log-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-log-recursive`",
"type": "string",
- "const": "allow-log-write-recursive"
+ "const": "allow-log-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-log-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$LOG` folder.",
+ "description": "This allows non-recursive read access to the `$LOG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-log`",
"type": "string",
- "const": "allow-log-read"
+ "const": "allow-log-read",
+ "markdownDescription": "This allows non-recursive read access to the `$LOG` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-log`"
},
{
- "description": "This allows non-recursive write access to the `$LOG` folder.",
+ "description": "This allows non-recursive write access to the `$LOG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-log`",
"type": "string",
- "const": "allow-log-write"
+ "const": "allow-log-write",
+ "markdownDescription": "This allows non-recursive write access to the `$LOG` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-log`"
},
{
- "description": "This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-log-recursive`",
"type": "string",
- "const": "allow-log-meta-recursive"
+ "const": "allow-log-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-log-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-log-index`",
"type": "string",
- "const": "allow-log-meta"
+ "const": "allow-log-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-log-index`"
},
{
"description": "This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.",
"type": "string",
- "const": "scope-log-recursive"
+ "const": "scope-log-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$LOG` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$LOG` folder.",
"type": "string",
- "const": "scope-log"
+ "const": "scope-log",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$LOG` folder."
},
{
"description": "This scope permits to list all files and folders in the `$LOG`folder.",
"type": "string",
- "const": "scope-log-index"
+ "const": "scope-log-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$LOG`folder."
},
{
- "description": "This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-picture-recursive`",
"type": "string",
- "const": "allow-picture-read-recursive"
+ "const": "allow-picture-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-picture-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-picture-recursive`",
"type": "string",
- "const": "allow-picture-write-recursive"
+ "const": "allow-picture-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-picture-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$PICTURE` folder.",
+ "description": "This allows non-recursive read access to the `$PICTURE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-picture`",
"type": "string",
- "const": "allow-picture-read"
+ "const": "allow-picture-read",
+ "markdownDescription": "This allows non-recursive read access to the `$PICTURE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-picture`"
},
{
- "description": "This allows non-recursive write access to the `$PICTURE` folder.",
+ "description": "This allows non-recursive write access to the `$PICTURE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-picture`",
"type": "string",
- "const": "allow-picture-write"
+ "const": "allow-picture-write",
+ "markdownDescription": "This allows non-recursive write access to the `$PICTURE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-picture`"
},
{
- "description": "This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-picture-recursive`",
"type": "string",
- "const": "allow-picture-meta-recursive"
+ "const": "allow-picture-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-picture-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-picture-index`",
"type": "string",
- "const": "allow-picture-meta"
+ "const": "allow-picture-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-picture-index`"
},
{
"description": "This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.",
"type": "string",
- "const": "scope-picture-recursive"
+ "const": "scope-picture-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$PICTURE` folder.",
"type": "string",
- "const": "scope-picture"
+ "const": "scope-picture",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$PICTURE` folder."
},
{
"description": "This scope permits to list all files and folders in the `$PICTURE`folder.",
"type": "string",
- "const": "scope-picture-index"
+ "const": "scope-picture-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$PICTURE`folder."
},
{
- "description": "This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-public-recursive`",
"type": "string",
- "const": "allow-public-read-recursive"
+ "const": "allow-public-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-public-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-public-recursive`",
"type": "string",
- "const": "allow-public-write-recursive"
+ "const": "allow-public-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-public-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$PUBLIC` folder.",
+ "description": "This allows non-recursive read access to the `$PUBLIC` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-public`",
"type": "string",
- "const": "allow-public-read"
+ "const": "allow-public-read",
+ "markdownDescription": "This allows non-recursive read access to the `$PUBLIC` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-public`"
},
{
- "description": "This allows non-recursive write access to the `$PUBLIC` folder.",
+ "description": "This allows non-recursive write access to the `$PUBLIC` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-public`",
"type": "string",
- "const": "allow-public-write"
+ "const": "allow-public-write",
+ "markdownDescription": "This allows non-recursive write access to the `$PUBLIC` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-public`"
},
{
- "description": "This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-public-recursive`",
"type": "string",
- "const": "allow-public-meta-recursive"
+ "const": "allow-public-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-public-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-public-index`",
"type": "string",
- "const": "allow-public-meta"
+ "const": "allow-public-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-public-index`"
},
{
"description": "This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.",
"type": "string",
- "const": "scope-public-recursive"
+ "const": "scope-public-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder.",
"type": "string",
- "const": "scope-public"
+ "const": "scope-public",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$PUBLIC` folder."
},
{
"description": "This scope permits to list all files and folders in the `$PUBLIC`folder.",
"type": "string",
- "const": "scope-public-index"
+ "const": "scope-public-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$PUBLIC`folder."
},
{
- "description": "This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-resource-recursive`",
"type": "string",
- "const": "allow-resource-read-recursive"
+ "const": "allow-resource-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-resource-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-resource-recursive`",
"type": "string",
- "const": "allow-resource-write-recursive"
+ "const": "allow-resource-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-resource-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$RESOURCE` folder.",
+ "description": "This allows non-recursive read access to the `$RESOURCE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-resource`",
"type": "string",
- "const": "allow-resource-read"
+ "const": "allow-resource-read",
+ "markdownDescription": "This allows non-recursive read access to the `$RESOURCE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-resource`"
},
{
- "description": "This allows non-recursive write access to the `$RESOURCE` folder.",
+ "description": "This allows non-recursive write access to the `$RESOURCE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-resource`",
"type": "string",
- "const": "allow-resource-write"
+ "const": "allow-resource-write",
+ "markdownDescription": "This allows non-recursive write access to the `$RESOURCE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-resource`"
},
{
- "description": "This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-resource-recursive`",
"type": "string",
- "const": "allow-resource-meta-recursive"
+ "const": "allow-resource-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-resource-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-resource-index`",
"type": "string",
- "const": "allow-resource-meta"
+ "const": "allow-resource-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-resource-index`"
},
{
"description": "This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.",
"type": "string",
- "const": "scope-resource-recursive"
+ "const": "scope-resource-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder.",
"type": "string",
- "const": "scope-resource"
+ "const": "scope-resource",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$RESOURCE` folder."
},
{
"description": "This scope permits to list all files and folders in the `$RESOURCE`folder.",
"type": "string",
- "const": "scope-resource-index"
+ "const": "scope-resource-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$RESOURCE`folder."
},
{
- "description": "This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-runtime-recursive`",
"type": "string",
- "const": "allow-runtime-read-recursive"
+ "const": "allow-runtime-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-runtime-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-runtime-recursive`",
"type": "string",
- "const": "allow-runtime-write-recursive"
+ "const": "allow-runtime-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-runtime-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$RUNTIME` folder.",
+ "description": "This allows non-recursive read access to the `$RUNTIME` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-runtime`",
"type": "string",
- "const": "allow-runtime-read"
+ "const": "allow-runtime-read",
+ "markdownDescription": "This allows non-recursive read access to the `$RUNTIME` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-runtime`"
},
{
- "description": "This allows non-recursive write access to the `$RUNTIME` folder.",
+ "description": "This allows non-recursive write access to the `$RUNTIME` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-runtime`",
"type": "string",
- "const": "allow-runtime-write"
+ "const": "allow-runtime-write",
+ "markdownDescription": "This allows non-recursive write access to the `$RUNTIME` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-runtime`"
},
{
- "description": "This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-runtime-recursive`",
"type": "string",
- "const": "allow-runtime-meta-recursive"
+ "const": "allow-runtime-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-runtime-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-runtime-index`",
"type": "string",
- "const": "allow-runtime-meta"
+ "const": "allow-runtime-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-runtime-index`"
},
{
"description": "This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.",
"type": "string",
- "const": "scope-runtime-recursive"
+ "const": "scope-runtime-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder.",
"type": "string",
- "const": "scope-runtime"
+ "const": "scope-runtime",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$RUNTIME` folder."
},
{
"description": "This scope permits to list all files and folders in the `$RUNTIME`folder.",
"type": "string",
- "const": "scope-runtime-index"
+ "const": "scope-runtime-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$RUNTIME`folder."
},
{
- "description": "This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-temp-recursive`",
"type": "string",
- "const": "allow-temp-read-recursive"
+ "const": "allow-temp-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-temp-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-temp-recursive`",
"type": "string",
- "const": "allow-temp-write-recursive"
+ "const": "allow-temp-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-temp-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$TEMP` folder.",
+ "description": "This allows non-recursive read access to the `$TEMP` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-temp`",
"type": "string",
- "const": "allow-temp-read"
+ "const": "allow-temp-read",
+ "markdownDescription": "This allows non-recursive read access to the `$TEMP` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-temp`"
},
{
- "description": "This allows non-recursive write access to the `$TEMP` folder.",
+ "description": "This allows non-recursive write access to the `$TEMP` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-temp`",
"type": "string",
- "const": "allow-temp-write"
+ "const": "allow-temp-write",
+ "markdownDescription": "This allows non-recursive write access to the `$TEMP` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-temp`"
},
{
- "description": "This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-temp-recursive`",
"type": "string",
- "const": "allow-temp-meta-recursive"
+ "const": "allow-temp-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-temp-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-temp-index`",
"type": "string",
- "const": "allow-temp-meta"
+ "const": "allow-temp-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-temp-index`"
},
{
"description": "This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.",
"type": "string",
- "const": "scope-temp-recursive"
+ "const": "scope-temp-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$TEMP` folder.",
"type": "string",
- "const": "scope-temp"
+ "const": "scope-temp",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$TEMP` folder."
},
{
"description": "This scope permits to list all files and folders in the `$TEMP`folder.",
"type": "string",
- "const": "scope-temp-index"
+ "const": "scope-temp-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$TEMP`folder."
},
{
- "description": "This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-template-recursive`",
"type": "string",
- "const": "allow-template-read-recursive"
+ "const": "allow-template-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-template-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-template-recursive`",
"type": "string",
- "const": "allow-template-write-recursive"
+ "const": "allow-template-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-template-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$TEMPLATE` folder.",
+ "description": "This allows non-recursive read access to the `$TEMPLATE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-template`",
"type": "string",
- "const": "allow-template-read"
+ "const": "allow-template-read",
+ "markdownDescription": "This allows non-recursive read access to the `$TEMPLATE` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-template`"
},
{
- "description": "This allows non-recursive write access to the `$TEMPLATE` folder.",
+ "description": "This allows non-recursive write access to the `$TEMPLATE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-template`",
"type": "string",
- "const": "allow-template-write"
+ "const": "allow-template-write",
+ "markdownDescription": "This allows non-recursive write access to the `$TEMPLATE` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-template`"
},
{
- "description": "This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-template-recursive`",
"type": "string",
- "const": "allow-template-meta-recursive"
+ "const": "allow-template-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-template-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-template-index`",
"type": "string",
- "const": "allow-template-meta"
+ "const": "allow-template-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-template-index`"
},
{
"description": "This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.",
"type": "string",
- "const": "scope-template-recursive"
+ "const": "scope-template-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder.",
"type": "string",
- "const": "scope-template"
+ "const": "scope-template",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$TEMPLATE` folder."
},
{
"description": "This scope permits to list all files and folders in the `$TEMPLATE`folder.",
"type": "string",
- "const": "scope-template-index"
+ "const": "scope-template-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$TEMPLATE`folder."
},
{
- "description": "This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.",
+ "description": "This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-video-recursive`",
"type": "string",
- "const": "allow-video-read-recursive"
+ "const": "allow-video-read-recursive",
+ "markdownDescription": "This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `read-all`\n- `scope-video-recursive`"
},
{
- "description": "This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.",
+ "description": "This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-video-recursive`",
"type": "string",
- "const": "allow-video-write-recursive"
+ "const": "allow-video-write-recursive",
+ "markdownDescription": "This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.\n#### This permission set includes:\n\n- `write-all`\n- `scope-video-recursive`"
},
{
- "description": "This allows non-recursive read access to the `$VIDEO` folder.",
+ "description": "This allows non-recursive read access to the `$VIDEO` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-video`",
"type": "string",
- "const": "allow-video-read"
+ "const": "allow-video-read",
+ "markdownDescription": "This allows non-recursive read access to the `$VIDEO` folder.\n#### This permission set includes:\n\n- `read-all`\n- `scope-video`"
},
{
- "description": "This allows non-recursive write access to the `$VIDEO` folder.",
+ "description": "This allows non-recursive write access to the `$VIDEO` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-video`",
"type": "string",
- "const": "allow-video-write"
+ "const": "allow-video-write",
+ "markdownDescription": "This allows non-recursive write access to the `$VIDEO` folder.\n#### This permission set includes:\n\n- `write-all`\n- `scope-video`"
},
{
- "description": "This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
+ "description": "This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-video-recursive`",
"type": "string",
- "const": "allow-video-meta-recursive"
+ "const": "allow-video-meta-recursive",
+ "markdownDescription": "This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-video-recursive`"
},
{
- "description": "This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
+ "description": "This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-video-index`",
"type": "string",
- "const": "allow-video-meta"
+ "const": "allow-video-meta",
+ "markdownDescription": "This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.\n#### This permission set includes:\n\n- `read-meta`\n- `scope-video-index`"
},
{
"description": "This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.",
"type": "string",
- "const": "scope-video-recursive"
+ "const": "scope-video-recursive",
+ "markdownDescription": "This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files."
},
{
"description": "This scope permits access to all files and list content of top level directories in the `$VIDEO` folder.",
"type": "string",
- "const": "scope-video"
+ "const": "scope-video",
+ "markdownDescription": "This scope permits access to all files and list content of top level directories in the `$VIDEO` folder."
},
{
"description": "This scope permits to list all files and folders in the `$VIDEO`folder.",
"type": "string",
- "const": "scope-video-index"
+ "const": "scope-video-index",
+ "markdownDescription": "This scope permits to list all files and folders in the `$VIDEO`folder."
},
{
"description": "Enables the copy_file command without any pre-configured scope.",
"type": "string",
- "const": "allow-copy-file"
+ "const": "allow-copy-file",
+ "markdownDescription": "Enables the copy_file command without any pre-configured scope."
},
{
"description": "Denies the copy_file command without any pre-configured scope.",
"type": "string",
- "const": "deny-copy-file"
+ "const": "deny-copy-file",
+ "markdownDescription": "Denies the copy_file command without any pre-configured scope."
},
{
"description": "Enables the create command without any pre-configured scope.",
"type": "string",
- "const": "allow-create"
+ "const": "allow-create",
+ "markdownDescription": "Enables the create command without any pre-configured scope."
},
{
"description": "Denies the create command without any pre-configured scope.",
"type": "string",
- "const": "deny-create"
+ "const": "deny-create",
+ "markdownDescription": "Denies the create command without any pre-configured scope."
},
{
"description": "Enables the exists command without any pre-configured scope.",
"type": "string",
- "const": "allow-exists"
+ "const": "allow-exists",
+ "markdownDescription": "Enables the exists command without any pre-configured scope."
},
{
"description": "Denies the exists command without any pre-configured scope.",
"type": "string",
- "const": "deny-exists"
+ "const": "deny-exists",
+ "markdownDescription": "Denies the exists command without any pre-configured scope."
},
{
"description": "Enables the fstat command without any pre-configured scope.",
"type": "string",
- "const": "allow-fstat"
+ "const": "allow-fstat",
+ "markdownDescription": "Enables the fstat command without any pre-configured scope."
},
{
"description": "Denies the fstat command without any pre-configured scope.",
"type": "string",
- "const": "deny-fstat"
+ "const": "deny-fstat",
+ "markdownDescription": "Denies the fstat command without any pre-configured scope."
},
{
"description": "Enables the ftruncate command without any pre-configured scope.",
"type": "string",
- "const": "allow-ftruncate"
+ "const": "allow-ftruncate",
+ "markdownDescription": "Enables the ftruncate command without any pre-configured scope."
},
{
"description": "Denies the ftruncate command without any pre-configured scope.",
"type": "string",
- "const": "deny-ftruncate"
+ "const": "deny-ftruncate",
+ "markdownDescription": "Denies the ftruncate command without any pre-configured scope."
},
{
"description": "Enables the lstat command without any pre-configured scope.",
"type": "string",
- "const": "allow-lstat"
+ "const": "allow-lstat",
+ "markdownDescription": "Enables the lstat command without any pre-configured scope."
},
{
"description": "Denies the lstat command without any pre-configured scope.",
"type": "string",
- "const": "deny-lstat"
+ "const": "deny-lstat",
+ "markdownDescription": "Denies the lstat command without any pre-configured scope."
},
{
"description": "Enables the mkdir command without any pre-configured scope.",
"type": "string",
- "const": "allow-mkdir"
+ "const": "allow-mkdir",
+ "markdownDescription": "Enables the mkdir command without any pre-configured scope."
},
{
"description": "Denies the mkdir command without any pre-configured scope.",
"type": "string",
- "const": "deny-mkdir"
+ "const": "deny-mkdir",
+ "markdownDescription": "Denies the mkdir command without any pre-configured scope."
},
{
"description": "Enables the open command without any pre-configured scope.",
"type": "string",
- "const": "allow-open"
+ "const": "allow-open",
+ "markdownDescription": "Enables the open command without any pre-configured scope."
},
{
"description": "Denies the open command without any pre-configured scope.",
"type": "string",
- "const": "deny-open"
+ "const": "deny-open",
+ "markdownDescription": "Denies the open command without any pre-configured scope."
},
{
"description": "Enables the read command without any pre-configured scope.",
"type": "string",
- "const": "allow-read"
+ "const": "allow-read",
+ "markdownDescription": "Enables the read command without any pre-configured scope."
},
{
"description": "Denies the read command without any pre-configured scope.",
"type": "string",
- "const": "deny-read"
+ "const": "deny-read",
+ "markdownDescription": "Denies the read command without any pre-configured scope."
},
{
"description": "Enables the read_dir command without any pre-configured scope.",
"type": "string",
- "const": "allow-read-dir"
+ "const": "allow-read-dir",
+ "markdownDescription": "Enables the read_dir command without any pre-configured scope."
},
{
"description": "Denies the read_dir command without any pre-configured scope.",
"type": "string",
- "const": "deny-read-dir"
+ "const": "deny-read-dir",
+ "markdownDescription": "Denies the read_dir command without any pre-configured scope."
},
{
"description": "Enables the read_file command without any pre-configured scope.",
"type": "string",
- "const": "allow-read-file"
+ "const": "allow-read-file",
+ "markdownDescription": "Enables the read_file command without any pre-configured scope."
},
{
"description": "Denies the read_file command without any pre-configured scope.",
"type": "string",
- "const": "deny-read-file"
+ "const": "deny-read-file",
+ "markdownDescription": "Denies the read_file command without any pre-configured scope."
},
{
"description": "Enables the read_text_file command without any pre-configured scope.",
"type": "string",
- "const": "allow-read-text-file"
+ "const": "allow-read-text-file",
+ "markdownDescription": "Enables the read_text_file command without any pre-configured scope."
},
{
"description": "Denies the read_text_file command without any pre-configured scope.",
"type": "string",
- "const": "deny-read-text-file"
+ "const": "deny-read-text-file",
+ "markdownDescription": "Denies the read_text_file command without any pre-configured scope."
},
{
"description": "Enables the read_text_file_lines command without any pre-configured scope.",
"type": "string",
- "const": "allow-read-text-file-lines"
+ "const": "allow-read-text-file-lines",
+ "markdownDescription": "Enables the read_text_file_lines command without any pre-configured scope."
},
{
"description": "Denies the read_text_file_lines command without any pre-configured scope.",
"type": "string",
- "const": "deny-read-text-file-lines"
+ "const": "deny-read-text-file-lines",
+ "markdownDescription": "Denies the read_text_file_lines command without any pre-configured scope."
},
{
"description": "Enables the read_text_file_lines_next command without any pre-configured scope.",
"type": "string",
- "const": "allow-read-text-file-lines-next"
+ "const": "allow-read-text-file-lines-next",
+ "markdownDescription": "Enables the read_text_file_lines_next command without any pre-configured scope."
},
{
"description": "Denies the read_text_file_lines_next command without any pre-configured scope.",
"type": "string",
- "const": "deny-read-text-file-lines-next"
+ "const": "deny-read-text-file-lines-next",
+ "markdownDescription": "Denies the read_text_file_lines_next command without any pre-configured scope."
},
{
"description": "Enables the remove command without any pre-configured scope.",
"type": "string",
- "const": "allow-remove"
+ "const": "allow-remove",
+ "markdownDescription": "Enables the remove command without any pre-configured scope."
},
{
"description": "Denies the remove command without any pre-configured scope.",
"type": "string",
- "const": "deny-remove"
+ "const": "deny-remove",
+ "markdownDescription": "Denies the remove command without any pre-configured scope."
},
{
"description": "Enables the rename command without any pre-configured scope.",
"type": "string",
- "const": "allow-rename"
+ "const": "allow-rename",
+ "markdownDescription": "Enables the rename command without any pre-configured scope."
},
{
"description": "Denies the rename command without any pre-configured scope.",
"type": "string",
- "const": "deny-rename"
+ "const": "deny-rename",
+ "markdownDescription": "Denies the rename command without any pre-configured scope."
},
{
"description": "Enables the seek command without any pre-configured scope.",
"type": "string",
- "const": "allow-seek"
+ "const": "allow-seek",
+ "markdownDescription": "Enables the seek command without any pre-configured scope."
},
{
"description": "Denies the seek command without any pre-configured scope.",
"type": "string",
- "const": "deny-seek"
+ "const": "deny-seek",
+ "markdownDescription": "Denies the seek command without any pre-configured scope."
},
{
"description": "Enables the size command without any pre-configured scope.",
"type": "string",
- "const": "allow-size"
+ "const": "allow-size",
+ "markdownDescription": "Enables the size command without any pre-configured scope."
},
{
"description": "Denies the size command without any pre-configured scope.",
"type": "string",
- "const": "deny-size"
+ "const": "deny-size",
+ "markdownDescription": "Denies the size command without any pre-configured scope."
},
{
"description": "Enables the stat command without any pre-configured scope.",
"type": "string",
- "const": "allow-stat"
+ "const": "allow-stat",
+ "markdownDescription": "Enables the stat command without any pre-configured scope."
},
{
"description": "Denies the stat command without any pre-configured scope.",
"type": "string",
- "const": "deny-stat"
+ "const": "deny-stat",
+ "markdownDescription": "Denies the stat command without any pre-configured scope."
},
{
"description": "Enables the truncate command without any pre-configured scope.",
"type": "string",
- "const": "allow-truncate"
+ "const": "allow-truncate",
+ "markdownDescription": "Enables the truncate command without any pre-configured scope."
},
{
"description": "Denies the truncate command without any pre-configured scope.",
"type": "string",
- "const": "deny-truncate"
+ "const": "deny-truncate",
+ "markdownDescription": "Denies the truncate command without any pre-configured scope."
},
{
"description": "Enables the unwatch command without any pre-configured scope.",
"type": "string",
- "const": "allow-unwatch"
+ "const": "allow-unwatch",
+ "markdownDescription": "Enables the unwatch command without any pre-configured scope."
},
{
"description": "Denies the unwatch command without any pre-configured scope.",
"type": "string",
- "const": "deny-unwatch"
+ "const": "deny-unwatch",
+ "markdownDescription": "Denies the unwatch command without any pre-configured scope."
},
{
"description": "Enables the watch command without any pre-configured scope.",
"type": "string",
- "const": "allow-watch"
+ "const": "allow-watch",
+ "markdownDescription": "Enables the watch command without any pre-configured scope."
},
{
"description": "Denies the watch command without any pre-configured scope.",
"type": "string",
- "const": "deny-watch"
+ "const": "deny-watch",
+ "markdownDescription": "Denies the watch command without any pre-configured scope."
},
{
"description": "Enables the write command without any pre-configured scope.",
"type": "string",
- "const": "allow-write"
+ "const": "allow-write",
+ "markdownDescription": "Enables the write command without any pre-configured scope."
},
{
"description": "Denies the write command without any pre-configured scope.",
"type": "string",
- "const": "deny-write"
+ "const": "deny-write",
+ "markdownDescription": "Denies the write command without any pre-configured scope."
},
{
"description": "Enables the write_file command without any pre-configured scope.",
"type": "string",
- "const": "allow-write-file"
+ "const": "allow-write-file",
+ "markdownDescription": "Enables the write_file command without any pre-configured scope."
},
{
"description": "Denies the write_file command without any pre-configured scope.",
"type": "string",
- "const": "deny-write-file"
+ "const": "deny-write-file",
+ "markdownDescription": "Denies the write_file command without any pre-configured scope."
},
{
"description": "Enables the write_text_file command without any pre-configured scope.",
"type": "string",
- "const": "allow-write-text-file"
+ "const": "allow-write-text-file",
+ "markdownDescription": "Enables the write_text_file command without any pre-configured scope."
},
{
"description": "Denies the write_text_file command without any pre-configured scope.",
"type": "string",
- "const": "deny-write-text-file"
+ "const": "deny-write-text-file",
+ "markdownDescription": "Denies the write_text_file command without any pre-configured scope."
},
{
"description": "This permissions allows to create the application specific directories.\n",
"type": "string",
- "const": "create-app-specific-dirs"
+ "const": "create-app-specific-dirs",
+ "markdownDescription": "This permissions allows to create the application specific directories.\n"
},
{
- "description": "This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n#### Included permissions within this default permission set:\n",
+ "description": "This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n#### This default permission set includes:\n\n- `create-app-specific-dirs`\n- `read-app-specific-dirs-recursive`\n- `deny-default`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n#### This default permission set includes:\n\n- `create-app-specific-dirs`\n- `read-app-specific-dirs-recursive`\n- `deny-default`"
},
{
- "description": "This denies access to dangerous Tauri relevant files and folders by default.",
+ "description": "This denies access to dangerous Tauri relevant files and folders by default.\n#### This permission set includes:\n\n- `deny-webview-data-linux`\n- `deny-webview-data-windows`",
"type": "string",
- "const": "deny-default"
+ "const": "deny-default",
+ "markdownDescription": "This denies access to dangerous Tauri relevant files and folders by default.\n#### This permission set includes:\n\n- `deny-webview-data-linux`\n- `deny-webview-data-windows`"
},
{
"description": "This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.",
"type": "string",
- "const": "deny-webview-data-linux"
+ "const": "deny-webview-data-linux",
+ "markdownDescription": "This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered."
},
{
"description": "This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.",
"type": "string",
- "const": "deny-webview-data-windows"
+ "const": "deny-webview-data-windows",
+ "markdownDescription": "This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered."
},
{
"description": "This enables all read related commands without any pre-configured accessible paths.",
"type": "string",
- "const": "read-all"
+ "const": "read-all",
+ "markdownDescription": "This enables all read related commands without any pre-configured accessible paths."
},
{
"description": "This permission allows recursive read functionality on the application\nspecific base directories. \n",
"type": "string",
- "const": "read-app-specific-dirs-recursive"
+ "const": "read-app-specific-dirs-recursive",
+ "markdownDescription": "This permission allows recursive read functionality on the application\nspecific base directories. \n"
},
{
"description": "This enables directory read and file metadata related commands without any pre-configured accessible paths.",
"type": "string",
- "const": "read-dirs"
+ "const": "read-dirs",
+ "markdownDescription": "This enables directory read and file metadata related commands without any pre-configured accessible paths."
},
{
"description": "This enables file read related commands without any pre-configured accessible paths.",
"type": "string",
- "const": "read-files"
+ "const": "read-files",
+ "markdownDescription": "This enables file read related commands without any pre-configured accessible paths."
},
{
"description": "This enables all index or metadata related commands without any pre-configured accessible paths.",
"type": "string",
- "const": "read-meta"
+ "const": "read-meta",
+ "markdownDescription": "This enables all index or metadata related commands without any pre-configured accessible paths."
},
{
"description": "An empty permission you can use to modify the global scope.",
"type": "string",
- "const": "scope"
+ "const": "scope",
+ "markdownDescription": "An empty permission you can use to modify the global scope."
},
{
"description": "This enables all write related commands without any pre-configured accessible paths.",
"type": "string",
- "const": "write-all"
+ "const": "write-all",
+ "markdownDescription": "This enables all write related commands without any pre-configured accessible paths."
},
{
"description": "This enables all file write related commands without any pre-configured accessible paths.",
"type": "string",
- "const": "write-files"
+ "const": "write-files",
+ "markdownDescription": "This enables all file write related commands without any pre-configured accessible paths."
}
]
}
diff --git a/plugins/fs/src/commands.rs b/plugins/fs/src/commands.rs
index 29d1104f..bd1400ea 100644
--- a/plugins/fs/src/commands.rs
+++ b/plugins/fs/src/commands.rs
@@ -150,11 +150,6 @@ pub fn open(
Ok(rid)
}
-#[tauri::command]
-pub fn close(webview: Webview, rid: ResourceId) -> CommandResult<()> {
- webview.resources_table().close(rid).map_err(Into::into)
-}
-
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopyFileOptions {
diff --git a/plugins/fs/src/file_path.rs b/plugins/fs/src/file_path.rs
index 735fc105..6316a248 100644
--- a/plugins/fs/src/file_path.rs
+++ b/plugins/fs/src/file_path.rs
@@ -53,10 +53,7 @@ impl FilePath {
#[inline]
pub fn into_path(self) -> Result {
match self {
- Self::Url(url) => url
- .to_file_path()
- .map(PathBuf::from)
- .map_err(|_| Error::InvalidPathUrl),
+ Self::Url(url) => url.to_file_path().map_err(|_| Error::InvalidPathUrl),
Self::Path(p) => Ok(p),
}
}
@@ -91,10 +88,7 @@ impl SafeFilePath {
#[inline]
pub fn into_path(self) -> Result {
match self {
- Self::Url(url) => url
- .to_file_path()
- .map(PathBuf::from)
- .map_err(|_| Error::InvalidPathUrl),
+ Self::Url(url) => url.to_file_path().map_err(|_| Error::InvalidPathUrl),
Self::Path(p) => Ok(p.as_ref().to_owned()),
}
}
diff --git a/plugins/fs/src/lib.rs b/plugins/fs/src/lib.rs
index 731c7040..bdc6b170 100644
--- a/plugins/fs/src/lib.rs
+++ b/plugins/fs/src/lib.rs
@@ -397,7 +397,6 @@ pub fn init() -> TauriPlugin> {
commands::create,
commands::open,
commands::copy_file,
- commands::close,
commands::mkdir,
commands::read_dir,
commands::read,
@@ -420,8 +419,6 @@ pub fn init() -> TauriPlugin> {
commands::size,
#[cfg(feature = "watch")]
watcher::watch,
- #[cfg(feature = "watch")]
- watcher::unwatch
])
.setup(|app, api| {
let scope = Scope {
diff --git a/plugins/fs/src/watcher.rs b/plugins/fs/src/watcher.rs
index 7d851822..89446b88 100644
--- a/plugins/fs/src/watcher.rs
+++ b/plugins/fs/src/watcher.rs
@@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
-use notify::{Config, Event, RecommendedWatcher, RecursiveMode, Watcher};
-use notify_debouncer_full::{new_debouncer, DebounceEventResult, Debouncer, RecommendedCache};
+use notify::{Config, RecommendedWatcher, RecursiveMode, Watcher};
+use notify_debouncer_full::{new_debouncer, DebouncedEvent, Debouncer, RecommendedCache};
use serde::Deserialize;
use tauri::{
ipc::{Channel, CommandScope, GlobalScope},
@@ -11,15 +11,7 @@ use tauri::{
Manager, Resource, ResourceId, Runtime, Webview,
};
-use std::{
- path::PathBuf,
- sync::{
- mpsc::{channel, Receiver},
- Mutex,
- },
- thread::spawn,
- time::Duration,
-};
+use std::time::Duration;
use crate::{
commands::{resolve_path, CommandResult},
@@ -27,79 +19,44 @@ use crate::{
SafeFilePath,
};
-struct InnerWatcher {
- pub kind: WatcherKind,
- paths: Vec,
-}
-
-pub struct WatcherResource(Mutex);
-impl WatcherResource {
- fn new(kind: WatcherKind, paths: Vec) -> Self {
- Self(Mutex::new(InnerWatcher { kind, paths }))
- }
-
- fn with_lock R>(&self, mut f: F) -> R {
- let mut watcher = self.0.lock().unwrap();
- f(&mut watcher)
- }
-}
-
-impl Resource for WatcherResource {}
-
+#[allow(unused)]
enum WatcherKind {
Debouncer(Debouncer),
Watcher(RecommendedWatcher),
}
-fn watch_raw(on_event: Channel, rx: Receiver>) {
- spawn(move || {
- while let Ok(event) = rx.recv() {
- if let Ok(event) = event {
- // TODO: Should errors be emitted too?
- let _ = on_event.send(event);
- }
- }
- });
-}
-
-fn watch_debounced(on_event: Channel, rx: Receiver) {
- spawn(move || {
- while let Ok(Ok(events)) = rx.recv() {
- for event in events {
- // TODO: Should errors be emitted too?
- let _ = on_event.send(event.event);
- }
- }
- });
-}
+impl Resource for WatcherKind {}
#[derive(Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WatchOptions {
base_dir: Option,
+ #[serde(default)]
recursive: bool,
delay_ms: Option,
}
#[tauri::command]
-pub async fn watch(
+pub fn watch(
webview: Webview,
paths: Vec,
options: WatchOptions,
- on_event: Channel,
+ on_event: Channel,
global_scope: GlobalScope,
command_scope: CommandScope,
) -> CommandResult {
- let mut resolved_paths = Vec::with_capacity(paths.capacity());
- for path in paths {
- resolved_paths.push(resolve_path(
- &webview,
- &global_scope,
- &command_scope,
- path,
- options.base_dir,
- )?);
- }
+ let resolved_paths = paths
+ .into_iter()
+ .map(|path| {
+ resolve_path(
+ &webview,
+ &global_scope,
+ &command_scope,
+ path,
+ options.base_dir,
+ )
+ })
+ .collect::>>()?;
let recursive_mode = if options.recursive {
RecursiveMode::Recursive
@@ -107,52 +64,40 @@ pub async fn watch(
RecursiveMode::NonRecursive
};
- let kind = if let Some(delay) = options.delay_ms {
- let (tx, rx) = channel();
- let mut debouncer = new_debouncer(Duration::from_millis(delay), None, tx)?;
+ let watcher_kind = if let Some(delay) = options.delay_ms {
+ let mut debouncer = new_debouncer(
+ Duration::from_millis(delay),
+ None,
+ move |events: Result, Vec>| {
+ if let Ok(events) = events {
+ for event in events {
+ // TODO: Should errors be emitted too?
+ let _ = on_event.send(event.event);
+ }
+ }
+ },
+ )?;
for path in &resolved_paths {
debouncer.watch(path, recursive_mode)?;
}
- watch_debounced(on_event, rx);
WatcherKind::Debouncer(debouncer)
} else {
- let (tx, rx) = channel();
- let mut watcher = RecommendedWatcher::new(tx, Config::default())?;
+ let mut watcher = RecommendedWatcher::new(
+ move |event| {
+ if let Ok(event) = event {
+ // TODO: Should errors be emitted too?
+ let _ = on_event.send(event);
+ }
+ },
+ Config::default(),
+ )?;
for path in &resolved_paths {
watcher.watch(path, recursive_mode)?;
}
- watch_raw(on_event, rx);
WatcherKind::Watcher(watcher)
};
- let rid = webview
- .resources_table()
- .add(WatcherResource::new(kind, resolved_paths));
+ let rid = webview.resources_table().add(watcher_kind);
Ok(rid)
}
-
-#[tauri::command]
-pub async fn unwatch(webview: Webview, rid: ResourceId) -> CommandResult<()> {
- let watcher = webview.resources_table().take::(rid)?;
- WatcherResource::with_lock(&watcher, |watcher| {
- match &mut watcher.kind {
- WatcherKind::Debouncer(ref mut debouncer) => {
- for path in &watcher.paths {
- debouncer.unwatch(path).map_err(|e| {
- format!("failed to unwatch path: {} with error: {e}", path.display())
- })?;
- }
- }
- WatcherKind::Watcher(ref mut w) => {
- for path in &watcher.paths {
- w.unwatch(path).map_err(|e| {
- format!("failed to unwatch path: {} with error: {e}", path.display())
- })?;
- }
- }
- }
-
- Ok(())
- })
-}
diff --git a/plugins/geolocation/CHANGELOG.md b/plugins/geolocation/CHANGELOG.md
index 26bd66b6..dbee2e7d 100644
--- a/plugins/geolocation/CHANGELOG.md
+++ b/plugins/geolocation/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## \[2.2.4]
+
+- [`a1b3fa27`](https://github.com/tauri-apps/plugins-workspace/commit/a1b3fa27f11022c9b6622b4fab12d93239eb05de) ([#2515](https://github.com/tauri-apps/plugins-workspace/pull/2515) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Re-exported the `Geolocation`, `Haptics`, `Notification`, and `Os` structs so that they show up on docs.rs.
+
## \[2.2.3]
- [`406e6f48`](https://github.com/tauri-apps/plugins-workspace/commit/406e6f484cdc13d35c50fb949f7489ca9eeccc44) ([#2323](https://github.com/tauri-apps/plugins-workspace/pull/2323) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Fixed an issue that caused build failures when the `haptics` or `geolocation` plugin was used without their `specta` feature flag enabled.
diff --git a/plugins/geolocation/Cargo.toml b/plugins/geolocation/Cargo.toml
index 3fc3baaf..7d01b526 100644
--- a/plugins/geolocation/Cargo.toml
+++ b/plugins/geolocation/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "tauri-plugin-geolocation"
description = "Get and track the device's current position"
-version = "2.2.3"
+version = "2.2.4"
edition = { workspace = true }
authors = { workspace = true }
license = { workspace = true }
diff --git a/plugins/geolocation/README.md b/plugins/geolocation/README.md
index 5d306cee..c7cb81fb 100644
--- a/plugins/geolocation/README.md
+++ b/plugins/geolocation/README.md
@@ -72,7 +72,7 @@ This plugin automatically adds the following permissions to your `AndroidManifes
If your app requires GPS functionality to function, **you** should add the following to your `AndroidManifest.xml` file:
```xml
-
+
```
The Google Play Store uses this property to decide whether it should show the app to devices without GPS capabilities.
diff --git a/plugins/geolocation/api-iife.js b/plugins/geolocation/api-iife.js
index 54d99272..1db79359 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 n(t,n,e,i){if("function"==typeof n||!n.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?i:"a"===e?i.call(t):i?i.value:n.get(t)}function e(t,n,e,i,s){if("function"==typeof n||!n.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n.set(t,e),e}var i,s,o;"function"==typeof SuppressedError&&SuppressedError;const r="__TAURI_TO_IPC_KEY__";class a{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),s.set(this,0),o.set(this,[]),this.id=function(t,n=!1){return window.__TAURI_INTERNALS__.transformCallback(t,n)}((({message:t,id:r})=>{if(r==n(this,s,"f"))for(n(this,i,"f").call(this,t),e(this,s,n(this,s,"f")+1);n(this,s,"f")in n(this,o,"f");){const t=n(this,o,"f")[n(this,s,"f")];n(this,i,"f").call(this,t),delete n(this,o,"f")[n(this,s,"f")],e(this,s,n(this,s,"f")+1)}else n(this,o,"f")[r]=t}))}set onmessage(t){e(this,i,t)}get onmessage(){return n(this,i,"f")}[(i=new WeakMap,s=new WeakMap,o=new WeakMap,r)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[r]()}}async function c(t,n={},e){return window.__TAURI_INTERNALS__.invoke(t,n,e)}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,n){const e=new a;return e.onmessage=t=>{"string"==typeof t?n(null,t):n(t)},await c("plugin:geolocation|watch_position",{options:t,channel:e}),e.id},t}({});Object.defineProperty(window.__TAURI__,"geolocation",{value:__TAURI_PLUGIN_GEOLOCATION__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_GEOLOCATION__=function(t){"use strict";function n(t,n,e,i){if("function"==typeof n||!n.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===e?i:"a"===e?i.call(t):i?i.value:n.get(t)}function e(t,n,e,i,s){if("function"==typeof n||!n.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n.set(t,e),e}var i,s,o,r;"function"==typeof SuppressedError&&SuppressedError;const a="__TAURI_TO_IPC_KEY__";class c{constructor(t){i.set(this,void 0),s.set(this,0),o.set(this,[]),r.set(this,void 0),e(this,i,t||(()=>{})),this.id=function(t,n=!1){return window.__TAURI_INTERNALS__.transformCallback(t,n)}((t=>{const a=t.index;if("end"in t)return void(a==n(this,s,"f")?this.cleanupCallback():e(this,r,a));const c=t.message;if(a==n(this,s,"f")){for(n(this,i,"f").call(this,c),e(this,s,n(this,s,"f")+1);n(this,s,"f")in n(this,o,"f");){const t=n(this,o,"f")[n(this,s,"f")];n(this,i,"f").call(this,t),delete n(this,o,"f")[n(this,s,"f")],e(this,s,n(this,s,"f")+1)}n(this,s,"f")===n(this,r,"f")&&this.cleanupCallback()}else n(this,o,"f")[a]=c}))}cleanupCallback(){Reflect.deleteProperty(window,`_${this.id}`)}set onmessage(t){e(this,i,t)}get onmessage(){return n(this,i,"f")}[(i=new WeakMap,s=new WeakMap,o=new WeakMap,r=new WeakMap,a)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[a]()}}async function _(t,n={},e){return window.__TAURI_INTERNALS__.invoke(t,n,e)}return t.checkPermissions=async function(){return await async function(t){return _(`plugin:${t}|check_permissions`)}("geolocation")},t.clearWatch=async function(t){await _("plugin:geolocation|clear_watch",{channelId:t})},t.getCurrentPosition=async function(t){return await _("plugin:geolocation|get_current_position",{options:t})},t.requestPermissions=async function(t){return await _("plugin:geolocation|request_permissions",{permissions:t})},t.watchPosition=async function(t,n){const e=new c;return e.onmessage=t=>{"string"==typeof t?n(null,t):n(t)},await _("plugin:geolocation|watch_position",{options:t,channel:e}),e.id},t}({});Object.defineProperty(window.__TAURI__,"geolocation",{value:__TAURI_PLUGIN_GEOLOCATION__})}
diff --git a/plugins/geolocation/package.json b/plugins/geolocation/package.json
index c52b7e08..0e3b09cb 100644
--- a/plugins/geolocation/package.json
+++ b/plugins/geolocation/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-geolocation",
- "version": "2.2.3",
+ "version": "2.2.4",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/geolocation/permissions/schemas/schema.json b/plugins/geolocation/permissions/schemas/schema.json
index 4474ec6b..237b445d 100644
--- a/plugins/geolocation/permissions/schemas/schema.json
+++ b/plugins/geolocation/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,62 +297,74 @@
{
"description": "Enables the check_permissions command without any pre-configured scope.",
"type": "string",
- "const": "allow-check-permissions"
+ "const": "allow-check-permissions",
+ "markdownDescription": "Enables the check_permissions command without any pre-configured scope."
},
{
"description": "Denies the check_permissions command without any pre-configured scope.",
"type": "string",
- "const": "deny-check-permissions"
+ "const": "deny-check-permissions",
+ "markdownDescription": "Denies the check_permissions command without any pre-configured scope."
},
{
"description": "Enables the clear_permissions command without any pre-configured scope.",
"type": "string",
- "const": "allow-clear-permissions"
+ "const": "allow-clear-permissions",
+ "markdownDescription": "Enables the clear_permissions command without any pre-configured scope."
},
{
"description": "Denies the clear_permissions command without any pre-configured scope.",
"type": "string",
- "const": "deny-clear-permissions"
+ "const": "deny-clear-permissions",
+ "markdownDescription": "Denies the clear_permissions command without any pre-configured scope."
},
{
"description": "Enables the clear_watch command without any pre-configured scope.",
"type": "string",
- "const": "allow-clear-watch"
+ "const": "allow-clear-watch",
+ "markdownDescription": "Enables the clear_watch command without any pre-configured scope."
},
{
"description": "Denies the clear_watch command without any pre-configured scope.",
"type": "string",
- "const": "deny-clear-watch"
+ "const": "deny-clear-watch",
+ "markdownDescription": "Denies the clear_watch command without any pre-configured scope."
},
{
"description": "Enables the get_current_position command without any pre-configured scope.",
"type": "string",
- "const": "allow-get-current-position"
+ "const": "allow-get-current-position",
+ "markdownDescription": "Enables the get_current_position command without any pre-configured scope."
},
{
"description": "Denies the get_current_position command without any pre-configured scope.",
"type": "string",
- "const": "deny-get-current-position"
+ "const": "deny-get-current-position",
+ "markdownDescription": "Denies the get_current_position command without any pre-configured scope."
},
{
"description": "Enables the request_permissions command without any pre-configured scope.",
"type": "string",
- "const": "allow-request-permissions"
+ "const": "allow-request-permissions",
+ "markdownDescription": "Enables the request_permissions command without any pre-configured scope."
},
{
"description": "Denies the request_permissions command without any pre-configured scope.",
"type": "string",
- "const": "deny-request-permissions"
+ "const": "deny-request-permissions",
+ "markdownDescription": "Denies the request_permissions command without any pre-configured scope."
},
{
"description": "Enables the watch_position command without any pre-configured scope.",
"type": "string",
- "const": "allow-watch-position"
+ "const": "allow-watch-position",
+ "markdownDescription": "Enables the watch_position command without any pre-configured scope."
},
{
"description": "Denies the watch_position command without any pre-configured scope.",
"type": "string",
- "const": "deny-watch-position"
+ "const": "deny-watch-position",
+ "markdownDescription": "Denies the watch_position command without any pre-configured scope."
}
]
}
diff --git a/plugins/geolocation/src/lib.rs b/plugins/geolocation/src/lib.rs
index 55f50aa0..588f96e3 100644
--- a/plugins/geolocation/src/lib.rs
+++ b/plugins/geolocation/src/lib.rs
@@ -21,9 +21,9 @@ mod models;
pub use error::{Error, Result};
#[cfg(desktop)]
-use desktop::Geolocation;
+pub use desktop::Geolocation;
#[cfg(mobile)]
-use mobile::Geolocation;
+pub use mobile::Geolocation;
/// Extensions to [`tauri::App`], [`tauri::AppHandle`], [`tauri::WebviewWindow`], [`tauri::Webview`] and [`tauri::Window`] to access the geolocation APIs.
pub trait GeolocationExt {
diff --git a/plugins/global-shortcut/CHANGELOG.md b/plugins/global-shortcut/CHANGELOG.md
index 32f8748d..a5f00024 100644
--- a/plugins/global-shortcut/CHANGELOG.md
+++ b/plugins/global-shortcut/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## \[2.2.1]
+
+- [`494d1fea`](https://github.com/tauri-apps/plugins-workspace/commit/494d1fea137ffd60da98b25305c9d666df62cc63) ([#2684](https://github.com/tauri-apps/plugins-workspace/pull/2684) by [@renovate](https://github.com/tauri-apps/plugins-workspace/../../renovate)) Updated `global-hotkey` crate to `0.7` to fix a panic when trying to register a key combination which was already registered by another program. No API changes.
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/global-shortcut/Cargo.toml b/plugins/global-shortcut/Cargo.toml
index a9ff1fe0..033961a8 100644
--- a/plugins/global-shortcut/Cargo.toml
+++ b/plugins/global-shortcut/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-global-shortcut"
-version = "2.2.0"
+version = "2.2.1"
description = "Register global hotkeys listeners on your Tauri application."
edition = { workspace = true }
authors = { workspace = true }
@@ -31,4 +31,4 @@ log = { workspace = true }
thiserror = { workspace = true }
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
-global-hotkey = { version = "0.6", features = ["serde"] }
+global-hotkey = { version = "0.7", features = ["serde"] }
diff --git a/plugins/global-shortcut/api-iife.js b/plugins/global-shortcut/api-iife.js
index 9c44bd4e..8d4ae006 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("function"==typeof e||!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,i){if("function"==typeof e||!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,i,n;"function"==typeof SuppressedError&&SuppressedError;const o="__TAURI_TO_IPC_KEY__";class a{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,s.set(this,(()=>{})),i.set(this,0),n.set(this,[]),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((({message:t,id:o})=>{if(o==e(this,i,"f"))for(e(this,s,"f").call(this,t),r(this,i,e(this,i,"f")+1);e(this,i,"f")in e(this,n,"f");){const t=e(this,n,"f")[e(this,i,"f")];e(this,s,"f").call(this,t),delete e(this,n,"f")[e(this,i,"f")],r(this,i,e(this,i,"f")+1)}else e(this,n,"f")[o]=t}))}set onmessage(t){r(this,s,t)}get onmessage(){return e(this,s,"f")}[(s=new WeakMap,i=new WeakMap,n=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__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_GLOBAL_SHORTCUT__=function(t){"use strict";function e(t,e,s,i){if("function"==typeof e||!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?i:"a"===s?i.call(t):i?i.value:e.get(t)}function s(t,e,s,i,r){if("function"==typeof e||!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,s),s}var i,r,n,a;"function"==typeof SuppressedError&&SuppressedError;const o="__TAURI_TO_IPC_KEY__";class c{constructor(t){i.set(this,void 0),r.set(this,0),n.set(this,[]),a.set(this,void 0),s(this,i,t||(()=>{})),this.id=function(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}((t=>{const o=t.index;if("end"in t)return void(o==e(this,r,"f")?this.cleanupCallback():s(this,a,o));const c=t.message;if(o==e(this,r,"f")){for(e(this,i,"f").call(this,c),s(this,r,e(this,r,"f")+1);e(this,r,"f")in e(this,n,"f");){const t=e(this,n,"f")[e(this,r,"f")];e(this,i,"f").call(this,t),delete e(this,n,"f")[e(this,r,"f")],s(this,r,e(this,r,"f")+1)}e(this,r,"f")===e(this,a,"f")&&this.cleanupCallback()}else e(this,n,"f")[o]=c}))}cleanupCallback(){Reflect.deleteProperty(window,`_${this.id}`)}set onmessage(t){s(this,i,t)}get onmessage(){return e(this,i,"f")}[(i=new WeakMap,r=new WeakMap,n=new WeakMap,a=new WeakMap,o)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[o]()}}async function u(t,e={},s){return window.__TAURI_INTERNALS__.invoke(t,e,s)}return t.isRegistered=async function(t){return await u("plugin:global-shortcut|is_registered",{shortcut:t})},t.register=async function(t,e){const s=new c;return s.onmessage=e,await u("plugin:global-shortcut|register",{shortcuts:Array.isArray(t)?t:[t],handler:s})},t.unregister=async function(t){return await u("plugin:global-shortcut|unregister",{shortcuts:Array.isArray(t)?t:[t]})},t.unregisterAll=async function(){return await u("plugin:global-shortcut|unregister_all",{})},t}({});Object.defineProperty(window.__TAURI__,"globalShortcut",{value:__TAURI_PLUGIN_GLOBAL_SHORTCUT__})}
diff --git a/plugins/global-shortcut/package.json b/plugins/global-shortcut/package.json
index 13f014b7..2cdf65b6 100644
--- a/plugins/global-shortcut/package.json
+++ b/plugins/global-shortcut/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-global-shortcut",
- "version": "2.2.0",
+ "version": "2.2.1",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/global-shortcut/permissions/autogenerated/reference.md b/plugins/global-shortcut/permissions/autogenerated/reference.md
index f8571c04..dedb1aef 100644
--- a/plugins/global-shortcut/permissions/autogenerated/reference.md
+++ b/plugins/global-shortcut/permissions/autogenerated/reference.md
@@ -6,6 +6,8 @@ application specific if specific shortcuts should be
registered or unregistered.
+#### This default permission set includes the following:
+
## Permission Table
diff --git a/plugins/global-shortcut/permissions/schemas/schema.json b/plugins/global-shortcut/permissions/schemas/schema.json
index 66b92b07..1224869c 100644
--- a/plugins/global-shortcut/permissions/schemas/schema.json
+++ b/plugins/global-shortcut/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,57 +297,68 @@
{
"description": "Enables the is_registered command without any pre-configured scope.",
"type": "string",
- "const": "allow-is-registered"
+ "const": "allow-is-registered",
+ "markdownDescription": "Enables the is_registered command without any pre-configured scope."
},
{
"description": "Denies the is_registered command without any pre-configured scope.",
"type": "string",
- "const": "deny-is-registered"
+ "const": "deny-is-registered",
+ "markdownDescription": "Denies the is_registered command without any pre-configured scope."
},
{
"description": "Enables the register command without any pre-configured scope.",
"type": "string",
- "const": "allow-register"
+ "const": "allow-register",
+ "markdownDescription": "Enables the register command without any pre-configured scope."
},
{
"description": "Denies the register command without any pre-configured scope.",
"type": "string",
- "const": "deny-register"
+ "const": "deny-register",
+ "markdownDescription": "Denies the register command without any pre-configured scope."
},
{
"description": "Enables the register_all command without any pre-configured scope.",
"type": "string",
- "const": "allow-register-all"
+ "const": "allow-register-all",
+ "markdownDescription": "Enables the register_all command without any pre-configured scope."
},
{
"description": "Denies the register_all command without any pre-configured scope.",
"type": "string",
- "const": "deny-register-all"
+ "const": "deny-register-all",
+ "markdownDescription": "Denies the register_all command without any pre-configured scope."
},
{
"description": "Enables the unregister command without any pre-configured scope.",
"type": "string",
- "const": "allow-unregister"
+ "const": "allow-unregister",
+ "markdownDescription": "Enables the unregister command without any pre-configured scope."
},
{
"description": "Denies the unregister command without any pre-configured scope.",
"type": "string",
- "const": "deny-unregister"
+ "const": "deny-unregister",
+ "markdownDescription": "Denies the unregister command without any pre-configured scope."
},
{
"description": "Enables the unregister_all command without any pre-configured scope.",
"type": "string",
- "const": "allow-unregister-all"
+ "const": "allow-unregister-all",
+ "markdownDescription": "Enables the unregister_all command without any pre-configured scope."
},
{
"description": "Denies the unregister_all command without any pre-configured scope.",
"type": "string",
- "const": "deny-unregister-all"
+ "const": "deny-unregister-all",
+ "markdownDescription": "Denies the unregister_all command without any pre-configured scope."
},
{
"description": "No features are enabled by default, as we believe\nthe shortcuts can be inherently dangerous and it is\napplication specific if specific shortcuts should be\nregistered or unregistered.\n",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "No features are enabled by default, as we believe\nthe shortcuts can be inherently dangerous and it is\napplication specific if specific shortcuts should be\nregistered or unregistered.\n"
}
]
}
diff --git a/plugins/haptics/CHANGELOG.md b/plugins/haptics/CHANGELOG.md
index 246fb18e..aa3fbbd8 100644
--- a/plugins/haptics/CHANGELOG.md
+++ b/plugins/haptics/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## \[2.2.4]
+
+- [`a1b3fa27`](https://github.com/tauri-apps/plugins-workspace/commit/a1b3fa27f11022c9b6622b4fab12d93239eb05de) ([#2515](https://github.com/tauri-apps/plugins-workspace/pull/2515) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Re-exported the `Geolocation`, `Haptics`, `Notification`, and `Os` structs so that they show up on docs.rs.
+
## \[2.2.3]
- [`406e6f48`](https://github.com/tauri-apps/plugins-workspace/commit/406e6f484cdc13d35c50fb949f7489ca9eeccc44) ([#2323](https://github.com/tauri-apps/plugins-workspace/pull/2323) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Fixed an issue that caused build failures when the `haptics` or `geolocation` plugin was used without their `specta` feature flag enabled.
diff --git a/plugins/haptics/Cargo.toml b/plugins/haptics/Cargo.toml
index 4215130e..34c80bab 100644
--- a/plugins/haptics/Cargo.toml
+++ b/plugins/haptics/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "tauri-plugin-haptics"
description = "Haptic feedback and vibrations on Android and iOS"
-version = "2.2.3"
+version = "2.2.4"
edition = { workspace = true }
authors = { workspace = true }
license = { workspace = true }
diff --git a/plugins/haptics/package.json b/plugins/haptics/package.json
index 1c70aae1..12c5b74b 100644
--- a/plugins/haptics/package.json
+++ b/plugins/haptics/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-haptics",
- "version": "2.2.3",
+ "version": "2.2.4",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/haptics/permissions/schemas/schema.json b/plugins/haptics/permissions/schemas/schema.json
index 763e0a72..ed217dc4 100644
--- a/plugins/haptics/permissions/schemas/schema.json
+++ b/plugins/haptics/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,42 +297,50 @@
{
"description": "Enables the impact_feedback command without any pre-configured scope.",
"type": "string",
- "const": "allow-impact-feedback"
+ "const": "allow-impact-feedback",
+ "markdownDescription": "Enables the impact_feedback command without any pre-configured scope."
},
{
"description": "Denies the impact_feedback command without any pre-configured scope.",
"type": "string",
- "const": "deny-impact-feedback"
+ "const": "deny-impact-feedback",
+ "markdownDescription": "Denies the impact_feedback command without any pre-configured scope."
},
{
"description": "Enables the notification_feedback command without any pre-configured scope.",
"type": "string",
- "const": "allow-notification-feedback"
+ "const": "allow-notification-feedback",
+ "markdownDescription": "Enables the notification_feedback command without any pre-configured scope."
},
{
"description": "Denies the notification_feedback command without any pre-configured scope.",
"type": "string",
- "const": "deny-notification-feedback"
+ "const": "deny-notification-feedback",
+ "markdownDescription": "Denies the notification_feedback command without any pre-configured scope."
},
{
"description": "Enables the selection_feedback command without any pre-configured scope.",
"type": "string",
- "const": "allow-selection-feedback"
+ "const": "allow-selection-feedback",
+ "markdownDescription": "Enables the selection_feedback command without any pre-configured scope."
},
{
"description": "Denies the selection_feedback command without any pre-configured scope.",
"type": "string",
- "const": "deny-selection-feedback"
+ "const": "deny-selection-feedback",
+ "markdownDescription": "Denies the selection_feedback command without any pre-configured scope."
},
{
"description": "Enables the vibrate command without any pre-configured scope.",
"type": "string",
- "const": "allow-vibrate"
+ "const": "allow-vibrate",
+ "markdownDescription": "Enables the vibrate command without any pre-configured scope."
},
{
"description": "Denies the vibrate command without any pre-configured scope.",
"type": "string",
- "const": "deny-vibrate"
+ "const": "deny-vibrate",
+ "markdownDescription": "Denies the vibrate command without any pre-configured scope."
}
]
}
diff --git a/plugins/haptics/src/lib.rs b/plugins/haptics/src/lib.rs
index f56e5212..31798743 100644
--- a/plugins/haptics/src/lib.rs
+++ b/plugins/haptics/src/lib.rs
@@ -21,9 +21,9 @@ mod models;
pub use error::{Error, Result};
#[cfg(desktop)]
-use desktop::Haptics;
+pub use desktop::Haptics;
#[cfg(mobile)]
-use mobile::Haptics;
+pub use mobile::Haptics;
/// Extensions to [`tauri::App`], [`tauri::AppHandle`], [`tauri::WebviewWindow`], [`tauri::Webview`] and [`tauri::Window`] to access the haptics APIs.
pub trait HapticsExt {
diff --git a/plugins/http/CHANGELOG.md b/plugins/http/CHANGELOG.md
index e9611f4e..83120cba 100644
--- a/plugins/http/CHANGELOG.md
+++ b/plugins/http/CHANGELOG.md
@@ -1,5 +1,34 @@
# Changelog
+## \[2.4.4]
+
+- [`ff384cba`](https://github.com/tauri-apps/plugins-workspace/commit/ff384cbabe82ae715798a4ee49fd07ffcfbcdb5d) ([#2636](https://github.com/tauri-apps/plugins-workspace/pull/2636) by [@asomethings](https://github.com/tauri-apps/plugins-workspace/../../asomethings)) Properly handle responses with status code 204.
+
+### Dependencies
+
+- Upgraded to `fs-js@2.3.0`
+
+## \[2.4.3]
+
+- [`37c0477a`](https://github.com/tauri-apps/plugins-workspace/commit/37c0477afe926d326573f1827045875ce8bf8187) ([#2561](https://github.com/tauri-apps/plugins-workspace/pull/2561)) Add `zstd` cargo feature flag to enable `reqwest/zstd` flag.
+- [`9ebbfb2e`](https://github.com/tauri-apps/plugins-workspace/commit/9ebbfb2e3ccef8e0f277a0c02fe6b399b41feeb6) ([#1978](https://github.com/tauri-apps/plugins-workspace/pull/1978)) Persist cookies to disk and load it on next app start.
+
+### Dependencies
+
+- Upgraded to `fs-js@2.2.1`
+
+## \[2.4.2]
+
+- [`a15eedf3`](https://github.com/tauri-apps/plugins-workspace/commit/a15eedf37854344f7ffbcb0d373d848563817011) ([#2535](https://github.com/tauri-apps/plugins-workspace/pull/2535) by [@amrbashir](https://github.com/tauri-apps/plugins-workspace/../../amrbashir)) Fix `fetch` occasionally throwing an error due to trying to close the underline stream twice.
+
+## \[2.4.1]
+
+- [`d3183aa9`](https://github.com/tauri-apps/plugins-workspace/commit/d3183aa99da7ca67e627394132ddeb3b85ccef06) ([#2522](https://github.com/tauri-apps/plugins-workspace/pull/2522) by [@adrieljss](https://github.com/tauri-apps/plugins-workspace/../../adrieljss)) Fix `fetch` blocking until the whole response is read even if it was a streaming response.
+
+## \[2.4.0]
+
+- [`cb38f54f`](https://github.com/tauri-apps/plugins-workspace/commit/cb38f54f4a4ef30995283cd82166c62da17bac44) ([#2479](https://github.com/tauri-apps/plugins-workspace/pull/2479) by [@adrieljss](https://github.com/tauri-apps/plugins-workspace/../../adrieljss)) Add stream support for HTTP stream responses.
+
## \[2.3.0]
- [`10513649`](https://github.com/tauri-apps/plugins-workspace/commit/105136494c5a5bf4b1f1cc06cc71815412d17ec8) ([#2204](https://github.com/tauri-apps/plugins-workspace/pull/2204) by [@RickeyWard](https://github.com/tauri-apps/plugins-workspace/../../RickeyWard)) Add `dangerous-settings` feature flag and new JS `danger` option to disable tls hostname/certificate validation.
diff --git a/plugins/http/Cargo.toml b/plugins/http/Cargo.toml
index 9aa49e0e..f3bdca36 100644
--- a/plugins/http/Cargo.toml
+++ b/plugins/http/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-http"
-version = "2.3.0"
+version = "2.4.4"
description = "Access an HTTP client written in Rust."
edition = { workspace = true }
authors = { workspace = true }
@@ -34,13 +34,15 @@ serde_json = { workspace = true }
tauri = { workspace = true }
thiserror = { workspace = true }
tokio = { version = "1", features = ["sync", "macros"] }
-tauri-plugin-fs = { path = "../fs", version = "2.2.0" }
+tauri-plugin-fs = { path = "../fs", version = "2.3.0" }
urlpattern = "0.3"
regex = "1"
http = "1"
reqwest = { version = "0.12", default-features = false }
url = { workspace = true }
data-url = "0.3"
+cookie_store = { version = "0.21.1", optional = true, features = ["serde"] }
+bytes = { version = "1.9", optional = true }
tracing = { workspace = true, optional = true }
[features]
@@ -62,10 +64,11 @@ rustls-tls-manual-roots = ["reqwest/rustls-tls-manual-roots"]
rustls-tls-webpki-roots = ["reqwest/rustls-tls-webpki-roots"]
rustls-tls-native-roots = ["reqwest/rustls-tls-native-roots"]
blocking = ["reqwest/blocking"]
-cookies = ["reqwest/cookies"]
+cookies = ["reqwest/cookies", "dep:cookie_store", "dep:bytes"]
gzip = ["reqwest/gzip"]
brotli = ["reqwest/brotli"]
deflate = ["reqwest/deflate"]
+zstd = ["reqwest/zstd"]
trust-dns = ["reqwest/trust-dns"]
socks = ["reqwest/socks"]
http2 = ["reqwest/http2"]
diff --git a/plugins/http/api-iife.js b/plugins/http/api-iife.js
index 76b498ad..70b99c24 100644
--- a/plugins/http/api-iife.js
+++ b/plugins/http/api-iife.js
@@ -1 +1 @@
-if("__TAURI__"in window){var __TAURI_PLUGIN_HTTP__=function(e){"use strict";async function t(e,t={},r){return window.__TAURI_INTERNALS__.invoke(e,t,r)}"function"==typeof SuppressedError&&SuppressedError;const r="Request canceled";return e.fetch=async function(e,n){const a=n?.signal;if(a?.aborted)throw new Error(r);const o=n?.maxRedirections,s=n?.connectTimeout,i=n?.proxy,d=n?.danger;n&&(delete n.maxRedirections,delete n.connectTimeout,delete n.proxy,delete n.danger);const c=n?.headers?n.headers instanceof Headers?n.headers:new Headers(n.headers):new Headers,u=new Request(e,n),f=await u.arrayBuffer(),_=0!==f.byteLength?Array.from(new Uint8Array(f)):null;for(const[e,t]of u.headers)c.get(e)||c.set(e,t);const h=(c instanceof Headers?Array.from(c.entries()):Array.isArray(c)?c:Object.entries(c)).map((([e,t])=>[e,"string"==typeof t?t:t.toString()]));if(a?.aborted)throw new Error(r);const l=await t("plugin:http|fetch",{clientConfig:{method:u.method,url:u.url,headers:h,data:_,maxRedirections:o,connectTimeout:s,proxy:i,danger:d}}),p=()=>t("plugin:http|fetch_cancel",{rid:l});if(a?.aborted)throw p(),new Error(r);a?.addEventListener("abort",(()=>{p()}));const{status:w,statusText:y,url:g,headers:T,rid:A}=await t("plugin:http|fetch_send",{rid:l}),R=await t("plugin:http|fetch_read_body",{rid:A}),b=new Response(R instanceof ArrayBuffer&&0!==R.byteLength?R:R instanceof Array&&R.length>0?new Uint8Array(R):null,{status:w,statusText:y});return Object.defineProperty(b,"url",{value:g}),Object.defineProperty(b,"headers",{value:new Headers(T)}),b},e}({});Object.defineProperty(window.__TAURI__,"http",{value:__TAURI_PLUGIN_HTTP__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_HTTP__=function(e){"use strict";function t(e,t,r,n){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(e):n?n.value:t.get(e)}function r(e,t,r,n,s){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,r),r}var n,s,i,a;"function"==typeof SuppressedError&&SuppressedError;const o="__TAURI_TO_IPC_KEY__";class c{constructor(e){n.set(this,void 0),s.set(this,0),i.set(this,[]),a.set(this,void 0),r(this,n,e||(()=>{})),this.id=function(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}((e=>{const o=e.index;if("end"in e)return void(o==t(this,s,"f")?this.cleanupCallback():r(this,a,o));const c=e.message;if(o==t(this,s,"f")){for(t(this,n,"f").call(this,c),r(this,s,t(this,s,"f")+1);t(this,s,"f")in t(this,i,"f");){const e=t(this,i,"f")[t(this,s,"f")];t(this,n,"f").call(this,e),delete t(this,i,"f")[t(this,s,"f")],r(this,s,t(this,s,"f")+1)}t(this,s,"f")===t(this,a,"f")&&this.cleanupCallback()}else t(this,i,"f")[o]=c}))}cleanupCallback(){Reflect.deleteProperty(window,`_${this.id}`)}set onmessage(e){r(this,n,e)}get onmessage(){return t(this,n,"f")}[(n=new WeakMap,s=new WeakMap,i=new WeakMap,a=new WeakMap,o)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[o]()}}async function d(e,t={},r){return window.__TAURI_INTERNALS__.invoke(e,t,r)}const h="Request cancelled";return e.fetch=async function(e,t){const r=t?.signal;if(r?.aborted)throw new Error(h);const n=t?.maxRedirections,s=t?.connectTimeout,i=t?.proxy,a=t?.danger;t&&(delete t.maxRedirections,delete t.connectTimeout,delete t.proxy,delete t.danger);const o=t?.headers?t.headers instanceof Headers?t.headers:new Headers(t.headers):new Headers,f=new Request(e,t),l=await f.arrayBuffer(),u=0!==l.byteLength?Array.from(new Uint8Array(l)):null;for(const[e,t]of f.headers)o.get(e)||o.set(e,t);const _=(o instanceof Headers?Array.from(o.entries()):Array.isArray(o)?o:Object.entries(o)).map((([e,t])=>[e,"string"==typeof t?t:t.toString()]));if(r?.aborted)throw new Error(h);const w=await d("plugin:http|fetch",{clientConfig:{method:f.method,url:f.url,headers:_,data:u,maxRedirections:n,connectTimeout:s,proxy:i,danger:a}}),p=()=>d("plugin:http|fetch_cancel",{rid:w});if(r?.aborted)throw p(),new Error(h);r?.addEventListener("abort",(()=>{p()}));const{status:y,statusText:m,url:b,headers:g,rid:T}=await d("plugin:http|fetch_send",{rid:w}),R=[101,103,204,205,304].includes(y)?null:new ReadableStream({start:e=>{const t=new c;t.onmessage=t=>{if(r?.aborted)return void e.error(h);const n=new Uint8Array(t),s=n[n.byteLength-1],i=n.slice(0,n.byteLength-1);1!=s?e.enqueue(i):e.close()},d("plugin:http|fetch_read_body",{rid:T,streamChannel:t}).catch((t=>{e.error(t)}))}}),A=new Response(R,{status:y,statusText:m});return Object.defineProperty(A,"url",{value:b}),Object.defineProperty(A,"headers",{value:new Headers(g)}),A},e}({});Object.defineProperty(window.__TAURI__,"http",{value:__TAURI_PLUGIN_HTTP__})}
diff --git a/plugins/http/guest-js/index.ts b/plugins/http/guest-js/index.ts
index bea18e44..4b38f8bf 100644
--- a/plugins/http/guest-js/index.ts
+++ b/plugins/http/guest-js/index.ts
@@ -26,7 +26,7 @@
* @module
*/
-import { invoke } from '@tauri-apps/api/core'
+import { Channel, invoke } from '@tauri-apps/api/core'
/**
* Configuration of a proxy that a Client should pass requests to.
@@ -106,7 +106,7 @@ export interface DangerousSettings {
acceptInvalidHostnames?: boolean
}
-const ERROR_REQUEST_CANCELLED = 'Request canceled'
+const ERROR_REQUEST_CANCELLED = 'Request cancelled'
/**
* Fetch a resource from the network. It returns a `Promise` that resolves to the
@@ -229,31 +229,53 @@ export async function fetch(
rid
})
- const body = await invoke(
- 'plugin:http|fetch_read_body',
- {
- rid: responseRid
- }
- )
+ // no body for 101, 103, 204, 205 and 304
+ // see https://fetch.spec.whatwg.org/#null-body-status
+ const body = [101, 103, 204, 205, 304].includes(status)
+ ? null
+ : new ReadableStream({
+ start: (controller) => {
+ const streamChannel = new Channel()
+ streamChannel.onmessage = (res: ArrayBuffer | number[]) => {
+ // close early if aborted
+ if (signal?.aborted) {
+ controller.error(ERROR_REQUEST_CANCELLED)
+ return
+ }
- const res = new Response(
- body instanceof ArrayBuffer && body.byteLength !== 0
- ? body
- : body instanceof Array && body.length > 0
- ? new Uint8Array(body)
- : null,
- {
- status,
- statusText
- }
- )
+ const resUint8 = new Uint8Array(res)
+ const lastByte = resUint8[resUint8.byteLength - 1]
+ const actualRes = resUint8.slice(0, resUint8.byteLength - 1)
+
+ // close when the signal to close (last byte is 1) is sent from the IPC.
+ if (lastByte == 1) {
+ controller.close()
+ return
+ }
+
+ controller.enqueue(actualRes)
+ }
+
+ // run a non-blocking body stream fetch
+ invoke('plugin:http|fetch_read_body', {
+ rid: responseRid,
+ streamChannel
+ }).catch((e) => {
+ controller.error(e)
+ })
+ }
+ })
+
+ const res = new Response(body, {
+ status,
+ statusText
+ })
- // url and headers are read only properties
- // but seems like we can set them like this
+ // Set `Response` properties that are ignored by the
+ // constructor, like url and some headers
//
- // we define theme like this, because using `Response`
- // constructor, it removes url and some headers
- // like `set-cookie` headers
+ // Since url and headers are read only properties
+ // this is the only way to set them.
Object.defineProperty(res, 'url', { value: url })
Object.defineProperty(res, 'headers', {
value: new Headers(responseHeaders)
diff --git a/plugins/http/package.json b/plugins/http/package.json
index 02ea80bf..c1178af5 100644
--- a/plugins/http/package.json
+++ b/plugins/http/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-http",
- "version": "2.3.0",
+ "version": "2.4.4",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/http/permissions/autogenerated/reference.md b/plugins/http/permissions/autogenerated/reference.md
index 4126f0b9..a155fd62 100644
--- a/plugins/http/permissions/autogenerated/reference.md
+++ b/plugins/http/permissions/autogenerated/reference.md
@@ -13,6 +13,8 @@ All fetch operations are enabled.
+#### This default permission set includes the following:
+
- `allow-fetch`
- `allow-fetch-cancel`
- `allow-fetch-read-body`
diff --git a/plugins/http/permissions/schemas/schema.json b/plugins/http/permissions/schemas/schema.json
index 794ee204..ea774399 100644
--- a/plugins/http/permissions/schemas/schema.json
+++ b/plugins/http/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,47 +297,56 @@
{
"description": "Enables the fetch command without any pre-configured scope.",
"type": "string",
- "const": "allow-fetch"
+ "const": "allow-fetch",
+ "markdownDescription": "Enables the fetch command without any pre-configured scope."
},
{
"description": "Denies the fetch command without any pre-configured scope.",
"type": "string",
- "const": "deny-fetch"
+ "const": "deny-fetch",
+ "markdownDescription": "Denies the fetch command without any pre-configured scope."
},
{
"description": "Enables the fetch_cancel command without any pre-configured scope.",
"type": "string",
- "const": "allow-fetch-cancel"
+ "const": "allow-fetch-cancel",
+ "markdownDescription": "Enables the fetch_cancel command without any pre-configured scope."
},
{
"description": "Denies the fetch_cancel command without any pre-configured scope.",
"type": "string",
- "const": "deny-fetch-cancel"
+ "const": "deny-fetch-cancel",
+ "markdownDescription": "Denies the fetch_cancel command without any pre-configured scope."
},
{
"description": "Enables the fetch_read_body command without any pre-configured scope.",
"type": "string",
- "const": "allow-fetch-read-body"
+ "const": "allow-fetch-read-body",
+ "markdownDescription": "Enables the fetch_read_body command without any pre-configured scope."
},
{
"description": "Denies the fetch_read_body command without any pre-configured scope.",
"type": "string",
- "const": "deny-fetch-read-body"
+ "const": "deny-fetch-read-body",
+ "markdownDescription": "Denies the fetch_read_body command without any pre-configured scope."
},
{
"description": "Enables the fetch_send command without any pre-configured scope.",
"type": "string",
- "const": "allow-fetch-send"
+ "const": "allow-fetch-send",
+ "markdownDescription": "Enables the fetch_send command without any pre-configured scope."
},
{
"description": "Denies the fetch_send command without any pre-configured scope.",
"type": "string",
- "const": "deny-fetch-send"
+ "const": "deny-fetch-send",
+ "markdownDescription": "Denies the fetch_send command without any pre-configured scope."
},
{
- "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n",
+ "description": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures what kind of\nfetch operations are available from the http plugin.\n\nThis enables all fetch operations but does not\nallow explicitly any origins to be fetched. This needs to\nbe manually configured before usage.\n\n#### Granted Permissions\n\nAll fetch operations are enabled.\n\n\n#### This default permission set includes:\n\n- `allow-fetch`\n- `allow-fetch-cancel`\n- `allow-fetch-read-body`\n- `allow-fetch-send`"
}
]
}
diff --git a/plugins/http/src/commands.rs b/plugins/http/src/commands.rs
index 3dc0297e..bb47444e 100644
--- a/plugins/http/src/commands.rs
+++ b/plugins/http/src/commands.rs
@@ -10,7 +10,7 @@ use serde::{Deserialize, Serialize};
use tauri::{
async_runtime::Mutex,
command,
- ipc::{CommandScope, GlobalScope},
+ ipc::{Channel, CommandScope, GlobalScope},
Manager, ResourceId, ResourceTable, Runtime, State, Webview,
};
use tokio::sync::oneshot::{channel, Receiver, Sender};
@@ -315,6 +315,7 @@ pub async fn fetch(
tracing::trace!("{:?}", request);
let fut = async move { request.send().await.map_err(Into::into) };
+
let mut resources_table = webview.resources_table();
let rid = resources_table.add_request(Box::pin(fut));
@@ -358,7 +359,7 @@ pub fn fetch_cancel(webview: Webview, rid: ResourceId) -> crate::
Ok(())
}
-#[tauri::command]
+#[command]
pub async fn fetch_send(
webview: Webview,
rid: ResourceId,
@@ -410,17 +411,31 @@ pub async fn fetch_send(
})
}
-#[tauri::command]
-pub(crate) async fn fetch_read_body(
+#[command]
+pub async fn fetch_read_body(
webview: Webview,
rid: ResourceId,
-) -> crate::Result {
+ stream_channel: Channel,
+) -> crate::Result<()> {
let res = {
let mut resources_table = webview.resources_table();
resources_table.take::(rid)?
};
- let res = Arc::into_inner(res).unwrap().0;
- Ok(tauri::ipc::Response::new(res.bytes().await?.to_vec()))
+
+ let mut res = Arc::into_inner(res).unwrap().0;
+
+ // send response through IPC channel
+ while let Some(chunk) = res.chunk().await? {
+ let mut chunk = chunk.to_vec();
+ // append 0 to indicate we are not done yet
+ chunk.push(0);
+ stream_channel.send(tauri::ipc::InvokeResponseBody::Raw(chunk))?;
+ }
+
+ // send 1 to indicate we are done
+ stream_channel.send(tauri::ipc::InvokeResponseBody::Raw(vec![1]))?;
+
+ Ok(())
}
// forbidden headers per fetch spec https://fetch.spec.whatwg.org/#terminology-headers
diff --git a/plugins/http/src/lib.rs b/plugins/http/src/lib.rs
index d775760c..5acc2b47 100644
--- a/plugins/http/src/lib.rs
+++ b/plugins/http/src/lib.rs
@@ -14,30 +14,77 @@ pub use error::{Error, Result};
mod commands;
mod error;
+#[cfg(feature = "cookies")]
+mod reqwest_cookie_store;
mod scope;
+#[cfg(feature = "cookies")]
+const COOKIES_FILENAME: &str = ".cookies";
+
pub(crate) struct Http {
#[cfg(feature = "cookies")]
- cookies_jar: std::sync::Arc,
+ cookies_jar: std::sync::Arc,
}
pub fn init() -> TauriPlugin {
Builder::::new("http")
.setup(|app, _| {
+ #[cfg(feature = "cookies")]
+ let cookies_jar = {
+ use crate::reqwest_cookie_store::*;
+ use std::fs::File;
+ use std::io::BufReader;
+
+ let cache_dir = app.path().app_cache_dir()?;
+ std::fs::create_dir_all(&cache_dir)?;
+
+ let path = cache_dir.join(COOKIES_FILENAME);
+ let file = File::options()
+ .create(true)
+ .append(true)
+ .read(true)
+ .open(&path)?;
+
+ let reader = BufReader::new(file);
+ CookieStoreMutex::load(path.clone(), reader).unwrap_or_else(|_e| {
+ #[cfg(feature = "tracing")]
+ tracing::warn!(
+ "failed to load cookie store: {_e}, falling back to empty store"
+ );
+ CookieStoreMutex::new(path, Default::default())
+ })
+ };
+
let state = Http {
#[cfg(feature = "cookies")]
- cookies_jar: std::sync::Arc::new(reqwest::cookie::Jar::default()),
+ cookies_jar: std::sync::Arc::new(cookies_jar),
};
app.manage(state);
Ok(())
})
+ .on_event(|app, event| {
+ #[cfg(feature = "cookies")]
+ if let tauri::RunEvent::Exit = event {
+ let state = app.state::();
+
+ match state.cookies_jar.request_save() {
+ Ok(rx) => {
+ let _ = rx.recv();
+ }
+ Err(_e) => {
+ #[cfg(feature = "tracing")]
+ tracing::error!("failed to save cookie jar: {_e}");
+ }
+ }
+ }
+ })
.invoke_handler(tauri::generate_handler![
commands::fetch,
commands::fetch_cancel,
commands::fetch_send,
- commands::fetch_read_body,
+ commands::fetch_read_body
])
.build()
}
diff --git a/plugins/http/src/reqwest_cookie_store.rs b/plugins/http/src/reqwest_cookie_store.rs
new file mode 100644
index 00000000..6a7c0186
--- /dev/null
+++ b/plugins/http/src/reqwest_cookie_store.rs
@@ -0,0 +1,133 @@
+// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-License-Identifier: MIT
+
+// taken from https://github.com/pfernie/reqwest_cookie_store/blob/2ec4afabcd55e24d3afe3f0626ee6dc97bed938d/src/lib.rs
+
+use std::{
+ path::PathBuf,
+ sync::{mpsc::Receiver, Mutex},
+};
+
+use cookie_store::{CookieStore, RawCookie, RawCookieParseError};
+use reqwest::header::HeaderValue;
+
+fn set_cookies(
+ cookie_store: &mut CookieStore,
+ cookie_headers: &mut dyn Iterator- ,
+ url: &url::Url,
+) {
+ let cookies = cookie_headers.filter_map(|val| {
+ std::str::from_utf8(val.as_bytes())
+ .map_err(RawCookieParseError::from)
+ .and_then(RawCookie::parse)
+ .map(|c| c.into_owned())
+ .ok()
+ });
+ cookie_store.store_response_cookies(cookies, url);
+}
+
+fn cookies(cookie_store: &CookieStore, url: &url::Url) -> Option
{
+ let s = cookie_store
+ .get_request_values(url)
+ .map(|(name, value)| format!("{}={}", name, value))
+ .collect::>()
+ .join("; ");
+
+ if s.is_empty() {
+ return None;
+ }
+
+ HeaderValue::from_maybe_shared(bytes::Bytes::from(s)).ok()
+}
+
+/// A [`cookie_store::CookieStore`] wrapped internally by a [`std::sync::Mutex`], suitable for use in
+/// async/concurrent contexts.
+#[derive(Debug)]
+pub struct CookieStoreMutex {
+ pub path: PathBuf,
+ store: Mutex,
+ save_task: Mutex>,
+}
+
+impl CookieStoreMutex {
+ /// Create a new [`CookieStoreMutex`] from an existing [`cookie_store::CookieStore`].
+ pub fn new(path: PathBuf, cookie_store: CookieStore) -> CookieStoreMutex {
+ CookieStoreMutex {
+ path,
+ store: Mutex::new(cookie_store),
+ save_task: Default::default(),
+ }
+ }
+
+ pub fn load(
+ path: PathBuf,
+ reader: R,
+ ) -> cookie_store::Result {
+ cookie_store::serde::load(reader, |c| serde_json::from_str(c))
+ .map(|store| CookieStoreMutex::new(path, store))
+ }
+
+ fn cookies_to_str(&self) -> Result {
+ let mut cookies = Vec::new();
+ for cookie in self
+ .store
+ .lock()
+ .expect("poisoned cookie jar mutex")
+ .iter_unexpired()
+ {
+ if cookie.is_persistent() {
+ cookies.push(cookie.clone());
+ }
+ }
+ serde_json::to_string(&cookies)
+ }
+
+ pub fn request_save(&self) -> cookie_store::Result> {
+ let cookie_str = self.cookies_to_str()?;
+ let path = self.path.clone();
+ let (tx, rx) = std::sync::mpsc::channel();
+ let task = tauri::async_runtime::spawn(async move {
+ match tokio::fs::write(&path, &cookie_str).await {
+ Ok(()) => {
+ let _ = tx.send(());
+ }
+ Err(_e) => {
+ #[cfg(feature = "tracing")]
+ tracing::error!("failed to save cookie jar: {_e}");
+ }
+ }
+ });
+ self.save_task
+ .lock()
+ .unwrap()
+ .replace(CancellableTask(task));
+ Ok(rx)
+ }
+}
+
+impl reqwest::cookie::CookieStore for CookieStoreMutex {
+ fn set_cookies(&self, cookie_headers: &mut dyn Iterator- , url: &url::Url) {
+ set_cookies(&mut self.store.lock().unwrap(), cookie_headers, url);
+
+ // try to persist cookies immediately asynchronously
+ if let Err(_e) = self.request_save() {
+ #[cfg(feature = "tracing")]
+ tracing::error!("failed to save cookie jar: {_e}");
+ }
+ }
+
+ fn cookies(&self, url: &url::Url) -> Option
{
+ let store = self.store.lock().unwrap();
+ cookies(&store, url)
+ }
+}
+
+#[derive(Debug)]
+struct CancellableTask(tauri::async_runtime::JoinHandle<()>);
+
+impl Drop for CancellableTask {
+ fn drop(&mut self) {
+ self.0.abort();
+ }
+}
diff --git a/plugins/log/CHANGELOG.md b/plugins/log/CHANGELOG.md
index 54fda54d..210df69b 100644
--- a/plugins/log/CHANGELOG.md
+++ b/plugins/log/CHANGELOG.md
@@ -1,5 +1,29 @@
# Changelog
+## \[2.4.0]
+
+- [`c9b21f6f`](https://github.com/tauri-apps/plugins-workspace/commit/c9b21f6f4345806eff5f495885f20dea0082b7d7) ([#2625](https://github.com/tauri-apps/plugins-workspace/pull/2625) by [@lucasfernog](https://github.com/tauri-apps/plugins-workspace/../../lucasfernog)) Export the `LogLevel` type.
+- [`9629c2f4`](https://github.com/tauri-apps/plugins-workspace/commit/9629c2f4f90a56b5c2d265d1d13d3af40fc0c525) ([#2600](https://github.com/tauri-apps/plugins-workspace/pull/2600) by [@exoego](https://github.com/tauri-apps/plugins-workspace/../../exoego)) Adds a new varient `TargetKind::Dispatch` that allows you to construct arbitrary log targets
+- [`686a839c`](https://github.com/tauri-apps/plugins-workspace/commit/686a839c96fae1b0334f2df9dc76ca5cdbe00dbe) ([#2626](https://github.com/tauri-apps/plugins-workspace/pull/2626) by [@lucasfernog](https://github.com/tauri-apps/plugins-workspace/../../lucasfernog)) Fix iOS app stuck when using the iOS Simulator and the log plugin due to a deadlock when calling os_log too early.
+
+### feat
+
+- [`60fc35d3`](https://github.com/tauri-apps/plugins-workspace/commit/60fc35d35cccaf1654eceb4446ecf0f89dc15502) ([#2576](https://github.com/tauri-apps/plugins-workspace/pull/2576) by [@3lpsy](https://github.com/tauri-apps/plugins-workspace/../../3lpsy)) Add a `tracing` feature to the `log` plugin that emits log messages to the `tracing` system.
+
+## \[2.3.1]
+
+- [`1bb1ced5`](https://github.com/tauri-apps/plugins-workspace/commit/1bb1ced53820127204aa7adf57510c1cbce55e12) ([#2524](https://github.com/tauri-apps/plugins-workspace/pull/2524) by [@elwerene](https://github.com/tauri-apps/plugins-workspace/../../elwerene)) enable TargetKind::LogDir on mobile
+
+## \[2.3.0]
+
+### feat
+
+- [`02481501`](https://github.com/tauri-apps/plugins-workspace/commit/024815018fbc63a37afc716796a454925aa7d25e) ([#2377](https://github.com/tauri-apps/plugins-workspace/pull/2377) by [@3lpsy](https://github.com/tauri-apps/plugins-workspace/../../3lpsy)) Add a `is_skip_logger` flag to the Log Plugin `Builder` struct, a `skip_logger()` method to the Builder, and logic to avoid acquiring (creating) a logger and attaching it to the global logger. Since acquire_logger is pub, a `LoggerNotInitialized` is added and returned if it's called when the `is_skip_looger` flag is set. Overall, this feature permits a user to avoid calling `attach_logger` which can only be called once in a program's lifetime and allows the user to control the logger returned from `logger()`. Additionally, it also will allow users to generate multiple Tauri Mock apps in test suites that run and parallel and have the `log` plugin attached (assuming they use `skip_logger()`).
+
+## \[2.2.3]
+
+- [`1a984659`](https://github.com/tauri-apps/plugins-workspace/commit/1a9846599b6a71faf330845847a30f6bf9735898) ([#2469](https://github.com/tauri-apps/plugins-workspace/pull/2469) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Update `objc2` crate to 0.6. No user facing changes.
+
## \[2.2.2]
- [`6b4c3917`](https://github.com/tauri-apps/plugins-workspace/commit/6b4c3917389f4bc489d03b48a837557ac0584175) ([#2401](https://github.com/tauri-apps/plugins-workspace/pull/2401) by [@Seishiin](https://github.com/tauri-apps/plugins-workspace/../../Seishiin)) Fix timezone_strategy overwriting previously set LogLevels.
diff --git a/plugins/log/Cargo.toml b/plugins/log/Cargo.toml
index e1cec499..660cae32 100644
--- a/plugins/log/Cargo.toml
+++ b/plugins/log/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-log"
-version = "2.2.2"
+version = "2.4.0"
description = "Configurable logging for your Tauri app."
authors = { workspace = true }
license = { workspace = true }
@@ -31,19 +31,22 @@ thiserror = { workspace = true }
serde_repr = "0.1"
byte-unit = "5"
log = { workspace = true, features = ["kv_unstable"] }
-time = { version = "0.3", features = ["formatting", "local-offset"] }
+time = { version = "0.3", features = ["formatting", "local-offset", "macros"] }
fern = "0.7"
+tracing = { workspace = true, optional = true }
+
[target."cfg(target_os = \"android\")".dependencies]
-android_logger = "0.14"
+android_logger = "0.15"
[target."cfg(target_os = \"ios\")".dependencies]
swift-rs = "1"
-objc2 = "0.5"
-objc2-foundation = { version = "0.2", default-features = false, features = [
+objc2 = "0.6"
+objc2-foundation = { version = "0.3", default-features = false, features = [
"std",
"NSString",
] }
[features]
colored = ["fern/colored"]
+tracing = ["dep:tracing"]
diff --git a/plugins/log/api-iife.js b/plugins/log/api-iife.js
index 66211751..c94f2aab 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=function(e){if(e){if(!e.startsWith("Error")){const n=e.split("\n").map((e=>e.split("@"))).filter((([e,n])=>e.length>0&&"[native code]"!==n));return n[2]?.filter((e=>e.length>0)).join("@")}{const n=e.split("\n"),r=n[3]?.trim();if(!r)return;const a=/at\s+(?.*?)\s+\((?.*?):(?\d+):(?\d+)\)/,t=r.match(a);if(t){const{functionName:e,fileName:n,lineNumber:r,columnNumber:a}=t.groups;return`${e}@${n}:${r}:${a}`}{const e=/at\s+(?.*?):(?\d+):(?\d+)/,n=r.match(e);if(n){const{fileName:e,lineNumber:r,columnNumber:a}=n.groups;return`@${e}:${r}:${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__})}
+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,o;async function t(e,a,o){const t={kind:"Any"};return r("plugin:event|listen",{event:e,target:t,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 o=function(e){if(e){if(!e.startsWith("Error")){const n=e.split("\n").map((e=>e.split("@"))).filter((([e,n])=>e.length>0&&"[native code]"!==n));return n[2]?.filter((e=>e.length>0)).join("@")}{const n=e.split("\n"),r=n[3]?.trim();if(!r)return;const a=/at\s+(?.*?)\s+\((?.*?):(?\d+):(?\d+)\)/,o=r.match(a);if(o){const{functionName:e,fileName:n,lineNumber:r,columnNumber:a}=o.groups;return`${e}@${n}:${r}:${a}`}{const e=/at\s+(?.*?):(?\d+):(?\d+)/,n=r.match(e);if(n){const{fileName:e,lineNumber:r,columnNumber:a}=n.groups;return`@${e}:${r}:${a}`}}}}}((new Error).stack),{file:t,line:i,keyValues:l}=a??{};await r("plugin:log|log",{level:e,message:n,location:o,file:t,line:i,keyValues:l})}async function l(e){return await t("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={})),e.LogLevel=void 0,(o=e.LogLevel||(e.LogLevel={}))[o.Trace=1]="Trace",o[o.Debug=2]="Debug",o[o.Info=3]="Info",o[o.Warn=4]="Warn",o[o.Error=5]="Error",e.attachConsole=async function(){return await l((({level:n,message:r})=>{switch(n){case e.LogLevel.Trace:console.log(r);break;case e.LogLevel.Debug:console.debug(r);break;case e.LogLevel.Info:console.info(r);break;case e.LogLevel.Warn:console.warn(r);break;case e.LogLevel.Error:console.error(r);break;default:throw new Error(`unknown log level ${n}`)}}))},e.attachLogger=l,e.debug=async function(n,r){await i(e.LogLevel.Debug,n,r)},e.error=async function(n,r){await i(e.LogLevel.Error,n,r)},e.info=async function(n,r){await i(e.LogLevel.Info,n,r)},e.trace=async function(n,r){await i(e.LogLevel.Trace,n,r)},e.warn=async function(n,r){await i(e.LogLevel.Warn,n,r)},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 5b097993..93022a97 100644
--- a/plugins/log/guest-js/index.ts
+++ b/plugins/log/guest-js/index.ts
@@ -11,7 +11,7 @@ export interface LogOptions {
keyValues?: Record
}
-enum LogLevel {
+export enum LogLevel {
/**
* The "trace" level.
*
diff --git a/plugins/log/ios/Sources/LogPlugin.swift b/plugins/log/ios/Sources/LogPlugin.swift
index cefdc858..e21b4bab 100644
--- a/plugins/log/ios/Sources/LogPlugin.swift
+++ b/plugins/log/ios/Sources/LogPlugin.swift
@@ -2,16 +2,41 @@
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
-import UIKit
-import Tauri
import SwiftRs
+import Tauri
+import UIKit
+
+#if targetEnvironment(simulator)
+ var logReady = false
+#else
+ var logReady = true
+#endif
@_cdecl("tauri_log")
func log(level: Int, message: NSString) {
- switch level {
- case 1: Logger.debug(message as String)
- case 2: Logger.info(message as String)
- case 3: Logger.error(message as String)
- default: break
- }
+ if logReady {
+ os_log(level, message)
+ } else {
+ dispatch_log(level, message)
+ }
+}
+
+func dispatch_log(_ level: Int, _ message: NSString) {
+ // delay logging when the logger isn't immediately available
+ // in some cases when using the simulator the app would hang when calling os_log too soon
+ // better be safe here and wait a few seconds than actually freeze the app in dev mode
+ // in production this isn't a problem
+ DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
+ os_log(level, message)
+ logReady = true
+ }
+}
+
+func os_log(_ level: Int, _ message: NSString) {
+ switch level {
+ case 1: Logger.debug(message as String)
+ case 2: Logger.info(message as String)
+ case 3: Logger.error(message as String)
+ default: break
+ }
}
diff --git a/plugins/log/package.json b/plugins/log/package.json
index a71b8ea9..9130ca88 100644
--- a/plugins/log/package.json
+++ b/plugins/log/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-log",
- "version": "2.2.2",
+ "version": "2.4.0",
"description": "Configurable logging for your Tauri app.",
"license": "MIT OR Apache-2.0",
"authors": [
diff --git a/plugins/log/permissions/autogenerated/reference.md b/plugins/log/permissions/autogenerated/reference.md
index d59aefa0..57d6c9f3 100644
--- a/plugins/log/permissions/autogenerated/reference.md
+++ b/plugins/log/permissions/autogenerated/reference.md
@@ -2,6 +2,8 @@
Allows the log command
+#### This default permission set includes the following:
+
- `allow-log`
## Permission Table
diff --git a/plugins/log/permissions/schemas/schema.json b/plugins/log/permissions/schemas/schema.json
index 78d88826..cfee7e75 100644
--- a/plugins/log/permissions/schemas/schema.json
+++ b/plugins/log/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,17 +297,20 @@
{
"description": "Enables the log command without any pre-configured scope.",
"type": "string",
- "const": "allow-log"
+ "const": "allow-log",
+ "markdownDescription": "Enables the log command without any pre-configured scope."
},
{
"description": "Denies the log command without any pre-configured scope.",
"type": "string",
- "const": "deny-log"
+ "const": "deny-log",
+ "markdownDescription": "Denies the log command without any pre-configured scope."
},
{
- "description": "Allows the log command",
+ "description": "Allows the log command\n#### This default permission set includes:\n\n- `allow-log`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "Allows the log command\n#### This default permission set includes:\n\n- `allow-log`"
}
]
}
diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs
index 9f9a4adf..e16ddc57 100644
--- a/plugins/log/src/lib.rs
+++ b/plugins/log/src/lib.rs
@@ -27,9 +27,9 @@ use tauri::{
Manager, Runtime,
};
use tauri::{AppHandle, Emitter};
+use time::{macros::format_description, OffsetDateTime};
pub use fern;
-use time::OffsetDateTime;
pub const WEBVIEW_TARGET: &str = "webview";
@@ -58,6 +58,8 @@ pub enum Error {
TimeFormat(#[from] time::error::Format),
#[error(transparent)]
InvalidFormatDescription(#[from] time::error::InvalidFormatDescription),
+ #[error("Internal logger disabled and cannot be acquired or attached")]
+ LoggerNotInitialized,
}
/// An enum representing the available verbosity levels of the logger.
@@ -157,16 +159,21 @@ pub enum TargetKind {
///
/// ### Platform-specific
///
- /// |Platform | Value | Example |
- /// | ------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
- /// | Linux | `$XDG_DATA_HOME/{bundleIdentifier}/logs` or `$HOME/.local/share/{bundleIdentifier}/logs` | `/home/alice/.local/share/com.tauri.dev/logs` |
- /// | macOS | `{homeDir}/Library/Logs/{bundleIdentifier}` | `/Users/Alice/Library/Logs/com.tauri.dev` |
- /// | Windows | `{FOLDERID_LocalAppData}/{bundleIdentifier}/logs` | `C:\Users\Alice\AppData\Local\com.tauri.dev\logs` |
+ /// |Platform | Value | Example |
+ /// | --------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
+ /// | Linux | `$XDG_DATA_HOME/{bundleIdentifier}/logs` or `$HOME/.local/share/{bundleIdentifier}/logs` | `/home/alice/.local/share/com.tauri.dev/logs` |
+ /// | macOS/iOS | `{homeDir}/Library/Logs/{bundleIdentifier}` | `/Users/Alice/Library/Logs/com.tauri.dev` |
+ /// | Windows | `{FOLDERID_LocalAppData}/{bundleIdentifier}/logs` | `C:\Users\Alice\AppData\Local\com.tauri.dev\logs` |
+ /// | Android | `{ConfigDir}/logs` | `/data/data/com.tauri.dev/files/logs` |
LogDir { file_name: Option },
/// Forward logs to the webview (via the `log://log` event).
///
/// This requires the webview to subscribe to log events, via this plugins `attachConsole` function.
Webview,
+ /// Send logs to a [`fern::Dispatch`]
+ ///
+ /// You can use this to construct arbitrary log targets.
+ Dispatch(fern::Dispatch),
}
/// A log target.
@@ -194,6 +201,38 @@ impl Target {
}
}
+// Target becomes default and location is added as a parameter
+#[cfg(feature = "tracing")]
+fn emit_trace(
+ level: log::Level,
+ message: &String,
+ location: Option<&str>,
+ file: Option<&str>,
+ line: Option,
+ kv: &HashMap<&str, &str>,
+) {
+ macro_rules! emit_event {
+ ($level:expr) => {
+ tracing::event!(
+ target: WEBVIEW_TARGET,
+ $level,
+ message = %message,
+ location = location,
+ file,
+ line,
+ ?kv
+ )
+ };
+ }
+ match level {
+ log::Level::Error => emit_event!(tracing::Level::ERROR),
+ log::Level::Warn => emit_event!(tracing::Level::WARN),
+ log::Level::Info => emit_event!(tracing::Level::INFO),
+ log::Level::Debug => emit_event!(tracing::Level::DEBUG),
+ log::Level::Trace => emit_event!(tracing::Level::TRACE),
+ }
+}
+
#[tauri::command]
fn log(
level: LogLevel,
@@ -220,6 +259,8 @@ fn log(
kv.insert(k.as_str(), v.as_str());
}
builder.key_values(&kv);
+ #[cfg(feature = "tracing")]
+ emit_trace(level, &message, location, file, line, &kv);
logger().log(&builder.args(format_args!("{message}")).build());
}
@@ -230,14 +271,13 @@ pub struct Builder {
timezone_strategy: TimezoneStrategy,
max_file_size: u128,
targets: Vec,
+ is_skip_logger: bool,
}
impl Default for Builder {
fn default() -> Self {
#[cfg(desktop)]
- let format =
- time::format_description::parse("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]")
- .unwrap();
+ let format = format_description!("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]");
let dispatch = fern::Dispatch::new().format(move |out, message, record| {
out.finish(
#[cfg(mobile)]
@@ -258,6 +298,7 @@ impl Default for Builder {
timezone_strategy: DEFAULT_TIMEZONE_STRATEGY,
max_file_size: DEFAULT_MAX_FILE_SIZE,
targets: DEFAULT_LOG_TARGETS.into(),
+ is_skip_logger: false,
}
}
}
@@ -275,9 +316,7 @@ impl Builder {
pub fn timezone_strategy(mut self, timezone_strategy: TimezoneStrategy) -> Self {
self.timezone_strategy = timezone_strategy.clone();
- let format =
- time::format_description::parse("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]")
- .unwrap();
+ let format = format_description!("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]");
self.dispatch = self.dispatch.format(move |out, message, record| {
out.finish(format_args!(
"{}[{}][{}] {}",
@@ -339,12 +378,27 @@ impl Builder {
self
}
- /// Adds a collection of targets to the logger.
+ /// Skip the creation and global registration of a logger
+ ///
+ /// If you wish to use your own global logger, you must call `skip_logger` so that the plugin does not attempt to set a second global logger. In this configuration, no logger will be created and the plugin's `log` command will rely on the result of `log::logger()`. You will be responsible for configuring the logger yourself and any included targets will be ignored. If ever initializing the plugin multiple times, such as if registering the plugin while testing, call this method to avoid panicking when registering multiple loggers. For interacting with `tracing`, you can leverage the `tracing-log` logger to forward logs to `tracing` or enable the `tracing` feature for this plugin to emit events directly to the tracing system. Both scenarios require calling this method.
+ /// ```rust
+ /// static LOGGER: SimpleLogger = SimpleLogger;
+ ///
+ /// log::set_logger(&SimpleLogger)?;
+ /// log::set_max_level(LevelFilter::Info);
+ /// tauri_plugin_log::Builder::new()
+ /// .skip_logger();
+ /// ```
+ pub fn skip_logger(mut self) -> Self {
+ self.is_skip_logger = true;
+ self
+ }
+
+ /// Replaces the targets of the logger.
///
/// ```rust
/// use tauri_plugin_log::{Target, TargetKind, WEBVIEW_TARGET};
/// tauri_plugin_log::Builder::new()
- /// .clear_targets()
/// .targets([
/// Target::new(TargetKind::Webview),
/// Target::new(TargetKind::LogDir { file_name: Some("webview".into()) }).filter(|metadata| metadata.target().starts_with(WEBVIEW_TARGET)),
@@ -358,9 +412,7 @@ impl Builder {
#[cfg(feature = "colored")]
pub fn with_colors(self, colors: fern::colors::ColoredLevelConfig) -> Self {
- let format =
- time::format_description::parse("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]")
- .unwrap();
+ let format = format_description!("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]");
let timezone_strategy = self.timezone_strategy.clone();
self.format(move |out, message, record| {
@@ -431,9 +483,6 @@ impl Builder {
)?)?
.into()
}
- #[cfg(mobile)]
- TargetKind::LogDir { .. } => continue,
- #[cfg(desktop)]
TargetKind::LogDir { file_name } => {
let path = app_handle.path().app_log_dir()?;
if !path.exists() {
@@ -463,6 +512,7 @@ impl Builder {
});
})
}
+ TargetKind::Dispatch(dispatch) => dispatch.into(),
};
target_dispatch = target_dispatch.chain(logger);
@@ -481,6 +531,9 @@ impl Builder {
self,
app_handle: &AppHandle,
) -> Result<(TauriPlugin, log::LevelFilter, Box), Error> {
+ if self.is_skip_logger {
+ return Err(Error::LoggerNotInitialized);
+ }
let plugin = Self::plugin_builder();
let (max_level, log) = Self::acquire_logger(
app_handle,
@@ -497,17 +550,17 @@ impl Builder {
pub fn build(self) -> TauriPlugin {
Self::plugin_builder()
.setup(move |app_handle, _api| {
- let (max_level, log) = Self::acquire_logger(
- app_handle,
- self.dispatch,
- self.rotation_strategy,
- self.timezone_strategy,
- self.max_file_size,
- self.targets,
- )?;
-
- attach_logger(max_level, log)?;
-
+ if !self.is_skip_logger {
+ let (max_level, log) = Self::acquire_logger(
+ app_handle,
+ self.dispatch,
+ self.rotation_strategy,
+ self.timezone_strategy,
+ self.max_file_size,
+ self.targets,
+ )?;
+ attach_logger(max_level, log)?;
+ }
Ok(())
})
.build()
@@ -541,11 +594,9 @@ fn get_log_file_path(
let to = dir.as_ref().join(format!(
"{}_{}.log",
file_name,
- timezone_strategy
- .get_now()
- .format(&time::format_description::parse(
- "[year]-[month]-[day]_[hour]-[minute]-[second]"
- )?)?,
+ timezone_strategy.get_now().format(&format_description!(
+ "[year]-[month]-[day]_[hour]-[minute]-[second]"
+ ))?,
));
if to.is_file() {
// designated rotated log file name already exists
diff --git a/plugins/nfc/permissions/autogenerated/reference.md b/plugins/nfc/permissions/autogenerated/reference.md
index bf425832..6148cf2c 100644
--- a/plugins/nfc/permissions/autogenerated/reference.md
+++ b/plugins/nfc/permissions/autogenerated/reference.md
@@ -11,6 +11,8 @@ Writing to tags needs to be manually enabled.
+#### This default permission set includes the following:
+
- `allow-is-available`
- `allow-scan`
diff --git a/plugins/nfc/permissions/schemas/schema.json b/plugins/nfc/permissions/schemas/schema.json
index 5fe3743c..8a018e26 100644
--- a/plugins/nfc/permissions/schemas/schema.json
+++ b/plugins/nfc/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,37 +297,44 @@
{
"description": "Enables the is_available command without any pre-configured scope.",
"type": "string",
- "const": "allow-is-available"
+ "const": "allow-is-available",
+ "markdownDescription": "Enables the is_available command without any pre-configured scope."
},
{
"description": "Denies the is_available command without any pre-configured scope.",
"type": "string",
- "const": "deny-is-available"
+ "const": "deny-is-available",
+ "markdownDescription": "Denies the is_available command without any pre-configured scope."
},
{
"description": "Enables the scan command without any pre-configured scope.",
"type": "string",
- "const": "allow-scan"
+ "const": "allow-scan",
+ "markdownDescription": "Enables the scan command without any pre-configured scope."
},
{
"description": "Denies the scan command without any pre-configured scope.",
"type": "string",
- "const": "deny-scan"
+ "const": "deny-scan",
+ "markdownDescription": "Denies the scan command without any pre-configured scope."
},
{
"description": "Enables the write command without any pre-configured scope.",
"type": "string",
- "const": "allow-write"
+ "const": "allow-write",
+ "markdownDescription": "Enables the write command without any pre-configured scope."
},
{
"description": "Denies the write command without any pre-configured scope.",
"type": "string",
- "const": "deny-write"
+ "const": "deny-write",
+ "markdownDescription": "Denies the write command without any pre-configured scope."
},
{
- "description": "This permission set configures what kind of\noperations are available from the nfc plugin.\n\n#### Granted Permissions\n\nChecking if the NFC functionality is available\nand scanning nearby tags is allowed.\nWriting to tags needs to be manually enabled.\n\n",
+ "description": "This permission set configures what kind of\noperations are available from the nfc plugin.\n\n#### Granted Permissions\n\nChecking if the NFC functionality is available\nand scanning nearby tags is allowed.\nWriting to tags needs to be manually enabled.\n\n\n#### This default permission set includes:\n\n- `allow-is-available`\n- `allow-scan`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures what kind of\noperations are available from the nfc plugin.\n\n#### Granted Permissions\n\nChecking if the NFC functionality is available\nand scanning nearby tags is allowed.\nWriting to tags needs to be manually enabled.\n\n\n#### This default permission set includes:\n\n- `allow-is-available`\n- `allow-scan`"
}
]
}
diff --git a/plugins/notification/CHANGELOG.md b/plugins/notification/CHANGELOG.md
index 89eca864..42efb6ab 100644
--- a/plugins/notification/CHANGELOG.md
+++ b/plugins/notification/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## \[2.2.2]
+
+- [`a1b3fa27`](https://github.com/tauri-apps/plugins-workspace/commit/a1b3fa27f11022c9b6622b4fab12d93239eb05de) ([#2515](https://github.com/tauri-apps/plugins-workspace/pull/2515) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Re-exported the `Geolocation`, `Haptics`, `Notification`, and `Os` structs so that they show up on docs.rs.
+
## \[2.2.1]
- [`da5c59e2`](https://github.com/tauri-apps/plugins-workspace/commit/da5c59e2fe879d177e3cfd52fcacce85440423cb) ([#2271](https://github.com/tauri-apps/plugins-workspace/pull/2271) by [@renovate](https://github.com/tauri-apps/plugins-workspace/../../renovate)) Updated `zbus` dependency to version 5. No API changes.
diff --git a/plugins/notification/Cargo.toml b/plugins/notification/Cargo.toml
index edafe32e..bca17c09 100644
--- a/plugins/notification/Cargo.toml
+++ b/plugins/notification/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-notification"
-version = "2.2.1"
+version = "2.2.2"
description = "Send desktop and mobile notifications on your Tauri application."
edition = { workspace = true }
authors = { workspace = true }
diff --git a/plugins/notification/api-iife.js b/plugins/notification/api-iife.js
index 1e5ead85..5ece60e8 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 n(i,n,t,e){if("function"==typeof n||!n.has(i))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?e:"a"===t?e.call(i):e?e.value:n.get(i)}function t(i,n,t,e,o){if("function"==typeof n||!n.has(i))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n.set(i,t),t}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,n=!1){return window.__TAURI_INTERNALS__.transformCallback(i,n)}((({message:i,id:r})=>{if(r==n(this,o,"f"))for(n(this,e,"f").call(this,i),t(this,o,n(this,o,"f")+1);n(this,o,"f")in n(this,a,"f");){const i=n(this,a,"f")[n(this,o,"f")];n(this,e,"f").call(this,i),delete n(this,a,"f")[n(this,o,"f")],t(this,o,n(this,o,"f")+1)}else n(this,a,"f")[r]=i}))}set onmessage(i){t(this,e,i)}get onmessage(){return n(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,n,t){this.plugin=i,this.event=n,this.channelId=t}async unregister(){return u(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}}async function l(i,n,t){const e=new c;return e.onmessage=t,u(`plugin:${i}|registerListener`,{event:n,handler:e}).then((()=>new s(i,n,e.id)))}async function u(i,n={},t){return window.__TAURI_INTERNALS__.invoke(i,n,t)}var f,h,d;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,(h=i.Importance||(i.Importance={}))[h.None=0]="None",h[h.Min=1]="Min",h[h.Low=2]="Low",h[h.Default=3]="Default",h[h.High=4]="High",i.Visibility=void 0,(d=i.Visibility||(i.Visibility={}))[d.Secret=-1]="Secret",d[d.Private=0]="Private",d[d.Public=1]="Public",i.Schedule=class{static at(i,n=!1,t=!1){return{at:{date:i,repeating:n,allowWhileIdle:t},interval:void 0,every:void 0}}static interval(i,n=!1){return{at:void 0,interval:{interval:i,allowWhileIdle:n},every:void 0}}static every(i,n,t=!1){return{at:void 0,interval:void 0,every:{interval:i,count:n,allowWhileIdle:t}}}},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__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_NOTIFICATION__=function(i){"use strict";function t(i,t,n,e){if("function"==typeof t||!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,a){if("function"==typeof t||!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,a,o,r;"function"==typeof SuppressedError&&SuppressedError;const c="__TAURI_TO_IPC_KEY__";class s{constructor(i){e.set(this,void 0),a.set(this,0),o.set(this,[]),r.set(this,void 0),n(this,e,i||(()=>{})),this.id=function(i,t=!1){return window.__TAURI_INTERNALS__.transformCallback(i,t)}((i=>{const c=i.index;if("end"in i)return void(c==t(this,a,"f")?this.cleanupCallback():n(this,r,c));const s=i.message;if(c==t(this,a,"f")){for(t(this,e,"f").call(this,s),n(this,a,t(this,a,"f")+1);t(this,a,"f")in t(this,o,"f");){const i=t(this,o,"f")[t(this,a,"f")];t(this,e,"f").call(this,i),delete t(this,o,"f")[t(this,a,"f")],n(this,a,t(this,a,"f")+1)}t(this,a,"f")===t(this,r,"f")&&this.cleanupCallback()}else t(this,o,"f")[c]=s}))}cleanupCallback(){Reflect.deleteProperty(window,`_${this.id}`)}set onmessage(i){n(this,e,i)}get onmessage(){return t(this,e,"f")}[(e=new WeakMap,a=new WeakMap,o=new WeakMap,r=new WeakMap,c)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[c]()}}class l{constructor(i,t,n){this.plugin=i,this.event=t,this.channelId=n}async unregister(){return f(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}}async function u(i,t,n){const e=new s(n);return f(`plugin:${i}|registerListener`,{event:t,handler:e}).then((()=>new l(i,t,e.id)))}async function f(i,t={},n){return window.__TAURI_INTERNALS__.invoke(i,t,n)}var h,d,w;i.ScheduleEvery=void 0,(h=i.ScheduleEvery||(i.ScheduleEvery={})).Year="year",h.Month="month",h.TwoWeeks="twoWeeks",h.Week="week",h.Day="day",h.Hour="hour",h.Minute="minute",h.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 f("plugin:notification|get_active")},i.cancel=async function(i){await f("plugin:notification|cancel",{notifications:i})},i.cancelAll=async function(){await f("plugin:notification|cancel")},i.channels=async function(){return await f("plugin:notification|listChannels")},i.createChannel=async function(i){await f("plugin:notification|create_channel",{...i})},i.isPermissionGranted=async function(){return"default"!==window.Notification.permission?await Promise.resolve("granted"===window.Notification.permission):await f("plugin:notification|is_permission_granted")},i.onAction=async function(i){return await u("notification","actionPerformed",i)},i.onNotificationReceived=async function(i){return await u("notification","notification",i)},i.pending=async function(){return await f("plugin:notification|get_pending")},i.registerActionTypes=async function(i){await f("plugin:notification|register_action_types",{types:i})},i.removeActive=async function(i){await f("plugin:notification|remove_active",{notifications:i})},i.removeAllActive=async function(){await f("plugin:notification|remove_active")},i.removeChannel=async function(i){await f("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/notification/package.json b/plugins/notification/package.json
index 931af392..07c04d5c 100644
--- a/plugins/notification/package.json
+++ b/plugins/notification/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-notification",
- "version": "2.2.1",
+ "version": "2.2.2",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/notification/permissions/autogenerated/reference.md b/plugins/notification/permissions/autogenerated/reference.md
index b6130d60..7186a421 100644
--- a/plugins/notification/permissions/autogenerated/reference.md
+++ b/plugins/notification/permissions/autogenerated/reference.md
@@ -9,6 +9,8 @@ It allows all notification related features.
+#### This default permission set includes the following:
+
- `allow-is-permission-granted`
- `allow-request-permission`
- `allow-notify`
diff --git a/plugins/notification/permissions/schemas/schema.json b/plugins/notification/permissions/schemas/schema.json
index 433f367f..26703a8a 100644
--- a/plugins/notification/permissions/schemas/schema.json
+++ b/plugins/notification/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,167 +297,200 @@
{
"description": "Enables the batch command without any pre-configured scope.",
"type": "string",
- "const": "allow-batch"
+ "const": "allow-batch",
+ "markdownDescription": "Enables the batch command without any pre-configured scope."
},
{
"description": "Denies the batch command without any pre-configured scope.",
"type": "string",
- "const": "deny-batch"
+ "const": "deny-batch",
+ "markdownDescription": "Denies the batch command without any pre-configured scope."
},
{
"description": "Enables the cancel command without any pre-configured scope.",
"type": "string",
- "const": "allow-cancel"
+ "const": "allow-cancel",
+ "markdownDescription": "Enables the cancel command without any pre-configured scope."
},
{
"description": "Denies the cancel command without any pre-configured scope.",
"type": "string",
- "const": "deny-cancel"
+ "const": "deny-cancel",
+ "markdownDescription": "Denies the cancel command without any pre-configured scope."
},
{
"description": "Enables the check_permissions command without any pre-configured scope.",
"type": "string",
- "const": "allow-check-permissions"
+ "const": "allow-check-permissions",
+ "markdownDescription": "Enables the check_permissions command without any pre-configured scope."
},
{
"description": "Denies the check_permissions command without any pre-configured scope.",
"type": "string",
- "const": "deny-check-permissions"
+ "const": "deny-check-permissions",
+ "markdownDescription": "Denies the check_permissions command without any pre-configured scope."
},
{
"description": "Enables the create_channel command without any pre-configured scope.",
"type": "string",
- "const": "allow-create-channel"
+ "const": "allow-create-channel",
+ "markdownDescription": "Enables the create_channel command without any pre-configured scope."
},
{
"description": "Denies the create_channel command without any pre-configured scope.",
"type": "string",
- "const": "deny-create-channel"
+ "const": "deny-create-channel",
+ "markdownDescription": "Denies the create_channel command without any pre-configured scope."
},
{
"description": "Enables the delete_channel command without any pre-configured scope.",
"type": "string",
- "const": "allow-delete-channel"
+ "const": "allow-delete-channel",
+ "markdownDescription": "Enables the delete_channel command without any pre-configured scope."
},
{
"description": "Denies the delete_channel command without any pre-configured scope.",
"type": "string",
- "const": "deny-delete-channel"
+ "const": "deny-delete-channel",
+ "markdownDescription": "Denies the delete_channel command without any pre-configured scope."
},
{
"description": "Enables the get_active command without any pre-configured scope.",
"type": "string",
- "const": "allow-get-active"
+ "const": "allow-get-active",
+ "markdownDescription": "Enables the get_active command without any pre-configured scope."
},
{
"description": "Denies the get_active command without any pre-configured scope.",
"type": "string",
- "const": "deny-get-active"
+ "const": "deny-get-active",
+ "markdownDescription": "Denies the get_active command without any pre-configured scope."
},
{
"description": "Enables the get_pending command without any pre-configured scope.",
"type": "string",
- "const": "allow-get-pending"
+ "const": "allow-get-pending",
+ "markdownDescription": "Enables the get_pending command without any pre-configured scope."
},
{
"description": "Denies the get_pending command without any pre-configured scope.",
"type": "string",
- "const": "deny-get-pending"
+ "const": "deny-get-pending",
+ "markdownDescription": "Denies the get_pending command without any pre-configured scope."
},
{
"description": "Enables the is_permission_granted command without any pre-configured scope.",
"type": "string",
- "const": "allow-is-permission-granted"
+ "const": "allow-is-permission-granted",
+ "markdownDescription": "Enables the is_permission_granted command without any pre-configured scope."
},
{
"description": "Denies the is_permission_granted command without any pre-configured scope.",
"type": "string",
- "const": "deny-is-permission-granted"
+ "const": "deny-is-permission-granted",
+ "markdownDescription": "Denies the is_permission_granted command without any pre-configured scope."
},
{
"description": "Enables the list_channels command without any pre-configured scope.",
"type": "string",
- "const": "allow-list-channels"
+ "const": "allow-list-channels",
+ "markdownDescription": "Enables the list_channels command without any pre-configured scope."
},
{
"description": "Denies the list_channels command without any pre-configured scope.",
"type": "string",
- "const": "deny-list-channels"
+ "const": "deny-list-channels",
+ "markdownDescription": "Denies the list_channels command without any pre-configured scope."
},
{
"description": "Enables the notify command without any pre-configured scope.",
"type": "string",
- "const": "allow-notify"
+ "const": "allow-notify",
+ "markdownDescription": "Enables the notify command without any pre-configured scope."
},
{
"description": "Denies the notify command without any pre-configured scope.",
"type": "string",
- "const": "deny-notify"
+ "const": "deny-notify",
+ "markdownDescription": "Denies the notify command without any pre-configured scope."
},
{
"description": "Enables the permission_state command without any pre-configured scope.",
"type": "string",
- "const": "allow-permission-state"
+ "const": "allow-permission-state",
+ "markdownDescription": "Enables the permission_state command without any pre-configured scope."
},
{
"description": "Denies the permission_state command without any pre-configured scope.",
"type": "string",
- "const": "deny-permission-state"
+ "const": "deny-permission-state",
+ "markdownDescription": "Denies the permission_state command without any pre-configured scope."
},
{
"description": "Enables the register_action_types command without any pre-configured scope.",
"type": "string",
- "const": "allow-register-action-types"
+ "const": "allow-register-action-types",
+ "markdownDescription": "Enables the register_action_types command without any pre-configured scope."
},
{
"description": "Denies the register_action_types command without any pre-configured scope.",
"type": "string",
- "const": "deny-register-action-types"
+ "const": "deny-register-action-types",
+ "markdownDescription": "Denies the register_action_types command without any pre-configured scope."
},
{
"description": "Enables the register_listener command without any pre-configured scope.",
"type": "string",
- "const": "allow-register-listener"
+ "const": "allow-register-listener",
+ "markdownDescription": "Enables the register_listener command without any pre-configured scope."
},
{
"description": "Denies the register_listener command without any pre-configured scope.",
"type": "string",
- "const": "deny-register-listener"
+ "const": "deny-register-listener",
+ "markdownDescription": "Denies the register_listener command without any pre-configured scope."
},
{
"description": "Enables the remove_active command without any pre-configured scope.",
"type": "string",
- "const": "allow-remove-active"
+ "const": "allow-remove-active",
+ "markdownDescription": "Enables the remove_active command without any pre-configured scope."
},
{
"description": "Denies the remove_active command without any pre-configured scope.",
"type": "string",
- "const": "deny-remove-active"
+ "const": "deny-remove-active",
+ "markdownDescription": "Denies the remove_active command without any pre-configured scope."
},
{
"description": "Enables the request_permission command without any pre-configured scope.",
"type": "string",
- "const": "allow-request-permission"
+ "const": "allow-request-permission",
+ "markdownDescription": "Enables the request_permission command without any pre-configured scope."
},
{
"description": "Denies the request_permission command without any pre-configured scope.",
"type": "string",
- "const": "deny-request-permission"
+ "const": "deny-request-permission",
+ "markdownDescription": "Denies the request_permission command without any pre-configured scope."
},
{
"description": "Enables the show command without any pre-configured scope.",
"type": "string",
- "const": "allow-show"
+ "const": "allow-show",
+ "markdownDescription": "Enables the show command without any pre-configured scope."
},
{
"description": "Denies the show command without any pre-configured scope.",
"type": "string",
- "const": "deny-show"
+ "const": "deny-show",
+ "markdownDescription": "Denies the show command without any pre-configured scope."
},
{
- "description": "This permission set configures which\nnotification features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all notification related features.\n\n",
+ "description": "This permission set configures which\nnotification features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all notification related features.\n\n\n#### This default permission set includes:\n\n- `allow-is-permission-granted`\n- `allow-request-permission`\n- `allow-notify`\n- `allow-register-action-types`\n- `allow-register-listener`\n- `allow-cancel`\n- `allow-get-pending`\n- `allow-remove-active`\n- `allow-get-active`\n- `allow-check-permissions`\n- `allow-show`\n- `allow-batch`\n- `allow-list-channels`\n- `allow-delete-channel`\n- `allow-create-channel`\n- `allow-permission-state`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures which\nnotification features are by default exposed.\n\n#### Granted Permissions\n\nIt allows all notification related features.\n\n\n#### This default permission set includes:\n\n- `allow-is-permission-granted`\n- `allow-request-permission`\n- `allow-notify`\n- `allow-register-action-types`\n- `allow-register-listener`\n- `allow-cancel`\n- `allow-get-pending`\n- `allow-remove-active`\n- `allow-get-active`\n- `allow-check-permissions`\n- `allow-show`\n- `allow-batch`\n- `allow-list-channels`\n- `allow-delete-channel`\n- `allow-create-channel`\n- `allow-permission-state`"
}
]
}
diff --git a/plugins/notification/src/desktop.rs b/plugins/notification/src/desktop.rs
index 092b8892..47279225 100644
--- a/plugins/notification/src/desktop.rs
+++ b/plugins/notification/src/desktop.rs
@@ -18,6 +18,8 @@ pub fn init(
}
/// Access to the notification APIs.
+///
+/// You can get an instance of this type via [`NotificationExt`](crate::NotificationExt)
pub struct Notification(AppHandle);
impl crate::NotificationBuilder {
diff --git a/plugins/notification/src/lib.rs b/plugins/notification/src/lib.rs
index 5cc30319..9ca33d63 100644
--- a/plugins/notification/src/lib.rs
+++ b/plugins/notification/src/lib.rs
@@ -34,9 +34,9 @@ mod models;
pub use error::{Error, Result};
#[cfg(desktop)]
-use desktop::Notification;
+pub use desktop::Notification;
#[cfg(mobile)]
-use mobile::Notification;
+pub use mobile::Notification;
/// The notification builder.
#[derive(Debug)]
@@ -120,7 +120,7 @@ impl NotificationBuilder {
/// Identifier used to group multiple notifications.
///
- /// https://developer.apple.com/documentation/usernotifications/unmutablenotificationcontent/1649872-threadidentifier
+ ///
pub fn group(mut self, group: impl Into) -> Self {
self.data.group.replace(group.into());
self
diff --git a/plugins/notification/src/mobile.rs b/plugins/notification/src/mobile.rs
index 9167dcc1..edfef728 100644
--- a/plugins/notification/src/mobile.rs
+++ b/plugins/notification/src/mobile.rs
@@ -40,6 +40,8 @@ impl crate::NotificationBuilder {
}
/// Access to the notification APIs.
+///
+/// You can get an instance of this type via [`NotificationExt`](crate::NotificationExt)
pub struct Notification(PluginHandle);
impl Notification {
diff --git a/plugins/opener/CHANGELOG.md b/plugins/opener/CHANGELOG.md
index ff9a9cb5..f5d4c379 100644
--- a/plugins/opener/CHANGELOG.md
+++ b/plugins/opener/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## \[2.2.7]
+
+- [`6c9e08dc`](https://github.com/tauri-apps/plugins-workspace/commit/6c9e08dccb3ac99fccfce586fa2b69717ba81b52) ([#2695](https://github.com/tauri-apps/plugins-workspace/pull/2695) by [@ShaunSHamilton](https://github.com/tauri-apps/plugins-workspace/../../ShaunSHamilton)) Adjust `open_url` url type to allow `URL`
+- [`dde6f3c3`](https://github.com/tauri-apps/plugins-workspace/commit/dde6f3c31c1b79942abb556be31757dc583f509e) ([#2549](https://github.com/tauri-apps/plugins-workspace/pull/2549) by [@renovate](https://github.com/tauri-apps/plugins-workspace/../../renovate)) Update `windows` crate to 0.61 to align with Tauri 2.5
+
+## \[2.2.6]
+
+- [`1a984659`](https://github.com/tauri-apps/plugins-workspace/commit/1a9846599b6a71faf330845847a30f6bf9735898) ([#2469](https://github.com/tauri-apps/plugins-workspace/pull/2469) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Update `objc2` crate to 0.6. No user facing changes.
+- [`71f95c9f`](https://github.com/tauri-apps/plugins-workspace/commit/71f95c9f05b29cf1be586849614c0b007757c15d) ([#2445](https://github.com/tauri-apps/plugins-workspace/pull/2445) by [@renovate](https://github.com/tauri-apps/plugins-workspace/../../renovate)) Updated `windows` crate to 0.60 to match Tauri 2.3.0. No user facing changes.
+
## \[2.2.5]
- [`5b821181`](https://github.com/tauri-apps/plugins-workspace/commit/5b8211815825ddae2dcc0c00520e0cfdff002763) ([#2332](https://github.com/tauri-apps/plugins-workspace/pull/2332) by [@betamos](https://github.com/tauri-apps/plugins-workspace/../../betamos)) Fix broken JS commands `opener.openPath` and `opener.openUrl` on mobile.
diff --git a/plugins/opener/Cargo.toml b/plugins/opener/Cargo.toml
index 044d2796..5b040dff 100644
--- a/plugins/opener/Cargo.toml
+++ b/plugins/opener/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-opener"
-version = "2.2.5"
+version = "2.2.7"
description = "Open files and URLs using their default application."
edition = { workspace = true }
authors = { workspace = true }
@@ -40,7 +40,7 @@ glob = { workspace = true }
dunce = { workspace = true }
[target."cfg(windows)".dependencies.windows]
-version = "0.58"
+version = "0.61"
features = [
"Win32_Foundation",
"Win32_UI_Shell_Common",
@@ -54,12 +54,12 @@ zbus = { workspace = true }
url = { workspace = true }
[target."cfg(target_os = \"macos\")".dependencies.objc2-app-kit]
-version = "0.2"
+version = "0.3"
default-features = false
features = ["std", "NSWorkspace"]
[target."cfg(target_os = \"macos\")".dependencies.objc2-foundation]
-version = "0.2"
+version = "0.3"
default-features = false
features = ["std", "NSURL", "NSArray", "NSString"]
diff --git a/plugins/opener/guest-js/index.ts b/plugins/opener/guest-js/index.ts
index ade956a6..5705c722 100644
--- a/plugins/opener/guest-js/index.ts
+++ b/plugins/opener/guest-js/index.ts
@@ -38,7 +38,10 @@ import { invoke } from '@tauri-apps/api/core'
*
* @since 2.0.0
*/
-export async function openUrl(url: string, openWith?: string): Promise {
+export async function openUrl(
+ url: string | URL,
+ openWith?: string
+): Promise {
await invoke('plugin:opener|open_url', {
url,
with: openWith
diff --git a/plugins/opener/package.json b/plugins/opener/package.json
index a7a1b3d2..c4ae6f9b 100644
--- a/plugins/opener/package.json
+++ b/plugins/opener/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-opener",
- "version": "2.2.5",
+ "version": "2.2.7",
"description": "Open files and URLs using their default application.",
"license": "MIT OR Apache-2.0",
"authors": [
diff --git a/plugins/opener/permissions/autogenerated/reference.md b/plugins/opener/permissions/autogenerated/reference.md
index 66c232c6..6ad6ba1f 100644
--- a/plugins/opener/permissions/autogenerated/reference.md
+++ b/plugins/opener/permissions/autogenerated/reference.md
@@ -3,6 +3,8 @@
This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application
as well as reveal file in directories using default file explorer
+#### This default permission set includes the following:
+
- `allow-open-url`
- `allow-reveal-item-in-dir`
- `allow-default-urls`
diff --git a/plugins/opener/permissions/schemas/schema.json b/plugins/opener/permissions/schemas/schema.json
index b958ac63..78c80ba3 100644
--- a/plugins/opener/permissions/schemas/schema.json
+++ b/plugins/opener/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,42 +297,50 @@
{
"description": "This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application.",
"type": "string",
- "const": "allow-default-urls"
+ "const": "allow-default-urls",
+ "markdownDescription": "This enables opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application."
},
{
"description": "Enables the open_path command without any pre-configured scope.",
"type": "string",
- "const": "allow-open-path"
+ "const": "allow-open-path",
+ "markdownDescription": "Enables the open_path command without any pre-configured scope."
},
{
"description": "Denies the open_path command without any pre-configured scope.",
"type": "string",
- "const": "deny-open-path"
+ "const": "deny-open-path",
+ "markdownDescription": "Denies the open_path command without any pre-configured scope."
},
{
"description": "Enables the open_url command without any pre-configured scope.",
"type": "string",
- "const": "allow-open-url"
+ "const": "allow-open-url",
+ "markdownDescription": "Enables the open_url command without any pre-configured scope."
},
{
"description": "Denies the open_url command without any pre-configured scope.",
"type": "string",
- "const": "deny-open-url"
+ "const": "deny-open-url",
+ "markdownDescription": "Denies the open_url command without any pre-configured scope."
},
{
"description": "Enables the reveal_item_in_dir command without any pre-configured scope.",
"type": "string",
- "const": "allow-reveal-item-in-dir"
+ "const": "allow-reveal-item-in-dir",
+ "markdownDescription": "Enables the reveal_item_in_dir command without any pre-configured scope."
},
{
"description": "Denies the reveal_item_in_dir command without any pre-configured scope.",
"type": "string",
- "const": "deny-reveal-item-in-dir"
+ "const": "deny-reveal-item-in-dir",
+ "markdownDescription": "Denies the reveal_item_in_dir command without any pre-configured scope."
},
{
- "description": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer",
+ "description": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer\n#### This default permission set includes:\n\n- `allow-open-url`\n- `allow-reveal-item-in-dir`\n- `allow-default-urls`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set allows opening `mailto:`, `tel:`, `https://` and `http://` urls using their default application\nas well as reveal file in directories using default file explorer\n#### This default permission set includes:\n\n- `allow-open-url`\n- `allow-reveal-item-in-dir`\n- `allow-default-urls`"
}
]
}
diff --git a/plugins/opener/src/lib.rs b/plugins/opener/src/lib.rs
index 1cb78b86..9934b0fc 100644
--- a/plugins/opener/src/lib.rs
+++ b/plugins/opener/src/lib.rs
@@ -56,7 +56,7 @@ impl Opener {
/// - **Android / iOS**: Always opens using default program.
#[cfg(desktop)]
pub fn open_url(&self, url: impl Into, with: Option>) -> Result<()> {
- crate::open::open(url.into(), with.map(Into::into)).map_err(Into::into)
+ crate::open::open(url.into(), with.map(Into::into))
}
/// Open a url with a default or specific program.
@@ -108,7 +108,7 @@ impl Opener {
path: impl Into,
with: Option>,
) -> Result<()> {
- crate::open::open(path.into(), with.map(Into::into)).map_err(Into::into)
+ crate::open::open(path.into(), with.map(Into::into))
}
/// Open a path with a default or specific program.
diff --git a/plugins/opener/src/reveal_item_in_dir.rs b/plugins/opener/src/reveal_item_in_dir.rs
index 6d7b9268..6e3dfc2c 100644
--- a/plugins/opener/src/reveal_item_in_dir.rs
+++ b/plugins/opener/src/reveal_item_in_dir.rs
@@ -185,7 +185,7 @@ mod imp {
let path = path.to_string_lossy();
let path = NSString::from_str(&path);
let urls = vec![NSURL::fileURLWithPath(&path)];
- let urls = NSArray::from_vec(urls);
+ let urls = NSArray::from_retained_slice(&urls);
let workspace = NSWorkspace::new();
workspace.activateFileViewerSelectingURLs(&urls);
diff --git a/plugins/os/CHANGELOG.md b/plugins/os/CHANGELOG.md
index cc7fb604..415953e4 100644
--- a/plugins/os/CHANGELOG.md
+++ b/plugins/os/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## \[2.2.1]
+
+- [`a1b3fa27`](https://github.com/tauri-apps/plugins-workspace/commit/a1b3fa27f11022c9b6622b4fab12d93239eb05de) ([#2515](https://github.com/tauri-apps/plugins-workspace/pull/2515) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Re-exported the `Geolocation`, `Haptics`, `Notification`, and `Os` structs so that they show up on docs.rs.
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/os/Cargo.toml b/plugins/os/Cargo.toml
index 7af6dad3..424b7581 100644
--- a/plugins/os/Cargo.toml
+++ b/plugins/os/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-os"
-version = "2.2.0"
+version = "2.2.1"
description = "Read information about the operating system."
edition = { workspace = true }
authors = { workspace = true }
diff --git a/plugins/os/package.json b/plugins/os/package.json
index 95ae0ca9..840f5352 100644
--- a/plugins/os/package.json
+++ b/plugins/os/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-os",
- "version": "2.2.0",
+ "version": "2.2.1",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/os/permissions/autogenerated/reference.md b/plugins/os/permissions/autogenerated/reference.md
index 88fcd6fa..9ed7385e 100644
--- a/plugins/os/permissions/autogenerated/reference.md
+++ b/plugins/os/permissions/autogenerated/reference.md
@@ -10,6 +10,8 @@ All information except the host name are available.
+#### This default permission set includes the following:
+
- `allow-arch`
- `allow-exe-extension`
- `allow-family`
diff --git a/plugins/os/permissions/schemas/schema.json b/plugins/os/permissions/schemas/schema.json
index ad053532..36680b44 100644
--- a/plugins/os/permissions/schemas/schema.json
+++ b/plugins/os/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,87 +297,104 @@
{
"description": "Enables the arch command without any pre-configured scope.",
"type": "string",
- "const": "allow-arch"
+ "const": "allow-arch",
+ "markdownDescription": "Enables the arch command without any pre-configured scope."
},
{
"description": "Denies the arch command without any pre-configured scope.",
"type": "string",
- "const": "deny-arch"
+ "const": "deny-arch",
+ "markdownDescription": "Denies the arch command without any pre-configured scope."
},
{
"description": "Enables the exe_extension command without any pre-configured scope.",
"type": "string",
- "const": "allow-exe-extension"
+ "const": "allow-exe-extension",
+ "markdownDescription": "Enables the exe_extension command without any pre-configured scope."
},
{
"description": "Denies the exe_extension command without any pre-configured scope.",
"type": "string",
- "const": "deny-exe-extension"
+ "const": "deny-exe-extension",
+ "markdownDescription": "Denies the exe_extension command without any pre-configured scope."
},
{
"description": "Enables the family command without any pre-configured scope.",
"type": "string",
- "const": "allow-family"
+ "const": "allow-family",
+ "markdownDescription": "Enables the family command without any pre-configured scope."
},
{
"description": "Denies the family command without any pre-configured scope.",
"type": "string",
- "const": "deny-family"
+ "const": "deny-family",
+ "markdownDescription": "Denies the family command without any pre-configured scope."
},
{
"description": "Enables the hostname command without any pre-configured scope.",
"type": "string",
- "const": "allow-hostname"
+ "const": "allow-hostname",
+ "markdownDescription": "Enables the hostname command without any pre-configured scope."
},
{
"description": "Denies the hostname command without any pre-configured scope.",
"type": "string",
- "const": "deny-hostname"
+ "const": "deny-hostname",
+ "markdownDescription": "Denies the hostname command without any pre-configured scope."
},
{
"description": "Enables the locale command without any pre-configured scope.",
"type": "string",
- "const": "allow-locale"
+ "const": "allow-locale",
+ "markdownDescription": "Enables the locale command without any pre-configured scope."
},
{
"description": "Denies the locale command without any pre-configured scope.",
"type": "string",
- "const": "deny-locale"
+ "const": "deny-locale",
+ "markdownDescription": "Denies the locale command without any pre-configured scope."
},
{
"description": "Enables the os_type command without any pre-configured scope.",
"type": "string",
- "const": "allow-os-type"
+ "const": "allow-os-type",
+ "markdownDescription": "Enables the os_type command without any pre-configured scope."
},
{
"description": "Denies the os_type command without any pre-configured scope.",
"type": "string",
- "const": "deny-os-type"
+ "const": "deny-os-type",
+ "markdownDescription": "Denies the os_type command without any pre-configured scope."
},
{
"description": "Enables the platform command without any pre-configured scope.",
"type": "string",
- "const": "allow-platform"
+ "const": "allow-platform",
+ "markdownDescription": "Enables the platform command without any pre-configured scope."
},
{
"description": "Denies the platform command without any pre-configured scope.",
"type": "string",
- "const": "deny-platform"
+ "const": "deny-platform",
+ "markdownDescription": "Denies the platform command without any pre-configured scope."
},
{
"description": "Enables the version command without any pre-configured scope.",
"type": "string",
- "const": "allow-version"
+ "const": "allow-version",
+ "markdownDescription": "Enables the version command without any pre-configured scope."
},
{
"description": "Denies the version command without any pre-configured scope.",
"type": "string",
- "const": "deny-version"
+ "const": "deny-version",
+ "markdownDescription": "Denies the version command without any pre-configured scope."
},
{
- "description": "This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n",
+ "description": "This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n\n#### This default permission set includes:\n\n- `allow-arch`\n- `allow-exe-extension`\n- `allow-family`\n- `allow-locale`\n- `allow-os-type`\n- `allow-platform`\n- `allow-version`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n\n#### This default permission set includes:\n\n- `allow-arch`\n- `allow-exe-extension`\n- `allow-family`\n- `allow-locale`\n- `allow-os-type`\n- `allow-platform`\n- `allow-version`"
}
]
}
diff --git a/plugins/os/src/lib.rs b/plugins/os/src/lib.rs
index c041c8ea..50ab89ee 100644
--- a/plugins/os/src/lib.rs
+++ b/plugins/os/src/lib.rs
@@ -88,7 +88,7 @@ pub fn exe_extension() -> &'static str {
std::env::consts::EXE_EXTENSION
}
-/// Returns the current operating system locale with the `BCP-47` language tag. If the locale couldn’t be obtained, `None` is returned instead.
+/// Returns the current operating system locale with the `BCP-47` language tag. If the locale couldn't be obtained, `None` is returned instead.
pub fn locale() -> Option {
sys_locale::get_locale()
}
diff --git a/plugins/persisted-scope/CHANGELOG.md b/plugins/persisted-scope/CHANGELOG.md
index 937db6c4..5261ec8f 100644
--- a/plugins/persisted-scope/CHANGELOG.md
+++ b/plugins/persisted-scope/CHANGELOG.md
@@ -1,5 +1,17 @@
# Changelog
+## \[2.2.2]
+
+### Dependencies
+
+- Upgraded to `fs@2.3.0`
+
+## \[2.2.1]
+
+### Dependencies
+
+- Upgraded to `fs@2.2.1`
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/persisted-scope/Cargo.toml b/plugins/persisted-scope/Cargo.toml
index 38585d38..06bcaff0 100644
--- a/plugins/persisted-scope/Cargo.toml
+++ b/plugins/persisted-scope/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-persisted-scope"
-version = "2.2.0"
+version = "2.2.2"
description = "Save filesystem and asset scopes and restore them when the app is reopened."
authors = { workspace = true }
license = { workspace = true }
@@ -27,7 +27,7 @@ log = { workspace = true }
thiserror = { workspace = true }
aho-corasick = "1"
bincode = "1"
-tauri-plugin-fs = { path = "../fs", version = "2.2.0" }
+tauri-plugin-fs = { path = "../fs", version = "2.3.0" }
[features]
protocol-asset = ["tauri/protocol-asset"]
diff --git a/plugins/positioner/permissions/autogenerated/reference.md b/plugins/positioner/permissions/autogenerated/reference.md
index 72182c02..f6e09133 100644
--- a/plugins/positioner/permissions/autogenerated/reference.md
+++ b/plugins/positioner/permissions/autogenerated/reference.md
@@ -2,6 +2,8 @@
Allows the moveWindow and handleIconState APIs
+#### This default permission set includes the following:
+
- `allow-move-window`
- `allow-move-window-constrained`
- `allow-set-tray-icon-state`
diff --git a/plugins/positioner/permissions/schemas/schema.json b/plugins/positioner/permissions/schemas/schema.json
index ccf55156..b0fc760a 100644
--- a/plugins/positioner/permissions/schemas/schema.json
+++ b/plugins/positioner/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,37 +297,44 @@
{
"description": "Enables the move_window command without any pre-configured scope.",
"type": "string",
- "const": "allow-move-window"
+ "const": "allow-move-window",
+ "markdownDescription": "Enables the move_window command without any pre-configured scope."
},
{
"description": "Denies the move_window command without any pre-configured scope.",
"type": "string",
- "const": "deny-move-window"
+ "const": "deny-move-window",
+ "markdownDescription": "Denies the move_window command without any pre-configured scope."
},
{
"description": "Enables the move_window_constrained command without any pre-configured scope.",
"type": "string",
- "const": "allow-move-window-constrained"
+ "const": "allow-move-window-constrained",
+ "markdownDescription": "Enables the move_window_constrained command without any pre-configured scope."
},
{
"description": "Denies the move_window_constrained command without any pre-configured scope.",
"type": "string",
- "const": "deny-move-window-constrained"
+ "const": "deny-move-window-constrained",
+ "markdownDescription": "Denies the move_window_constrained command without any pre-configured scope."
},
{
"description": "Enables the set_tray_icon_state command without any pre-configured scope.",
"type": "string",
- "const": "allow-set-tray-icon-state"
+ "const": "allow-set-tray-icon-state",
+ "markdownDescription": "Enables the set_tray_icon_state command without any pre-configured scope."
},
{
"description": "Denies the set_tray_icon_state command without any pre-configured scope.",
"type": "string",
- "const": "deny-set-tray-icon-state"
+ "const": "deny-set-tray-icon-state",
+ "markdownDescription": "Denies the set_tray_icon_state command without any pre-configured scope."
},
{
- "description": "Allows the moveWindow and handleIconState APIs",
+ "description": "Allows the moveWindow and handleIconState APIs\n#### This default permission set includes:\n\n- `allow-move-window`\n- `allow-move-window-constrained`\n- `allow-set-tray-icon-state`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "Allows the moveWindow and handleIconState APIs\n#### This default permission set includes:\n\n- `allow-move-window`\n- `allow-move-window-constrained`\n- `allow-set-tray-icon-state`"
}
]
}
diff --git a/plugins/process/CHANGELOG.md b/plugins/process/CHANGELOG.md
index 7bcdab70..12cb7136 100644
--- a/plugins/process/CHANGELOG.md
+++ b/plugins/process/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## \[2.2.1]
+
+- [`d2aef2fd`](https://github.com/tauri-apps/plugins-workspace/commit/d2aef2fddbdfad6526935c55ac10a94171a4f5f5) ([#2581](https://github.com/tauri-apps/plugins-workspace/pull/2581)) Migrate restart to use tauri's new `AppHandle::request_restart` method
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/process/Cargo.toml b/plugins/process/Cargo.toml
index 4577844f..8ccf62c5 100644
--- a/plugins/process/Cargo.toml
+++ b/plugins/process/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-process"
-version = "2.2.0"
+version = "2.2.1"
description = "Access the current process of your Tauri application."
edition = { workspace = true }
authors = { workspace = true }
diff --git a/plugins/process/package.json b/plugins/process/package.json
index 0eda3235..fdb2ad49 100644
--- a/plugins/process/package.json
+++ b/plugins/process/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-process",
- "version": "2.2.0",
+ "version": "2.2.1",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/process/permissions/autogenerated/reference.md b/plugins/process/permissions/autogenerated/reference.md
index 46137369..6cb15b5f 100644
--- a/plugins/process/permissions/autogenerated/reference.md
+++ b/plugins/process/permissions/autogenerated/reference.md
@@ -9,6 +9,8 @@ This enables to quit via `allow-exit` and restart via `allow-restart`
the application.
+#### This default permission set includes the following:
+
- `allow-exit`
- `allow-restart`
diff --git a/plugins/process/permissions/schemas/schema.json b/plugins/process/permissions/schemas/schema.json
index 95f67149..9d68fc63 100644
--- a/plugins/process/permissions/schemas/schema.json
+++ b/plugins/process/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,27 +297,32 @@
{
"description": "Enables the exit command without any pre-configured scope.",
"type": "string",
- "const": "allow-exit"
+ "const": "allow-exit",
+ "markdownDescription": "Enables the exit command without any pre-configured scope."
},
{
"description": "Denies the exit command without any pre-configured scope.",
"type": "string",
- "const": "deny-exit"
+ "const": "deny-exit",
+ "markdownDescription": "Denies the exit command without any pre-configured scope."
},
{
"description": "Enables the restart command without any pre-configured scope.",
"type": "string",
- "const": "allow-restart"
+ "const": "allow-restart",
+ "markdownDescription": "Enables the restart command without any pre-configured scope."
},
{
"description": "Denies the restart command without any pre-configured scope.",
"type": "string",
- "const": "deny-restart"
+ "const": "deny-restart",
+ "markdownDescription": "Denies the restart command without any pre-configured scope."
},
{
- "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n",
+ "description": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures which\nprocess features are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n\n#### This default permission set includes:\n\n- `allow-exit`\n- `allow-restart`"
}
]
}
diff --git a/plugins/process/src/commands.rs b/plugins/process/src/commands.rs
index 2c27a3d2..3777294a 100644
--- a/plugins/process/src/commands.rs
+++ b/plugins/process/src/commands.rs
@@ -11,5 +11,5 @@ pub fn exit(app: AppHandle, code: i32) {
#[tauri::command]
pub fn restart(app: AppHandle) {
- app.restart()
+ app.request_restart()
}
diff --git a/plugins/shell/CHANGELOG.md b/plugins/shell/CHANGELOG.md
index cbeec3b4..9af199bf 100644
--- a/plugins/shell/CHANGELOG.md
+++ b/plugins/shell/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## \[2.2.1]
+
+### bug
+
+- [`9cf0390a`](https://github.com/tauri-apps/plugins-workspace/commit/9cf0390a52497e273db1a1b613a0e26827aa327c) Apply the default open validation regex `^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+` when the open configuration is not set, preventing unchecked input from being used in this scenario (previously the plugin would skip validation when it should disable all calls). This keeps backwards compatibility while still fixing this vulnerability.
+ The scope is no longer validated for Rust calls via `ShellExt::shell()` so if you need to block JavaScript from calling the API you can simply set `tauri.conf.json > plugins > shell > open` to `false`.
+
## \[2.2.0]
- [`3a79266b`](https://github.com/tauri-apps/plugins-workspace/commit/3a79266b8cf96a55b1ae6339d725567d45a44b1d) ([#2173](https://github.com/tauri-apps/plugins-workspace/pull/2173) by [@FabianLars](https://github.com/tauri-apps/plugins-workspace/../../FabianLars)) Bumped all plugins to `v2.2.0`. From now, the versions for the Rust and JavaScript packages of each plugin will be in sync with each other.
diff --git a/plugins/shell/Cargo.toml b/plugins/shell/Cargo.toml
index 14b98d45..f3f1248c 100644
--- a/plugins/shell/Cargo.toml
+++ b/plugins/shell/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tauri-plugin-shell"
-version = "2.2.0"
+version = "2.2.1"
description = "Access the system shell. Allows you to spawn child processes and manage files and URLs using their default application."
edition = { workspace = true }
authors = { workspace = true }
diff --git a/plugins/shell/api-iife.js b/plugins/shell/api-iife.js
index 66fb8d04..07ef37fc 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,i){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?i:"a"===s?i.call(e):i?i.value:t.get(e)}function s(e,t,s,i,n){if("function"==typeof t||!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 i,n,r;"function"==typeof SuppressedError&&SuppressedError;const o="__TAURI_TO_IPC_KEY__";class a{constructor(){this.__TAURI_CHANNEL_MARKER__=!0,i.set(this,(()=>{})),n.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,n,"f"))for(t(this,i,"f").call(this,e),s(this,n,t(this,n,"f")+1);t(this,n,"f")in t(this,r,"f");){const e=t(this,r,"f")[t(this,n,"f")];t(this,i,"f").call(this,e),delete t(this,r,"f")[t(this,n,"f")],s(this,n,t(this,n,"f")+1)}else t(this,r,"f")[o]=e}))}set onmessage(e){s(this,i,e)}get onmessage(){return t(this,i,"f")}[(i=new WeakMap,n=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=i=>{this.removeListener(e,s),t(i)};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=i=>{this.removeListener(e,s),t(i)};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 i=new u(e,t,s);return i.options.sidecar=!0,i}async spawn(){const e=this.program,t=this.args,s=this.options;"object"==typeof t&&Object.freeze(t);const i=new a;return i.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:i}).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__})}
+if("__TAURI__"in window){var __TAURI_PLUGIN_SHELL__=function(e){"use strict";function t(e,t,s,i){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?i:"a"===s?i.call(e):i?i.value:t.get(e)}function s(e,t,s,i,n){if("function"==typeof t||!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 i,n,r,o;"function"==typeof SuppressedError&&SuppressedError;const a="__TAURI_TO_IPC_KEY__";class h{constructor(e){i.set(this,void 0),n.set(this,0),r.set(this,[]),o.set(this,void 0),s(this,i,e||(()=>{})),this.id=function(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}((e=>{const a=e.index;if("end"in e)return void(a==t(this,n,"f")?this.cleanupCallback():s(this,o,a));const h=e.message;if(a==t(this,n,"f")){for(t(this,i,"f").call(this,h),s(this,n,t(this,n,"f")+1);t(this,n,"f")in t(this,r,"f");){const e=t(this,r,"f")[t(this,n,"f")];t(this,i,"f").call(this,e),delete t(this,r,"f")[t(this,n,"f")],s(this,n,t(this,n,"f")+1)}t(this,n,"f")===t(this,o,"f")&&this.cleanupCallback()}else t(this,r,"f")[a]=h}))}cleanupCallback(){Reflect.deleteProperty(window,`_${this.id}`)}set onmessage(e){s(this,i,e)}get onmessage(){return t(this,i,"f")}[(i=new WeakMap,n=new WeakMap,r=new WeakMap,o=new WeakMap,a)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[a]()}}async function c(e,t={},s){return window.__TAURI_INTERNALS__.invoke(e,t,s)}class l{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=i=>{this.removeListener(e,s),t(i)};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=i=>{this.removeListener(e,s),t(i)};return this.prependListener(e,s)}}class u{constructor(e){this.pid=e}async write(e){await c("plugin:shell|stdin_write",{pid:this.pid,buffer:e})}async kill(){await c("plugin:shell|kill",{cmd:"killChild",pid:this.pid})}}class p extends l{constructor(e,t=[],s){super(),this.stdout=new l,this.stderr=new l,this.program=e,this.args="string"==typeof t?[t]:t,this.options=s??{}}static create(e,t=[],s){return new p(e,t,s)}static sidecar(e,t=[],s){const i=new p(e,t,s);return i.options.sidecar=!0,i}async spawn(){const e=this.program,t=this.args,s=this.options;"object"==typeof t&&Object.freeze(t);const i=new h;return i.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 c("plugin:shell|spawn",{program:e,args:t,options:s,onEvent:i}).then((e=>new u(e)))}async execute(){const e=this.program,t=this.args,s=this.options;return"object"==typeof t&&Object.freeze(t),await c("plugin:shell|execute",{program:e,args:t,options:s})}}return e.Child=u,e.Command=p,e.EventEmitter=l,e.open=async function(e,t){await c("plugin:shell|open",{path:e,with:t})},e}({});Object.defineProperty(window.__TAURI__,"shell",{value:__TAURI_PLUGIN_SHELL__})}
diff --git a/plugins/shell/package.json b/plugins/shell/package.json
index 126e5b6f..e42394c8 100644
--- a/plugins/shell/package.json
+++ b/plugins/shell/package.json
@@ -1,6 +1,6 @@
{
"name": "@tauri-apps/plugin-shell",
- "version": "2.2.0",
+ "version": "2.2.1",
"license": "MIT OR Apache-2.0",
"authors": [
"Tauri Programme within The Commons Conservancy"
diff --git a/plugins/shell/permissions/autogenerated/reference.md b/plugins/shell/permissions/autogenerated/reference.md
index d88bf2d5..d2b86f8a 100644
--- a/plugins/shell/permissions/autogenerated/reference.md
+++ b/plugins/shell/permissions/autogenerated/reference.md
@@ -5,11 +5,13 @@ shell functionality is exposed by default.
#### Granted Permissions
-It allows to use the `open` functionality without any specific
+It allows to use the `open` functionality with a reasonable
scope pre-configured. It will allow opening `http(s)://`,
`tel:` and `mailto:` links.
+#### This default permission set includes the following:
+
- `allow-open`
## Permission Table
diff --git a/plugins/shell/permissions/default.toml b/plugins/shell/permissions/default.toml
index 4569b052..dba2ea20 100644
--- a/plugins/shell/permissions/default.toml
+++ b/plugins/shell/permissions/default.toml
@@ -7,7 +7,7 @@ shell functionality is exposed by default.
#### Granted Permissions
-It allows to use the `open` functionality without any specific
+It allows to use the `open` functionality with a reasonable
scope pre-configured. It will allow opening `http(s)://`,
`tel:` and `mailto:` links.
"""
diff --git a/plugins/shell/permissions/schemas/schema.json b/plugins/shell/permissions/schemas/schema.json
index e70c3926..9a198981 100644
--- a/plugins/shell/permissions/schemas/schema.json
+++ b/plugins/shell/permissions/schemas/schema.json
@@ -49,7 +49,7 @@
"minimum": 1.0
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -111,7 +111,7 @@
"type": "string"
},
"description": {
- "description": "Human-readable description of what the permission does. Tauri internal convention is to use headings in markdown content for Tauri documentation generation purposes.",
+ "description": "Human-readable description of what the permission does. Tauri internal convention is to use `` headings in markdown content for Tauri documentation generation purposes.",
"type": [
"string",
"null"
@@ -297,57 +297,68 @@
{
"description": "Enables the execute command without any pre-configured scope.",
"type": "string",
- "const": "allow-execute"
+ "const": "allow-execute",
+ "markdownDescription": "Enables the execute command without any pre-configured scope."
},
{
"description": "Denies the execute command without any pre-configured scope.",
"type": "string",
- "const": "deny-execute"
+ "const": "deny-execute",
+ "markdownDescription": "Denies the execute command without any pre-configured scope."
},
{
"description": "Enables the kill command without any pre-configured scope.",
"type": "string",
- "const": "allow-kill"
+ "const": "allow-kill",
+ "markdownDescription": "Enables the kill command without any pre-configured scope."
},
{
"description": "Denies the kill command without any pre-configured scope.",
"type": "string",
- "const": "deny-kill"
+ "const": "deny-kill",
+ "markdownDescription": "Denies the kill command without any pre-configured scope."
},
{
"description": "Enables the open command without any pre-configured scope.",
"type": "string",
- "const": "allow-open"
+ "const": "allow-open",
+ "markdownDescription": "Enables the open command without any pre-configured scope."
},
{
"description": "Denies the open command without any pre-configured scope.",
"type": "string",
- "const": "deny-open"
+ "const": "deny-open",
+ "markdownDescription": "Denies the open command without any pre-configured scope."
},
{
"description": "Enables the spawn command without any pre-configured scope.",
"type": "string",
- "const": "allow-spawn"
+ "const": "allow-spawn",
+ "markdownDescription": "Enables the spawn command without any pre-configured scope."
},
{
"description": "Denies the spawn command without any pre-configured scope.",
"type": "string",
- "const": "deny-spawn"
+ "const": "deny-spawn",
+ "markdownDescription": "Denies the spawn command without any pre-configured scope."
},
{
"description": "Enables the stdin_write command without any pre-configured scope.",
"type": "string",
- "const": "allow-stdin-write"
+ "const": "allow-stdin-write",
+ "markdownDescription": "Enables the stdin_write command without any pre-configured scope."
},
{
"description": "Denies the stdin_write command without any pre-configured scope.",
"type": "string",
- "const": "deny-stdin-write"
+ "const": "deny-stdin-write",
+ "markdownDescription": "Denies the stdin_write command without any pre-configured scope."
},
{
- "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n",
+ "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`",
"type": "string",
- "const": "default"
+ "const": "default",
+ "markdownDescription": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`"
}
]
}
diff --git a/plugins/shell/src/commands.rs b/plugins/shell/src/commands.rs
index 5bee6b92..5275e9b9 100644
--- a/plugins/shell/src/commands.rs
+++ b/plugins/shell/src/commands.rs
@@ -311,5 +311,5 @@ pub async fn open(
path: String,
with: Option,
) -> crate::Result<()> {
- shell.open(path, with)
+ crate::open::open(Some(&shell.open_scope), path, with)
}
diff --git a/plugins/shell/src/config.rs b/plugins/shell/src/config.rs
index cad267a2..69a92ee1 100644
--- a/plugins/shell/src/config.rs
+++ b/plugins/shell/src/config.rs
@@ -18,6 +18,9 @@ pub struct Config {
#[serde(untagged, deny_unknown_fields)]
#[non_exhaustive]
pub enum ShellAllowlistOpen {
+ /// Shell open API allowlist is not defined by the user.
+ /// In this case we add the default validation regex (same as [`Self::Flag(true)`]).
+ Unset,
/// If the shell open API should be enabled.
///
/// If enabled, the default validation regex (`^((mailto:\w+)|(tel:\w+)|(https?://\w+)).+`) is used.
@@ -35,6 +38,6 @@ pub enum ShellAllowlistOpen {
impl Default for ShellAllowlistOpen {
fn default() -> Self {
- Self::Flag(false)
+ Self::Unset
}
}
diff --git a/plugins/shell/src/lib.rs b/plugins/shell/src/lib.rs
index 64cc6122..c9503731 100644
--- a/plugins/shell/src/lib.rs
+++ b/plugins/shell/src/lib.rs
@@ -75,7 +75,7 @@ impl