@@ -2,16 +2,23 @@ use napi::bindgen_prelude::External;
22use napi_derive:: napi;
33use nodejs_resolver:: { Resolver , ResolverOptions } ;
44use serde:: Deserialize ;
5- use std:: collections:: HashMap ;
65use std:: path:: Path ;
76
7+ #[ derive( Debug , Clone , Deserialize ) ]
8+ #[ serde( rename_all = "camelCase" ) ]
9+ #[ napi( object) ]
10+ pub struct Alias {
11+ pub key : String ,
12+ pub value : Option < String > ,
13+ }
14+
815#[ derive( Debug , Clone , Deserialize ) ]
916#[ serde( rename_all = "camelCase" ) ]
1017#[ napi( object) ]
1118pub struct RawResolverOptions {
1219 pub extensions : Option < Vec < String > > ,
1320 pub enforce_extension : Option < Option < bool > > ,
14- pub alias : Option < HashMap < String , Option < String > > > ,
21+ pub alias : Option < Vec < Alias > > ,
1522 pub alias_fields : Option < Vec < String > > ,
1623 pub condition_names : Option < Vec < String > > ,
1724 pub symlinks : Option < bool > ,
@@ -29,7 +36,10 @@ impl RawResolverOptions {
2936 ResolverOptions {
3037 enforce_extension : self . enforce_extension . unwrap_or ( default. enforce_extension ) ,
3138 extensions : self . extensions . to_owned ( ) . unwrap_or ( default. extensions ) ,
32- alias : self . alias . to_owned ( ) . unwrap_or ( default. alias ) ,
39+ alias : self
40+ . alias
41+ . to_owned ( )
42+ . map_or ( default. alias , |alias| parse_alias ( alias) ) ,
3343 alias_fields : self . alias_fields . to_owned ( ) . unwrap_or ( default. alias_fields ) ,
3444 condition_names : self
3545 . condition_names
@@ -51,13 +61,18 @@ impl RawResolverOptions {
5161 }
5262}
5363
64+ fn parse_alias ( alias : Vec < Alias > ) -> Vec < ( String , Option < String > ) > {
65+ alias
66+ . into_iter ( )
67+ . map ( |item| ( item. key , item. value ) )
68+ . collect ( )
69+ }
70+
5471#[ napi( object) ]
5572pub struct ResolverInternal { }
5673
5774#[ napi( ts_return_type = "ExternalObject<ResolverInternal>" ) ]
5875pub fn create ( options : RawResolverOptions ) -> Result < External < Resolver > , napi:: Error > {
59- // let options: RawResolverOptions = serde_json::from_str(options.as_str())
60- // .map_err(|err| napi::Error::new(napi::Status::InvalidArg, err.to_string()))?;
6176 let resolver = Resolver :: new ( options. normalized ( ) ) ;
6277 Ok ( External :: new ( resolver) )
6378}
0 commit comments