diff --git a/.changes/acl-identifier-error-context.md b/.changes/acl-identifier-error-context.md new file mode 100644 index 000000000000..0918e9266fcd --- /dev/null +++ b/.changes/acl-identifier-error-context.md @@ -0,0 +1,9 @@ +--- +"tauri-utils": "patch:enhance" +--- + +Improve diagnostics for invalid plugin and permission identifiers. + +The `Identifier` deserializer now wraps the inner error with the offending identifier string so the message reads `invalid plugin or permission identifier '': ...`, surfacing the bad entry without requiring a grep through the file. + +The previous parse failure (`failed to parse JSON: identifiers can only include lowercase ASCII, hyphens which are not leading or trailing, and a single colon if using a prefix at line 16 column 23`) now reads `failed to parse JSON: invalid plugin or permission identifier 'sqlite_proxy:allow-foo': identifiers can only include lowercase ASCII, hyphens which are not leading or trailing, and a single colon if using a prefix at line 16 column 23`. diff --git a/.changes/nsis-config-path-context.md b/.changes/nsis-config-path-context.md new file mode 100644 index 000000000000..0166e9c2961e --- /dev/null +++ b/.changes/nsis-config-path-context.md @@ -0,0 +1,5 @@ +--- +"tauri-bundler": "patch:enhance" +--- + +Improve NSIS configuration path errors so missing installer icons and images include the related config key and path. diff --git a/.changes/nsis-stock-plugins-embed-signed.md b/.changes/nsis-stock-plugins-embed-signed.md new file mode 100644 index 000000000000..dbce16faaef1 --- /dev/null +++ b/.changes/nsis-stock-plugins-embed-signed.md @@ -0,0 +1,5 @@ +--- +"tauri-bundler": "patch:bug" +--- + +Fix NSIS stock plugins (`NSISdl.dll`, `StartMenu.dll`, `System.dll`, `nsDialogs.dll`) being embedded in the final installer as unsigned despite the signing step succeeding. The signed local copies under `/Plugins/x86-unicode/` were not on makensis' plugin search path, so makensis fell back to the unsigned DLLs from the NSIS toolset directory. The fix adds `!addplugindir` for the signed plugin directory before any plugin command is parsed in the script. diff --git a/Cargo.lock b/Cargo.lock index bd6659c89090..efd61396f5d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1321,7 +1321,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -5540,7 +5540,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.60.2", ] [[package]] @@ -8784,7 +8784,7 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.11.1" +version = "2.11.2" dependencies = [ "anyhow", "bytes", @@ -8845,7 +8845,7 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.6.1" +version = "2.6.2" dependencies = [ "anyhow", "cargo_toml", @@ -8866,7 +8866,7 @@ dependencies = [ [[package]] name = "tauri-bundler" -version = "2.9.1" +version = "2.9.2" dependencies = [ "anyhow", "ar", @@ -8912,7 +8912,7 @@ dependencies = [ [[package]] name = "tauri-cli" -version = "2.11.1" +version = "2.11.2" dependencies = [ "ar", "axum", @@ -9006,7 +9006,7 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.6.1" +version = "2.6.2" dependencies = [ "base64 0.22.1", "brotli", @@ -9094,7 +9094,7 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.6.1" +version = "2.6.2" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -9106,7 +9106,7 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.6.1" +version = "2.6.2" dependencies = [ "anyhow", "glob", @@ -9153,7 +9153,7 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.11.1" +version = "2.11.2" dependencies = [ "cookie", "dpi", @@ -9176,7 +9176,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.11.1" +version = "2.11.2" dependencies = [ "gtk", "http 1.3.1", @@ -9226,7 +9226,7 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.9.1" +version = "2.9.2" dependencies = [ "aes-gcm", "anyhow", @@ -10654,7 +10654,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/crates/tauri-build/CHANGELOG.md b/crates/tauri-build/CHANGELOG.md index df654d6eda9f..fb80c0cdf3ee 100644 --- a/crates/tauri-build/CHANGELOG.md +++ b/crates/tauri-build/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[2.6.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` +- Upgraded to `tauri-codegen@2.6.2` + ## \[2.6.1] ### Dependencies diff --git a/crates/tauri-build/Cargo.toml b/crates/tauri-build/Cargo.toml index 78e9b1551522..8061a8f2c3a3 100644 --- a/crates/tauri-build/Cargo.toml +++ b/crates/tauri-build/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-build" -version = "2.6.1" +version = "2.6.2" description = "build time code to pair with https://crates.io/crates/tauri" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -26,8 +26,8 @@ targets = [ [dependencies] anyhow = "1" quote = { version = "1", optional = true } -tauri-codegen = { version = "2.6.1", path = "../tauri-codegen", optional = true } -tauri-utils = { version = "2.9.1", path = "../tauri-utils", features = [ +tauri-codegen = { version = "2.6.2", path = "../tauri-codegen", optional = true } +tauri-utils = { version = "2.9.2", path = "../tauri-utils", features = [ "build-2", "resources", ] } diff --git a/crates/tauri-bundler/CHANGELOG.md b/crates/tauri-bundler/CHANGELOG.md index 31a0e7f95a1f..c86a769b304b 100644 --- a/crates/tauri-bundler/CHANGELOG.md +++ b/crates/tauri-bundler/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.9.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` + ## \[2.9.1] ### Dependencies diff --git a/crates/tauri-bundler/Cargo.toml b/crates/tauri-bundler/Cargo.toml index 5dc1cdb117b3..a32aa0007858 100644 --- a/crates/tauri-bundler/Cargo.toml +++ b/crates/tauri-bundler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-bundler" -version = "2.9.1" +version = "2.9.2" authors = [ "George Burton ", "Tauri Programme within The Commons Conservancy", @@ -15,7 +15,7 @@ rust-version = "1.77.2" exclude = ["CHANGELOG.md", "/target", "rustfmt.toml"] [dependencies] -tauri-utils = { version = "2.9.1", path = "../tauri-utils", features = [ +tauri-utils = { version = "2.9.2", path = "../tauri-utils", features = [ "resources", ] } image = "0.25" diff --git a/crates/tauri-bundler/src/bundle/windows/nsis/installer.nsi b/crates/tauri-bundler/src/bundle/windows/nsis/installer.nsi index a48a46149f6d..d372e3c39177 100644 --- a/crates/tauri-bundler/src/bundle/windows/nsis/installer.nsi +++ b/crates/tauri-bundler/src/bundle/windows/nsis/installer.nsi @@ -13,6 +13,12 @@ ManifestDPIAwareness PerMonitorV2 SetCompressor /SOLID "{{compression}}" !endif +; Keep above !include to stay ahead of any plugin command +; see https://github.com/tauri-apps/tauri/pull/15422#discussion_r3289239624 +{{#if signed_plugins_path}} +!addplugindir "{{signed_plugins_path}}" +{{/if}} + !include MUI2.nsh !include FileFunc.nsh !include x64.nsh diff --git a/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs b/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs index 0ad87c188cab..67563de153a9 100644 --- a/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs +++ b/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs @@ -13,7 +13,7 @@ use crate::{ }, }, }, - error::ErrorExt, + error::{bail, ErrorExt}, utils::{ http_utils::{download_and_verify, verify_file_hash, HashAlgorithm}, CommandExt, @@ -282,6 +282,13 @@ fn build_nsis_app_installer( to_json(&additional_plugins_path), ); + if let Some(plugin_copy_path) = &maybe_plugin_copy_path { + data.insert( + "signed_plugins_path", + to_json(plugin_copy_path.join("x86-unicode")), + ); + } + data.insert("arch", to_json(arch)); data.insert("bundle_id", to_json(bundle_id)); data.insert("manufacturer", to_json(manufacturer)); @@ -319,7 +326,8 @@ fn build_nsis_app_installer( ); if let Some(license_file) = settings.license_file() { - let license_file = dunce::canonicalize(license_file)?; + let license_file = dunce::canonicalize(&license_file) + .fs_context("failed to resolve `bundle > licenseFile`", license_file)?; let license_file_with_bom = output_path.join("license_file"); let content = std::fs::read(license_file)?; write_utf8_with_bom(&license_file_with_bom, content)?; @@ -339,37 +347,58 @@ fn build_nsis_app_installer( if let Some(installer_icon) = &nsis.installer_icon { data.insert( "installer_icon", - to_json(dunce::canonicalize(installer_icon)?), + to_json(dunce::canonicalize(installer_icon).fs_context( + "failed to resolve `bundle > windows > nsis > installerIcon`", + installer_icon.to_owned(), + )?), ); } if let Some(header_image) = &nsis.header_image { - data.insert("header_image", to_json(dunce::canonicalize(header_image)?)); + data.insert( + "header_image", + to_json(dunce::canonicalize(header_image).fs_context( + "failed to resolve `bundle > windows > nsis > headerImage`", + header_image.to_owned(), + )?), + ); } if let Some(sidebar_image) = &nsis.sidebar_image { data.insert( "sidebar_image", - to_json(dunce::canonicalize(sidebar_image)?), + to_json(dunce::canonicalize(sidebar_image).fs_context( + "failed to resolve `bundle > windows > nsis > sidebarImage`", + sidebar_image.to_owned(), + )?), ); } if let Some(uninstaller_icon) = &nsis.uninstaller_icon { data.insert( "uninstaller_icon", - to_json(dunce::canonicalize(uninstaller_icon)?), + to_json(dunce::canonicalize(uninstaller_icon).fs_context( + "failed to resolve `bundle > windows > nsis > uninstallerIcon`", + uninstaller_icon.to_owned(), + )?), ); } if let Some(uninstaller_header_image) = &nsis.uninstaller_header_image { data.insert( "uninstaller_header_image", - to_json(dunce::canonicalize(uninstaller_header_image)?), + to_json(dunce::canonicalize(uninstaller_header_image).fs_context( + "failed to resolve `bundle > windows > nsis > uninstallerHeaderImage`", + uninstaller_header_image.to_owned(), + )?), ); } if let Some(installer_hooks) = &nsis.installer_hooks { - let installer_hooks = dunce::canonicalize(installer_hooks)?; + let installer_hooks = dunce::canonicalize(installer_hooks).fs_context( + "failed to resolve `bundle > windows > nsis > installerHooks`", + installer_hooks.to_owned(), + )?; data.insert("installer_hooks", to_json(installer_hooks)); } @@ -628,7 +657,7 @@ fn build_nsis_app_installer( ); let nsis_output_path = output_path.join(out_file); - let nsis_installer_path = settings.project_out_directory().to_path_buf().join(format!( + let nsis_installer_path = settings.project_out_directory().join(format!( "bundle/{}/{}.exe", if updater { NSIS_UPDATER_OUTPUT_FOLDER_NAME @@ -661,11 +690,7 @@ fn build_nsis_app_installer( #[cfg(not(target_os = "windows"))] let mut nsis_cmd = Command::new("makensis"); - if let Some(plugins_path) = &maybe_plugin_copy_path { - nsis_cmd.env("NSISPLUGINS", plugins_path); - } - - nsis_cmd + let status = nsis_cmd .args(["-INPUTCHARSET", "UTF8", "-OUTPUTCHARSET", "UTF8"]) .arg(match settings.log_level() { log::Level::Error => "-V1", @@ -682,6 +707,9 @@ fn build_nsis_app_installer( command: "makensis.exe".to_string(), error, })?; + if !status.success() { + bail!("Failed to bundle app with makensis"); + } fs::rename(nsis_output_path, &nsis_installer_path)?; diff --git a/crates/tauri-cli/CHANGELOG.md b/crates/tauri-cli/CHANGELOG.md index 66b7b7d8f4ea..03b4ca37d59c 100644 --- a/crates/tauri-cli/CHANGELOG.md +++ b/crates/tauri-cli/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[2.11.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` +- Upgraded to `tauri-bundler@2.9.2` + ## \[2.11.1] ### Dependencies diff --git a/crates/tauri-cli/Cargo.toml b/crates/tauri-cli/Cargo.toml index 97d9409a730c..877394237347 100644 --- a/crates/tauri-cli/Cargo.toml +++ b/crates/tauri-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-cli" -version = "2.11.1" +version = "2.11.2" authors = ["Tauri Programme within The Commons Conservancy"] edition = "2021" rust-version = "1.77.2" @@ -47,7 +47,7 @@ sublime_fuzzy = "0.7" clap_complete = "4" clap = { version = "4", features = ["derive", "env"] } thiserror = "2" -tauri-bundler = { version = "2.9.1", default-features = false, path = "../tauri-bundler" } +tauri-bundler = { version = "2.9.2", default-features = false, path = "../tauri-bundler" } colored = "2" serde = { version = "1", features = ["derive"] } serde_json = { version = "1", features = ["preserve_order"] } @@ -58,7 +58,7 @@ shared_child = "1" duct = "1.0" toml_edit = { version = "0.25", features = ["serde"] } json-patch = "3" -tauri-utils = { version = "2.9.1", path = "../tauri-utils", features = [ +tauri-utils = { version = "2.9.2", path = "../tauri-utils", features = [ "isolation", "schema", "config-json5", diff --git a/crates/tauri-cli/config.schema.json b/crates/tauri-cli/config.schema.json index dbbd5dff137e..898317a465a0 100644 --- a/crates/tauri-cli/config.schema.json +++ b/crates/tauri-cli/config.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schema.tauri.app/config/2.11.1", + "$id": "https://schema.tauri.app/config/2.11.2", "title": "Config", "description": "The Tauri configuration object.\n It is read from a file where you can define your frontend assets,\n configure the bundler and define a tray icon.\n\n The configuration file is generated by the\n [`tauri init`](https://v2.tauri.app/reference/cli/#init) command that lives in\n your Tauri application source directory (src-tauri).\n\n Once generated, you may modify it at will to customize your Tauri application.\n\n ## File Formats\n\n By default, the configuration is defined as a JSON file named `tauri.conf.json`.\n\n Tauri also supports JSON5 and TOML files via the `config-json5` and `config-toml` Cargo features, respectively.\n The JSON5 file name must be either `tauri.conf.json` or `tauri.conf.json5`.\n The TOML file name is `Tauri.toml`.\n\n ## Platform-Specific Configuration\n\n In addition to the default configuration file, Tauri can\n read a platform-specific configuration from `tauri.linux.conf.json`,\n `tauri.windows.conf.json`, `tauri.macos.conf.json`, `tauri.android.conf.json` and `tauri.ios.conf.json`\n (or `Tauri.linux.toml`, `Tauri.windows.toml`, `Tauri.macos.toml`, `Tauri.android.toml` and `Tauri.ios.toml` if the `Tauri.toml` format is used),\n which gets merged with the main configuration object.\n\n ## Configuration Structure\n\n The configuration is composed of the following objects:\n\n - [`app`](#appconfig): The Tauri configuration\n - [`build`](#buildconfig): The build configuration\n - [`bundle`](#bundleconfig): The bundle configurations\n - [`plugins`](#pluginconfig): The plugins configuration\n\n Example tauri.config.json file:\n\n ```json\n {\n \"productName\": \"tauri-app\",\n \"version\": \"0.1.0\",\n \"build\": {\n \"beforeBuildCommand\": \"\",\n \"beforeDevCommand\": \"\",\n \"devUrl\": \"http://localhost:3000\",\n \"frontendDist\": \"../dist\"\n },\n \"app\": {\n \"security\": {\n \"csp\": null\n },\n \"windows\": [\n {\n \"fullscreen\": false,\n \"height\": 600,\n \"resizable\": true,\n \"title\": \"Tauri App\",\n \"width\": 800\n }\n ]\n },\n \"bundle\": {},\n \"plugins\": {}\n }\n ```", "type": "object", diff --git a/crates/tauri-cli/metadata-v2.json b/crates/tauri-cli/metadata-v2.json index 091d891cd366..9484a7df7caa 100644 --- a/crates/tauri-cli/metadata-v2.json +++ b/crates/tauri-cli/metadata-v2.json @@ -1,9 +1,9 @@ { "cli.js": { - "version": "2.11.1", + "version": "2.11.2", "node": ">= 10.0.0" }, - "tauri": "2.11.1", - "tauri-build": "2.6.1", - "tauri-plugin": "2.6.1" + "tauri": "2.11.2", + "tauri-build": "2.6.2", + "tauri-plugin": "2.6.2" } diff --git a/crates/tauri-codegen/CHANGELOG.md b/crates/tauri-codegen/CHANGELOG.md index fa8c1c97352d..a445a96af25a 100644 --- a/crates/tauri-codegen/CHANGELOG.md +++ b/crates/tauri-codegen/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.6.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` + ## \[2.6.1] ### Dependencies diff --git a/crates/tauri-codegen/Cargo.toml b/crates/tauri-codegen/Cargo.toml index 5f49642cbb78..9f23170ebc8a 100644 --- a/crates/tauri-codegen/Cargo.toml +++ b/crates/tauri-codegen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-codegen" -version = "2.6.1" +version = "2.6.2" description = "code generation meant to be consumed inside of `tauri` through `tauri-build` or `tauri-macros`" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -20,7 +20,7 @@ quote = "1" syn = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" -tauri-utils = { version = "2.9.1", path = "../tauri-utils", features = [ +tauri-utils = { version = "2.9.2", path = "../tauri-utils", features = [ "build-2", ] } thiserror = "2" diff --git a/crates/tauri-macros/CHANGELOG.md b/crates/tauri-macros/CHANGELOG.md index 2e3ec6a59577..1058cdb099b1 100644 --- a/crates/tauri-macros/CHANGELOG.md +++ b/crates/tauri-macros/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[2.6.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` +- Upgraded to `tauri-codegen@2.6.2` + ## \[2.6.1] ### Dependencies diff --git a/crates/tauri-macros/Cargo.toml b/crates/tauri-macros/Cargo.toml index 69e7f3891684..8b50579b6db1 100644 --- a/crates/tauri-macros/Cargo.toml +++ b/crates/tauri-macros/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-macros" -version = "2.6.1" +version = "2.6.2" description = "Macros for the tauri crate." exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -20,8 +20,8 @@ proc-macro2 = { version = "1", features = ["span-locations"] } quote = "1" syn = { version = "2", features = ["full"] } heck = "0.5" -tauri-codegen = { version = "2.6.1", default-features = false, path = "../tauri-codegen" } -tauri-utils = { version = "2.9.1", path = "../tauri-utils" } +tauri-codegen = { version = "2.6.2", default-features = false, path = "../tauri-codegen" } +tauri-utils = { version = "2.9.2", path = "../tauri-utils" } [features] custom-protocol = [] diff --git a/crates/tauri-plugin/CHANGELOG.md b/crates/tauri-plugin/CHANGELOG.md index 8667ba6939ac..b721b377ca6c 100644 --- a/crates/tauri-plugin/CHANGELOG.md +++ b/crates/tauri-plugin/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.6.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` + ## \[2.6.1] ### Dependencies diff --git a/crates/tauri-plugin/Cargo.toml b/crates/tauri-plugin/Cargo.toml index f169d51852f9..496c3500c97c 100644 --- a/crates/tauri-plugin/Cargo.toml +++ b/crates/tauri-plugin/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-plugin" -version = "2.6.1" +version = "2.6.2" description = "Build script and runtime Tauri plugin definitions" authors.workspace = true homepage.workspace = true @@ -27,7 +27,7 @@ runtime = [] [dependencies] anyhow = { version = "1", optional = true } serde = { version = "1", optional = true } -tauri-utils = { version = "2.9.1", default-features = false, features = [ +tauri-utils = { version = "2.9.2", default-features = false, features = [ "build-2", ], path = "../tauri-utils" } serde_json = { version = "1", optional = true } diff --git a/crates/tauri-runtime-wry/CHANGELOG.md b/crates/tauri-runtime-wry/CHANGELOG.md index 3f31a89f6380..8dacff6c100e 100644 --- a/crates/tauri-runtime-wry/CHANGELOG.md +++ b/crates/tauri-runtime-wry/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## \[2.11.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` +- Upgraded to `tauri-runtime@2.11.2` + ## \[2.11.1] ### Dependencies diff --git a/crates/tauri-runtime-wry/Cargo.toml b/crates/tauri-runtime-wry/Cargo.toml index 219336a9e479..d74e82031e19 100644 --- a/crates/tauri-runtime-wry/Cargo.toml +++ b/crates/tauri-runtime-wry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-runtime-wry" -version = "2.11.1" +version = "2.11.2" description = "Wry bindings to the Tauri runtime" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -19,8 +19,8 @@ wry = { version = "0.55.0", default-features = false, features = [ "linux-body", ] } tao = { version = "0.35.0", default-features = false, features = ["rwh_06"] } -tauri-runtime = { version = "2.11.1", path = "../tauri-runtime" } -tauri-utils = { version = "2.9.1", path = "../tauri-utils" } +tauri-runtime = { version = "2.11.2", path = "../tauri-runtime" } +tauri-utils = { version = "2.9.2", path = "../tauri-utils" } raw-window-handle = "0.6" http = "1" url = "2" diff --git a/crates/tauri-runtime-wry/src/dialog/mod.rs b/crates/tauri-runtime-wry/src/dialog/mod.rs index 156d6a6d2a4c..3befa7b8a0bf 100644 --- a/crates/tauri-runtime-wry/src/dialog/mod.rs +++ b/crates/tauri-runtime-wry/src/dialog/mod.rs @@ -5,7 +5,9 @@ #[cfg(windows)] mod windows; -pub fn error>(err: S) { +// Takes a `&'static str` here since we convert clickable hyperlinks, +// DO NOT pass in untrusted input +pub fn error(err: &'static str) { #[cfg(windows)] windows::error(err); diff --git a/crates/tauri-runtime-wry/src/dialog/windows.rs b/crates/tauri-runtime-wry/src/dialog/windows.rs index 2f520c563723..0f9b2c2a65e1 100644 --- a/crates/tauri-runtime-wry/src/dialog/windows.rs +++ b/crates/tauri-runtime-wry/src/dialog/windows.rs @@ -12,8 +12,8 @@ enum Level { Info, } -pub fn error>(err: S) { - dialog_inner(err.as_ref(), Level::Error); +pub fn error(err: &'static str) { + dialog_inner(err, Level::Error); } fn dialog_inner(err: &str, level: Level) { diff --git a/crates/tauri-runtime/CHANGELOG.md b/crates/tauri-runtime/CHANGELOG.md index bbcb4bd54e71..fab7ce5bb382 100644 --- a/crates/tauri-runtime/CHANGELOG.md +++ b/crates/tauri-runtime/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.11.2] + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` + ## \[2.11.1] ### Dependencies diff --git a/crates/tauri-runtime/Cargo.toml b/crates/tauri-runtime/Cargo.toml index 48a1c0b4ae31..7b73df4588f6 100644 --- a/crates/tauri-runtime/Cargo.toml +++ b/crates/tauri-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-runtime" -version = "2.11.1" +version = "2.11.2" description = "Runtime for Tauri applications" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" @@ -27,7 +27,7 @@ targets = [ serde = { version = "1", features = ["derive"] } serde_json = "1" thiserror = "2" -tauri-utils = { version = "2.9.1", path = "../tauri-utils" } +tauri-utils = { version = "2.9.2", path = "../tauri-utils" } http = "1" raw-window-handle = "0.6" url = { version = "2" } diff --git a/crates/tauri-schema-generator/schemas/config.schema.json b/crates/tauri-schema-generator/schemas/config.schema.json index dbbd5dff137e..898317a465a0 100644 --- a/crates/tauri-schema-generator/schemas/config.schema.json +++ b/crates/tauri-schema-generator/schemas/config.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schema.tauri.app/config/2.11.1", + "$id": "https://schema.tauri.app/config/2.11.2", "title": "Config", "description": "The Tauri configuration object.\n It is read from a file where you can define your frontend assets,\n configure the bundler and define a tray icon.\n\n The configuration file is generated by the\n [`tauri init`](https://v2.tauri.app/reference/cli/#init) command that lives in\n your Tauri application source directory (src-tauri).\n\n Once generated, you may modify it at will to customize your Tauri application.\n\n ## File Formats\n\n By default, the configuration is defined as a JSON file named `tauri.conf.json`.\n\n Tauri also supports JSON5 and TOML files via the `config-json5` and `config-toml` Cargo features, respectively.\n The JSON5 file name must be either `tauri.conf.json` or `tauri.conf.json5`.\n The TOML file name is `Tauri.toml`.\n\n ## Platform-Specific Configuration\n\n In addition to the default configuration file, Tauri can\n read a platform-specific configuration from `tauri.linux.conf.json`,\n `tauri.windows.conf.json`, `tauri.macos.conf.json`, `tauri.android.conf.json` and `tauri.ios.conf.json`\n (or `Tauri.linux.toml`, `Tauri.windows.toml`, `Tauri.macos.toml`, `Tauri.android.toml` and `Tauri.ios.toml` if the `Tauri.toml` format is used),\n which gets merged with the main configuration object.\n\n ## Configuration Structure\n\n The configuration is composed of the following objects:\n\n - [`app`](#appconfig): The Tauri configuration\n - [`build`](#buildconfig): The build configuration\n - [`bundle`](#bundleconfig): The bundle configurations\n - [`plugins`](#pluginconfig): The plugins configuration\n\n Example tauri.config.json file:\n\n ```json\n {\n \"productName\": \"tauri-app\",\n \"version\": \"0.1.0\",\n \"build\": {\n \"beforeBuildCommand\": \"\",\n \"beforeDevCommand\": \"\",\n \"devUrl\": \"http://localhost:3000\",\n \"frontendDist\": \"../dist\"\n },\n \"app\": {\n \"security\": {\n \"csp\": null\n },\n \"windows\": [\n {\n \"fullscreen\": false,\n \"height\": 600,\n \"resizable\": true,\n \"title\": \"Tauri App\",\n \"width\": 800\n }\n ]\n },\n \"bundle\": {},\n \"plugins\": {}\n }\n ```", "type": "object", diff --git a/crates/tauri-utils/CHANGELOG.md b/crates/tauri-utils/CHANGELOG.md index dc7ed0537832..435dc48706c7 100644 --- a/crates/tauri-utils/CHANGELOG.md +++ b/crates/tauri-utils/CHANGELOG.md @@ -1,5 +1,37 @@ # Changelog +## \[2.9.2] + +### Bug Fixes + +- [`b5b72ce51`](https://www.github.com/tauri-apps/tauri/commit/b5b72ce51811e9f95b1f7e9a05ea19c8f12ce694) ([#15383](https://www.github.com/tauri-apps/tauri/pull/15383) by [@Legend-Master](https://www.github.com/tauri-apps/tauri/../../Legend-Master)) Fix a regression in tauri-utils 2.8.3 that made empty path an invalid resource target, e.g. + + ```json + { + "bundle": { + "resources": { + "README.md": "", + } + } + } + ``` + + (this means `README.md` -> `$RESOURCE/README.md`, note this is a confusing behavior, and will be changed in v3) +- [`3fd8ba2c0`](https://www.github.com/tauri-apps/tauri/commit/3fd8ba2c022717068ff6a154ce12942c3a672232) ([#15388](https://www.github.com/tauri-apps/tauri/pull/15388) by [@Legend-Master](https://www.github.com/tauri-apps/tauri/../../Legend-Master)) Fix a regression in tauri-utils 2.8.3 that made an empty directory makes it skip all the following entries, e.g. + + ```json + { + "bundle": { + "resources": [ + "empty-directory", + "README.md" + ] + } + } + ``` + + if `empty-directory` is empty, the `README.md` will not be copied to the resource directory (skipped) + ## \[2.9.1] ### Dependencies diff --git a/crates/tauri-utils/Cargo.toml b/crates/tauri-utils/Cargo.toml index 2f0ae3c0efdd..7f39104d797c 100644 --- a/crates/tauri-utils/Cargo.toml +++ b/crates/tauri-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri-utils" -version = "2.9.1" +version = "2.9.2" description = "Utilities for Tauri" exclude = ["CHANGELOG.md", "/target"] readme = "README.md" diff --git a/crates/tauri-utils/src/acl/identifier.rs b/crates/tauri-utils/src/acl/identifier.rs index 26c7326d2c6d..72a7ec2f359c 100644 --- a/crates/tauri-utils/src/acl/identifier.rs +++ b/crates/tauri-utils/src/acl/identifier.rs @@ -17,7 +17,10 @@ const MAX_LEN_PREFIX: usize = 64 - PLUGIN_PREFIX.len(); const MAX_LEN_BASE: usize = 64; const MAX_LEN_IDENTIFIER: usize = MAX_LEN_PREFIX + 1 + MAX_LEN_BASE; -/// Plugin identifier. +/// Permission identifier. +/// +/// Typically used in the [`permissions`](crate::acl::Capability::permissions) field of a capability file. +/// (e.g. `core:default`, `sample:allow-ping-scoped`) #[derive(Debug, Clone, PartialEq, Eq)] pub struct Identifier { inner: String, @@ -213,7 +216,12 @@ impl<'de> Deserialize<'de> for Identifier { where D: Deserializer<'de>, { - Self::try_from(String::deserialize(deserializer)?).map_err(serde::de::Error::custom) + let raw = String::deserialize(deserializer)?; + Self::try_from(raw.clone()).map_err(|e| { + serde::de::Error::custom(format!( + "invalid plugin or permission identifier '{raw}': {e}" + )) + }) } } diff --git a/crates/tauri-utils/src/resources.rs b/crates/tauri-utils/src/resources.rs index 3fd0290b78ac..6c30b89de486 100644 --- a/crates/tauri-utils/src/resources.rs +++ b/crates/tauri-utils/src/resources.rs @@ -209,7 +209,21 @@ impl ResourcePathsIter<'_> { // preserving the file name as it is ResourcePathsInnerIter::Glob { .. } => dest.join(path.file_name().unwrap()), }, - None => dest.clone(), + None => { + if dest.components().count() == 0 { + // if current_dest is empty while processing a file pattern + // we preserve the file name as it is + // + // e.g. `{ "README.md": "" }` is `README.md` -> `$RESOURCE/README.md` + // + // TODO: This behavior is a confusing special case, + // remove this in v3 or make other cases like this work + // > `{ "README.md": "./folder/" }` is `README.md` -> `$RESOURCE/folder/README.md` (this gives `$RESOURCE/folder` today) + PathBuf::from(path.file_name().unwrap()) + } else { + dest.clone() + } + } } } else { // If [`ResourcePathsIter::pattern_iter`] is a [`PatternIter::Slice`] @@ -221,6 +235,7 @@ impl ResourcePathsIter<'_> { fn next_pattern(&mut self) -> Option> { self.current_dest = None; + self.current_iter = None; let pattern = match &mut self.pattern_iter { PatternIter::Slice(iter) => iter.next()?, @@ -237,10 +252,10 @@ impl ResourcePathsIter<'_> { Err(error) => return Some(Err(error.into())), }; match self.next_current_iter() { - Some(r) => return Some(r), + Some(r) => Some(r), None => { self.current_iter = None; - return Some(Err(crate::Error::GlobPathNotFound(pattern.clone()))); + Some(Err(crate::Error::GlobPathNotFound(pattern.clone()))) } } } else { @@ -257,12 +272,12 @@ impl ResourcePathsIter<'_> { None }, }); + // If the directory is empty, skip and continue to the next pattern + self.next_current_iter().or_else(|| self.next_pattern()) } else { - return Some(self.resource_from_path(path)); + Some(self.resource_from_path(path)) } } - - self.next_current_iter() } } @@ -358,6 +373,7 @@ mod tests { fs::create_dir_all(path.parent().unwrap()).unwrap(); fs::write(path, "").unwrap(); } + fs::create_dir_all("empty-directory").unwrap(); } fn resources_map(literal: &[(&str, &str)]) -> HashMap { @@ -377,6 +393,8 @@ mod tests { let resources = ResourcePaths::new( &[ + // `empty-directory` should not affect anything + "../empty-directory".into(), "../src/script.js".into(), "../src/assets".into(), "../src/index.html".into(), diff --git a/crates/tauri/CHANGELOG.md b/crates/tauri/CHANGELOG.md index 0803ad1a511c..b709e89f0c0b 100644 --- a/crates/tauri/CHANGELOG.md +++ b/crates/tauri/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## \[2.11.2] + +### Bug Fixes + +- [`47e1b7549`](https://www.github.com/tauri-apps/tauri/commit/47e1b754951bffeedbcd6400928d60755fb954de) ([#15386](https://www.github.com/tauri-apps/tauri/pull/15386) by [@DominikPeters](https://www.github.com/tauri-apps/tauri/../../DominikPeters)) Fixed `Submenu.setAsWindowsMenuForNSApp()` calling the Help menu setter instead of the Window menu setter. + +### Dependencies + +- Upgraded to `tauri-utils@2.9.2` +- Upgraded to `tauri-runtime@2.11.2` +- Upgraded to `tauri-runtime-wry@2.11.2` +- Upgraded to `tauri-macros@2.6.2` +- Upgraded to `tauri-build@2.6.2` + ## \[2.11.1] ### Enhancements diff --git a/crates/tauri/Cargo.toml b/crates/tauri/Cargo.toml index 7e6a3669de25..4c2a84ee35fb 100644 --- a/crates/tauri/Cargo.toml +++ b/crates/tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tauri" -version = "2.11.1" +version = "2.11.2" description = "Make tiny, secure apps for all desktop platforms with Tauri" exclude = ["/test", "/.scripts", "CHANGELOG.md", "/target"] readme = "README.md" @@ -56,12 +56,12 @@ uuid = { version = "1", features = ["v4"], optional = true } url = "2" anyhow = "1" thiserror = "2" -tauri-runtime = { version = "2.11.1", path = "../tauri-runtime" } -tauri-macros = { version = "2.6.1", path = "../tauri-macros" } -tauri-utils = { version = "2.9.1", features = [ +tauri-runtime = { version = "2.11.2", path = "../tauri-runtime" } +tauri-macros = { version = "2.6.2", path = "../tauri-macros" } +tauri-utils = { version = "2.9.2", features = [ "resources", ], path = "../tauri-utils" } -tauri-runtime-wry = { version = "2.11.1", path = "../tauri-runtime-wry", default-features = false, optional = true } +tauri-runtime-wry = { version = "2.11.2", path = "../tauri-runtime-wry", default-features = false, optional = true } getrandom = "0.3" serde_repr = "0.1" http = "1" @@ -168,8 +168,8 @@ objc2-ui-kit = { version = "0.3.0", default-features = false, features = [ [build-dependencies] glob = "0.3" heck = "0.5" -tauri-build = { path = "../tauri-build/", default-features = false, version = "2.6.1" } -tauri-utils = { path = "../tauri-utils/", version = "2.9.1", features = [ +tauri-build = { path = "../tauri-build/", default-features = false, version = "2.6.2" } +tauri-utils = { path = "../tauri-utils/", version = "2.9.2", features = [ "build-2", ] } diff --git a/crates/tauri/src/menu/plugin.rs b/crates/tauri/src/menu/plugin.rs index 84ab54a98d22..7f6741d00315 100644 --- a/crates/tauri/src/menu/plugin.rs +++ b/crates/tauri/src/menu/plugin.rs @@ -815,7 +815,7 @@ fn set_as_windows_menu_for_nsapp( { let resources_table = webview.resources_table(); let submenu = resources_table.get::>(rid)?; - submenu.set_as_help_menu_for_nsapp()?; + submenu.set_as_windows_menu_for_nsapp()?; } let _ = rid; diff --git a/examples/api/package.json b/examples/api/package.json index d51a35a93bc3..53780ea95741 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -17,7 +17,7 @@ "@iconify-json/ph": "^1.2.2", "@sveltejs/vite-plugin-svelte": "^7.0.0", "@unocss/extractor-svelte": "^66.6.6", - "svelte": "^5.53.11", + "svelte": "^5.55.7", "unocss": "^66.6.6", "vite": "^8.0.5" } diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 23d2df879996..6c89dbbd5c1b 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## \[2.11.2] + +### Dependencies + +- Upgraded to `tauri-cli@2.11.2` + ## \[2.11.1] ### Dependencies diff --git a/packages/cli/package.json b/packages/cli/package.json index 71e70da4653c..5830278fb99b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-apps/cli", - "version": "2.11.1", + "version": "2.11.2", "description": "Command line interface for building Tauri apps", "type": "commonjs", "funding": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6bc5043f3f2f..ebf53f4c5cd1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + ws@>=8.0.0 <8.20.1: '>=8.20.1' + importers: .: @@ -32,13 +35,13 @@ importers: version: 1.2.2 '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 - version: 7.0.0(svelte@5.53.11)(vite@8.0.5(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0)) + version: 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.2))(vite@8.0.5(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0)) '@unocss/extractor-svelte': specifier: ^66.6.6 version: 66.6.6 svelte: - specifier: ^5.53.11 - version: 5.53.11 + specifier: ^5.55.7 + version: 5.55.7(@typescript-eslint/types@8.58.2) unocss: specifier: ^66.6.6 version: 66.6.6(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(vite@8.0.5(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0)) @@ -1578,6 +1581,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1793,8 +1799,8 @@ packages: blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -1895,8 +1901,8 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.6.4: - resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -1973,8 +1979,13 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.3: - resolution: {integrity: sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==} + esrap@2.2.8: + resolution: {integrity: sha512-MPweq2EvEGj8jwOI7Hgycw/QIHzqA1EbAM8lG7p+FBfZbZq/hQ6h3AMsqnu/djzisH1KVWNzbb7LSgIVtMlPSg==} + peerDependencies: + '@typescript-eslint/types': ^8.2.0 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -2470,8 +2481,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.53.11: - resolution: {integrity: sha512-GYmqRjRhJYLQBonfdfGAt28gkfWEShrtXKGXcFGneXi502aBE+I1dJcs/YQriByvP6xqXRz/OdBGC6tfvUQHyQ==} + svelte@5.55.7: + resolution: {integrity: sha512-ymI5ykLPwIHW839E053FQbI1G+jnRFJEw3Kv5Y4njixVWywQBx+NUFpkkKyk5LIb36Fg9DVXSYpqiGekLD0hyw==} engines: {node: '>=18'} terser@5.46.0: @@ -2742,8 +2753,8 @@ packages: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3711,7 +3722,7 @@ snapshots: '@rollup/pluginutils@5.3.0(rollup@4.60.3)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: @@ -3802,12 +3813,12 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.11)(vite@8.0.5(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0))': + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.58.2))(vite@8.0.5(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.53.11 + svelte: 5.55.7(@typescript-eslint/types@8.58.2) vite: 8.0.5(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0) vitefu: 1.1.2(vite@8.0.5(@emnapi/core@1.8.1)(@emnapi/runtime@1.8.1)(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0)) @@ -3832,6 +3843,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/json-schema@7.0.15': {} '@types/node@24.11.0': @@ -4137,7 +4150,7 @@ snapshots: blake3-wasm@2.1.5: {} - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -4211,7 +4224,7 @@ snapshots: detect-libc@2.1.2: {} - devalue@5.6.4: {} + devalue@5.8.1: {} duplexer@0.1.2: {} @@ -4267,7 +4280,7 @@ snapshots: eslint-scope@9.1.1: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -4324,9 +4337,11 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.3: + esrap@2.2.8(@typescript-eslint/types@8.58.2): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + optionalDependencies: + '@typescript-eslint/types': 8.58.2 esrecurse@4.3.0: dependencies: @@ -4338,7 +4353,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -4437,7 +4452,7 @@ snapshots: is-reference@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 isexe@2.0.0: {} @@ -4550,7 +4565,7 @@ snapshots: sharp: 0.34.5 undici: 7.24.4 workerd: 1.20260317.1 - ws: 8.18.0 + ws: 8.20.1 youch: 4.1.0-beta.10 transitivePeerDependencies: - bufferutil @@ -4558,7 +4573,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 mlly@1.8.0: dependencies: @@ -4836,24 +4851,26 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.53.11: + svelte@5.55.7(@typescript-eslint/types@8.58.2): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/trusted-types': 2.0.7 acorn: 8.16.0 aria-query: 5.3.1 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.6.4 + devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.3 + esrap: 2.2.8(@typescript-eslint/types@8.58.2) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' terser@5.46.0: dependencies: @@ -5087,7 +5104,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - ws@8.18.0: {} + ws@8.20.1: {} yocto-queue@0.1.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f0a696121145..04054138f8ce 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,3 +9,6 @@ packages: onlyBuiltDependencies: - esbuild - workerd + +overrides: + ws@>=8.0.0 <8.20.1: '>=8.20.1'