summaryrefslogtreecommitdiff
path: root/ext/node/package_json.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/package_json.rs')
-rw-r--r--ext/node/package_json.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/ext/node/package_json.rs b/ext/node/package_json.rs
index e40448930..b05362890 100644
--- a/ext/node/package_json.rs
+++ b/ext/node/package_json.rs
@@ -33,6 +33,8 @@ pub struct PackageJson {
pub path: PathBuf,
pub typ: String,
pub types: Option<String>,
+ pub dependencies: Option<HashMap<String, String>>,
+ pub dev_dependencies: Option<HashMap<String, String>>,
}
impl PackageJson {
@@ -49,6 +51,8 @@ impl PackageJson {
path,
typ: "none".to_string(),
types: None,
+ dependencies: None,
+ dev_dependencies: None,
}
}
@@ -86,6 +90,13 @@ impl PackageJson {
return Ok(PackageJson::empty(path));
}
+ Self::load_from_string(path, source)
+ }
+
+ pub fn load_from_string(
+ path: PathBuf,
+ source: String,
+ ) -> Result<PackageJson, AnyError> {
let package_json: Value = serde_json::from_str(&source)
.map_err(|err| anyhow::anyhow!("malformed package.json {}", err))?;
@@ -114,6 +125,25 @@ impl PackageJson {
let version = version_val.and_then(|s| s.as_str()).map(|s| s.to_string());
let module = module_val.and_then(|s| s.as_str()).map(|s| s.to_string());
+ let dependencies = package_json.get("dependencies").and_then(|d| {
+ if d.is_object() {
+ let deps: HashMap<String, String> =
+ serde_json::from_value(d.to_owned()).unwrap();
+ Some(deps)
+ } else {
+ None
+ }
+ });
+ let dev_dependencies = package_json.get("devDependencies").and_then(|d| {
+ if d.is_object() {
+ let deps: HashMap<String, String> =
+ serde_json::from_value(d.to_owned()).unwrap();
+ Some(deps)
+ } else {
+ None
+ }
+ });
+
// Ignore unknown types for forwards compatibility
let typ = if let Some(t) = type_val {
if let Some(t) = t.as_str() {
@@ -147,6 +177,8 @@ impl PackageJson {
exports,
imports,
bin,
+ dependencies,
+ dev_dependencies,
};
CACHE.with(|cache| {