summaryrefslogtreecommitdiff
path: root/test_util/src/npm.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-05-17 17:38:50 -0400
committerGitHub <noreply@github.com>2023-05-17 17:38:50 -0400
commit41f618a1df6bb8c66d7968ac64456139b9f4c197 (patch)
treedbcc67e009cf70099be82ea3774669e8aefc6023 /test_util/src/npm.rs
parentad223362451688c13a4441563210f58bdb046a78 (diff)
fix(npm): improved optional dependency support (#19135)
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 <biwanczuk@gmail.com>
Diffstat (limited to 'test_util/src/npm.rs')
-rw-r--r--test_util/src/npm.rs24
1 files changed, 24 insertions, 0 deletions
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<Option<CustomNpmPackage>> {
let mut version_info: serde_json::Map<String, serde_json::Value> =
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() {