Skip to content

Commit aee8900

Browse files
authored
Merge pull request #25 from bvanjoi/next
release: 0.0.20
2 parents 57e03bd + 107afda commit aee8900

File tree

5 files changed

+54
-12
lines changed

5 files changed

+54
-12
lines changed

__test__/index.spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,23 @@ test('load sideeffects', (t) => {
6464
t.is(result?.arrayVal, undefined)
6565
t.is(result?.pkgFilePath, path.resolve(__dirname, "./fixture/node_modules/a/package.json"))
6666
})
67+
68+
test("shared cache", (t) => {
69+
const sharedCache = factory.createExternalCache();
70+
const resolver1 = factory.createWithExternalCache({}, sharedCache);
71+
const resolver2 = factory.createWithExternalCache({}, sharedCache);
72+
73+
const uncachedStart = process.hrtime.bigint();
74+
factory.loadSideEffects(resolver1, path.resolve(__dirname, "./fixture/node_modules/a"));
75+
const uncachedEnd = process.hrtime.bigint();
76+
const uncachedDuration = uncachedEnd - uncachedStart;
77+
78+
const cachedStart = process.hrtime.bigint();
79+
factory.loadSideEffects(resolver2, path.resolve(__dirname, "./fixture/node_modules/a"));
80+
const cachedEnd = process.hrtime.bigint();
81+
const cachedDuration = cachedEnd - cachedStart;
82+
console.log('uncached: ', uncachedDuration, 'cached: ', cachedDuration);
83+
// maybe expose content in cache and ensure it is not empty may be a better choice.
84+
// but I think the following statement will usefully.
85+
t.is(cachedDuration - uncachedDuration < 0, true)
86+
})

index.d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ export interface ResolverInternal {
3131

3232
}
3333
export function create(options: RawResolverOptions): ExternalObject<ResolverInternal>
34-
export function createResolverAndInheritUnsafeCacheFromAnother(options: RawResolverOptions, another: ExternalObject<Resolver>): ExternalObject<ResolverInternal>
34+
export function createWithExternalCache(options: RawResolverOptions, external_cache: ExternalObject<ResolverCacheInternal>): ExternalObject<ResolverInternal>
35+
export interface ResolverCacheInternal {
36+
37+
}
38+
export function createExternalCache(): ExternalObject<ResolverCacheInternal>
3539
export function resolve(resolver: ExternalObject<ResolverInternal>, base_dir: string, id: string): string
3640
export interface SideEffectsStats {
3741
boolVal?: boolean

index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,10 @@ if (!nativeBinding) {
218218
throw new Error(`Failed to load native binding`)
219219
}
220220

221-
const { create, createResolverAndInheritUnsafeCacheFromAnother, resolve, loadSideEffects } = nativeBinding
221+
const { create, createWithExternalCache, createExternalCache, resolve, loadSideEffects } = nativeBinding
222222

223223
module.exports.create = create
224-
module.exports.createResolverAndInheritUnsafeCacheFromAnother = createResolverAndInheritUnsafeCacheFromAnother
224+
module.exports.createWithExternalCache = createWithExternalCache
225+
module.exports.createExternalCache = createExternalCache
225226
module.exports.resolve = resolve
226227
module.exports.loadSideEffects = loadSideEffects

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.19",
3+
"version": "0.0.20",
44
"description": "node binding for nodejs-resolver",
55
"main": "index.js",
66
"license": "MIT",

src/lib.rs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,26 @@ pub fn create(options: RawResolverOptions) -> Result<External<Resolver>, napi::E
8181
Ok(External::new(resolver))
8282
}
8383

84-
#[napi(ts_return_type = "ExternalObject<ResolverInternal>")]
85-
pub fn create_resolver_and_inherit_unsafe_cache_from_another(
84+
85+
#[napi(object)]
86+
pub struct ResolverCacheInternal {}
87+
88+
#[napi(ts_return_type = "ExternalObject<ResolverCacheInternal>")]
89+
pub fn create_external_cache() -> Result<External<Arc<ResolverUnsafeCache>>, napi::Error> {
90+
Ok(External::new(
91+
Resolver::new(Default::default()).unsafe_cache.unwrap(),
92+
))
93+
}
94+
95+
#[napi(
96+
ts_args_type = "options: RawResolverOptions, external_cache: ExternalObject<ResolverCacheInternal>",
97+
ts_return_type = "ExternalObject<ResolverInternal>"
98+
)]
99+
pub fn create_with_external_cache(
86100
options: RawResolverOptions,
87-
another: External<Resolver>,
101+
external_cache: External<Arc<ResolverUnsafeCache>>,
88102
) -> Result<External<Resolver>, napi::Error> {
89-
let options = options.normalized(another.unsafe_cache.clone());
103+
let options = options.normalized(Some(external_cache.clone()));
90104
let resolver = Resolver::new(options);
91105
Ok(External::new(resolver))
92106
}
@@ -134,10 +148,13 @@ pub fn load_side_effects(
134148
) -> Result<Option<SideEffectsStats>, napi::Error> {
135149
match (*resolver).load_sideeffects(&Path::new(&path)) {
136150
Ok(val) => Ok(val.map(|val| {
137-
let (bool_val, array_val) = val.1.map(|side_effects| match side_effects {
138-
SideEffects::Bool(bool) => (Some(bool), None),
139-
SideEffects::Array(array) => (None, Some(array)),
140-
}).unwrap_or((None, None));
151+
let (bool_val, array_val) = val
152+
.1
153+
.map(|side_effects| match side_effects {
154+
SideEffects::Bool(bool) => (Some(bool), None),
155+
SideEffects::Array(array) => (None, Some(array)),
156+
})
157+
.unwrap_or((None, None));
141158
SideEffectsStats {
142159
pkg_file_path: val.0.display().to_string(),
143160
bool_val,

0 commit comments

Comments
 (0)