Skip to content

Commit

Permalink
feat(*): upgrade to napi@2.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Brooooooklyn committed Feb 10, 2022
1 parent a56439a commit 27d003b
Show file tree
Hide file tree
Showing 22 changed files with 451 additions and 331 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"postinstall": "husky install"
},
"devDependencies": {
"@napi-rs/cli": "^2.4.1",
"@napi-rs/cli": "^2.4.2",
"@swc-node/core": "^1.8.2",
"@swc-node/register": "^1.4.2",
"@types/node": "^17.0.8",
Expand Down
41 changes: 28 additions & 13 deletions packages/argon2/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ function isMusl() {
try {
return readFileSync('/usr/bin/ldd', 'utf8').includes('musl')
} catch (e) {
return false
return true
}
} else {
const { glibcVersionRuntime } = process.report.getReport().header
Expand All @@ -23,18 +23,33 @@ function isMusl() {

switch (platform) {
case 'android':
if (arch !== 'arm64') {
throw new Error(`Unsupported architecture on Android ${arch}`)
}
localFileExisted = existsSync(join(__dirname, 'argon2.android-arm64.node'))
try {
if (localFileExisted) {
nativeBinding = require('./argon2.android-arm64.node')
} else {
nativeBinding = require('@node-rs/argon2-android-arm64')
}
} catch (e) {
loadError = e
switch (arch) {
case 'arm64':
localFileExisted = existsSync(join(__dirname, 'argon2.android-arm64.node'))
try {
if (localFileExisted) {
nativeBinding = require('./argon2.android-arm64.node')
} else {
nativeBinding = require('@node-rs/argon2-android-arm64')
}
} catch (e) {
loadError = e
}
break
case 'arm':
localFileExisted = existsSync(join(__dirname, 'argon2.android-arm-eabi.node'))
try {
if (localFileExisted) {
nativeBinding = require('./argon2.android-arm-eabi.node')
} else {
nativeBinding = require('@node-rs/argon2-android-arm-eabi')
}
} catch (e) {
loadError = e
}
break
default:
throw new Error(`Unsupported architecture on Android ${arch}`)
}
break
case 'win32':
Expand Down
2 changes: 1 addition & 1 deletion packages/bcrypt/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ bcrypt = "0.10"
blowfish = {version = "0.8", features = ["bcrypt"]}
byteorder = "1"
global_alloc = {path = "../../crates/alloc"}
napi = {version = "2"}
napi = {version = "2", default-features = false, features = ["napi3"]}
napi-derive = {version = "2"}
phf = {version = "0.10", features = ["macros"]}
radix64 = "0.6"
Expand Down
7 changes: 6 additions & 1 deletion packages/bcrypt/__tests__/bcrypt.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import test from 'ava'

import { verifySync, hash } from '../index'
import { verifySync, compareSync, verify, compare, hash } from '../index'

const { hashSync } = require('bcryptjs')

Expand All @@ -22,3 +22,8 @@ test('verifySync should always return boolean even if the password is invalid',
t.false(verifySync('a', ''))
t.false(verifySync('', ''))
})

test('compare should be equal to verify', (t) => {
t.is(verifySync, compareSync)
t.is(verify, compare)
})
26 changes: 26 additions & 0 deletions packages/bcrypt/binding.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/* tslint:disable */
/* eslint-disable */

/* auto-generated by NAPI-RS */

export class ExternalObject<T> {
readonly '': {
readonly '': unique symbol
[K: symbol]: T
}
}
export const DEFAULT_COST: number
export function genSaltSync(round: number, version: string): string
export function genSalt(round: number, version: string, signal?: AbortSignal | undefined | null): Promise<string>
export function hashSync(input: string | Buffer, cost?: number | undefined | null): string
export function hash(
input: string | Buffer,
cost?: number | undefined | null,
signal?: AbortSignal | undefined | null,
): Promise<string>
export function verifySync(input: string | Buffer, hash: string | Buffer): boolean
export function verify(
password: string | Buffer,
hash: string | Buffer,
signal?: AbortSignal | undefined | null,
): Promise<boolean>
229 changes: 229 additions & 0 deletions packages/bcrypt/binding.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
const { existsSync, readFileSync } = require('fs')
const { join } = require('path')

const { platform, arch } = process

let nativeBinding = null
let localFileExisted = false
let loadError = null

function isMusl() {
// For Node 10
if (!process.report || typeof process.report.getReport !== 'function') {
try {
return readFileSync('/usr/bin/ldd', 'utf8').includes('musl')
} catch (e) {
return true
}
} else {
const { glibcVersionRuntime } = process.report.getReport().header
return !glibcVersionRuntime
}
}

switch (platform) {
case 'android':
switch (arch) {
case 'arm64':
localFileExisted = existsSync(join(__dirname, 'bcrypt.android-arm64.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.android-arm64.node')
} else {
nativeBinding = require('@node-rs/bcrypt-android-arm64')
}
} catch (e) {
loadError = e
}
break
case 'arm':
localFileExisted = existsSync(join(__dirname, 'bcrypt.android-arm-eabi.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.android-arm-eabi.node')
} else {
nativeBinding = require('@node-rs/bcrypt-android-arm-eabi')
}
} catch (e) {
loadError = e
}
break
default:
throw new Error(`Unsupported architecture on Android ${arch}`)
}
break
case 'win32':
switch (arch) {
case 'x64':
localFileExisted = existsSync(join(__dirname, 'bcrypt.win32-x64-msvc.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.win32-x64-msvc.node')
} else {
nativeBinding = require('@node-rs/bcrypt-win32-x64-msvc')
}
} catch (e) {
loadError = e
}
break
case 'ia32':
localFileExisted = existsSync(join(__dirname, 'bcrypt.win32-ia32-msvc.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.win32-ia32-msvc.node')
} else {
nativeBinding = require('@node-rs/bcrypt-win32-ia32-msvc')
}
} catch (e) {
loadError = e
}
break
case 'arm64':
localFileExisted = existsSync(join(__dirname, 'bcrypt.win32-arm64-msvc.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.win32-arm64-msvc.node')
} else {
nativeBinding = require('@node-rs/bcrypt-win32-arm64-msvc')
}
} catch (e) {
loadError = e
}
break
default:
throw new Error(`Unsupported architecture on Windows: ${arch}`)
}
break
case 'darwin':
switch (arch) {
case 'x64':
localFileExisted = existsSync(join(__dirname, 'bcrypt.darwin-x64.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.darwin-x64.node')
} else {
nativeBinding = require('@node-rs/bcrypt-darwin-x64')
}
} catch (e) {
loadError = e
}
break
case 'arm64':
localFileExisted = existsSync(join(__dirname, 'bcrypt.darwin-arm64.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.darwin-arm64.node')
} else {
nativeBinding = require('@node-rs/bcrypt-darwin-arm64')
}
} catch (e) {
loadError = e
}
break
default:
throw new Error(`Unsupported architecture on macOS: ${arch}`)
}
break
case 'freebsd':
if (arch !== 'x64') {
throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
}
localFileExisted = existsSync(join(__dirname, 'bcrypt.freebsd-x64.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.freebsd-x64.node')
} else {
nativeBinding = require('@node-rs/bcrypt-freebsd-x64')
}
} catch (e) {
loadError = e
}
break
case 'linux':
switch (arch) {
case 'x64':
if (isMusl()) {
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-x64-musl.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.linux-x64-musl.node')
} else {
nativeBinding = require('@node-rs/bcrypt-linux-x64-musl')
}
} catch (e) {
loadError = e
}
} else {
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-x64-gnu.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.linux-x64-gnu.node')
} else {
nativeBinding = require('@node-rs/bcrypt-linux-x64-gnu')
}
} catch (e) {
loadError = e
}
}
break
case 'arm64':
if (isMusl()) {
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-arm64-musl.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.linux-arm64-musl.node')
} else {
nativeBinding = require('@node-rs/bcrypt-linux-arm64-musl')
}
} catch (e) {
loadError = e
}
} else {
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-arm64-gnu.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.linux-arm64-gnu.node')
} else {
nativeBinding = require('@node-rs/bcrypt-linux-arm64-gnu')
}
} catch (e) {
loadError = e
}
}
break
case 'arm':
localFileExisted = existsSync(join(__dirname, 'bcrypt.linux-arm-gnueabihf.node'))
try {
if (localFileExisted) {
nativeBinding = require('./bcrypt.linux-arm-gnueabihf.node')
} else {
nativeBinding = require('@node-rs/bcrypt-linux-arm-gnueabihf')
}
} catch (e) {
loadError = e
}
break
default:
throw new Error(`Unsupported architecture on Linux: ${arch}`)
}
break
default:
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
}

