Skip to content

Commit 41db589

Browse files
BrooooooklynLongYinan
authored andcommitted
refactor: migrate napi-rs to napi
1 parent ea5d49f commit 41db589

File tree

11 files changed

+1406
-1493
lines changed

11 files changed

+1406
-1493
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ jobs:
9494
timeout-minutes: 5
9595
with:
9696
command: test
97-
args: -p nodr-rs-bcrypt --lib -- --nocapture
97+
args: -p node-rs-bcrypt --lib -- --nocapture
9898

9999
- name: Run build
100100
run: |

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,29 @@
2121
},
2222
"devDependencies": {
2323
"@octokit/rest": "^18.0.0",
24-
"@typescript-eslint/eslint-plugin": "^3.2.0",
25-
"@typescript-eslint/parser": "^3.2.0",
26-
"ava": "^3.8.2",
24+
"@typescript-eslint/eslint-plugin": "^3.6.1",
25+
"@typescript-eslint/parser": "^3.6.1",
26+
"ava": "^3.10.1",
2727
"benchmark": "^2.1.4",
2828
"chalk": "^4.1.0",
2929
"codecov": "^3.7.0",
3030
"cross-env": "^7.0.2",
31-
"eslint": "^7.2.0",
31+
"eslint": "^7.4.0",
3232
"eslint-config-prettier": "^6.11.0",
33-
"eslint-plugin-import": "^2.21.2",
34-
"eslint-plugin-prettier": "^3.1.3",
33+
"eslint-plugin-import": "^2.22.0",
34+
"eslint-plugin-prettier": "^3.1.4",
3535
"eslint-plugin-sonarjs": "^0.5.0",
3636
"husky": "^4.2.5",
3737
"lerna": "^3.22.1",
38-
"lint-staged": "^10.2.9",
38+
"lint-staged": "^10.2.11",
3939
"napi-rs": "^0.2.4",
4040
"npm-run-all": "^4.1.5",
4141
"nyc": "^15.1.0",
4242
"prettier": "^2.0.5",
4343
"putasset": "^5.0.3",
4444
"ts-node": "^8.10.2",
4545
"tsconfig-paths": "^3.9.0",
46-
"typescript": "^3.9.5"
46+
"typescript": "^3.9.6"
4747
},
4848
"ava": {
4949
"extensions": ["ts"],

packages/bcrypt/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "nodr-rs-bcrypt"
2+
name = "node-rs-bcrypt"
33
version = "0.1.0"
44
authors = ["LongYinan <[email protected]>"]
55
edition = "2018"
@@ -11,8 +11,8 @@ crate-type = ["cdylib"]
1111
radix64 = "0.6"
1212
blowfish = { version = "0.5", features = ["bcrypt"] }
1313
byteorder = "1"
14-
napi-rs = { version = "0.3" }
15-
napi-rs-derive = { version = "0.2" }
14+
napi = { version = "0.4"}
15+
napi-derive = { version = "0.4" }
1616
rand = "0.7"
1717
phf = { version = "0.8", features = ["macros"] }
1818

@@ -23,4 +23,4 @@ jemallocator = { version = "0.3", features = ["disable_initial_exec_tls"] }
2323
quickcheck = "0.9"
2424

2525
[build-dependencies]
26-
napi-build = { version = "0.1" }
26+
napi-build = { version = "0.2" }

packages/bcrypt/src/hash_task.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
use napi::{Buffer, Env, Error, JsString, Result, Status, Task, Value};
1+
use napi::{Env, Error, JsBuffer, JsString, Result, Status, Task};
22

33
use crate::lib_bcrypt::hash;
44

55
pub struct HashTask {
6-
buf: Value<Buffer>,
6+
buf: JsBuffer,
77
cost: u32,
88
}
99

1010
impl HashTask {
11-
pub fn new(buf: Value<Buffer>, cost: u32) -> HashTask {
11+
pub fn new(buf: JsBuffer, cost: u32) -> HashTask {
1212
HashTask { buf, cost }
1313
}
1414

1515
#[inline]
16-
pub fn hash(buf: Value<Buffer>, cost: u32) -> Result<String> {
16+
pub fn hash(buf: JsBuffer, cost: u32) -> Result<String> {
1717
hash(buf, cost).map_err(|_| Error::from_status(Status::GenericFailure))
1818
}
1919
}
@@ -22,11 +22,11 @@ impl Task for HashTask {
2222
type Output = String;
2323
type JsValue = JsString;
2424

25-
fn compute(&self) -> Result<Self::Output> {
25+
fn compute(&mut self) -> Result<Self::Output> {
2626
Self::hash(self.buf, self.cost)
2727
}
2828

29-
fn resolve(&self, env: &mut Env, output: Self::Output) -> Result<Value<Self::JsValue>> {
30-
env.create_string(&output)
29+
fn resolve(&self, env: &mut Env, output: Self::Output) -> Result<Self::JsValue> {
30+
env.create_string(output.as_str())
3131
}
3232
}

packages/bcrypt/src/lib.rs

Lines changed: 31 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
#[macro_use]
2-
extern crate napi_rs as napi;
2+
extern crate napi;
33
#[macro_use]
4-
extern crate napi_rs_derive;
4+
extern crate napi_derive;
55

66
use crate::lib_bcrypt::{format_salt, gen_salt, Version};
77
use hash_task::HashTask;
88
use napi::{
9-
Boolean, Buffer, CallContext, Env, Error, JsString, Number, Object, Result, Status, Value,
9+
CallContext, Error, JsBoolean, JsBuffer, JsNumber, JsObject, JsString, Module, Result, Status,
1010
};
1111
use std::convert::TryInto;
1212
use std::str::FromStr;
@@ -25,40 +25,25 @@ mod errors;
2525
mod lib_bcrypt;
2626

2727
#[cfg(not(test))]
28-
register_module!(test_module, init);
29-
30-
fn init(env: &Env, exports: &mut Value<Object>) -> Result<()> {
31-
exports.set_property(
32-
env.create_string("hash")?,
33-
env.create_function("hash", js_async_hash)?,
34-
)?;
35-
36-
exports.set_property(
37-
env.create_string("hashSync")?,
38-
env.create_function("hashSync", js_hash)?,
39-
)?;
40-
41-
exports.set_property(
42-
env.create_string("genSalt")?,
43-
env.create_function("genSalt", js_salt)?,
44-
)?;
45-
46-
exports.set_property(
47-
env.create_string("verifySync")?,
48-
env.create_function("verifySync", js_verify)?,
49-
)?;
50-
51-
exports.set_property(
52-
env.create_string("verify")?,
53-
env.create_function("verify", js_async_verify)?,
54-
)?;
28+
register_module!(bcrypt, init);
29+
30+
fn init(module: &mut Module) -> Result<()> {
31+
module.create_named_method("hash", js_async_hash)?;
32+
33+
module.create_named_method("hashSync", js_hash)?;
34+
35+
module.create_named_method("genSalt", js_salt)?;
36+
37+
module.create_named_method("verifySync", js_verify)?;
38+
39+
module.create_named_method("verify", js_async_verify)?;
5540

5641
Ok(())
5742
}
5843

5944
#[js_function(2)]
60-
fn js_salt(ctx: CallContext) -> Result<Value<JsString>> {
61-
let round = ctx.get::<Number>(0)?;
45+
fn js_salt(ctx: CallContext) -> Result<JsString> {
46+
let round = ctx.get::<JsNumber>(0)?;
6247
let version = ctx.get::<JsString>(1)?;
6348
let salt = gen_salt();
6449
let salt_string = format_salt(
@@ -70,34 +55,34 @@ fn js_salt(ctx: CallContext) -> Result<Value<JsString>> {
7055
}
7156

7257
#[js_function(2)]
73-
fn js_hash(ctx: CallContext) -> Result<Value<JsString>> {
74-
let password = ctx.get::<Buffer>(0)?;
75-
let cost = ctx.get::<Number>(1)?;
58+
fn js_hash(ctx: CallContext) -> Result<JsString> {
59+
let password = ctx.get::<JsBuffer>(0)?;
60+
let cost = ctx.get::<JsNumber>(1)?;
7661
let result = HashTask::hash(password, cost.try_into()?)?;
7762
ctx.env.create_string(result.as_str())
7863
}
7964

8065
#[js_function(2)]
81-
fn js_async_hash(ctx: CallContext) -> Result<Value<Object>> {
82-
let password = ctx.get::<Buffer>(0)?;
83-
let cost = ctx.get::<Number>(1)?;
66+
fn js_async_hash(ctx: CallContext) -> Result<JsObject> {
67+
let password = ctx.get::<JsBuffer>(0)?;
68+
let cost = ctx.get::<JsNumber>(1)?;
8469
let task = HashTask::new(password, cost.try_into()?);
8570
ctx.env.spawn(task)
8671
}
8772

8873
#[js_function(2)]
89-
fn js_verify(ctx: CallContext) -> Result<Value<Boolean>> {
90-
let password = ctx.get::<Buffer>(0)?;
91-
let hash = ctx.get::<Buffer>(1)?;
92-
let result =
93-
VerifyTask::verify(password, hash).map_err(|_| Error::from_status(Status::GenericFailure))?;
74+
fn js_verify(ctx: CallContext) -> Result<JsBoolean> {
75+
let password = ctx.get::<JsBuffer>(0)?;
76+
let hash = ctx.get::<JsBuffer>(1)?;
77+
let result = VerifyTask::verify(password, hash)
78+
.map_err(|e| Error::new(Status::GenericFailure, format!("{}", e)))?;
9479
ctx.env.get_boolean(result)
9580
}
9681

9782
#[js_function(2)]
98-
fn js_async_verify(ctx: CallContext) -> Result<Value<Object>> {
99-
let password = ctx.get::<Buffer>(0)?;
100-
let hash = ctx.get::<Buffer>(1)?;
83+
fn js_async_verify(ctx: CallContext) -> Result<JsObject> {
84+
let password = ctx.get::<JsBuffer>(0)?;
85+
let hash = ctx.get::<JsBuffer>(1)?;
10186
let task = VerifyTask::new(password, hash);
10287
ctx.env.spawn(task)
10388
}

packages/bcrypt/src/verify_task.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,37 @@
11
use std::str;
22

33
use crate::lib_bcrypt::verify;
4-
use napi::{Boolean, Buffer, Env, Error, Result, Status, Task, Value};
4+
use napi::{Env, Error, JsBoolean, JsBuffer, Result, Status, Task};
55

66
pub struct VerifyTask {
7-
password: Value<Buffer>,
8-
hash: Value<Buffer>,
7+
password: JsBuffer,
8+
hash: JsBuffer,
99
}
1010

1111
impl VerifyTask {
12-
pub fn new(password: Value<Buffer>, hash: Value<Buffer>) -> VerifyTask {
12+
pub fn new(password: JsBuffer, hash: JsBuffer) -> VerifyTask {
1313
Self { password, hash }
1414
}
1515

1616
#[inline]
17-
pub fn verify(password: Value<Buffer>, hash: Value<Buffer>) -> Result<bool> {
17+
pub fn verify(password: JsBuffer, hash: JsBuffer) -> Result<bool> {
1818
verify(
1919
&password,
2020
str::from_utf8(&hash).map_err(|_| Error::from_status(Status::StringExpected))?,
2121
)
22-
.map_err(|_| Error::from_status(Status::GenericFailure))
22+
.map_err(|e| Error::new(Status::GenericFailure, format!("{}", e)))
2323
}
2424
}
2525

2626
impl Task for VerifyTask {
2727
type Output = bool;
28-
type JsValue = Boolean;
28+
type JsValue = JsBoolean;
2929

30-
fn compute(&self) -> Result<Self::Output> {
30+
fn compute(&mut self) -> Result<Self::Output> {
3131
VerifyTask::verify(self.password, self.hash)
3232
}
3333

34-
fn resolve(&self, env: &mut Env, output: Self::Output) -> Result<Value<Self::JsValue>> {
34+
fn resolve(&self, env: &mut Env, output: Self::Output) -> Result<Self::JsValue> {
3535
env.get_boolean(output)
3636
}
3737
}

packages/crc32/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ edition = "2018"
88
crate-type = ["cdylib"]
99

1010
[dependencies]
11-
napi-rs = { version = "0.3" }
12-
napi-rs-derive = { version = "0.2" }
11+
napi = { version = "0.4"}
12+
napi-derive = { version = "0.4" }
1313
crc32fast = "1.2"
1414

1515
[target.'cfg(all(unix, not(target_env = "musl")))'.dependencies]
1616
jemallocator = { version = "0.3", features = ["disable_initial_exec_tls"] }
1717

1818
[build-dependencies]
19-
napi-build = { version = "0.1" }
19+
napi-build = { version = "0.2" }

packages/crc32/src/lib.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#[macro_use]
2-
extern crate napi_rs as napi;
2+
extern crate napi;
33
#[macro_use]
4-
extern crate napi_rs_derive;
4+
extern crate napi_derive;
55

66
use crate::crc32::{crc32c as native_crc32c, crc32c_append};
77
use crc32fast::Hasher;
8-
use napi::{Buffer, CallContext, Env, Number, Object, Result, Value};
8+
use napi::{CallContext, JsBuffer, JsNumber, Module, Result};
99
use std::convert::TryInto;
1010

1111
#[cfg(all(unix, not(target_env = "musl")))]
@@ -16,18 +16,18 @@ mod bytes;
1616
mod crc32;
1717
mod crc32_table;
1818

19-
register_module!(test_module, init);
19+
register_module!(crc32, init);
2020

21-
fn init(env: &Env, exports: &mut Value<Object>) -> Result<()> {
22-
exports.set_named_property("crc32c", env.create_function("crc32c", crc32c)?)?;
23-
exports.set_named_property("crc32", env.create_function("crc32", crc32)?)?;
21+
fn init(module: &mut Module) -> Result<()> {
22+
module.create_named_method("crc32c", crc32c)?;
23+
module.create_named_method("crc32", crc32)?;
2424
Ok(())
2525
}
2626

2727
#[js_function(2)]
28-
fn crc32c(ctx: CallContext) -> Result<Value<Number>> {
29-
let input_data = ctx.get::<Buffer>(0)?;
30-
let init_state = ctx.get::<Number>(1);
28+
fn crc32c(ctx: CallContext) -> Result<JsNumber> {
29+
let input_data = ctx.get::<JsBuffer>(0)?;
30+
let init_state = ctx.get::<JsNumber>(1);
3131
let result = if init_state.is_ok() {
3232
crc32c_append(&input_data, init_state?.try_into()?)
3333
} else {
@@ -37,9 +37,9 @@ fn crc32c(ctx: CallContext) -> Result<Value<Number>> {
3737
}
3838

3939
#[js_function(2)]
40-
fn crc32(ctx: CallContext) -> Result<Value<Number>> {
41-
let input_data = ctx.get::<Buffer>(0)?;
42-
let init_state = ctx.get::<Number>(1);
40+
fn crc32(ctx: CallContext) -> Result<JsNumber> {
41+
let input_data = ctx.get::<JsBuffer>(0)?;
42+
let init_state = ctx.get::<JsNumber>(1);
4343
let mut hasher = if init_state.is_ok() {
4444
Hasher::new_with_initial(init_state?.try_into()?)
4545
} else {

packages/jieba/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ crate-type = ["cdylib"]
99

1010
[dependencies]
1111
jieba-rs = { version = "0.5", features = ["default-dict", "tfidf", "textrank"] }
12-
napi-rs = { version = "0.3" }
13-
napi-rs-derive = { version = "0.2" }
12+
napi = { version = "0.4"}
13+
napi-derive = { version = "0.4" }
1414
once_cell = "1.4"
1515

1616
[target.'cfg(all(unix, not(target_env = "musl")))'.dependencies]
1717
jemallocator = { version = "0.3", features = ["disable_initial_exec_tls"] }
1818

1919
[build-dependencies]
20-
napi-build = { version = "0.1" }
20+
napi-build = { version = "0.2" }

0 commit comments

Comments
 (0)