From fa028ebf3c8ca7b43a70d283a01dbea86217594f Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Wed, 6 Jul 2022 09:29:26 -0300 Subject: [PATCH] refactor: do not pass entire config from CLI to core, send patch instead (#4598) --- .changes/tauri-config-refactor.md | 8 ++++++++ core/tauri-build/Cargo.toml | 1 + core/tauri-build/src/lib.rs | 15 ++++++++------- core/tauri-codegen/Cargo.toml | 1 + core/tauri-codegen/src/lib.rs | 13 +++++++------ examples/api/src-tauri/Cargo.lock | 2 ++ tooling/cli/src/helpers/config.rs | 2 +- 7 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 .changes/tauri-config-refactor.md diff --git a/.changes/tauri-config-refactor.md b/.changes/tauri-config-refactor.md new file mode 100644 index 000000000..ecd1b72a6 --- /dev/null +++ b/.changes/tauri-config-refactor.md @@ -0,0 +1,8 @@ +--- +"cli.rs": patch +"cli.js": patch +"tauri-build": patch +"tauri-codegen": patch +--- + +The `TAURI_CONFIG` environment variable now represents the configuration to be merged instead of the entire JSON. diff --git a/core/tauri-build/Cargo.toml b/core/tauri-build/Cargo.toml index 8483e3916..d7dc1df20 100644 --- a/core/tauri-build/Cargo.toml +++ b/core/tauri-build/Cargo.toml @@ -24,6 +24,7 @@ tauri-utils = { version = "1.0.2", path = "../tauri-utils", features = [ "build" cargo_toml = "0.11" serde_json = "1" heck = "0.4" +json-patch = "0.2" [target."cfg(windows)".dependencies] winres = "0.1" diff --git a/core/tauri-build/src/lib.rs b/core/tauri-build/src/lib.rs index 1cbb4ebb1..5e2ecff0f 100644 --- a/core/tauri-build/src/lib.rs +++ b/core/tauri-build/src/lib.rs @@ -185,13 +185,14 @@ pub fn try_build(attributes: Attributes) -> Result<()> { #[cfg(feature = "config-json5")] println!("cargo:rerun-if-changed=tauri.conf.json5"); - let config: Config = if let Ok(env) = std::env::var("TAURI_CONFIG") { - serde_json::from_str(&env)? - } else { - serde_json::from_value(tauri_utils::config::parse::read_from( - std::env::current_dir().unwrap(), - )?)? - }; + let mut config = serde_json::from_value(tauri_utils::config::parse::read_from( + std::env::current_dir().unwrap(), + )?)?; + if let Ok(env) = std::env::var("TAURI_CONFIG") { + let merge_config: serde_json::Value = serde_json::from_str(&env)?; + json_patch::merge(&mut config, &merge_config); + } + let config: Config = serde_json::from_value(config)?; cfg_alias("dev", !has_feature("custom-protocol")); diff --git a/core/tauri-codegen/Cargo.toml b/core/tauri-codegen/Cargo.toml index cba971b96..cb1eb8877 100644 --- a/core/tauri-codegen/Cargo.toml +++ b/core/tauri-codegen/Cargo.toml @@ -28,6 +28,7 @@ uuid = { version = "1", features = [ "v4" ] } semver = "1" ico = "0.1" png = "0.17" +json-patch = "0.2" [target."cfg(target_os = \"macos\")".dependencies] plist = "1" diff --git a/core/tauri-codegen/src/lib.rs b/core/tauri-codegen/src/lib.rs index e89f8082d..b0c4d0b73 100644 --- a/core/tauri-codegen/src/lib.rs +++ b/core/tauri-codegen/src/lib.rs @@ -57,11 +57,12 @@ pub fn get_config(path: &Path) -> Result<(Config, PathBuf), CodegenConfigError> // it is impossible for the content of two separate configs to get mixed up. The chances are // already unlikely unless the developer goes out of their way to run the cli on a different // project than the target crate. - let config = if let Ok(env) = std::env::var("TAURI_CONFIG") { - serde_json::from_str(&env).map_err(CodegenConfigError::FormatInline)? - } else { - serde_json::from_value(tauri_utils::config::parse::read_from(parent.clone())?)? - }; + let mut config = serde_json::from_value(tauri_utils::config::parse::read_from(parent.clone())?)?; + if let Ok(env) = std::env::var("TAURI_CONFIG") { + let merge_config: serde_json::Value = + serde_json::from_str(&env).map_err(CodegenConfigError::FormatInline)?; + json_patch::merge(&mut config, &merge_config); + } - Ok((config, parent)) + Ok((serde_json::from_value(config)?, parent)) } diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index e171d00ba..00c1b8194 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/examples/api/src-tauri/Cargo.lock @@ -3199,6 +3199,7 @@ dependencies = [ "anyhow", "cargo_toml", "heck 0.4.0", + "json-patch", "semver 1.0.10", "serde_json", "tauri-codegen", @@ -3213,6 +3214,7 @@ dependencies = [ "base64", "brotli", "ico", + "json-patch", "plist", "png 0.17.5", "proc-macro2", diff --git a/tooling/cli/src/helpers/config.rs b/tooling/cli/src/helpers/config.rs index 619f26391..03c7f227f 100644 --- a/tooling/cli/src/helpers/config.rs +++ b/tooling/cli/src/helpers/config.rs @@ -118,6 +118,7 @@ fn get_internal(merge_config: Option<&str>, reload: bool) -> crate::Result, reload: bool) -> crate::Result