if (!nativeBinding) {
if (loadError) {
throw loadError
}
throw new Error(`Failed to load native binding`)
}

const { DEFAULT_COST, genSaltSync, genSalt, hashSync, hash, verifySync, verify } = nativeBinding

module.exports.DEFAULT_COST = DEFAULT_COST
module.exports.genSaltSync = genSaltSync
module.exports.genSalt = genSalt
module.exports.hashSync = hashSync
module.exports.hash = hash
module.exports.verifySync = verifySync
module.exports.verify = verify
28 changes: 4 additions & 24 deletions packages/bcrypt/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,6 @@
/* tslint:disable */
/* eslint-disable */
import { verify, verifySync } from './binding'

/* auto-generated by NAPI-RS */
export const compare: typeof verify
export const compareSync: typeof verifySync

export class ExternalObject<T> {
readonly '': {
readonly '': unique symbol
[K: symbol]: T
}
}
export const DEFAULT_COST: number
export function genSaltSync(round: number, version: string): string
export function genSalt(round: number, version: string, signal?: AbortSignal | undefined | null): Promise<string>
export function hashSync(input: string | Buffer, cost?: number | undefined | null): string
export function hash(
input: string | Buffer,
cost?: number | undefined | null,
signal?: AbortSignal | undefined | null,
): Promise<string>
export function verifySync(input: string | Buffer, hash: string | Buffer): boolean
export function verify(
password: string | Buffer,
hash: string | Buffer,
signal?: AbortSignal | undefined | null,
): Promise<boolean>
export * from './binding'

0 comments on commit 27d003b

Please sign in to comment.