Skip to content

Commit e3fbf68

Browse files
authored
Merge pull request #7 from bvanjoi/next
release: 0.0.5
2 parents 9501674 + 5afc3f9 commit e3fbf68

File tree

5 files changed

+52
-10
lines changed

5 files changed

+52
-10
lines changed

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ crate-type = ["cdylib"]
1212
[dependencies]
1313
napi = "2"
1414
napi-derive = "2"
15-
nodejs-resolver = "0.0.14"
15+
nodejs-resolver = "0.0.15"
1616
serde = { version = "1.0.137", features = ["derive"] }
17-
serde_json = "1.0.81"
1817

1918
[build-dependencies]
2019
napi-build = "1"

__test__/index.spec.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ test('resolve do not exist file', (t) => {
2121
count += 1
2222
} catch (err: any) {
2323
encounterError = true
24-
t.assert((err.message as string).includes('Resolve ./lib failed in'))
24+
t.assert((err.message as string).includes('Resolve \'./lib\' failed in'))
2525
}
2626
t.is(count, 1)
2727
t.is(encounterError, true)
@@ -36,3 +36,27 @@ test('extensions options', (t) => {
3636
t.is(result.path, path.resolve(__dirname, './fixture/lib.ts'))
3737
t.is(result.status, true)
3838
})
39+
40+
41+
test('alias options', (t) => {
42+
const resolverOptions: RawResolverOptions = {
43+
alias: [
44+
{
45+
key: '@alias',
46+
value: './fixture',
47+
},
48+
{
49+
key: '@false',
50+
value: undefined, // undefine -> None (represent `false`).
51+
}
52+
]
53+
}
54+
const resolver = factory.create(resolverOptions)
55+
const result = factory.resolve(resolver, __dirname, '@alias/lib')
56+
t.is(result.path, path.resolve(__dirname, './fixture/lib.js'))
57+
t.is(result.status, true)
58+
59+
const result2 = factory.resolve(resolver, __dirname, '@false/lib')
60+
t.is(result2.path, undefined)
61+
t.is(result2.status, false)
62+
})

index.d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ export class ExternalObject<T> {
99
[K: symbol]: T
1010
}
1111
}
12+
export interface Alias {
13+
key: string
14+
value?: string
15+
}
1216
export interface RawResolverOptions {
1317
extensions?: Array<string>
1418
enforceExtension?: boolean | undefined | null
15-
alias?: Record<string, string | undefined | null>
19+
alias?: Array<Alias>
1620
aliasFields?: Array<string>
1721
conditionNames?: Array<string>
1822
symlinks?: boolean

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nodejs-resolver",
3-
"version": "0.0.4",
3+
"version": "0.0.5",
44
"description": "node binding for nodejs-resolver",
55
"main": "index.js",
66
"license": "MIT",

src/lib.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,23 @@ use napi::bindgen_prelude::External;
22
use napi_derive::napi;
33
use nodejs_resolver::{Resolver, ResolverOptions};
44
use serde::Deserialize;
5-
use std::collections::HashMap;
65
use 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)]
1118
pub 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)]
5572
pub struct ResolverInternal {}
5673

5774
#[napi(ts_return_type = "ExternalObject<ResolverInternal>")]
5875
pub 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

Comments
 (0)