Skip to content

Commit 86ca555

Browse files
authored
Ignore invalid package.json fields (#10053)
1 parent 4d27ec8 commit 86ca555

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

crates/parcel-resolver/src/package_json.rs

+22-8
Original file line numberDiff line numberDiff line change
@@ -41,28 +41,40 @@ bitflags! {
4141
#[derive(serde::Deserialize, Debug, Default)]
4242
#[serde(rename_all = "camelCase")]
4343
struct SerializedPackageJson {
44-
#[serde(default)]
44+
#[serde(default, deserialize_with = "ok_or_default")]
4545
pub name: String,
46-
#[serde(rename = "type", default)]
46+
#[serde(rename = "type", default, deserialize_with = "ok_or_default")]
4747
pub module_type: ModuleType,
48+
#[serde(default, deserialize_with = "ok_or_default")]
4849
main: Option<PathBuf>,
50+
#[serde(default, deserialize_with = "ok_or_default")]
4951
module: Option<PathBuf>,
52+
#[serde(default, deserialize_with = "ok_or_default")]
5053
tsconfig: Option<PathBuf>,
54+
#[serde(default, deserialize_with = "ok_or_default")]
5155
types: Option<PathBuf>,
52-
#[serde(default)]
56+
#[serde(default, deserialize_with = "ok_or_default")]
5357
pub source: SourceField,
54-
#[serde(default)]
58+
#[serde(default, deserialize_with = "ok_or_default")]
5559
browser: BrowserField,
56-
#[serde(default)]
60+
#[serde(default, deserialize_with = "ok_or_default")]
5761
alias: IndexMap<Specifier<'static>, AliasValue<'static>>,
58-
#[serde(default)]
62+
#[serde(default, deserialize_with = "ok_or_default")]
5963
exports: ExportsField,
60-
#[serde(default)]
64+
#[serde(default, deserialize_with = "ok_or_default")]
6165
imports: IndexMap<ExportsKey<'static>, ExportsField>,
62-
#[serde(default)]
66+
#[serde(default, deserialize_with = "ok_or_default")]
6367
side_effects: SideEffects,
6468
}
6569

70+
fn ok_or_default<'de, T, D>(deserializer: D) -> Result<T, D::Error>
71+
where
72+
T: serde::Deserialize<'de> + Default,
73+
D: serde::Deserializer<'de>,
74+
{
75+
Ok(T::deserialize(deserializer).unwrap_or_default())
76+
}
77+
6678
#[derive(Debug)]
6779
pub struct PackageJson {
6880
pub path: CachedPath,
@@ -1932,5 +1944,7 @@ mod tests {
19321944
assert_eq!(pkg.module_type, ModuleType::CommonJs);
19331945
let pkg: SerializedPackageJson = serde_json::from_str(r#"{"name":"foo"}"#).unwrap();
19341946
assert_eq!(pkg.module_type, ModuleType::CommonJs);
1947+
let pkg: SerializedPackageJson = serde_json::from_str(r#"{"main":false}"#).unwrap();
1948+
assert_eq!(pkg.main, None);
19351949
}
19361950
}

0 commit comments

Comments
 (0)