Skip to content

Commit 5b3c0f7

Browse files
authored
Merge pull request #621 from napi-rs/napi-2.1.0
feat(*): upgrade to [email protected]
2 parents a56439a + c55e6e3 commit 5b3c0f7

27 files changed

+453
-361
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"postinstall": "husky install"
2323
},
2424
"devDependencies": {
25-
"@napi-rs/cli": "^2.4.1",
25+
"@napi-rs/cli": "^2.4.4",
2626
"@swc-node/core": "^1.8.2",
2727
"@swc-node/register": "^1.4.2",
2828
"@types/node": "^17.0.8",

packages/argon2/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ crate-type = ["cdylib"]
1010
argon2 = {version = "0.3", features = ["parallel"]}
1111
napi = {version = "2", default-features = false, features = ["napi3"]}
1212
napi-derive = {version = "2", default-features = false, features = ["type-def"]}
13-
rand = {version = "0.8", features = ["nightly", "simd_support"]}
13+
rand = {git = "https://github.com/rust-random/rand", version = "0.8", rev = "a407bdf", features = ["nightly", "simd_support"]}
1414

1515
[build-dependencies]
1616
napi-build = "1"

packages/argon2/index.d.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@
33

44
/* auto-generated by NAPI-RS */
55

6-
export class ExternalObject<T> {
7-
readonly '': {
8-
readonly '': unique symbol
9-
[K: symbol]: T
10-
}
11-
}
126
export const enum Algorithm {
137
/**
148
* Optimizes against GPU cracking attacks but vulnerable to side-channels.

packages/argon2/index.js

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function isMusl() {
1313
try {
1414
return readFileSync('/usr/bin/ldd', 'utf8').includes('musl')
1515
} catch (e) {
16-
return false
16+
return true
1717
}
1818
} else {
1919
const { glibcVersionRuntime } = process.report.getReport().header
@@ -23,18 +23,33 @@ function isMusl() {
2323

2424
switch (platform) {
2525
case 'android':
26-
if (arch !== 'arm64') {
27-
throw new Error(`Unsupported architecture on Android ${arch}`)
28-
}
29-
localFileExisted = existsSync(join(__dirname, 'argon2.android-arm64.node'))
30-
try {
31-
if (localFileExisted) {
32-
nativeBinding = require('./argon2.android-arm64.node')
33-
} else {
34-
nativeBinding = require('@node-rs/argon2-android-arm64')
35-
}
36-
} catch (e) {
37-
loadError = e
26+
switch (arch) {
27+
case 'arm64':
28+
localFileExisted = existsSync(join(__dirname, 'argon2.android-arm64.node'))
29+
try {
30+
if (localFileExisted) {
31+
nativeBinding = require('./argon2.android-arm64.node')
32+
} else {
33+
nativeBinding = require('@node-rs/argon2-android-arm64')
34+
}
35+
} catch (e) {
36+
loadError = e
37+
}
38+
break
39+
case 'arm':
40+
localFileExisted = existsSync(join(__dirname, 'argon2.android-arm-eabi.node'))
41+
try {
42+
if (localFileExisted) {
43+
nativeBinding = require('./argon2.android-arm-eabi.node')
44+
} else {
45+
nativeBinding = require('@node-rs/argon2-android-arm-eabi')
46+
}
47+
} catch (e) {
48+
loadError = e
49+
}
50+
break
51+
default:
52+
throw new Error(`Unsupported architecture on Android ${arch}`)
3853
}
3954
break
4055
case 'win32':

packages/bcrypt/Cargo.toml

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

1010
[dependencies]
1111
bcrypt = "0.10"
12-
blowfish = {version = "0.8", features = ["bcrypt"]}
12+
blowfish = {version = "0.9", features = ["bcrypt"]}
1313
byteorder = "1"
1414
global_alloc = {path = "../../crates/alloc"}
15-
napi = {version = "2"}
15+
napi = {version = "2", default-features = false, features = ["napi3"]}
1616
napi-derive = {version = "2"}
1717
phf = {version = "0.10", features = ["macros"]}
1818
radix64 = "0.6"
19-
rand = "0.8"
19+
rand = {git = "https://github.com/rust-random/rand", rev = "a407bdf"}
2020

2121
[dev-dependencies]
2222
quickcheck = "1.0"

packages/bcrypt/__tests__/bcrypt.spec.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import test from 'ava'
22

3-
import { verifySync, hash } from '../index'
3+
import { verifySync, compareSync, verify, compare, hash } from '../index'
44

55
const { hashSync } = require('bcryptjs')
66

@@ -22,3 +22,8 @@ test('verifySync should always return boolean even if the password is invalid',
2222
t.false(verifySync('a', ''))
2323
t.false(verifySync('', ''))
2424
})
25+
26+
test('compare should be equal to verify', (t) => {
27+
t.is(verifySync, compareSync)
28+
t.is(verify, compare)
29+
})

packages/bcrypt/binding.d.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/* tslint:disable */
2+
/* eslint-disable */
3+
4+
/* auto-generated by NAPI-RS */
5+
6+
export const DEFAULT_COST: number
7+
export function genSaltSync(round: number, version: string): string
8+
export function genSalt(round: number, version: string, signal?: AbortSignal | undefined | null): Promise<string>
9+
export function hashSync(input: string | Buffer, cost?: number | undefined | null): string
10+
export function hash(
11+
input: string | Buffer,
12+
cost?: number | undefined | null,
13+
signal?: AbortSignal | undefined | null,
14+
): Promise<string>
15+
export function verifySync(input: string | Buffer, hash: string | Buffer): boolean
16+
export function verify(
17+
password: string | Buffer,
18+
hash: string | Buffer,
19+
signal?: AbortSignal | undefined | null,
20+
): Promise<boolean>

packages/bcrypt/binding.js

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
const { existsSync, readFileSync } = require('fs')
2+
const { join } = require('path')
3+
4+
const { platform, arch } = process
5+
6+
let nativeBinding = null
7+
let localFileExisted = false
8+
let loadError = null
9+
10+
function isMusl() {
11+
// For Node 10
12+
if (!process.report || typeof process.report.getReport !== 'function') {
13+
try {
14+
return readFileSync('/usr/bin/ldd', 'utf8').includes('musl')
15+
} catch (e) {
16+
return true
17+
}
18+
} else {
19+
const { glibcVersionRuntime } = process.report.getReport().header
20+
return !glibcVersionRuntime
21+
}
22+
}
23+
24+
switch (platform) {
25+
case 'android':
26+
switch (arch) {
27+
case 'arm64':
28+
localFileExisted = existsSync(join(__dirname, 'bcrypt.android-arm64.node'))
29+
try {
30+
if (localFileExisted) {
31+
nativeBinding = require('./bcrypt.android-arm64.node')
32+
} else {
33+
nativeBinding = require('@node-rs/bcrypt-android-arm64')
34+
}
35+
} catch (e) {
36+
loadError = e
37+
}
38+
break
39+
case 'arm':
40+
localFileExisted = existsSync(join(__dirname, 'bcrypt.android-arm-eabi.node'))
41+
try {
42+
if (localFileExisted) {
43+
nativeBinding = require('./bcrypt.android-arm-eabi.node')
44+
} else {
45+
nativeBinding = require('@node-rs/bcrypt-android-arm-eabi')
46+
}
47+
} catch (e) {
48+
loadError = e
49+
}
50+
break
51+
default:
52+
throw new Error(`Unsupported architecture on Android ${arch}`)
53+
}
54+
break
55+
case 'win32':
56+
switch (arch) {
57+
case 'x64':
58+
localFileExisted = existsSync(join(__dirname, 'bcrypt.win32-x64-msvc.node'))
59+
try {
60+
if (localFileExisted) {
61+
nativeBinding = require('./bcrypt.win32-x64-msvc.node')
62+
} else {
63+
nativeBinding = require('@node-rs/bcrypt-win32-x64-msvc')
64+
}
65+
} catch (e) {
66+
loadError = e
67+
}
68+
break
69+
case 'ia32':
70+
localFileExisted = existsSync(join(__dirname, 'bcrypt.win32-ia32-msvc.node'))
71+
try {
72+
if (localFileExisted) {
73+
nativeBinding = require('./bcrypt.win32-ia32-msvc.node')
74+
} else {
75+
nativeBinding = require('@node-rs/bcrypt-win32-ia32-msvc')
76+
}
77+
} catch (e) {
78+
loadError = e
79+
}
80+
break
81+
case 'arm64':
82+
localFileExisted = existsSync(join(__dirname, 'bcrypt.win32-arm64-msvc.node'))
83+
try {
84+
if (localFileExisted) {
85+
nativeBinding = require('./bcrypt.win32-arm64-msvc.node')
86+
} else {
87+
nativeBinding = require('@node-rs/bcrypt-win32-arm64-msvc')
88+
}
89+
} catch (e) {
90+
loadError = e
91+
}
92+
break
93+
default:
94+
throw new Error(`Unsupported architecture on Windows: ${arch}`)
95+
}
96+
break
97+
case 'darwin':
98+
switch (arch) {
99+
case 'x64':
100+
localFileExisted = existsSync(join(__dirname, 'bcrypt.darwin-x64.node'))
101+
try {
102+
if (localFileExisted) {
103+
nativeBinding = require('./bcrypt.darwin-x64.node')
104+
} else {
105+
nativeBinding = require('@node-rs/bcrypt-darwin-x64')
106+
}
107+
} catch (e) {
108+
loadError = e
109+
}
110+
break
111+
case 'arm64':
112+
localFileExisted = existsSync(join(__dirname, 'bcrypt.darwin-arm64.node'))
113+
try {
114+
if (localFileExisted) {
115+
nativeBinding = require('./bcrypt.darwin-arm64.node')
116+
} else {
117+
nativeBinding = require('@node-rs/bcrypt-darwin-arm64')
118+
}
119+
} catch (e) {
120+
loadError = e
121+
}
122+
break
123+
default:
124+
throw new Error(`Unsupported architecture on macOS: ${arch}`)
125+
}
126+
break
127+
case 'freebsd':
128+
if (arch !== 'x64') {
129+
throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
130+
}
131+
localFileExisted = existsSync(join(__dirname, 'bcrypt.freebsd-x64.node'))
132+
try {
133+
if (localFileExisted) {
134+
nativeBinding = require('./bcrypt.freebsd-x64.node')
135+
} else {
136+
nativeBinding = require('@node-rs/bcrypt-freebsd-x64')
137+
}
138+
} catch (e) {
139+
loadError = e
140+
}
141+
break
142+
case 'linux':
143+
switch (arch) {
144+
case 'x64':
145+
if (isMusl()) {
146+
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-x64-musl.node'))
147+
try {
148+
if (localFileExisted) {
149+
nativeBinding = require('./bcrypt.linux-x64-musl.node')
150+
} else {
151+
nativeBinding = require('@node-rs/bcrypt-linux-x64-musl')
152+
}
153+
} catch (e) {
154+
loadError = e
155+
}
156+
} else {
157+
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-x64-gnu.node'))
158+
try {
159+
if (localFileExisted) {
160+
nativeBinding = require('./bcrypt.linux-x64-gnu.node')
161+
} else {
162+
nativeBinding = require('@node-rs/bcrypt-linux-x64-gnu')
163+
}
164+
} catch (e) {
165+
loadError = e
166+
}
167+
}
168+
break
169+
case 'arm64':
170+
if (isMusl()) {
171+
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-arm64-musl.node'))
172+
try {
173+
if (localFileExisted) {
174+
nativeBinding = require('./bcrypt.linux-arm64-musl.node')
175+
} else {
176+
nativeBinding = require('@node-rs/bcrypt-linux-arm64-musl')
177+
}
178+
} catch (e) {
179+
loadError = e
180+
}
181+
} else {
182+
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-arm64-gnu.node'))
183+
try {
184+
if (localFileExisted) {
185+
nativeBinding = require('./bcrypt.linux-arm64-gnu.node')
186+
} else {
187+
nativeBinding = require('@node-rs/bcrypt-linux-arm64-gnu')
188+
}
189+
} catch (e) {
190+
loadError = e
191+
}
192+
}
193+
break
194+
case 'arm':
195+
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-arm-gnueabihf.node'))
196+
try {
197+
if (localFileExisted) {
198+
nativeBinding = require('./bcrypt.linux-arm-gnueabihf.node')
199+
} else {
200+
nativeBinding = require('@node-rs/bcrypt-linux-arm-gnueabihf')
201+
}
202+
} catch (e) {
203+
loadError = e
204+
}
205+
break
206+
default:
207+
throw new Error(`Unsupported architecture on Linux: ${arch}`)
208+
}
209+
break
210+
default:
211+
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
212+
}
213+
214+
if (!nativeBinding) {
215+
if (loadError) {
216+
throw loadError
217+
}
218+
throw new Error(`Failed to load native binding`)
219+
}
220+
221+
const { DEFAULT_COST, genSaltSync, genSalt, hashSync, hash, verifySync, verify } = nativeBinding
222+
223+
module.exports.DEFAULT_COST = DEFAULT_COST
224+
module.exports.genSaltSync = genSaltSync
225+
module.exports.genSalt = genSalt
226+
module.exports.hashSync = hashSync
227+
module.exports.hash = hash
228+
module.exports.verifySync = verifySync
229+
module.exports.verify = verify

0 commit comments

Comments
 (0)