@@ -41,28 +41,40 @@ bitflags! {
41
41
#[ derive( serde:: Deserialize , Debug , Default ) ]
42
42
#[ serde( rename_all = "camelCase" ) ]
43
43
struct SerializedPackageJson {
44
- #[ serde( default ) ]
44
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
45
45
pub name : String ,
46
- #[ serde( rename = "type" , default ) ]
46
+ #[ serde( rename = "type" , default , deserialize_with = "ok_or_default" ) ]
47
47
pub module_type : ModuleType ,
48
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
48
49
main : Option < PathBuf > ,
50
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
49
51
module : Option < PathBuf > ,
52
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
50
53
tsconfig : Option < PathBuf > ,
54
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
51
55
types : Option < PathBuf > ,
52
- #[ serde( default ) ]
56
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
53
57
pub source : SourceField ,
54
- #[ serde( default ) ]
58
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
55
59
browser : BrowserField ,
56
- #[ serde( default ) ]
60
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
57
61
alias : IndexMap < Specifier < ' static > , AliasValue < ' static > > ,
58
- #[ serde( default ) ]
62
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
59
63
exports : ExportsField ,
60
- #[ serde( default ) ]
64
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
61
65
imports : IndexMap < ExportsKey < ' static > , ExportsField > ,
62
- #[ serde( default ) ]
66
+ #[ serde( default , deserialize_with = "ok_or_default" ) ]
63
67
side_effects : SideEffects ,
64
68
}
65
69
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
+
66
78
#[ derive( Debug ) ]
67
79
pub struct PackageJson {
68
80
pub path : CachedPath ,
@@ -1932,5 +1944,7 @@ mod tests {
1932
1944
assert_eq ! ( pkg. module_type, ModuleType :: CommonJs ) ;
1933
1945
let pkg: SerializedPackageJson = serde_json:: from_str ( r#"{"name":"foo"}"# ) . unwrap ( ) ;
1934
1946
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 ) ;
1935
1949
}
1936
1950
}
0 commit comments