Skip to content

Commit a3a2d24

Browse files
authored
feat: export package.json type and sideEffects field by default for bundlers (#196)
The fields are pretty small, but we can try and remove the clones if necessary.
1 parent 9b9e97f commit a3a2d24

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

src/package_json.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ pub struct PackageJson {
2424
/// <https://nodejs.org/api/packages.html#name>
2525
pub name: Option<String>,
2626

27+
/// The "type" field.
28+
///
29+
/// <https://nodejs.org/api/packages.html#type>
30+
pub r#type: Option<JSONValue>,
31+
32+
/// The "sideEffects" field.
33+
///
34+
/// <https://webpack.js.org/guides/tree-shaking>
35+
pub side_effects: Option<JSONValue>,
36+
2737
raw_json: std::sync::Arc<JSONValue>,
2838
}
2939

@@ -51,9 +61,11 @@ impl PackageJson {
5161
json_object.remove("optionalDependencies");
5262
}
5363

54-
// Add name.
64+
// Add name, type and sideEffects.
5565
package_json.name =
5666
json_object.get("name").and_then(|field| field.as_str()).map(ToString::to_string);
67+
package_json.r#type = json_object.get("type").cloned();
68+
package_json.side_effects = json_object.get("sideEffects").cloned();
5769
}
5870

5971
package_json.path = path;

tests/integration_test.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,10 @@ fn eq() {
3535
#[test]
3636
fn package_json() {
3737
let resolution = resolve("./tests/package.json");
38-
assert!(resolution
39-
.package_json()
40-
.is_some_and(|json| json.name.as_ref().is_some_and(|name| name == "name")));
38+
let package_json = resolution.package_json().unwrap();
39+
assert_eq!(package_json.name.as_ref().unwrap(), "name");
40+
assert_eq!(package_json.r#type.as_ref().unwrap().as_str(), "module".into());
41+
assert!(package_json.side_effects.as_ref().unwrap().is_object());
4142
}
4243

4344
#[cfg(feature = "package_json_raw_json_api")]

tests/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
{
2-
"name": "name"
2+
"name": "name",
3+
"type": "module",
4+
"sideEffects": {}
35
}

0 commit comments

Comments
 (0)