From 41f618a1df6bb8c66d7968ac64456139b9f4c197 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 17 May 2023 17:38:50 -0400 Subject: fix(npm): improved optional dependency support (#19135) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Note: If the package information has already been cached, then this requires running with `--reload` or for the registry information to be fetched some other way (ex. the cache busting). Closes #15544 --------- Co-authored-by: Bartek IwaƄczuk --- test_util/src/npm.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'test_util/src/npm.rs') diff --git a/test_util/src/npm.rs b/test_util/src/npm.rs index 9600b0bce..18949ad44 100644 --- a/test_util/src/npm.rs +++ b/test_util/src/npm.rs @@ -136,6 +136,30 @@ fn get_npm_package(package_name: &str) -> Result> { let mut version_info: serde_json::Map = serde_json::from_str(&package_json_text)?; version_info.insert("dist".to_string(), dist.into()); + + if let Some(maybe_optional_deps) = version_info.get("optionalDependencies") + { + if let Some(optional_deps) = maybe_optional_deps.as_object() { + if let Some(maybe_deps) = version_info.get("dependencies") { + if let Some(deps) = maybe_deps.as_object() { + let mut cloned_deps = deps.to_owned(); + for (key, value) in optional_deps { + cloned_deps.insert(key.to_string(), value.to_owned()); + } + version_info.insert( + "dependencies".to_string(), + serde_json::to_value(cloned_deps).unwrap(), + ); + } + } else { + version_info.insert( + "dependencies".to_string(), + serde_json::to_value(optional_deps).unwrap(), + ); + } + } + } + versions.insert(version.clone(), version_info.into()); let version = semver::Version::parse(&version)?; if version.cmp(&latest_version).is_gt() { -- cgit v1.2.3