diff --git a/Cargo.toml b/Cargo.toml index 110c4bb7..3c15543e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,6 @@ resolver = "2" blowfish = { version = "0.9", features = ["bcrypt"] } crc32c = { version = "0.6" } crc32fast = { version = "1.4", features = ["nightly"] } - getrandom = "0.2" global_alloc = { path = "./crates/alloc" } indexmap = { version = "2", features = ["serde"] } jieba-rs = { version = "0.7", default-features = false, features = ["tfidf", "textrank"] } @@ -20,6 +19,7 @@ resolver = "2" napi-derive = { version = "3.0.0-alpha", default-features = false, features = ["type-def"] } once_cell = "1" quickcheck = "1.0" + rand = "0.8" rand_core = { version = "0.6", features = ["getrandom"] } serde = "1.0" serde_json = "1.0" diff --git a/packages/bcrypt/Cargo.toml b/packages/bcrypt/Cargo.toml index 4c33ed91..d1a0e802 100644 --- a/packages/bcrypt/Cargo.toml +++ b/packages/bcrypt/Cargo.toml @@ -11,10 +11,10 @@ crate-type = ["cdylib"] base64 = { workspace = true } bcrypt = { workspace = true } blowfish = { workspace = true } -getrandom = { workspace = true } global_alloc = { workspace = true } napi = { workspace = true, default-features = false, features = ["napi3"] } napi-derive = { workspace = true } +rand = { workspace = true } [dev-dependencies] quickcheck = { workspace = true } diff --git a/packages/bcrypt/README.md b/packages/bcrypt/README.md index f1f9f37a..869b7171 100644 --- a/packages/bcrypt/README.md +++ b/packages/bcrypt/README.md @@ -5,24 +5,6 @@ 🚀 Fastest bcrypt in Node.js -## Support matrix - -| | node12 | node14 | node16 | node18 | -| ---------------- | ------ | ------ | ------ | ------ | -| Windows x64 | ✓ | ✓ | ✓ | ✓ | -| Windows x32 | ✓ | ✓ | ✓ | ✓ | -| Windows arm64 | ✓ | ✓ | ✓ | ✓ | -| macOS x64 | ✓ | ✓ | ✓ | ✓ | -| macOS arm64 | ✓ | ✓ | ✓ | ✓ | -| Linux x64 gnu | ✓ | ✓ | ✓ | ✓ | -| Linux x64 musl | ✓ | ✓ | ✓ | ✓ | -| Linux arm gnu | ✓ | ✓ | ✓ | ✓ | -| Linux arm64 gnu | ✓ | ✓ | ✓ | ✓ | -| Linux arm64 musl | ✓ | ✓ | ✓ | ✓ | -| Android arm64 | ✓ | ✓ | ✓ | ✓ | -| Android armv7 | ✓ | ✓ | ✓ | ✓ | -| FreeBSD x64 | ✓ | ✓ | ✓ | ✓ | - ## Usage ```typescript @@ -55,33 +37,54 @@ export function genSalt(round: number, version?: Version): Promise ## Bench ``` -Model Name: MacBook Pro -Model Identifier: MacBookPro15,1 -Processor Name: Intel Core i7 -Processor Speed: 2.6 GHz -Number of Processors: 1 -Total Number of Cores: 6 -L2 Cache (per Core): 256 KB -L3 Cache: 12 MB -Hyper-Threading Technology: Enabled -Memory: 16 GB + ,MMMM. Host - xxxxxxxxxxxxxxxxxxxxxxx + .MMMMMM Machine - Mac15,9 + MMMMM, Kernel - 24.0.0 + .;MMMMM:' MMMMMMMMMM;. OS - macOS 15.0.1 Sequoia + MMMMMMMMMMMMNWMMMMMMMMMMM: DE - Aqua + .MMMMMMMMMMMMMMMMMMMMMMMMWM. WM - Quartz Compositor + MMMMMMMMMMMMMMMMMMMMMMMMM. Packages - 194 (Homebrew), 32 (cargo) + ;MMMMMMMMMMMMMMMMMMMMMMMM: Shell - zsh + :MMMMMMMMMMMMMMMMMMMMMMMM: Terminal - warpterminal (Version v0.2024.10.23.14.49.stable_00) + .MMMMMMMMMMMMMMMMMMMMMMMMM. Resolution - 5120x2880@160fps (as 2560x1440) + MMMMMMMMMMMMMMMMMMMMMMMMMMM. 2992x1934@120fps (as 1496x967) + .MMMMMMMMMMMMMMMMMMMMMMMMMM. 2232x1512@60fps (as 1116x756) + MMMMMMMMMMMMMMMMMMMMMMMM Uptime - 1d 2h 32m + ;MMMMMMMMMMMMMMMMMMMM. CPU - Apple M3 Max (16) + .MMMM,. .MMMM,. CPU Load - 16% + Memory - 50.1 GB / 134.2 GB + Battery - 78% & Discharging + Disk Space - 624.0 GB / 994.7 GB ``` ```text -@node-rs/bcrypt x 18.55 ops/sec ±1.51% (12 runs sampled) -node bcrypt x 16.37 ops/sec ±2.94% (11 runs sampled) -bcryptjs x 3.61 ops/sec ±4.86% (6 runs sampled) -Async hash round 12 bench suite: Fastest is @node-rs/bcrypt -@node-rs/bcrypt x 18.51 ops/sec ±1.60% (12 runs sampled) -node bcrypt x 16.51 ops/sec ±1.51% (11 runs sampled) -bcryptjs x 3.71 ops/sec ±2.23% (6 runs sampled) -Async verify bench suite: Fastest is @node-rs/bcrypt -@node-rs/bcrypt x 4.68 ops/sec ±4.69% (16 runs sampled) -node bcrypt x 3.94 ops/sec ±6.56% (14 runs sampled) -bcryptjs x 3.56 ops/sec ±2.04% (13 runs sampled) -Hash round 12 bench suite: Fastest is @node-rs/bcrypt -@node-rs/bcrypt x 521,917 ops/sec ±2.27% (82 runs sampled) -node bcrypt x 252,333 ops/sec ±2.05% (82 runs sampled) -bcryptjs x 110,578 ops/sec ±2.37% (82 runs sampled) -genSaltSync bench suite: Fastest is @node-rs/bcrypt +❯ yarn workspace @node-rs/bcrypt bench +Hash benchmark +┌─────────┬───────────────────┬─────────┬───────────────────┬──────────┬─────────┐ +│ (index) │ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │ +├─────────┼───────────────────┼─────────┼───────────────────┼──────────┼─────────┤ +│ 0 │ '@node-rs/bcrypt' │ '20' │ 49142200.63636367 │ '±1.08%' │ 11 │ +│ 1 │ 'node bcrypt' │ '20' │ 49259219.81818187 │ '±1.35%' │ 11 │ +│ 2 │ 'bcryptjs' │ '17' │ 58142116.79999998 │ '±0.36%' │ 10 │ +│ 3 │ 'wasm OpenBSD' │ '17' │ 58318899.99999994 │ '±0.23%' │ 10 │ +│ 4 │ 'wasm Openwall' │ '18' │ 53324629.20000016 │ '±0.37%' │ 10 │ +└─────────┴───────────────────┴─────────┴───────────────────┴──────────┴─────────┘ +Verify benchmark +┌─────────┬───────────────────┬─────────┬────────────────────┬──────────┬─────────┐ +│ (index) │ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │ +├─────────┼───────────────────┼─────────┼────────────────────┼──────────┼─────────┤ +│ 0 │ '@node-rs/bcrypt' │ '5' │ 192946879.09999993 │ '±0.52%' │ 10 │ +│ 1 │ 'node bcrypt' │ '5' │ 199806404.2 │ '±0.36%' │ 10 │ +│ 2 │ 'bcryptjs' │ '4' │ 231329516.79999986 │ '±0.13%' │ 10 │ +└─────────┴───────────────────┴─────────┴────────────────────┴──────────┴─────────┘ +GenSalt benchmark +┌─────────┬───────────────────┬─────────────┬────────────────────┬──────────┬─────────┐ +│ (index) │ Task Name │ ops/sec │ Average Time (ns) │ Margin │ Samples │ +├─────────┼───────────────────┼─────────────┼────────────────────┼──────────┼─────────┤ +│ 0 │ '@node-rs/bcrypt' │ '4,421,897' │ 226.14727567195578 │ '±0.08%' │ 2210949 │ +│ 1 │ 'node bcrypt' │ '4,477,408' │ 223.34345972377827 │ '±0.08%' │ 2238705 │ +│ 2 │ 'bcryptjs' │ '821,556' │ 1217.2015511950851 │ '±0.39%' │ 410779 │ +│ 3 │ 'wasm OpenBSD' │ '3,685,603' │ 271.3259889021118 │ '±0.23%' │ 1842802 │ +│ 4 │ 'wasm Openwall' │ '1,462,251' │ 683.8769076754866 │ '±2.50%' │ 731126 │ +└─────────┴───────────────────┴─────────────┴────────────────────┴──────────┴─────────┘ ``` diff --git a/packages/bcrypt/benchmark/bcrypt.js b/packages/bcrypt/benchmark/bcrypt.js deleted file mode 100644 index 914fe441..00000000 --- a/packages/bcrypt/benchmark/bcrypt.js +++ /dev/null @@ -1,144 +0,0 @@ -const { cpus } = require('os') - -const { hashSync, hash, compare, genSaltSync } = require('bcrypt') -const { hashSync: hashSyncJs, hash: hashJs, compare: compareJs, genSaltSync: genSaltSyncJs } = require('bcryptjs') -const { Suite } = require('benchmark') -const chalk = require('chalk') -const { range } = require('lodash') - -const { hash: napiHash, hashSync: napiHashSync, verify, genSaltSync: napiGenSaltSync } = require('../index') - -const parallel = cpus().length - -const password = 'node-rust-password' - -function runAsync(round = 12) { - const asyncHashSuite = new Suite(`Async hash round ${round}`) - return new Promise((resolve) => { - asyncHashSuite - .add('@node-rs/bcrypt', { - defer: true, - fn: (deferred) => { - Promise.all(range(parallel).map(() => napiHash(password, round))).then(() => { - deferred.resolve() - }) - }, - }) - .add('node bcrypt', { - defer: true, - fn: (deferred) => { - Promise.all(range(parallel).map(() => hash(password, round))).then(() => { - deferred.resolve() - }) - }, - }) - .add('bcryptjs', { - defer: true, - fn: (deferred) => { - Promise.all(range(parallel).map(() => hashJs(password, round))).then(() => { - deferred.resolve() - }) - }, - }) - .on('cycle', function (event) { - event.target.hz = event.target.hz * parallel - console.info(String(event.target)) - }) - .on('complete', function () { - console.info(`${this.name} bench suite: Fastest is ${chalk.green(this.filter('fastest').map('name'))}`) - resolve() - }) - .run({ async: true }) - }) -} - -runAsync() - .then( - () => - new Promise((resolve) => { - const suite = new Suite('Async verify') - const hash = napiHashSync(password) - suite - .add({ - name: '@node-rs/bcrypt', - defer: true, - fn: (deferred) => { - Promise.all(range(parallel).map(() => verify(password, hash))).then(() => { - deferred.resolve() - }) - }, - }) - .add({ - name: 'node bcrypt', - defer: true, - fn: (deferred) => { - Promise.all(range(parallel).map(() => compare(password, hash))).then(() => { - deferred.resolve() - }) - }, - }) - .add({ - name: 'bcryptjs', - defer: true, - fn: (deferred) => { - Promise.all(range(parallel).map(() => compareJs(password, hash))).then(() => { - deferred.resolve() - }) - }, - }) - .on('cycle', function (event) { - event.target.hz = event.target.hz * parallel - console.info(String(event.target)) - }) - .on('complete', function () { - resolve() - console.info(`${this.name} bench suite: Fastest is ${chalk.green(this.filter('fastest').map('name'))}`) - }) - .run() - }), - ) - .then(() => { - return new Promise((resolve) => { - const syncHashSuite = new Suite(`Hash round 12`) - syncHashSuite - .add('@node-rs/bcrypt', () => { - napiHashSync(password, 12) - }) - .add('node bcrypt', () => { - hashSync(password, 12) - }) - .add('bcryptjs', () => { - hashSyncJs(password, 12) - }) - .on('cycle', function (event) { - console.info(String(event.target)) - }) - .on('complete', function () { - console.info(`${this.name} bench suite: Fastest is ${chalk.green(this.filter('fastest').map('name'))}`) - resolve() - }) - .run() - }) - }) - .then(() => { - return new Promise((resolve) => { - new Suite('genSaltSync') - .add('@node-rs/bcrypt', () => { - napiGenSaltSync(10, '2b') - }) - .add('node bcrypt', () => { - genSaltSync(10, 'b') - }) - .add('bcryptjs', () => { - genSaltSyncJs(10) - }) - .on('cycle', function (event) { - console.info(String(event.target)) - }) - .on('complete', function () { - console.info(`${this.name} bench suite: Fastest is ${chalk.green(this.filter('fastest').map('name'))}`) - resolve() - }) - .run() - }) - }) diff --git a/packages/bcrypt/benchmark/bcrypt.ts b/packages/bcrypt/benchmark/bcrypt.ts new file mode 100644 index 00000000..b9958517 --- /dev/null +++ b/packages/bcrypt/benchmark/bcrypt.ts @@ -0,0 +1,77 @@ +import openbsd from '@cwasm/openbsd-bcrypt' +import openwall from '@cwasm/openwall-bcrypt' +import { hashSync, compare, genSaltSync } from 'bcrypt' +import bcryptjs from 'bcryptjs' +import { Bench } from 'tinybench' +import chalk from 'chalk' + +import { hashSync as napiHashSync, verifySync, genSaltSync as napiGenSaltSync } from '../binding.js' + +const password = 'node-rust-password' + +const syncHashSuite = new Bench() +syncHashSuite + .add('@node-rs/bcrypt', () => { + napiHashSync(password, 10) + }) + .add('node bcrypt', () => { + hashSync(password, 10) + }) + .add('bcryptjs', () => { + bcryptjs.hashSync(password, 10) + }) + .add('wasm OpenBSD', () => { + openbsd.hashSync(password, 10) + }) + .add('wasm Openwall', () => { + openwall.hashSync(password, 10) + }) + +await syncHashSuite.warmup() +await syncHashSuite.run() + +console.info(chalk.green('Hash benchmark')) +console.table(syncHashSuite.table()) + +const verifySuite = new Bench() +const hashed = napiHashSync(password, 12) +verifySuite + .add('@node-rs/bcrypt', () => { + verifySync(password, hashed) + }) + .add('node bcrypt', () => { + compare(password, hashSync(password, 12)) + }) + .add('bcryptjs', () => { + bcryptjs.compareSync(password, hashed) + }) + +await verifySuite.warmup() +await verifySuite.run() + +console.info(chalk.green('Verify benchmark')) +console.table(verifySuite.table()) + +const genSaltSuite = new Bench() +genSaltSuite + .add('@node-rs/bcrypt', () => { + napiGenSaltSync(12) + }) + .add('node bcrypt', () => { + genSaltSync(12) + }) + .add('bcryptjs', () => { + bcryptjs.genSaltSync(12) + }) + .add('wasm OpenBSD', () => { + openbsd.genSaltSync(12) + }) + .add('wasm Openwall', () => { + openwall.genSaltSync(12) + }) + +await genSaltSuite.warmup() +await genSaltSuite.run() + +console.info(chalk.green('GenSalt benchmark')) +console.table(genSaltSuite.table()) diff --git a/packages/bcrypt/benchmark/package.json b/packages/bcrypt/benchmark/package.json new file mode 100644 index 00000000..3dbc1ca5 --- /dev/null +++ b/packages/bcrypt/benchmark/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/bcrypt/package.json b/packages/bcrypt/package.json index 083fde3a..cf633e42 100644 --- a/packages/bcrypt/package.json +++ b/packages/bcrypt/package.json @@ -60,7 +60,7 @@ }, "scripts": { "artifacts": "napi artifacts -d ../../artifacts", - "bench": "cross-env NODE_ENV=production node benchmark/bcrypt.js", + "bench": "cross-env NODE_ENV=production node --import @swc-node/register/esm-register benchmark/bcrypt.ts", "build": "napi build --platform --release --js binding.js --dts binding.d.ts", "build:debug": "napi build --platform", "prepublishOnly": "napi prepublish", @@ -70,11 +70,15 @@ "url": "https://github.com/napi-rs/node-rs/issues" }, "devDependencies": { + "@cwasm/openbsd-bcrypt": "^0.1.0", + "@cwasm/openwall-bcrypt": "^0.1.0", "@napi-rs/cli": "^3.0.0-alpha.63", "@types/bcrypt": "^5.0.2", + "@types/bcryptjs": "^2.4.6", "bcrypt": "^5.1.1", "bcryptjs": "^2.4.3", - "cross-env": "^7.0.3" + "cross-env": "^7.0.3", + "tinybench": "^2.9.0" }, "funding": { "type": "github", diff --git a/packages/bcrypt/src/lib.rs b/packages/bcrypt/src/lib.rs index dbe9b880..19bae868 100644 --- a/packages/bcrypt/src/lib.rs +++ b/packages/bcrypt/src/lib.rs @@ -23,12 +23,7 @@ pub const DEFAULT_COST: u32 = 12; #[napi(ts_args_type = "round: number, version?: '2a' | '2x' | '2y' | '2b'")] pub fn gen_salt_sync(round: u32, version: Option) -> Result { - let salt = gen_salt().map_err(|err| { - Error::new( - Status::GenericFailure, - format!("Generate salt failed {err}"), - ) - })?; + let salt = gen_salt(); Ok(format_salt(round, &version_from_str(version)?, &salt)) } @@ -62,7 +57,7 @@ pub fn hash_sync( s[..copy_length].copy_from_slice(&buf[..copy_length]); s } else { - gen_salt().map_err(|err| Error::new(Status::InvalidArg, format!("{err}")))? + gen_salt() }; match input { Either::A(s) => HashTask::hash(s.as_bytes(), salt, cost.unwrap_or(DEFAULT_COST)), @@ -85,7 +80,7 @@ pub fn hash( s[..copy_length].copy_from_slice(&buf[..copy_length]); s } else { - gen_salt().map_err(|err| Error::new(Status::InvalidArg, format!("{err}")))? + gen_salt() }; let task = HashTask::new(input, cost.unwrap_or(DEFAULT_COST), salt); Ok(AsyncTask::with_optional_signal(task, signal)) diff --git a/packages/bcrypt/src/salt_task.rs b/packages/bcrypt/src/salt_task.rs index c8f9344e..e11cf4a3 100644 --- a/packages/bcrypt/src/salt_task.rs +++ b/packages/bcrypt/src/salt_task.rs @@ -1,17 +1,12 @@ use base64::engine::Engine; -use getrandom::getrandom; -use napi::{Env, Error, Result, Status, Task}; +use napi::{Env, Result, Task}; use napi_derive::napi; use crate::Version; #[inline] -pub(crate) fn gen_salt() -> bcrypt::BcryptResult<[u8; 16]> { - let mut s = [0u8; 16]; - getrandom(&mut s) - .map(|_| s) - .map_err(bcrypt::BcryptError::from)?; - Ok(s) +pub(crate) fn gen_salt() -> [u8; 16] { + rand::random() } #[inline] @@ -36,12 +31,7 @@ impl Task for SaltTask { type JsValue = String; fn compute(&mut self) -> Result { - let random = gen_salt().map_err(|err| { - Error::new( - Status::GenericFailure, - format!("Generate salt failed {err}"), - ) - })?; + let random = gen_salt(); Ok(format_salt(self.round, &self.version, &random)) } diff --git a/packages/bcrypt/tsconfig.json b/packages/bcrypt/tsconfig.json new file mode 100644 index 00000000..4d88cb0b --- /dev/null +++ b/packages/bcrypt/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "exclude": ["dist"], + "include": ["__tests__"] +} diff --git a/tsconfig.json b/tsconfig.json index 60f09fbe..d3adef53 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,8 +7,8 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "importHelpers": false, - "module": "CommonJS", - "moduleResolution": "node", + "module": "NodeNext", + "moduleResolution": "NodeNext", "newLine": "LF", "noEmitHelpers": true, "noUnusedLocals": true, @@ -17,7 +17,7 @@ "strict": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "target": "ES2018", + "target": "ESNext", "inlineSourceMap": true, "esModuleInterop": true, "stripInternal": true, diff --git a/yarn.lock b/yarn.lock index d373c158..4c4c1a76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,6 +43,20 @@ __metadata: languageName: node linkType: hard +"@cwasm/openbsd-bcrypt@npm:^0.1.0": + version: 0.1.0 + resolution: "@cwasm/openbsd-bcrypt@npm:0.1.0" + checksum: 10c0/81026794b4dd43238c65aef9d6e6229d6c77e225834f72f1400929a3ff13d73a4391da164868d604791f30d4f08996cd000ed18f171fc3f7647c9247e0387a1f + languageName: node + linkType: hard + +"@cwasm/openwall-bcrypt@npm:^0.1.0": + version: 0.1.0 + resolution: "@cwasm/openwall-bcrypt@npm:0.1.0" + checksum: 10c0/fb936c31824a1271fc8afac32f45ad4984a98270090513b0c59d08329755157e7d723865174cf06f2c303b02df77a14e278ac56bae5705e0053e082a3cde2420 + languageName: node + linkType: hard + "@emnapi/core@npm:^1.1.0": version: 1.3.1 resolution: "@emnapi/core@npm:1.3.1" @@ -1035,11 +1049,15 @@ __metadata: version: 0.0.0-use.local resolution: "@node-rs/bcrypt@workspace:packages/bcrypt" dependencies: + "@cwasm/openbsd-bcrypt": "npm:^0.1.0" + "@cwasm/openwall-bcrypt": "npm:^0.1.0" "@napi-rs/cli": "npm:^3.0.0-alpha.63" "@types/bcrypt": "npm:^5.0.2" + "@types/bcryptjs": "npm:^2.4.6" bcrypt: "npm:^5.1.1" bcryptjs: "npm:^2.4.3" cross-env: "npm:^7.0.3" + tinybench: "npm:^2.9.0" languageName: unknown linkType: soft @@ -2129,6 +2147,13 @@ __metadata: languageName: node linkType: hard +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: 10c0/073bfa548026b1ebaf1659eb8961e526be22fa77139b10d60e712f46d2f0f05f4e6c8bec62a087d41088ee9e29faa7f54838568e475ab2f776171003c3920858 + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.11 resolution: "@tsconfig/node10@npm:1.0.11" @@ -2192,6 +2217,13 @@ __metadata: languageName: node linkType: hard +"@types/bcryptjs@npm:^2.4.6": + version: 2.4.6 + resolution: "@types/bcryptjs@npm:2.4.6" + checksum: 10c0/1182663f0c081c5c58760019459cd309335e9b5fc6552780b0fd21b6c5f25661a844709e46218796f4bdbebe6736e11cfc5af0729bc2cdb0160943650aceb3da + languageName: node + linkType: hard + "@types/crc@npm:^3.8.3": version: 3.8.3 resolution: "@types/crc@npm:3.8.3" @@ -2506,7 +2538,7 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1": +"abbrev@npm:1, abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: 10c0/3f762677702acb24f65e813070e306c61fafe25d4b2583f9dfc935131f774863f3addd5741572ed576bd69cabe473c5af18e1e108b829cb7b6b4747884f726e6 @@ -2538,7 +2570,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.7.1, acorn@npm:^8.8.2": +"acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.6.0": version: 8.13.0 resolution: "acorn@npm:8.13.0" bin: @@ -2547,6 +2579,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.2": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 10c0/deaeebfbea6e40f6c0e1070e9b0e16e76ba484de54cbd735914d1d41d19169a450de8630b7a3a0c4e271a3b0c0b075a3427ad1a40d8a69f8747c0e8cb02ee3e2 + languageName: node + linkType: hard + "add-stream@npm:^1.0.0": version: 1.0.0 resolution: "add-stream@npm:1.0.0" @@ -2554,7 +2595,7 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": +"agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: @@ -2572,6 +2613,17 @@ __metadata: languageName: node linkType: hard +"agentkeepalive@npm:^4.2.1": + version: 4.3.0 + resolution: "agentkeepalive@npm:4.3.0" + dependencies: + debug: "npm:^4.1.0" + depd: "npm:^2.0.0" + humanize-ms: "npm:^1.2.1" + checksum: 10c0/61cbdab12d45e82e9ae515b0aa8d09617b66f72409e541a646dd7be4b7260d335d7f56a38079ad305bf0ffb8405592a459faf1294111289107f48352a20c2799 + languageName: node + linkType: hard + "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -2691,6 +2743,16 @@ __metadata: languageName: node linkType: hard +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: "npm:^1.0.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/8373f289ba42e4b5ec713bb585acdac14b5702c75f2a458dc985b9e4fa5762bc5b46b40a21b72418a3ed0cfb5e35bdc317ef1ae132f3035f633d581dd03168c3 + languageName: node + linkType: hard + "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -3053,6 +3115,26 @@ __metadata: languageName: node linkType: hard +"cacache@npm:^17.0.0": + version: 17.1.3 + resolution: "cacache@npm:17.1.3" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^7.7.1" + minipass: "npm:^5.0.0" + minipass-collect: "npm:^1.0.2" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/fcb0843c8e152b0e1440328508a2c0d6435c431198155e31daa591b348a1739b089ce2a72a4528690ed10a2bf086c180ee4980e2116457131b4c8a6e65e10976 + languageName: node + linkType: hard + "cacache@npm:^18.0.0, cacache@npm:^18.0.3": version: 18.0.4 resolution: "cacache@npm:18.0.4" @@ -3188,9 +3270,9 @@ __metadata: linkType: hard "ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + version: 3.8.0 + resolution: "ci-info@npm:3.8.0" + checksum: 10c0/0d3052193b58356372b34ab40d2668c3e62f1006d5ca33726d1d3c423853b19a85508eadde7f5908496fb41448f465263bf61c1ee58b7832cb6a924537e3863a languageName: node linkType: hard @@ -3385,7 +3467,7 @@ __metadata: languageName: node linkType: hard -"color-support@npm:1.1.3, color-support@npm:^1.1.2": +"color-support@npm:1.1.3, color-support@npm:^1.1.2, color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" bin: @@ -3726,6 +3808,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.1.0, debug@npm:^4.3.3": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" @@ -3785,6 +3879,13 @@ __metadata: languageName: node linkType: hard +"depd@npm:^2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + "deprecation@npm:^2.0.0": version: 2.3.1 resolution: "deprecation@npm:2.3.1" @@ -4389,6 +4490,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: 10c0/60b74b2407e1942e1ed7f8c284f8ef714d0689dcfce5319985a5b7da3fc727f40b4a59ec72dc55aa83365ad7b8fa4fac3a30d93c850a2b452f29ae03dbc10a1e + languageName: node + linkType: hard + "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -4413,6 +4521,22 @@ __metadata: languageName: node linkType: hard +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: "npm:^1.0.3 || ^2.0.0" + color-support: "npm:^1.1.3" + console-control-strings: "npm:^1.1.0" + has-unicode: "npm:^2.0.1" + signal-exit: "npm:^3.0.7" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wide-align: "npm:^1.1.5" + checksum: 10c0/ef10d7981113d69225135f994c9f8c4369d945e64a8fc721d655a3a38421b738c9fe899951721d1b47b73c41fdb5404ac87cc8903b2ecbed95d2800363e7e58c + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -4573,7 +4697,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -4680,6 +4804,15 @@ __metadata: languageName: node linkType: hard +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: "npm:^1.1.1" + checksum: 10c0/e1da0d2bd109f116b632f27782cf23182b42f14972ca9540e4c5aa7e52647407a0a4a76937334fddcb56befe94a3494825ec22b19b51f5e5507c3153fd1a5e1b + languageName: node + linkType: hard + "hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -4732,6 +4865,17 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": "npm:2" + agent-base: "npm:6" + debug: "npm:4" + checksum: 10c0/32a05e413430b2c1e542e5c74b38a9f14865301dd69dff2e53ddb684989440e3d2ce0c4b64d25eb63cf6283e6265ff979a61cf93e3ca3d23047ddfdc8df34a32 + languageName: node + linkType: hard + "http-proxy-agent@npm:^7.0.0": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" @@ -4776,6 +4920,15 @@ __metadata: languageName: node linkType: hard +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: "npm:^2.0.0" + checksum: 10c0/f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a + languageName: node + linkType: hard + "husky@npm:^9.1.6": version: 9.1.6 resolution: "husky@npm:9.1.6" @@ -4964,6 +5117,13 @@ __metadata: languageName: node linkType: hard +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: 10c0/8d186cc5585f57372847ae29b6eba258c68862055e18a75cc4933327232cb5c107f89800ce29715d542eef2c254fbb68b382e780a7414f9ee7caf60b7a473958 + languageName: node + linkType: hard + "irregular-plurals@npm:^3.3.0": version: 3.5.0 resolution: "irregular-plurals@npm:3.5.0" @@ -4989,7 +5149,16 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0": +"is-core-module@npm:^2.12.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: "npm:^1.0.3" + checksum: 10c0/ff1d0dfc0b7851310d289398e416eb92ae8a9ac7ea8b8b9737fa8c0725f5a78c5f3db6edd4dff38c9ed731f3aaa1f6410a320233fcb52a2c8f1cf58eebf10a4b + languageName: node + linkType: hard + +"is-core-module@npm:^2.5.0": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" dependencies: @@ -5778,6 +5947,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: 10c0/b3a452b491433db885beed95041eb104c157ef7794b9c9b4d647be503be91769d11206bb573849a16b4cc0d03cbd15ffd22df7960997788b74c1d399ac7a4fed + languageName: node + linkType: hard + "make-dir@npm:4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -5813,6 +5989,29 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: "npm:^4.2.1" + cacache: "npm:^17.0.0" + http-cache-semantics: "npm:^4.1.1" + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.0" + is-lambda: "npm:^1.0.1" + lru-cache: "npm:^7.7.1" + minipass: "npm:^5.0.0" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + socks-proxy-agent: "npm:^7.0.0" + ssri: "npm:^10.0.0" + checksum: 10c0/c161bde51dbc03382f9fac091734526a64dd6878205db6c338f70d2133df797b5b5166bff3091cf7d4785869d4b21e99a58139c1790c2fb1b5eec00f528f5f0b + languageName: node + linkType: hard + "make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": version: 13.0.1 resolution: "make-fetch-happen@npm:13.0.1" @@ -6049,6 +6248,15 @@ __metadata: languageName: node linkType: hard +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/8f82bd1f3095b24f53a991b04b67f4c710c894e518b813f0864a31de5570441a509be1ca17e0bb92b047591a8fdbeb886f502764fefb00d2f144f4011791e898 + languageName: node + linkType: hard + "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -6156,7 +6364,14 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.1.1, ms@npm:^2.1.3": +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -6288,7 +6503,7 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^10.0.0, node-gyp@npm:latest": +"node-gyp@npm:^10.0.0": version: 10.2.0 resolution: "node-gyp@npm:10.2.0" dependencies: @@ -6308,6 +6523,27 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^7.1.4" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^11.0.3" + nopt: "npm:^6.0.0" + npmlog: "npm:^6.0.0" + rimraf: "npm:^3.0.2" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^2.0.2" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/e8dfbe2b02f23d056f69e01c409381963e92c71cafba6c9cfbf63b038f65ca19ab8183bb6891d080e59c4eb2cc425fc736f42e90afc0f0030ecd97bfc64fb7ad + languageName: node + linkType: hard + "node-machine-id@npm:1.1.12": version: 1.1.12 resolution: "node-machine-id@npm:1.1.12" @@ -6378,6 +6614,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: "npm:^1.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/837b52c330df16fcaad816b1f54fec6b2854ab1aa771d935c1603fbcf9b023bb073f1466b1b67f48ea4dce127ae675b85b9d9355700e9b109de39db490919786 + languageName: node + linkType: hard + "nopt@npm:^7.0.0, nopt@npm:^7.2.1": version: 7.2.1 resolution: "nopt@npm:7.2.1" @@ -6568,6 +6815,18 @@ __metadata: languageName: node linkType: hard +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: "npm:^3.0.0" + console-control-strings: "npm:^1.1.0" + gauge: "npm:^4.0.3" + set-blocking: "npm:^2.0.0" + checksum: 10c0/0cacedfbc2f6139c746d9cd4a85f62718435ad0ca4a2d6459cd331dd33ae58206e91a0742c1558634efcde3f33f8e8e7fd3adf1bfe7978310cf00bd55cccf890 + languageName: node + linkType: hard + "nx@npm:19.8.6, nx@npm:>=17.1.2 < 20": version: 19.8.6 resolution: "nx@npm:19.8.6" @@ -7527,28 +7786,28 @@ __metadata: linkType: hard "resolve@npm:^1.10.0": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" + version: 1.22.3 + resolution: "resolve@npm:1.22.3" dependencies: - is-core-module: "npm:^2.13.0" + is-core-module: "npm:^2.12.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + checksum: 10c0/5ebd90dc08467e7d9af8f89a67f127c90d77e58d3bfc65da5221699cc15679c5bae5e410e6795ee4b9f717cd711c495a52a3b650ce6720b0626de46e5074e796 languageName: node linkType: hard "resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + version: 1.22.3 + resolution: "resolve@patch:resolve@npm%3A1.22.3#optional!builtin::version=1.22.3&hash=c3c19d" dependencies: - is-core-module: "npm:^2.13.0" + is-core-module: "npm:^2.12.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + checksum: 10c0/6267bdbbbb1da23975463e979dadf5135fcc40c4b9281c5af4581afa848ced98090ab4e2dbc9085e58f8ea48c0eb7c4fe94b1e8f55ebdd17a725d86982eb5288 languageName: node linkType: hard @@ -7690,7 +7949,18 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e + languageName: node + linkType: hard + +"semver@npm:^7.5.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -7756,7 +8026,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -7825,6 +8095,17 @@ __metadata: languageName: node linkType: hard +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: "npm:^6.0.2" + debug: "npm:^4.3.3" + socks: "npm:^2.6.2" + checksum: 10c0/b859f7eb8e96ec2c4186beea233ae59c02404094f3eb009946836af27d6e5c1627d1975a69b4d2e20611729ed543b6db3ae8481eb38603433c50d0345c987600 + languageName: node + linkType: hard + "socks-proxy-agent@npm:^8.0.3": version: 8.0.4 resolution: "socks-proxy-agent@npm:8.0.4" @@ -7836,6 +8117,16 @@ __metadata: languageName: node linkType: hard +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: "npm:^2.0.0" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/43f69dbc9f34fc8220bc51c6eea1c39715ab3cfdb115d6e3285f6c7d1a603c5c75655668a5bbc11e3c7e2c99d60321fb8d7ab6f38cda6a215fadd0d6d0b52130 + languageName: node + linkType: hard + "socks@npm:^2.8.3": version: 2.8.3 resolution: "socks@npm:2.8.3" @@ -8175,7 +8466,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": +"tar@npm:6.2.1, tar@npm:^6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -8189,6 +8480,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.1.15 + resolution: "tar@npm:6.1.15" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/bb2babe7b14442f690d83c2b2c571c9dd0bf802314773e05f4a3e4a241fdecd7fb560b8e4e7d6ea34533c8cd692e1b8418a3b8ba3b9687fe78a683dfbad7f82d + languageName: node + linkType: hard + "teeny-request@npm:7.1.1": version: 7.1.1 resolution: "teeny-request@npm:7.1.1" @@ -8738,7 +9043,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.1": +"which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: @@ -8771,7 +9076,7 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:1.1.5, wide-align@npm:^1.1.2": +"wide-align@npm:1.1.5, wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: