diff options
author | Alessandro Scandone <alescandone@gmail.com> | 2023-09-22 11:21:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-22 11:21:38 +0200 |
commit | 15cfb675512db5723f7deee9965390f038dc1c41 (patch) | |
tree | 6dbf78a4d76831acf118ffc9d74b576b60c7886c /ext/node/package_json.rs | |
parent | 65a94a6176e3a76ca52d0666cf882689ac0b5b9c (diff) |
fix(node/package_json): Avoid panic when "exports" field is null (#20588)
Fixes #20558
Implementation: when package.json `exports` field is `null`, treat it as
if it was not set
Diffstat (limited to 'ext/node/package_json.rs')
-rw-r--r-- | ext/node/package_json.rs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/ext/node/package_json.rs b/ext/node/package_json.rs index ae5e159a1..0b20a019e 100644 --- a/ext/node/package_json.rs +++ b/ext/node/package_json.rs @@ -114,14 +114,14 @@ impl PackageJson { let version_val = package_json.get("version"); let type_val = package_json.get("type"); let bin = package_json.get("bin").map(ToOwned::to_owned); - let exports = package_json.get("exports").map(|exports| { - if is_conditional_exports_main_sugar(exports) { + let exports = package_json.get("exports").and_then(|exports| { + Some(if is_conditional_exports_main_sugar(exports) { let mut map = Map::new(); map.insert(".".to_string(), exports.to_owned()); map } else { - exports.as_object().unwrap().to_owned() - } + exports.as_object()?.to_owned() + }) }); let imports = imports_val @@ -240,3 +240,19 @@ fn is_conditional_exports_main_sugar(exports: &Value) -> bool { is_conditional_sugar } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn null_exports_should_not_crash() { + let package_json = PackageJson::load_from_string( + PathBuf::from("/package.json"), + r#"{ "exports": null }"#.to_string(), + ) + .unwrap(); + + assert!(package_json.exports.is_none()); + } +} |