Skip to content

Commit 57e03bd

Browse files
authored
Merge pull request #24 from bvanjoi/next
release: 0.0.19
2 parents d084933 + 18ff6d9 commit 57e03bd

File tree

9 files changed

+63
-7
lines changed

9 files changed

+63
-7
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ crate-type = ["cdylib"]
1212
[dependencies]
1313
napi = "2"
1414
napi-derive = "2"
15-
nodejs-resolver = "0.0.27"
15+
nodejs-resolver = "0.0.28"
1616
serde = { version = "1.0.138", features = ["derive"] }
1717

1818
[build-dependencies]

__test__/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!node_modules

__test__/fixture/node_modules/a/package.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

__test__/index.spec.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import path from 'path'
2-
32
import test from 'ava'
4-
53
import factory, { RawResolverOptions } from '../index'
64

75
test('sync function from native code', (t) => {
@@ -38,7 +36,6 @@ test('extensions options', (t) => {
3836
t.is(result2, path.resolve(__dirname, './fixture/lib.ts?query#fragment'))
3937
})
4038

41-
4239
test('alias options', (t) => {
4340
const resolverOptions: RawResolverOptions = {
4441
alias: [
@@ -59,3 +56,11 @@ test('alias options', (t) => {
5956
const result2 = factory.resolve(resolver, __dirname, '@false/lib')
6057
t.is(result2, "false")
6158
})
59+
60+
test('load sideeffects', (t) => {
61+
const resolver = factory.create({})
62+
const result = factory.loadSideEffects(resolver, path.resolve(__dirname, "./fixture/node_modules/a"));
63+
t.is(result?.boolVal, false)
64+
t.is(result?.arrayVal, undefined)
65+
t.is(result?.pkgFilePath, path.resolve(__dirname, "./fixture/node_modules/a/package.json"))
66+
})

index.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,9 @@ export interface ResolverInternal {
3333
export function create(options: RawResolverOptions): ExternalObject<ResolverInternal>
3434
export function createResolverAndInheritUnsafeCacheFromAnother(options: RawResolverOptions, another: ExternalObject<Resolver>): ExternalObject<ResolverInternal>
3535
export function resolve(resolver: ExternalObject<ResolverInternal>, base_dir: string, id: string): string
36+
export interface SideEffectsStats {
37+
boolVal?: boolean
38+
arrayVal?: Array<string>
39+
pkgFilePath: string
40+
}
41+
export function loadSideEffects(resolver: ExternalObject<ResolverInternal>, path: string): {boolVal?: boolean, arrayVal?: string[], pkgFilePath: string} | undefined

index.js

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

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

223223
module.exports.create = create
224224
module.exports.createResolverAndInheritUnsafeCacheFromAnother = createResolverAndInheritUnsafeCacheFromAnother
225225
module.exports.resolve = resolve
226+
module.exports.loadSideEffects = loadSideEffects

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nodejs-resolver",
3-
"version": "0.0.18",
3+
"version": "0.0.19",
44
"description": "node binding for nodejs-resolver",
55
"main": "index.js",
66
"license": "MIT",
@@ -52,6 +52,7 @@
5252
"devDependencies": {
5353
"@napi-rs/cli": "^2.9.0",
5454
"@swc-node/register": "^1.5.1",
55+
"@types/node": "14.14.31",
5556
"@typescript-eslint/eslint-plugin": "^5.27.1",
5657
"@typescript-eslint/parser": "^5.27.1",
5758
"ava": "^4.3.0",

src/lib.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use napi::bindgen_prelude::External;
22
use napi_derive::napi;
3-
use nodejs_resolver::{AliasMap, Resolver, ResolverOptions, ResolverUnsafeCache};
3+
use nodejs_resolver::{AliasMap, Resolver, ResolverOptions, ResolverUnsafeCache, SideEffects};
44
use serde::Deserialize;
55
use std::{
66
path::{Path, PathBuf},
@@ -116,3 +116,34 @@ pub fn resolve(
116116
Err(err) => Err(napi::Error::new(napi::Status::GenericFailure, err)),
117117
}
118118
}
119+
120+
#[napi(object)]
121+
pub struct SideEffectsStats {
122+
pub bool_val: Option<bool>,
123+
pub array_val: Option<Vec<String>>,
124+
pub pkg_file_path: String,
125+
}
126+
127+
#[napi(
128+
ts_args_type = "resolver: ExternalObject<ResolverInternal>, path: string",
129+
ts_return_type = "{boolVal?: boolean, arrayVal?: string[], pkgFilePath: string} | undefined"
130+
)]
131+
pub fn load_side_effects(
132+
resolver: External<Resolver>,
133+
path: String,
134+
) -> Result<Option<SideEffectsStats>, napi::Error> {
135+
match (*resolver).load_sideeffects(&Path::new(&path)) {
136+
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));
141+
SideEffectsStats {
142+
pkg_file_path: val.0.display().to_string(),
143+
bool_val,
144+
array_val,
145+
}
146+
})),
147+
Err(err) => Err(napi::Error::new(napi::Status::GenericFailure, err)),
148+
}
149+
}

yarn.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,13 @@ __metadata:
343343
languageName: node
344344
linkType: hard
345345

346+
"@types/node@npm:14.14.31":
347+
version: 14.14.31
348+
resolution: "@types/node@npm:14.14.31"
349+
checksum: 5b9ab3660ee63abc57affc836c0d50b2941a862c5b6c241c02762d8e1ad610f6b0d350d7426218dc401b5abc7d6294ee1b475da7c331e486d59a5608d1a0b777
350+
languageName: node
351+
linkType: hard
352+
346353
"@typescript-eslint/eslint-plugin@npm:^5.27.1":
347354
version: 5.27.1
348355
resolution: "@typescript-eslint/eslint-plugin@npm:5.27.1"
@@ -2992,6 +2999,7 @@ __metadata:
29922999
dependencies:
29933000
"@napi-rs/cli": ^2.9.0
29943001
"@swc-node/register": ^1.5.1
3002+
"@types/node": 14.14.31
29953003
"@typescript-eslint/eslint-plugin": ^5.27.1
29963004
"@typescript-eslint/parser": ^5.27.1
29973005
ava: ^4.3.0

0 commit comments

Comments
 (0)