From dfba81fbeed51cd5c569bb6deeb13e6c65b085c2 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 20 Apr 2020 00:39:24 +0800 Subject: [PATCH 1/9] feat(crc32): init --- Cargo.toml | 2 +- packages/crc32/.cargo/config | 2 + packages/{png => crc32}/Cargo.toml | 6 +- packages/crc32/README.md | 11 +++ packages/crc32/benchmark/calculate.js | 23 ++++++ packages/{png => crc32}/build.rs | 2 +- packages/crc32/package.json | 32 +++++++++ packages/crc32/src/lib.rs | 31 ++++++++ packages/png/lib/__tests__/fixtures/sigi.png | Bin 11954 -> 0 bytes packages/png/lib/__tests__/index.spec.ts | 22 ------ packages/png/lib/index.d.ts | 1 - packages/png/lib/index.js | 14 ---- packages/png/package.json | 12 ---- packages/png/src/lib.rs | 70 ------------------- yarn.lock | 29 +++++++- 15 files changed, 130 insertions(+), 127 deletions(-) create mode 100644 packages/crc32/.cargo/config rename packages/{png => crc32}/Cargo.toml (71%) create mode 100644 packages/crc32/README.md create mode 100644 packages/crc32/benchmark/calculate.js rename packages/{png => crc32}/build.rs (61%) create mode 100644 packages/crc32/package.json create mode 100644 packages/crc32/src/lib.rs delete mode 100644 packages/png/lib/__tests__/fixtures/sigi.png delete mode 100644 packages/png/lib/__tests__/index.spec.ts delete mode 100644 packages/png/lib/index.d.ts delete mode 100644 packages/png/lib/index.js delete mode 100644 packages/png/package.json delete mode 100644 packages/png/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 5580a835..8c6e15dd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ [workspace] members = [ - "./packages/png" + "./packages/crc32" ] diff --git a/packages/crc32/.cargo/config b/packages/crc32/.cargo/config new file mode 100644 index 00000000..fa9f548c --- /dev/null +++ b/packages/crc32/.cargo/config @@ -0,0 +1,2 @@ +[build] +rustflags = ["-C", "target-feature=+sse4.2"] \ No newline at end of file diff --git a/packages/png/Cargo.toml b/packages/crc32/Cargo.toml similarity index 71% rename from packages/png/Cargo.toml rename to packages/crc32/Cargo.toml index 7ba9fa28..195f389b 100644 --- a/packages/png/Cargo.toml +++ b/packages/crc32/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "png" +name = "node-rs-crc32" version = "0.1.0" authors = ["LongYinan "] edition = "2018" @@ -8,10 +8,8 @@ edition = "2018" crate-type = ["cdylib"] [dependencies] -futures = { version = "0.3", features = ["default", "thread-pool"] } -image = "0.23" napi-rs = { version = "0.2", path = "../../../napi-rs/napi" } -once_cell = "1.3" +crc32c = "0.4" [build-dependencies] napi-build = { version = "0.1", path = "../../../napi-rs/build" } diff --git a/packages/crc32/README.md b/packages/crc32/README.md new file mode 100644 index 00000000..caac2946 --- /dev/null +++ b/packages/crc32/README.md @@ -0,0 +1,11 @@ +# `base64` + +> TODO: description + +## Usage + +``` +const base64 = require('base64'); + +// TODO: DEMONSTRATE API +``` diff --git a/packages/crc32/benchmark/calculate.js b/packages/crc32/benchmark/calculate.js new file mode 100644 index 00000000..07625232 --- /dev/null +++ b/packages/crc32/benchmark/calculate.js @@ -0,0 +1,23 @@ +const { Suite } = require('benchmark') +const Sse4Crc32 = require('sse4_crc32') + +const { calculate } = require('../index.node') + +const suite = new Suite() + +const fixture = 'hello world' + +const fx = Buffer.from(fixture) + +suite.add('SIMD + NAPI', () => { + calculate(fx) +}).add('sse4_crc32', () => { + Sse4Crc32.calculate(fx) +}) +.on('cycle', function(event) { + console.log(String(event.target)); +}) +.on('complete', function() { + console.log('Fastest is ' + this.filter('fastest').map('name')); +}) +.run() diff --git a/packages/png/build.rs b/packages/crc32/build.rs similarity index 61% rename from packages/png/build.rs rename to packages/crc32/build.rs index 9fc23678..1f866b6a 100644 --- a/packages/png/build.rs +++ b/packages/crc32/build.rs @@ -1,5 +1,5 @@ extern crate napi_build; fn main() { - napi_build::setup(); + napi_build::setup(); } diff --git a/packages/crc32/package.json b/packages/crc32/package.json new file mode 100644 index 00000000..2891c2ce --- /dev/null +++ b/packages/crc32/package.json @@ -0,0 +1,32 @@ +{ + "name": "@node-rs/crc32", + "version": "0.0.0", + "description": "SIMD crc32", + "keywords": [ + "SIMD", + "NAPI", + "node-rs", + "crc32" + ], + "author": "LongYinan ", + "homepage": "https://github.com/Brooooooklyn/node-rs", + "license": "MIT", + "main": "lib/index.js", + "files": [ + "lib" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Brooooooklyn/node-rs.git" + }, + "scripts": { + "build": "cargo build --release && napi --release ./index.node", + "build:debug": "cargo build && napi ./index.node" + }, + "bugs": { + "url": "https://github.com/Brooooooklyn/node-rs/issues" + }, + "devDependencies": { + "sse4_crc32": "^6.0.1" + } +} diff --git a/packages/crc32/src/lib.rs b/packages/crc32/src/lib.rs new file mode 100644 index 00000000..20293d28 --- /dev/null +++ b/packages/crc32/src/lib.rs @@ -0,0 +1,31 @@ +#[macro_use] +extern crate napi_rs as napi; + +use crc32c; +use napi::{Any, Buffer, Env, Error, Number, Object, Result, Status, Value}; + +register_module!(test_module, init); + +fn init<'env>( + env: &'env Env, + exports: &'env mut Value<'env, Object>, +) -> Result>> { + exports.set_named_property( + "calculate", + env.create_function("calculate", callback!(calculate))?, + )?; + Ok(None) +} + +fn calculate<'a>( + env: &'a Env, + _this: Value<'a, Any>, + args: &[Value<'a, Any>], +) -> Result>> { + let input_data = args + .get(0) + .map(|v| Value::::from_raw(env, v.into_raw())) + .ok_or(Error::new(Status::InvalidArg))??; + let output = env.create_uint32(crc32c::crc32c(&input_data))?; + Ok(Some(output)) +} diff --git a/packages/png/lib/__tests__/fixtures/sigi.png b/packages/png/lib/__tests__/fixtures/sigi.png deleted file mode 100644 index da9ac0900c931c5d42ade0bfbb17163af9afd575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11954 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 { - const pngPath = path.join(__dirname, 'fixtures', 'sigi.png') - const pngData = await readFileAsync(pngPath) - const pixels = await decode(pngData) - console.log(pixels) - const sharpPixels = await sharp(pngData) - .raw() - .toBuffer() - console.log(sharpPixels) - t.is(pixels.length, sharpPixels.length) - // t.deepEqual(pixels, sharpPixels) -}) diff --git a/packages/png/lib/index.d.ts b/packages/png/lib/index.d.ts deleted file mode 100644 index 8d19bdbd..00000000 --- a/packages/png/lib/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function decode(filepath: string | Buffer): Promise diff --git a/packages/png/lib/index.js b/packages/png/lib/index.js deleted file mode 100644 index dcbd5d7d..00000000 --- a/packages/png/lib/index.js +++ /dev/null @@ -1,14 +0,0 @@ -const fs = require('fs') -const { promisify } = require('util') - -const readFileAsync = promisify(fs.readFile) - -const { decode: nativeDecode } = require('../index.node') - -module.exports.decode = async function decode(filepathOrBuffer) { - if (Buffer.isBuffer(filepathOrBuffer)) { - return nativeDecode(filepathOrBuffer) - } - const pngData = await readFileAsync(filepathOrBuffer) - return nativeDecode(pngData) -} diff --git a/packages/png/package.json b/packages/png/package.json deleted file mode 100644 index 898ecd9f..00000000 --- a/packages/png/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "@node-rs/png", - "version": "0.0.0", - "description": "PNG function bindings for Rust Image crate", - "main": "./lib/index.js", - "author": "lynweklm@gmail.com", - "license": "MIT", - "scripts": { - "build": "cargo build --release && napi --release ./index.node", - "build:debug": "cargo build && napi ./index.node" - } -} diff --git a/packages/png/src/lib.rs b/packages/png/src/lib.rs deleted file mode 100644 index 9b75131d..00000000 --- a/packages/png/src/lib.rs +++ /dev/null @@ -1,70 +0,0 @@ -#[macro_use] -extern crate napi_rs as napi; - -use futures::io::{copy, AllowStdIo}; -use image::png::PngDecoder; -use image::ImageDecoder; -use napi::{Any, Buffer, Env, Error, Object, Result, Status, Value}; -use std::ops::Deref; - -register_module!(node_rs_png, init); - -fn init<'env>( - env: &'env Env, - exports: &'env mut Value<'env, Object>, -) -> Result>> { - exports.set_named_property("decode", env.create_function("decode", callback!(decode)))?; - Ok(None) -} - -fn decode<'a>( - env: &'a Env, - _this: Value<'a, Any>, - args: &[Value<'a, Any>], -) -> Result>> { - let async_context = env.async_init(None, "test_spawn"); - let png_data: Value = args - .get(0) - .map(|v| Value::::from_value(env, v)) - .ok_or_else(|| Error::new(Status::InvalidArg))?; - - let image_data = { - let data = png_data.deref(); - unsafe { std::slice::from_raw_parts(data.as_ptr(), data.len()) } - }; - - let decoder = PngDecoder::new(image_data).map_err(|e| { - dbg!("{:?}", e); - Error::new(Status::GenericFailure) - })?; - let total_bytes = decoder.total_bytes() as usize; - let async_reader = AllowStdIo::new(decoder.into_reader().map_err(|e| { - dbg!("{:?}", e); - Error::new(Status::GenericFailure) - })?); - - let (promise, deferred) = env.create_promise(); - let task = async move { - let mut output = vec![0; total_bytes]; - match copy(async_reader, &mut output).await { - Ok(_) => { - async_context.enter(move |env| { - env.resolve_deferred(deferred, env.create_buffer_with_data(output)); - }); - } - Err(e) => { - dbg!("{:?}", &e); - async_context.enter(move |env| { - env.reject_deferred( - deferred, - env.create_error(Status::GenericFailure, &format!("{:?}", e)), - ); - }); - } - } - }; - - env.create_executor().execute(task); - - Ok(Some(promise.try_into().unwrap())) -} diff --git a/yarn.lock b/yarn.lock index ddc12e39..a677adfe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1614,6 +1614,13 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== +bindings@^1.3.0: + version "1.5.0" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + bl@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/bl/-/bl-4.0.1.tgz#8c9b4fb754e80cc86463077722be7b88b4af3f42" @@ -3156,6 +3163,11 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5026,7 +5038,7 @@ minimist@0.0.8: resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.2, minimist@^1.2.5: +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -5190,7 +5202,7 @@ napi-build-utils@^1.0.1: napi-rs@../napi-rs: version "0.1.1" dependencies: - minimist "^1.2.2" + minimist "^1.2.5" toml "^3.0.0" natural-compare@^1.4.0: @@ -5215,6 +5227,11 @@ node-abi@^2.7.0: dependencies: semver "^5.4.1" +node-addon-api@^1.3.0: + version "1.7.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz#cf813cd69bb8d9100f6bdca6755fc268f54ac492" + integrity sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ== + node-addon-api@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz#f9afb8d777a91525244b01775ea0ddbe1125483b" @@ -6867,6 +6884,14 @@ sprintf-js@~1.0.2: resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +sse4_crc32@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/sse4_crc32/-/sse4_crc32-6.0.1.tgz#3511c747ce48a224e0554ebb23d5835ba08a9637" + integrity sha512-FUTYXpLroqytNKWIfHzlDWoy9E4tmBB/RklNMy6w3VJs+/XEYAHgbiylg4SS43iOk/9bM0BlJ2EDpFAGT66IoQ== + dependencies: + bindings "^1.3.0" + node-addon-api "^1.3.0" + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" From 4a2b438562f46cbcff1641ca64ed495e0e9ece58 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 20 Apr 2020 14:39:12 +0800 Subject: [PATCH 2/9] feat: replace to crc32fast --- package.json | 5 +---- packages/crc32/.cargo/config | 2 -- packages/crc32/Cargo.toml | 2 +- packages/crc32/build.rs | 6 +++++- packages/crc32/src/lib.rs | 36 +++++++++++++++++++----------------- 5 files changed, 26 insertions(+), 25 deletions(-) delete mode 100644 packages/crc32/.cargo/config diff --git a/package.json b/package.json index 2faefc71..8d7fd1fe 100644 --- a/package.json +++ b/package.json @@ -50,9 +50,6 @@ "*.@(js|ts|tsx)": [ "prettier --write", "eslint -c .eslintrc.yml --fix" - ], - "*.rs": [ - "cargo fmt" ] }, "prettier": { @@ -65,7 +62,7 @@ }, "husky": { "hooks": { - "pre-commit": "lint-staged" + "pre-commit": "lint-staged && cargo fmt --all" } } } diff --git a/packages/crc32/.cargo/config b/packages/crc32/.cargo/config deleted file mode 100644 index fa9f548c..00000000 --- a/packages/crc32/.cargo/config +++ /dev/null @@ -1,2 +0,0 @@ -[build] -rustflags = ["-C", "target-feature=+sse4.2"] \ No newline at end of file diff --git a/packages/crc32/Cargo.toml b/packages/crc32/Cargo.toml index 195f389b..b2e1dc53 100644 --- a/packages/crc32/Cargo.toml +++ b/packages/crc32/Cargo.toml @@ -9,7 +9,7 @@ crate-type = ["cdylib"] [dependencies] napi-rs = { version = "0.2", path = "../../../napi-rs/napi" } -crc32c = "0.4" +crc32fast = "1.2" [build-dependencies] napi-build = { version = "0.1", path = "../../../napi-rs/build" } diff --git a/packages/crc32/build.rs b/packages/crc32/build.rs index 1f866b6a..2e7a11af 100644 --- a/packages/crc32/build.rs +++ b/packages/crc32/build.rs @@ -1,5 +1,9 @@ extern crate napi_build; +use std::env; + fn main() { - napi_build::setup(); + napi_build::setup(); + + env::set_var("RUSTFLAGS", "-C target-feature=+sse4.2"); } diff --git a/packages/crc32/src/lib.rs b/packages/crc32/src/lib.rs index 20293d28..f89648b2 100644 --- a/packages/crc32/src/lib.rs +++ b/packages/crc32/src/lib.rs @@ -1,31 +1,33 @@ #[macro_use] extern crate napi_rs as napi; -use crc32c; +use crc32fast::Hasher; use napi::{Any, Buffer, Env, Error, Number, Object, Result, Status, Value}; register_module!(test_module, init); fn init<'env>( - env: &'env Env, - exports: &'env mut Value<'env, Object>, + env: &'env Env, + exports: &'env mut Value<'env, Object>, ) -> Result>> { - exports.set_named_property( - "calculate", - env.create_function("calculate", callback!(calculate))?, - )?; - Ok(None) + exports.set_named_property( + "calculate", + env.create_function("calculate", callback!(calculate))?, + )?; + Ok(None) } fn calculate<'a>( - env: &'a Env, - _this: Value<'a, Any>, - args: &[Value<'a, Any>], + env: &'a Env, + _this: Value<'a, Any>, + args: &[Value<'a, Any>], ) -> Result>> { - let input_data = args - .get(0) - .map(|v| Value::::from_raw(env, v.into_raw())) - .ok_or(Error::new(Status::InvalidArg))??; - let output = env.create_uint32(crc32c::crc32c(&input_data))?; - Ok(Some(output)) + let input_data = args + .get(0) + .map(|v| Value::::from_raw(env, v.into_raw())) + .ok_or(Error::new(Status::InvalidArg))??; + let mut hasher = Hasher::new(); + hasher.update(&input_data); + let output = env.create_uint32(hasher.finalize())?; + Ok(Some(output)) } From be91a0716fd4292e3bdf468b2d6448bb3d95fccc Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 20 Apr 2020 23:17:45 +0800 Subject: [PATCH 3/9] style: add rustfmt config --- .editorconfig | 9 +++++++++ packages/crc32/build.rs | 4 ++-- packages/crc32/src/lib.rs | 36 ++++++++++++++++++------------------ rustfmt.toml | 1 + 4 files changed, 30 insertions(+), 20 deletions(-) create mode 100644 .editorconfig create mode 100644 rustfmt.toml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..eb7d3cbd --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_size = 2 +indent_style = space diff --git a/packages/crc32/build.rs b/packages/crc32/build.rs index 2e7a11af..2875fe6d 100644 --- a/packages/crc32/build.rs +++ b/packages/crc32/build.rs @@ -3,7 +3,7 @@ extern crate napi_build; use std::env; fn main() { - napi_build::setup(); + napi_build::setup(); - env::set_var("RUSTFLAGS", "-C target-feature=+sse4.2"); + env::set_var("RUSTFLAGS", "-C target-feature=+sse4.2"); } diff --git a/packages/crc32/src/lib.rs b/packages/crc32/src/lib.rs index f89648b2..3e6a16db 100644 --- a/packages/crc32/src/lib.rs +++ b/packages/crc32/src/lib.rs @@ -7,27 +7,27 @@ use napi::{Any, Buffer, Env, Error, Number, Object, Result, Status, Value}; register_module!(test_module, init); fn init<'env>( - env: &'env Env, - exports: &'env mut Value<'env, Object>, + env: &'env Env, + exports: &'env mut Value<'env, Object>, ) -> Result>> { - exports.set_named_property( - "calculate", - env.create_function("calculate", callback!(calculate))?, - )?; - Ok(None) + exports.set_named_property( + "calculate", + env.create_function("calculate", callback!(calculate))?, + )?; + Ok(None) } fn calculate<'a>( - env: &'a Env, - _this: Value<'a, Any>, - args: &[Value<'a, Any>], + env: &'a Env, + _this: Value<'a, Any>, + args: &[Value<'a, Any>], ) -> Result>> { - let input_data = args - .get(0) - .map(|v| Value::::from_raw(env, v.into_raw())) - .ok_or(Error::new(Status::InvalidArg))??; - let mut hasher = Hasher::new(); - hasher.update(&input_data); - let output = env.create_uint32(hasher.finalize())?; - Ok(Some(output)) + let input_data = args + .get(0) + .map(|v| Value::::from_raw(env, v.into_raw())) + .ok_or(Error::new(Status::InvalidArg))??; + let mut hasher = Hasher::new(); + hasher.update(&input_data); + let output = env.create_uint32(hasher.finalize())?; + Ok(Some(output)) } diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 00000000..b196eaa2 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +tab_spaces = 2 From 2611c9a248be0a8fedb72bf1637b1596bec0372c Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 27 Apr 2020 00:17:15 +0800 Subject: [PATCH 4/9] feat(helper): add helper package --- .eslintignore | 9 + .eslintrc.yml | 106 +++ .gitignore | 3 +- package.json | 32 +- packages/crc32/Cargo.toml | 2 + packages/crc32/benchmark/calculate.js | 49 +- packages/crc32/index.d.ts | 2 + packages/crc32/index.js | 3 + packages/crc32/package.json | 18 +- packages/crc32/src/lib.rs | 46 +- packages/helper/README.md | 21 + packages/helper/package.json | 29 + packages/helper/src/index.ts | 1 + packages/helper/src/loader.ts | 22 + packages/helper/tsconfig.json | 11 + tsconfig.json | 7 +- tsconfig.project.json | 8 + yarn.lock | 1217 ++++++++++--------------- 18 files changed, 812 insertions(+), 774 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.yml create mode 100644 packages/crc32/index.d.ts create mode 100644 packages/crc32/index.js create mode 100644 packages/helper/README.md create mode 100644 packages/helper/package.json create mode 100644 packages/helper/src/index.ts create mode 100644 packages/helper/src/loader.ts create mode 100644 packages/helper/tsconfig.json create mode 100644 tsconfig.project.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..abf3ac2b --- /dev/null +++ b/.eslintignore @@ -0,0 +1,9 @@ +node_modules +dist +lib +esm +next +coverage +.nyc_output +*.d.ts +target diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 00000000..7f020c66 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,106 @@ +parser: '@typescript-eslint/parser' + +parserOptions: + ecmaVersion: 2020 + sourceType: module + +env: + browser: true + es6: true + node: true + jest: true + +globals: + # false means readonly + globalThis: false + +plugins: + - import + - sonarjs + +extends: + - eslint:recommended + - plugin:sonarjs/recommended + - plugin:prettier/recommended + +settings: + react: + pragma: React + version: 16.12.0 + +rules: + # 0 = off, 1 = warn, 2 = error + 'no-undef': 2 + 'no-console': [2, { allow: ['error', 'warn', 'info', 'assert']}] + 'comma-dangle': ['error', 'only-multiline'] + 'no-unused-vars': 0 + 'no-var': 2 + 'one-var-declaration-per-line': 2 + 'prefer-const': 2 + 'no-const-assign': 2 + 'no-duplicate-imports': 2 + 'no-use-before-define': [2, { 'functions': false, 'classes': false }] + 'eqeqeq': [2, 'always', { 'null': 'ignore' }] + 'no-case-declarations': 0 + 'no-restricted-syntax': [2, { + 'selector': 'BinaryExpression[operator=/(==|===|!=|!==)/][left.raw=true], BinaryExpression[operator=/(==|===|!=|!==)/][right.raw=true]', + 'message': Don't compare for equality against boolean literals + }] + + 'import/first': 2 + 'import/newline-after-import': 2 + + 'sonarjs/cognitive-complexity': 0 + 'sonarjs/no-duplicate-string': 0 + 'sonarjs/no-big-function': 0 + 'sonarjs/no-identical-functions': 0 + 'sonarjs/no-small-switch': 0 + +overrides: + - + files: + - packages/**/*.ts + rules: + 'no-unused-vars': [2, { varsIgnorePattern: '^_', argsIgnorePattern: '^_', ignoreRestSiblings: true }] + + - + files: + - packages/**/*.ts + plugins: + - '@typescript-eslint' + parserOptions: + project: ./tsconfig.json + rules: + # constructor(private readonly foo: string) {} style declaration + 'no-useless-constructor': 0 + '@typescript-eslint/no-useless-constructor': 2 + + # conflict function override + 'no-dupe-class-members': 0 + '@typescript-eslint/no-dupe-class-members': 2 + + # constructor(private readonly foo: string) {} style declaration + 'no-empty-function': 0 + + '@typescript-eslint/no-empty-function': 2 + + '@typescript-eslint/no-unused-vars': [2, { varsIgnorePattern: '^_', argsIgnorePattern: '^_', ignoreRestSiblings: true }] + '@typescript-eslint/member-ordering': [2, { + default: [ + 'public-static-field', + 'protected-static-field', + 'private-static-field', + 'public-static-method', + 'protected-static-method', + 'private-static-method', + 'public-instance-field', + 'protected-instance-field', + 'private-instance-field', + 'public-constructor', + 'protected-constructor', + 'private-constructor', + 'public-instance-method', + 'protected-instance-method', + 'private-instance-method' + ] + }] \ No newline at end of file diff --git a/.gitignore b/.gitignore index b594e5ed..2ea50f94 100644 --- a/.gitignore +++ b/.gitignore @@ -176,4 +176,5 @@ temp/ # End of https://www.gitignore.io/api/node -*.node \ No newline at end of file +*.node +lib diff --git a/package.json b/package.json index 8d7fd1fe..aef58537 100644 --- a/package.json +++ b/package.json @@ -9,30 +9,28 @@ "workspaces": [ "packages/*" ], - "dependencies": { - "napi-rs": "../napi-rs" + "scripts": { + "lint": "eslint . -c ./.eslintrc.yml 'packages/**/*.{ts,js}'" }, "devDependencies": { - "@types/sharp": "^0.24.0", - "@typescript-eslint/eslint-plugin": "^2.24.0", - "@typescript-eslint/parser": "^2.24.0", - "ava": "^3.5.0", + "@typescript-eslint/eslint-plugin": "^2.29.0", + "@typescript-eslint/parser": "^2.29.0", + "ava": "^3.8.0", "benchmark": "^2.1.4", + "chalk": "^4.0.0", "codecov": "^3.6.5", "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.0", - "eslint-plugin-import": "^2.20.1", - "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-react": "^7.19.0", - "eslint-plugin-react-hooks": "^2.5.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-prettier": "^3.1.3", "eslint-plugin-sonarjs": "^0.5.0", - "husky": "^4.2.3", + "husky": "^4.2.5", "lerna": "^3.20.2", - "lint-staged": "^10.0.8", - "nyc": "^15.0.0", - "prettier": "^1.19.1", - "sharp": "^0.25.1", - "ts-node": "^8.6.2", + "lint-staged": "^10.1.7", + "napi-rs": "^0.2.3", + "nyc": "^15.0.1", + "prettier": "^2.0.5", + "ts-node": "^8.9.1", "typescript": "^3.8.3" }, "ava": { diff --git a/packages/crc32/Cargo.toml b/packages/crc32/Cargo.toml index b2e1dc53..eb7d8a13 100644 --- a/packages/crc32/Cargo.toml +++ b/packages/crc32/Cargo.toml @@ -9,6 +9,8 @@ crate-type = ["cdylib"] [dependencies] napi-rs = { version = "0.2", path = "../../../napi-rs/napi" } +napi-rs-derive = { version = "0.1", path = "../../../napi-rs/napi-derive" } +crc32c = "0.4" crc32fast = "1.2" [build-dependencies] diff --git a/packages/crc32/benchmark/calculate.js b/packages/crc32/benchmark/calculate.js index 07625232..92a9f3ee 100644 --- a/packages/crc32/benchmark/calculate.js +++ b/packages/crc32/benchmark/calculate.js @@ -1,23 +1,44 @@ const { Suite } = require('benchmark') const Sse4Crc32 = require('sse4_crc32') +const chalk = require('chalk') -const { calculate } = require('../index.node') +const { crc32c } = require('../index.node') -const suite = new Suite() +const suite = new Suite('Without initial crc') const fixture = 'hello world' const fx = Buffer.from(fixture) -suite.add('SIMD + NAPI', () => { - calculate(fx) -}).add('sse4_crc32', () => { - Sse4Crc32.calculate(fx) -}) -.on('cycle', function(event) { - console.log(String(event.target)); -}) -.on('complete', function() { - console.log('Fastest is ' + this.filter('fastest').map('name')); -}) -.run() +suite + .add('SIMD + NAPI', () => { + crc32c(fx) + }) + .add('sse4_crc32', () => { + Sse4Crc32.calculate(fx) + }) + .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'))}`) + }) + .run() + +const suite2 = new Suite('With initial crc') +const fx2 = Buffer.from('amazing napi + rust') + +suite2 + .add('SIMD + NAPI', () => { + crc32c(fx2, 3381945770) + }) + .add('sse4_crc32', () => { + Sse4Crc32.calculate(fx2, 3381945770) + }) + .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'))}`) + }) + .run() diff --git a/packages/crc32/index.d.ts b/packages/crc32/index.d.ts new file mode 100644 index 00000000..dbfbf89c --- /dev/null +++ b/packages/crc32/index.d.ts @@ -0,0 +1,2 @@ +export function crc32(input: Buffer, crc?: number): number +export function crc32c(input: Buffer, crc?: number): number diff --git a/packages/crc32/index.js b/packages/crc32/index.js new file mode 100644 index 00000000..da1d3269 --- /dev/null +++ b/packages/crc32/index.js @@ -0,0 +1,3 @@ +const { locateBinding } = require('@node-rs/helper') + +module.exports = require(locateBinding(__dirname)) diff --git a/packages/crc32/package.json b/packages/crc32/package.json index 2891c2ce..3cf3fb85 100644 --- a/packages/crc32/package.json +++ b/packages/crc32/package.json @@ -5,27 +5,35 @@ "keywords": [ "SIMD", "NAPI", + "napi-rs", "node-rs", - "crc32" + "crc32", + "crc32c" ], "author": "LongYinan ", "homepage": "https://github.com/Brooooooklyn/node-rs", "license": "MIT", - "main": "lib/index.js", + "main": "index.js", + "typings": "index.d.ts", "files": [ - "lib" + "index.js", + "index.d.ts", + "index.*.node" ], "repository": { "type": "git", "url": "git+https://github.com/Brooooooklyn/node-rs.git" }, "scripts": { - "build": "cargo build --release && napi --release ./index.node", - "build:debug": "cargo build && napi ./index.node" + "build": "cargo build --release && napi --release ./index", + "build:debug": "cargo build && napi ./index" }, "bugs": { "url": "https://github.com/Brooooooklyn/node-rs/issues" }, + "dependencies": { + "@node-rs/helper": "0.0.0" + }, "devDependencies": { "sse4_crc32": "^6.0.1" } diff --git a/packages/crc32/src/lib.rs b/packages/crc32/src/lib.rs index 3e6a16db..b005625b 100644 --- a/packages/crc32/src/lib.rs +++ b/packages/crc32/src/lib.rs @@ -1,8 +1,12 @@ #[macro_use] extern crate napi_rs as napi; +#[macro_use] +extern crate napi_rs_derive; +use crc32c::{crc32c as native_crc32c, crc32c_append}; use crc32fast::Hasher; -use napi::{Any, Buffer, Env, Error, Number, Object, Result, Status, Value}; +use napi::{Buffer, CallContext, Env, Number, Object, Result, Value}; +use std::convert::TryInto; register_module!(test_module, init); @@ -10,24 +14,32 @@ fn init<'env>( env: &'env Env, exports: &'env mut Value<'env, Object>, ) -> Result>> { - exports.set_named_property( - "calculate", - env.create_function("calculate", callback!(calculate))?, - )?; + exports.set_named_property("crc32c", env.create_function("crc32c", crc32c)?)?; + exports.set_named_property("crc32", env.create_function("crc32", crc32)?)?; Ok(None) } -fn calculate<'a>( - env: &'a Env, - _this: Value<'a, Any>, - args: &[Value<'a, Any>], -) -> Result>> { - let input_data = args - .get(0) - .map(|v| Value::::from_raw(env, v.into_raw())) - .ok_or(Error::new(Status::InvalidArg))??; - let mut hasher = Hasher::new(); +#[js_function(2)] +fn crc32c<'a>(ctx: CallContext<'a>) -> Result> { + let input_data = ctx.get::(0)?; + let init_state = ctx.get::(1); + let result = if init_state.is_ok() { + crc32c_append(init_state?.try_into()?, &input_data) + } else { + native_crc32c(&input_data) + }; + ctx.env.create_uint32(result) +} + +#[js_function(2)] +fn crc32<'a>(ctx: CallContext<'a>) -> Result> { + let input_data = ctx.get::(0)?; + let init_state = ctx.get::(1); + let mut hasher = if init_state.is_ok() { + Hasher::new_with_initial(init_state?.try_into()?) + } else { + Hasher::new() + }; hasher.update(&input_data); - let output = env.create_uint32(hasher.finalize())?; - Ok(Some(output)) + ctx.env.create_uint32(hasher.finalize()) } diff --git a/packages/helper/README.md b/packages/helper/README.md new file mode 100644 index 00000000..f26bd4ad --- /dev/null +++ b/packages/helper/README.md @@ -0,0 +1,21 @@ +# `@node-rs/helper` + +> Helper library for node-rs + +## Usage + +### locateBinding +Load native binding file from `dirname` + +```ts +locateBinding(dirname: string): string +``` + +- `dirname`, dirname which the **.node** binding file located +- return the full path of the binding file, throw if file not existed or platform not supported + +```ts +const { locateBinding } = require('@node-rs/helper') + +module.exports = require(locateBinding(__dirname)) +``` diff --git a/packages/helper/package.json b/packages/helper/package.json new file mode 100644 index 00000000..9de8aec1 --- /dev/null +++ b/packages/helper/package.json @@ -0,0 +1,29 @@ +{ + "name": "@node-rs/helper", + "version": "0.0.0", + "description": "Helper library for node-rs", + "keywords": [ + "N-API", + "napi", + "Rust", + "Performance" + ], + "author": "LongYinan ", + "homepage": "https://github.com/brooooooklyn/node-rs", + "license": "MIT", + "main": "lib/index.js", + "typings": "lib/index.d.ts", + "files": [ + "lib" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/Brooooooklyn/node-rs.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1" + }, + "bugs": { + "url": "https://github.com/Brooooooklyn/node-rs/issues" + } +} diff --git a/packages/helper/src/index.ts b/packages/helper/src/index.ts new file mode 100644 index 00000000..f86c68b9 --- /dev/null +++ b/packages/helper/src/index.ts @@ -0,0 +1 @@ +export { locateBinding } from './loader' diff --git a/packages/helper/src/loader.ts b/packages/helper/src/loader.ts new file mode 100644 index 00000000..c890b93e --- /dev/null +++ b/packages/helper/src/loader.ts @@ -0,0 +1,22 @@ +import { platform } from 'os' +import { join } from 'path' +import { existsSync } from 'fs' + +const SupportedPlatforms = new Set(['darwin', 'win32', 'linux']) + +export function locateBinding(dirname: string) { + const platformName = platform() + if (!SupportedPlatforms.has(platformName)) { + throw new TypeError( + `Unsupported platform: ${platformName}, only support ${[...SupportedPlatforms.values()].join(', ')}`, + ) + } + + const bindingFilePath = join(dirname, `index.${platformName}.node`) + + if (!existsSync(bindingFilePath)) { + throw new TypeError(`Could not find binding file on path ${bindingFilePath}`) + } + + return bindingFilePath +} diff --git a/packages/helper/tsconfig.json b/packages/helper/tsconfig.json new file mode 100644 index 00000000..09b97691 --- /dev/null +++ b/packages/helper/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "./src", + "composite": true + }, + "include": [ + "./src" + ] +} diff --git a/tsconfig.json b/tsconfig.json index f7b055cf..1744312c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,6 @@ "importHelpers": true, "module": "CommonJS", "moduleResolution": "node", - "noEmit": true, "newLine": "LF", "noEmitHelpers": true, "noUnusedLocals": true, @@ -25,6 +24,12 @@ "esModuleInterop": true, "stripInternal": true, "importsNotUsedAsValues": "remove", + "baseUrl": "./packages", + "paths": { + "@node-rs/*": [ + "./*/src" + ] + }, "lib": [ "dom", "ES5", diff --git a/tsconfig.project.json b/tsconfig.project.json new file mode 100644 index 00000000..c6fe93e9 --- /dev/null +++ b/tsconfig.project.json @@ -0,0 +1,8 @@ +{ + "references": [ + { "path": "./packages/helper" } + ], + "compilerOptions": { + "noEmit": true + } +} diff --git a/yarn.lock b/yarn.lock index a677adfe..dc170545 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,44 +10,45 @@ "@babel/highlight" "^7.8.3" "@babel/core@^7.7.5": - version "7.8.7" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" - integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.7" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.7" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" "@babel/template" "^7.8.6" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.7" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" - json5 "^2.1.0" + json5 "^2.1.2" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.8.6", "@babel/generator@^7.8.7": - version "7.8.8" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e" - integrity sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg== +"@babel/generator@^7.9.0", "@babel/generator@^7.9.5": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" + integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== dependencies: - "@babel/types" "^7.8.7" + "@babel/types" "^7.9.5" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== +"@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== dependencies: "@babel/helper-get-function-arity" "^7.8.3" "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.9.5" "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" @@ -56,6 +57,58 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -63,41 +116,38 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== + +"@babel/helpers@^7.9.0": + version "7.9.2" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" + integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== dependencies: "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" "@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + version "7.9.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: + "@babel/helper-validator-identifier" "^7.9.0" chalk "^2.0.0" - esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.8.7": - version "7.8.8" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4" - integrity sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA== - -"@babel/runtime-corejs3@^7.8.3": - version "7.8.7" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz#8209d9dff2f33aa2616cb319c83fe159ffb07b8c" - integrity sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" +"@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": + version "7.9.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" + integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== -"@babel/runtime@^7.8.7": - version "7.8.7" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d" - integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg== +"@babel/runtime@^7.9.2": + version "7.9.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" + integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== dependencies: regenerator-runtime "^0.13.4" @@ -110,27 +160,27 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/traverse@^7.7.4", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": - version "7.8.6" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" - integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== +"@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" + integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.6" - "@babel/helper-function-name" "^7.8.3" + "@babel/generator" "^7.9.5" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" + "@babel/parser" "^7.9.0" + "@babel/types" "^7.9.5" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7": - version "7.8.7" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" - integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== +"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": + version "7.9.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" + integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== dependencies: - esutils "^2.0.2" + "@babel/helper-validator-identifier" "^7.9.5" lodash "^4.17.13" to-fast-properties "^2.0.0" @@ -956,12 +1006,12 @@ dependencies: "@octokit/types" "^2.0.0" -"@octokit/endpoint@^5.5.0": - version "5.5.3" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.3.tgz#0397d1baaca687a4c8454ba424a627699d97c978" - integrity sha512-EzKwkwcxeegYYah5ukEeAI/gYRLv2Y9U5PpIsseGSFDk+G3RbipQGBs8GuYS1TLCtQaqoO66+aQGtITPalxsNQ== +"@octokit/endpoint@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.1.tgz#16d5c0e7a83e3a644d1ddbe8cded6c3d038d31d7" + integrity sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A== dependencies: - "@octokit/types" "^2.0.0" + "@octokit/types" "^2.11.1" is-plain-object "^3.0.0" universal-user-agent "^5.0.0" @@ -990,7 +1040,7 @@ "@octokit/types" "^2.0.1" deprecation "^2.3.1" -"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": +"@octokit/request-error@^1.0.2": version "1.2.1" resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== @@ -999,15 +1049,24 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^5.2.0": - version "5.3.2" - resolved "https://registry.npmjs.org/@octokit/request/-/request-5.3.2.tgz#1ca8b90a407772a1ee1ab758e7e0aced213b9883" - integrity sha512-7NPJpg19wVQy1cs2xqXjjRq/RmtSomja/VSWnptfYwuBxLdbYh2UjhGi0Wx7B1v5Iw5GKhfFDQL7jM7SSp7K2g== +"@octokit/request-error@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.0.tgz#94ca7293373654400fbb2995f377f9473e00834b" + integrity sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw== dependencies: - "@octokit/endpoint" "^5.5.0" - "@octokit/request-error" "^1.0.1" "@octokit/types" "^2.0.0" deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.2.0": + version "5.4.2" + resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.2.tgz#74f8e5bbd39dc738a1b127629791f8ad1b3193ee" + integrity sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^2.11.1" + deprecation "^2.0.0" is-plain-object "^3.0.0" node-fetch "^2.3.0" once "^1.4.0" @@ -1035,10 +1094,10 @@ once "^1.4.0" universal-user-agent "^4.0.0" -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.5.0" - resolved "https://registry.npmjs.org/@octokit/types/-/types-2.5.0.tgz#f1bbd147e662ae2c79717d518aac686e58257773" - integrity sha512-KEnLwOfdXzxPNL34fj508bhi9Z9cStyN7qY1kOfVahmqtAfrWw6Oq3P4R+dtsg0lYtZdWBpUrS/Ixmd5YILSww== +"@octokit/types@^2.0.0", "@octokit/types@^2.0.1", "@octokit/types@^2.11.1": + version "2.12.1" + resolved "https://registry.npmjs.org/@octokit/types/-/types-2.12.1.tgz#4a26b4a85ec121043d3b0745b5798f9d8fd968ca" + integrity sha512-LRLR1tjbcCfAmUElvTmMvLEzstpx6Xt/aQVTg2xvd+kHA2Ekp1eWl5t+gU7bcwjXHYEAzh4hH4WH+kS3vh+wRw== dependencies: "@types/node" ">= 8" @@ -1062,9 +1121,9 @@ defer-to-connect "^1.0.1" "@tootallnate/once@1": - version "1.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" - integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/color-name@^1.1.1": version "1.1.1" @@ -1101,9 +1160,9 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*", "@types/node@>= 8": - version "13.9.1" - resolved "https://registry.npmjs.org/@types/node/-/node-13.9.1.tgz#96f606f8cd67fb018847d9b61e93997dabdefc72" - integrity sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ== + version "13.13.2" + resolved "https://registry.npmjs.org/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54" + integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1115,47 +1174,40 @@ resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/sharp@^0.24.0": - version "0.24.0" - resolved "https://registry.npmjs.org/@types/sharp/-/sharp-0.24.0.tgz#28abfeac45b4dcb472305503105322e97a6c2672" - integrity sha512-+0WeyJajTSoIacBzonsq856whNJC+cN9FNEs0yZ6hFq/V1CZmlqM8vBRy7TKZunH+gIO7SwDCzgXYWRRbzqfDA== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^2.24.0": - version "2.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz#a86cf618c965a462cddf3601f594544b134d6d68" - integrity sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA== +"@typescript-eslint/eslint-plugin@^2.29.0": + version "2.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.29.0.tgz#c9efab7624e3dd6d144a0e4577a541d1bd42c2ac" + integrity sha512-X/YAY7azKirENm4QRpT7OVmzok02cSkqeIcLmdz6gXUQG4Hk0Fi9oBAynSAyNXeGdMRuZvjBa0c1Lu0dn/u6VA== dependencies: - "@typescript-eslint/experimental-utils" "2.24.0" - eslint-utils "^1.4.3" + "@typescript-eslint/experimental-utils" "2.29.0" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.24.0": - version "2.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz#a5cb2ed89fedf8b59638dc83484eb0c8c35e1143" - integrity sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw== +"@typescript-eslint/experimental-utils@2.29.0": + version "2.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.29.0.tgz#3cb8060de9265ba131625a96bbfec31ba6d4a0fe" + integrity sha512-H/6VJr6eWYstyqjWXBP2Nn1hQJyvJoFdDtsHxGiD+lEP7piGnGpb/ZQd+z1ZSB1F7dN+WsxUDh8+S4LwI+f3jw== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.24.0" + "@typescript-eslint/typescript-estree" "2.29.0" eslint-scope "^5.0.0" + eslint-utils "^2.0.0" -"@typescript-eslint/parser@^2.24.0": - version "2.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.24.0.tgz#2cf0eae6e6dd44d162486ad949c126b887f11eb8" - integrity sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw== +"@typescript-eslint/parser@^2.29.0": + version "2.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.29.0.tgz#6e3c4e21ed6393dc05b9d8b47f0b7e731ef21c9c" + integrity sha512-H78M+jcu5Tf6m/5N8iiFblUUv+HJDguMSdFfzwa6vSg9lKR8Mk9BsgeSjO8l2EshKnJKcbv0e8IDDOvSNjl0EA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.24.0" - "@typescript-eslint/typescript-estree" "2.24.0" + "@typescript-eslint/experimental-utils" "2.29.0" + "@typescript-eslint/typescript-estree" "2.29.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@2.24.0": - version "2.24.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz#38bbc8bb479790d2f324797ffbcdb346d897c62a" - integrity sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA== +"@typescript-eslint/typescript-estree@2.29.0": + version "2.29.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.29.0.tgz#1be6612bb02fc37ac9f466521c1459a4744e8d3a" + integrity sha512-3YGbtnWy4az16Egy5Fj5CckkVlpIh0MADtAQza+jiMADRSKkjdpzZp/5WuvwK/Qib3Z0HtzrDFeWanS99dNhnA== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" @@ -1192,6 +1244,11 @@ acorn-jsx@^5.2.0: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== +acorn-walk@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" + integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== + acorn@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" @@ -1239,9 +1296,9 @@ aggregate-error@^3.0.0: indent-string "^4.0.0" ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + version "6.12.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1402,7 +1459,7 @@ array-ify@^1.0.0: resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= -array-includes@^3.0.3, array-includes@^3.1.1: +array-includes@^3.0.3: version "3.1.1" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== @@ -1503,20 +1560,23 @@ atob@^2.1.2: resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -ava@^3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/ava/-/ava-3.5.0.tgz#589f0f35f51e6ab67eb230a9057fd2442807c62f" - integrity sha512-o+xq1RgAZrQ7GX5nddTNeYbUDogwlBoa/Hnt+b1ciCLLxSOj5U6ZFblLNBSKwHtP1X/8R06bmzvX47jmlVu9KQ== +ava@^3.8.0: + version "3.8.0" + resolved "https://registry.npmjs.org/ava/-/ava-3.8.0.tgz#2429e2aa275a7ab0137e085606387fdb64e2c4e5" + integrity sha512-zpWqj0n1PvSzUmGHr0y7YLbS3U61vgRvBHxl7L/1pRQ+MSCgDuK/3vOruJ+SkT4p1Up8nlRbg84ve1LN4e1nRg== dependencies: "@concordance/react" "^2.0.0" + acorn "^7.1.1" + acorn-walk "^7.1.1" ansi-styles "^4.2.1" arrgv "^1.0.2" arrify "^2.0.1" - chalk "^3.0.0" - chokidar "^3.3.1" + callsites "^3.1.0" + chalk "^4.0.0" + chokidar "^3.4.0" chunkd "^2.0.1" + ci-info "^2.0.0" ci-parallel-vars "^1.0.0" - clean-stack "^2.2.0" clean-yaml-object "^0.1.0" cli-cursor "^3.1.0" cli-truncate "^2.1.0" @@ -1527,39 +1587,39 @@ ava@^3.5.0: currently-unhandled "^0.4.1" debug "^4.1.1" del "^5.1.0" - emittery "^0.5.1" + emittery "^0.6.0" equal-length "^1.0.0" - figures "^3.1.0" + figures "^3.2.0" globby "^11.0.0" ignore-by-default "^1.0.0" import-local "^3.0.2" indent-string "^4.0.0" - is-ci "^2.0.0" is-error "^2.2.2" is-plain-object "^3.0.0" - is-promise "^2.1.0" + is-promise "^3.0.0" lodash "^4.17.15" matcher "^2.1.0" md5-hex "^3.0.1" + mem "^6.1.0" ms "^2.1.2" - ora "^4.0.3" - p-map "^3.0.0" - picomatch "^2.2.1" + ora "^4.0.4" + p-map "^4.0.0" + picomatch "^2.2.2" pkg-conf "^3.1.0" plur "^4.0.0" - pretty-ms "^6.0.0" + pretty-ms "^6.0.1" read-pkg "^5.2.0" resolve-cwd "^3.0.0" slash "^3.0.0" - source-map-support "^0.5.16" + source-map-support "^0.5.19" stack-utils "^2.0.1" strip-ansi "^6.0.0" supertap "^1.0.0" temp-dir "^2.0.0" trim-off-newlines "^1.0.1" update-notifier "^4.1.0" - write-file-atomic "^3.0.1" - yargs "^15.1.0" + write-file-atomic "^3.0.3" + yargs "^15.3.1" aws-sign2@~0.7.0: version "0.7.0" @@ -1621,22 +1681,15 @@ bindings@^1.3.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/bl/-/bl-4.0.1.tgz#8c9b4fb754e80cc86463077722be7b88b4af3f42" - integrity sha512-FL/TdvchukRCuWVxT0YMO/7+L5TNeNrVFvRU2IY63aUyv9mpt8splf2NEr6qXtPo5fya5a66YohQKvGNmLrWNA== - dependencies: - readable-stream "^3.4.0" - bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== blueimp-md5@^2.10.0: - version "2.12.0" - resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.12.0.tgz#be7367938a889dec3ffbb71138617c117e9c130a" - integrity sha512-zo+HIdIhzojv6F1siQPqPFROyVy7C50KzHv/k/Iz+BtvtVzSHXiMXOpq2wCfNkeBqdCv+V8XOV96tsEt2W/3rQ== + version "2.13.0" + resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.13.0.tgz#07314b0c64dda0bf1733f96ce40d5af94eb28965" + integrity sha512-lmp0m647R5e77ORduxLW5mISIDcvgJZa52vMBv5uVI3UmSWTQjkJsZVBfaFqQPw/QFogJwvY6e3Gl9nP+Loe+Q== boxen@^4.2.0: version "4.2.0" @@ -1709,9 +1762,9 @@ byte-size@^5.0.1: integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== cacache@^12.0.0, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + version "12.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -1791,7 +1844,7 @@ callsites@^2.0.0: resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -callsites@^3.0.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -1861,15 +1914,23 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== +chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -1877,11 +1938,11 @@ chokidar@^3.3.1: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.3.0" + readdirp "~3.4.0" optionalDependencies: fsevents "~2.1.2" -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.3: +chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -1911,7 +1972,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-stack@^2.0.0, clean-stack@^2.2.0: +clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== @@ -1941,9 +2002,9 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-spinners@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" - integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== + version "2.3.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" + integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== cli-truncate@^0.2.1: version "0.2.1" @@ -1962,9 +2023,9 @@ cli-truncate@^2.1.0: string-width "^4.2.0" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + version "2.2.1" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== cliui@^5.0.0: version "5.0.0" @@ -2036,7 +2097,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -2055,27 +2116,11 @@ color-name@1.1.3: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - columnify@^1.5.4: version "1.5.4" resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -2091,10 +2136,10 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== commander@~2.20.3: version "2.20.3" @@ -2119,7 +2164,7 @@ compare-func@^1.3.1: array-ify "^1.0.0" dot-prop "^3.0.0" -compare-versions@^3.5.1: +compare-versions@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== @@ -2313,11 +2358,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-pure@^3.0.0: - version "3.6.4" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" - integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2356,9 +2396,9 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: which "^1.2.9" cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + version "7.0.2" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" + integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -2470,13 +2510,6 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -2574,11 +2607,6 @@ detect-indent@^5.0.0: resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -2614,13 +2642,6 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -2682,10 +2703,10 @@ elegant-spinner@^1.0.1: resolved "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= -emittery@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.5.1.tgz#9fbbf57e9aecc258d727d78858a598eb05ea5c96" - integrity sha512-sYZXNHH9PhTfs98ROEFVC3bLiR8KSqXQsEHIwZ9J6H0RaQObC3JYq4G8IvDd0b45/LxfGKYBpmaUN4LiKytaNw== +emittery@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.6.0.tgz#e85312468d77c3ed9a6adf43bb57d34849e0c95a" + integrity sha512-6EMRGr9KzYWp8DzHFZsKVZBsMO6QhAeHMeHND8rhyBNCHKMLpgW9tZv40bwN3rAIKRS5CxcK8oLRKUJSB9h7yQ== emoji-regex@^7.0.1: version "7.0.3" @@ -2704,7 +2725,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -2738,10 +2759,10 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1: - version "1.17.4" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" @@ -2796,10 +2817,10 @@ escape-string-regexp@^2.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -eslint-config-prettier@^6.10.0: - version "6.10.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz#7b15e303bf9c956875c948f6b21500e48ded6a7f" - integrity sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg== +eslint-config-prettier@^6.11.0: + version "6.11.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" + integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== dependencies: get-stdin "^6.0.0" @@ -2812,17 +2833,17 @@ eslint-import-resolver-node@^0.3.2: resolve "^1.13.1" eslint-module-utils@^2.4.1: - version "2.5.2" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" - integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== + version "2.6.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== dependencies: debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-import@^2.20.1: - version "2.20.1" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" - integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== +eslint-plugin-import@^2.20.2: + version "2.20.2" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" + integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== dependencies: array-includes "^3.0.3" array.prototype.flat "^1.2.1" @@ -2837,36 +2858,13 @@ eslint-plugin-import@^2.20.1: read-pkg-up "^2.0.0" resolve "^1.12.0" -eslint-plugin-prettier@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" - integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== +eslint-plugin-prettier@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca" + integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.0.tgz#c50ab7ca5945ce6d1cf8248d9e185c80b54171b6" - integrity sha512-bzvdX47Jx847bgAYf0FPX3u1oxU+mKU8tqrpj4UX9A96SbAmj/HVEefEy6rJUog5u8QIlOPTKZcBpGn5kkKfAQ== - -eslint-plugin-react@^7.19.0: - version "7.19.0" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" - integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== - dependencies: - array-includes "^3.1.1" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.15.1" - semver "^6.3.0" - string.prototype.matchall "^4.0.2" - xregexp "^4.3.0" - eslint-plugin-sonarjs@^0.5.0: version "0.5.0" resolved "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.5.0.tgz#ce17b2daba65a874c2862213a9e38e8986ad7d7d" @@ -2887,6 +2885,13 @@ eslint-utils@^1.4.3: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" @@ -2950,11 +2955,11 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" - integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== + version "1.3.1" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -2963,11 +2968,16 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2991,10 +3001,10 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^3.4.0: - version "3.4.0" - resolved "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== +execa@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" + integrity sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -3003,7 +3013,6 @@ execa@^3.4.0: merge-stream "^2.0.0" npm-run-path "^4.0.0" onetime "^5.1.0" - p-finally "^2.0.0" signal-exit "^3.0.2" strip-final-newline "^2.0.0" @@ -3020,11 +3029,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3123,16 +3127,16 @@ fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.6.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz#4570c74f2ded173e71cf0beb08ac70bb85826791" - integrity sha512-mpIH5sKYueh3YyeJwqtVo8sORi0CgtmkVbK6kZStpQlZBYQuTzG2CZ7idSiJuA7bY0SFCWUc5WIs+oYumGCQNw== + version "1.7.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" + integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== dependencies: reusify "^1.0.4" figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + version "3.5.2" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== figures@^1.7.0: version "1.7.0" @@ -3149,7 +3153,7 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0, figures@^3.1.0: +figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -3241,9 +3245,9 @@ flat-cache@^2.0.1: write "1.0.3" flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + version "2.0.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flush-write-stream@^1.0.0: version "1.1.1" @@ -3300,11 +3304,6 @@ fromentries@^1.2.0: resolved "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz#e6aa06f240d6267f913cea422075ef88b63e7897" integrity sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ== -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -3321,13 +3320,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3344,9 +3336,9 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + version "2.1.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" @@ -3493,11 +3485,6 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -3507,9 +3494,9 @@ glob-parent@^3.1.0: path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + version "5.1.1" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" @@ -3612,13 +3599,14 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== handlebars@^4.4.0: - version "4.7.3" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" - integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== + version "4.7.6" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== dependencies: + minimist "^1.2.5" neo-async "^2.6.0" - optimist "^0.6.1" source-map "^0.6.1" + wordwrap "^1.0.0" optionalDependencies: uglify-js "^3.1.4" @@ -3719,9 +3707,9 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== html-escaper@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" - integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^3.8.1: version "3.8.1" @@ -3787,14 +3775,14 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz#3b18d2ee5febe99e27f2983500202daffbc3151e" - integrity sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ== +husky@^4.2.5: + version "4.2.5" + resolved "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36" + integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ== dependencies: - chalk "^3.0.0" + chalk "^4.0.0" ci-info "^2.0.0" - compare-versions "^3.5.1" + compare-versions "^3.6.0" cosmiconfig "^6.0.0" find-versions "^3.2.0" opencollective-postinstall "^2.0.2" @@ -3971,15 +3959,6 @@ inquirer@^7.0.0: strip-ansi "^6.0.0" through "^2.3.6" -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== - dependencies: - es-abstract "^1.17.0-next.1" - has "^1.0.3" - side-channel "^1.0.2" - ip@1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -4009,11 +3988,6 @@ is-arrayish@^0.2.1: resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -4139,9 +4113,9 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: is-extglob "^2.1.1" is-installed-globally@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" - integrity sha512-oiEcGoQbGc+3/iijAijrK2qFpkNoNjsHOm/5V5iaeydyrS/hnwaRCEgH5cpW0P3T1lSjV5piB7S5b5lEugNLhg== + version "0.3.2" + resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== dependencies: global-dirs "^2.0.1" is-path-inside "^3.0.1" @@ -4215,9 +4189,14 @@ is-plain-object@^3.0.0: isobject "^4.0.0" is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + version "2.2.2" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-3.0.0.tgz#1f88031af842d9203dc1777cba40411e848f9beb" + integrity sha512-aTHJ4BvETyySzLhguH+7sL4b8765eecqq7ZrHVuhZr3FjCL/IV+LsvisEeH+9d0AkChYny3ad1KEL+mKy4ot7A== is-regex@^1.0.5: version "1.0.5" @@ -4375,10 +4354,10 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70" - integrity sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A== +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -4388,7 +4367,7 @@ js-string-escape@^1.0.1: resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -4441,10 +4420,10 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" - integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: minimist "^1.2.5" @@ -4470,14 +4449,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" - integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== - dependencies: - array-includes "^3.0.3" - object.assign "^4.1.0" - keyv@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -4553,17 +4524,17 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@^10.0.8: - version "10.0.8" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.8.tgz#0f7849cdc336061f25f5d4fcbcfa385701ff4739" - integrity sha512-Oa9eS4DJqvQMVdywXfEor6F4vP+21fPHF8LUXgBbVWUSWBddjqsvO6Bv1LwMChmgQZZqwUvgJSHlu8HFHAPZmA== +lint-staged@^10.1.7: + version "10.1.7" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.1.7.tgz#b628f8b010083fe4e116d0af7949a32f1ea6b3a7" + integrity sha512-ZkK8t9Ep/AHuJQKV95izSa+DqotftGnSsNeEmCSqbQ6j4C4H0jDYhEZqVOGD1Q2Oe227igbqjMWycWyYbQtpoA== dependencies: - chalk "^3.0.0" - commander "^4.0.1" + chalk "^4.0.0" + commander "^5.0.0" cosmiconfig "^6.0.0" debug "^4.1.1" dedent "^0.7.0" - execa "^3.4.0" + execa "^4.0.0" listr "^0.14.3" log-symbols "^3.0.0" micromatch "^4.0.2" @@ -4774,13 +4745,6 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -4827,9 +4791,9 @@ make-dir@^2.1.0: semver "^5.6.0" make-dir@^3.0.0, make-dir@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" @@ -4855,6 +4819,13 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -4903,6 +4874,14 @@ md5-o-matic@^0.1.1: resolved "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= +mem@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/mem/-/mem-6.1.0.tgz#846eca0bd4708a8f04b9c3f3cd769e194ae63c5c" + integrity sha512-RlbnLQgRHk5lwqTtpEkBTQ2ll/CG/iB+J4Hy2Wh97PjgZgXgWJWrFF+XXujh3UUVLvR4OOTgZzcWMMwnehlEUg== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^3.0.0" + meow@^3.3.0: version "3.7.0" resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -4986,17 +4965,17 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -mime-db@1.43.0: - version "1.43.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.26" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + version "2.1.27" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mimic-fn@^1.0.0: version "1.2.0" @@ -5008,16 +4987,16 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.0.0.tgz#76044cfa8818bbf6999c5c9acadf2d3649b14b4b" + integrity sha512-PiVO95TKvhiwgSwg1IdLYlCTdul38yZxZMIcnDSFIBUm4BNZha2qpQ4GpJ++15bHoKDtrW2D69lMfFwdFYtNZQ== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -5033,21 +5012,11 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -5056,13 +5025,6 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" - integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== - dependencies: - yallist "^4.0.0" - minizlib@^1.2.1: version "1.3.3" resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -5070,14 +5032,6 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" -minizlib@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" - integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -5109,17 +5063,17 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" - integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== +mkdirp@*: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + version "0.5.5" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: - minimist "0.0.8" + minimist "^1.2.5" modify-values@^1.0.0: version "1.0.1" @@ -5194,13 +5148,10 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -napi-rs@../napi-rs: - version "0.1.1" +napi-rs@0.2.3: + version "0.2.3" + resolved "https://registry.npmjs.org/napi-rs/-/napi-rs-0.2.3.tgz#808e14fd4ff39f91b619d5ca42cc4ae7d762d73d" + integrity sha512-F+VNgo7uxUyB2DyCtMAPZT0r06jipFD89nnn1mkEvVsaC5p05Pwz78sd9Jz/NN2tC2FT7PlsY5Ep6EB0VY6C5Q== dependencies: minimist "^1.2.5" toml "^3.0.0" @@ -5220,27 +5171,15 @@ nice-try@^1.0.4: resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-abi@^2.7.0: - version "2.15.0" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz#51d55cc711bd9e4a24a572ace13b9231945ccb10" - integrity sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg== - dependencies: - semver "^5.4.1" - node-addon-api@^1.3.0: version "1.7.1" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz#cf813cd69bb8d9100f6bdca6755fc268f54ac492" integrity sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ== -node-addon-api@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz#f9afb8d777a91525244b01775ea0ddbe1125483b" - integrity sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA== - node-fetch-npm@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.3.tgz#efae4aacb0500444e449a51fc1467397775ebc38" - integrity sha512-DgwoKEsqLnFZtk3ap7GWBHcHwnUhsNmQqEDcdjfQ8GofLEFJ081NAd4Uin3R7RFZBWVJCwHISw1oaEqPgSLloA== + version "2.0.4" + resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== dependencies: encoding "^0.1.11" json-parse-better-errors "^1.0.0" @@ -5268,18 +5207,13 @@ node-gyp@^5.0.2: tar "^4.4.12" which "^1.3.1" -node-preload@^0.2.0: +node-preload@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== dependencies: process-on-spawn "^1.0.0" -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= - nopt@^4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -5321,9 +5255,9 @@ npm-bundled@^1.0.1: npm-normalize-package-bin "^1.0.1" npm-lifecycle@^3.1.2: - version "3.1.4" - resolved "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== + version "3.1.5" + resolved "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== dependencies: byline "^5.0.0" graceful-fs "^4.1.15" @@ -5381,7 +5315,7 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -npmlog@^4.0.1, npmlog@^4.1.2: +npmlog@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -5396,10 +5330,10 @@ number-is-nan@^1.0.0: resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nyc@^15.0.0: - version "15.0.0" - resolved "https://registry.npmjs.org/nyc/-/nyc-15.0.0.tgz#eb32db2c0f29242c2414fe46357f230121cfc162" - integrity sha512-qcLBlNCKMDVuKb7d1fpxjPR8sHeMVX0CHarXAVzrVWoFrigCkYR8xcrjfXSPi5HXM7EU78L6ywO7w1c5rZNCNg== +nyc@^15.0.1: + version "15.0.1" + resolved "https://registry.npmjs.org/nyc/-/nyc-15.0.1.tgz#bd4d5c2b17f2ec04370365a5ca1fc0ed26f9f93d" + integrity sha512-n0MBXYBYRqa67IVt62qW1r/d9UH/Qtr7SF1w/nQLJ9KxvWF6b2xCHImRAixHN9tnMMYHC2P14uo6KddNGwMgGg== dependencies: "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" @@ -5416,10 +5350,9 @@ nyc@^15.0.0: istanbul-lib-processinfo "^2.0.2" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.0" - js-yaml "^3.13.1" + istanbul-reports "^3.0.2" make-dir "^3.0.0" - node-preload "^0.2.0" + node-preload "^0.2.1" p-map "^3.0.0" process-on-spawn "^1.0.0" resolve-from "^5.0.0" @@ -5427,7 +5360,6 @@ nyc@^15.0.0: signal-exit "^3.0.2" spawn-wrap "^2.0.0" test-exclude "^6.0.0" - uuid "^3.3.3" yargs "^15.0.2" oauth-sign@~0.9.0: @@ -5435,7 +5367,7 @@ oauth-sign@~0.9.0: resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -5476,26 +5408,6 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" - integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - object.getownpropertydescriptors@^2.0.3: version "2.1.0" resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" @@ -5511,7 +5423,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1: +object.values@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== @@ -5552,14 +5464,6 @@ opencollective-postinstall@^2.0.2: resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - optionator@^0.8.3: version "0.8.3" resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -5572,10 +5476,10 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" - integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== +ora@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz#e8da697cc5b6a47266655bf68e0fb588d29a545d" + integrity sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww== dependencies: chalk "^3.0.0" cli-cursor "^3.1.0" @@ -5617,16 +5521,16 @@ p-cancelable@^1.0.0: resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -5635,9 +5539,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.2" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" @@ -5681,6 +5585,13 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" @@ -5884,10 +5795,10 @@ performance-now@^2.1.0: resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" - integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0, pify@^2.3.0: version "2.3.0" @@ -5969,27 +5880,6 @@ posix-character-classes@^0.1.0: resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -prebuild-install@^5.3.3: - version "5.3.3" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e" - integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - napi-build-utils "^1.0.1" - node-abi "^2.7.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -6007,12 +5897,12 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== -pretty-ms@^6.0.0: +pretty-ms@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz#03ec6cfee20329f142645e63efad96bb775d3da4" integrity sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw== @@ -6056,15 +5946,6 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - proto-list@~1.2.1: version "1.2.4" resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -6083,9 +5964,9 @@ protoduck@^5.0.1: genfun "^5.0.0" psl@^1.1.28: - version "1.7.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + version "1.8.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pump@^2.0.0: version "2.0.1" @@ -6139,7 +6020,7 @@ quick-lru@^1.0.0: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -rc@^1.2.7, rc@^1.2.8: +rc@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6149,11 +6030,6 @@ rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^16.8.1: - version "16.13.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527" - integrity sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA== - read-cmd-shim@^1.0.1: version "1.0.5" resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" @@ -6263,7 +6139,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: +"readable-stream@2 || 3", readable-stream@^3.0.2: version "3.6.0" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6282,12 +6158,12 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== dependencies: - picomatch "^2.0.7" + picomatch "^2.2.1" redent@^1.0.0: version "1.0.0" @@ -6318,23 +6194,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== regexpp@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" - integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + version "3.1.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== registry-auth-token@^4.0.0: version "4.1.1" @@ -6444,10 +6312,10 @@ resolve-url@^0.2.1: resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2: - version "1.15.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" @@ -6530,9 +6398,9 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3: - version "6.5.4" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + version "6.5.5" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: tslib "^1.9.0" @@ -6585,11 +6453,6 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" - integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== - serialize-error@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" @@ -6617,21 +6480,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -sharp@^0.25.1: - version "0.25.1" - resolved "https://registry.npmjs.org/sharp/-/sharp-0.25.1.tgz#7bcc9c0ed0debcf1109913e4b3e901d56e957f07" - integrity sha512-CO/16EfYsSPUyW0uHNVhMMR6mqMeMKA5AjVA0/yH2VgYCX+M7jCklzciHGZdOfewDUMVSiu5elFFpkvvhPwgoA== - dependencies: - color "^3.1.2" - detect-libc "^1.0.3" - node-addon-api "^2.0.0" - npmlog "^4.1.2" - prebuild-install "^5.3.3" - semver "^7.1.3" - simple-get "^3.1.0" - tar "^6.0.1" - tunnel-agent "^0.6.0" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -6656,39 +6504,10 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" - integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== - dependencies: - es-abstract "^1.17.0-next.1" - object-inspect "^1.7.0" - signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -simple-get@^3.0.3, simple-get@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" + version "3.0.3" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== slash@^2.0.0: version "2.0.0" @@ -6797,10 +6616,10 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16, source-map-support@^0.5.6: - version "0.5.16" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== +source-map-support@^0.5.17, source-map-support@^0.5.19: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -6815,7 +6634,7 @@ source-map@^0.5.0, source-map@^0.5.6: resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6841,9 +6660,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.0" @@ -6989,33 +6808,39 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.matchall@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" - integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.0" - has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.2" + es-abstract "^1.17.5" string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + version "2.1.2" + resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + version "2.1.2" + resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" string_decoder@^1.1.1: version "1.3.0" @@ -7108,9 +6933,9 @@ strip-indent@^2.0.0: integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + version "3.1.0" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== strip-json-comments@~2.0.1: version "2.0.1" @@ -7176,27 +7001,6 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -tar-fs@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" - integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA== - dependencies: - chownr "^1.1.1" - mkdirp "^0.5.1" - pump "^3.0.0" - tar-stream "^2.0.0" - -tar-stream@^2.0.0: - version "2.1.2" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325" - integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== - dependencies: - bl "^4.0.1" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: version "4.4.13" resolved "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -7210,18 +7014,6 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" -tar@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" - integrity sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q== - dependencies: - chownr "^1.1.3" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.0" - mkdirp "^1.0.3" - yallist "^4.0.0" - teeny-request@6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz#9b1f512cef152945827ba7e34f62523a4ce2c5b0" @@ -7402,15 +7194,15 @@ trim-off-newlines@^1.0.0, trim-off-newlines@^1.0.1: resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= -ts-node@^8.6.2: - version "8.6.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" - integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== +ts-node@^8.9.1: + version "8.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-8.9.1.tgz#2f857f46c47e91dcd28a14e052482eb14cfd65a5" + integrity sha512-yrq6ODsxEFTLz0R3BX2myf0WBCSQh9A+py8PBo1dCzWIOcvisbyH6akNKqDHMgXePF2kir5mm5JXJTH3OUJYOQ== dependencies: arg "^4.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.6" + source-map-support "^0.5.17" yn "3.1.1" tslib@^1.8.1, tslib@^1.9.0: @@ -7482,12 +7274,11 @@ typescript@^3.8.3: integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== uglify-js@^3.1.4: - version "3.8.0" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" - integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== + version "3.9.1" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz#a56a71c8caa2d36b5556cc1fd57df01ae3491539" + integrity sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA== dependencies: commander "~2.20.3" - source-map "~0.6.1" uid-number@0.0.6: version "0.0.6" @@ -7721,9 +7512,9 @@ widest-line@^3.1.0: string-width "^4.0.0" windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== + version "3.3.0" + resolved "https://registry.npmjs.org/windows-release/-/windows-release-3.3.0.tgz#dce167e9f8be733f21c849ebd4d03fe66b29b9f0" + integrity sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ== dependencies: execa "^1.0.0" @@ -7732,10 +7523,10 @@ word-wrap@~1.2.3: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wrap-ansi@^3.0.1: version "3.0.1" @@ -7777,7 +7568,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0, write-file-atomic@^3.0.1: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -7831,13 +7622,6 @@ xdg-basedir@^4.0.0: resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== -xregexp@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" - integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== - dependencies: - "@babel/runtime-corejs3" "^7.8.3" - xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -7853,17 +7637,12 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml@^1.7.2: - version "1.8.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz#a29c03f578faafd57dcb27055f9a5d569cb0c3d9" - integrity sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg== + version "1.9.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" + integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== dependencies: - "@babel/runtime" "^7.8.7" + "@babel/runtime" "^7.9.2" yargs-parser@^10.0.0: version "10.1.0" @@ -7881,9 +7660,9 @@ yargs-parser@^15.0.1: decamelize "^1.2.0" yargs-parser@^18.1.1: - version "18.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.1.tgz#bf7407b915427fc760fcbbccc6c82b4f0ffcbd37" - integrity sha512-KRHEsOM16IX7XuLnMOqImcPNbLVXMNHYAoFc3BKR8Ortl5gzDbtXvvEoGx9imk5E+X1VeNKNlcHr8B8vi+7ipA== + version "18.1.3" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" @@ -7905,7 +7684,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.0.2, yargs@^15.1.0: +yargs@^15.0.2, yargs@^15.3.1: version "15.3.1" resolved "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== From d08bc96660727d19bc116145c6403d86b8e962f6 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 27 Apr 2020 12:19:38 +0800 Subject: [PATCH 5/9] ci: init ci, add tests --- .github/FUNDING.yml | 1 + .github/workflows/ci.yaml | 143 +++++++++++++++++++ .github/workflows/dependabot-auto-merge.yaml | 26 ++++ lerna.json | 2 +- package.json | 8 +- packages/crc32/Cargo.toml | 6 +- packages/crc32/__tests__/index.spec.ts | 26 ++++ packages/crc32/benchmark/calculate.js | 2 +- packages/crc32/index.js | 2 +- packages/crc32/package.json | 4 +- packages/helper/src/loader.ts | 4 +- yarn.lock | 58 +++++++- 12 files changed, 269 insertions(+), 13 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/dependabot-auto-merge.yaml create mode 100644 packages/crc32/__tests__/index.spec.ts diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..6a4ecb6e --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [Brooooooklyn] diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000..df177beb --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,143 @@ +name: CI + +on: [push, pull_request] + +jobs: + lint_and_build: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + + name: stable - ${{ matrix.os }} - node@12 + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Set platform name + run: | + export NODE_PLATFORM_NAME=$(node -e "console.log(require('os').platform())") + echo "::set-env name=PLATFORM_NAME::$NODE_PLATFORM_NAME" + shell: bash + + - name: Install llvm + if: matrix.os == 'windows-latest' + run: choco install -y llvm + + - name: Set llvm path + if: matrix.os == 'windows-latest' + uses: allenevans/set-env@v1.0.0 + with: + LIBCLANG_PATH: 'C:\Program Files\LLVM\bin' + + - name: Install + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + override: true + + - name: Generate Cargo.lock + uses: actions-rs/cargo@v1 + with: + command: generate-lockfile + + - name: Cache cargo registry + uses: actions/cache@v1 + with: + path: ~/.cargo/registry + key: stable-${{ matrix.os }}-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache cargo index + uses: actions/cache@v1 + with: + path: ~/.cargo/git + key: stable-${{ matrix.os }}gnu-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache cargo build + uses: actions/cache@v1 + with: + path: target + key: stable-${{ matrix.os }}gnu-cargo-build-trimmed-${{ hashFiles('**/Cargo.lock') }} + + - name: Cache NPM dependencies + uses: actions/cache@v1 + with: + path: node_modules + key: npm-cache-${{ hashFiles('yarn.lock') }} + restore-keys: | + npm-cache- + + - name: 'Install dependencies' + run: yarn install --frozen-lockfile --registry https://registry.npmjs.org + + - name: 'Lint' + run: yarn lint + if: matrix.os == 'ubuntu-latest' + + - name: typecheck + run: yarn typecheck + if: matrix.os == 'ubuntu-latest' + + - name: Run build + run: npx lerna run build --stream -- --platform + + - name: Upload crc32 artifact + uses: actions/upload-artifact@v1 + with: + name: crc32.${{ env.PLATFORM_NAME }}.node + path: packages/crc32/crc32.${{ env.PLATFORM_NAME }}.node + + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache + + test_binding: + name: Test bindings + needs: lint_and_build + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Set platform name + run: | + export NODE_PLATFORM_NAME=$(node -e "console.log(require('os').platform())") + echo "::set-env name=PLATFORM_NAME::$NODE_PLATFORM_NAME" + shell: bash + + - name: Cache NPM dependencies + uses: actions/cache@v1 + with: + path: node_modules + key: npm-cache-${{ hashFiles('yarn.lock') }} + restore-keys: | + npm-cache- + + - name: 'Install dependencies' + run: yarn install --frozen-lockfile --registry https://registry.npmjs.org + + - name: Download crc32 artifact + uses: actions/download-artifact@v1 + with: + name: crc32.${{ env.PLATFORM_NAME }}.node + path: packages/crc32 + + - name: Test bindings + run: yarn test diff --git a/.github/workflows/dependabot-auto-merge.yaml b/.github/workflows/dependabot-auto-merge.yaml new file mode 100644 index 00000000..d0abf695 --- /dev/null +++ b/.github/workflows/dependabot-auto-merge.yaml @@ -0,0 +1,26 @@ +name: Dependabot auto merge + +on: + check_suite: + types: + - completed + pull_request: + types: + - labeled + - unlabeled + - synchronize + - opened + - edited + - ready_for_review + - reopened + - unlocked + +jobs: + auto-merge: + runs-on: ubuntu-latest + steps: + - name: auto-merge + uses: ridedott/dependabot-auto-merge-action@master + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + \ No newline at end of file diff --git a/lerna.json b/lerna.json index 8e0a0977..3a60d401 100644 --- a/lerna.json +++ b/lerna.json @@ -4,5 +4,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "0.0.0" + "version": "independent" } diff --git a/package.json b/package.json index aef58537..579aa72a 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "packages/*" ], "scripts": { - "lint": "eslint . -c ./.eslintrc.yml 'packages/**/*.{ts,js}'" + "lint": "eslint . -c ./.eslintrc.yml 'packages/**/*.{ts,js}'", + "test": "ava", + "typecheck": "tsc -b tsconfig.project.json -verbose" }, "devDependencies": { "@typescript-eslint/eslint-plugin": "^2.29.0", @@ -31,6 +33,7 @@ "nyc": "^15.0.1", "prettier": "^2.0.5", "ts-node": "^8.9.1", + "tsconfig-paths": "^3.9.0", "typescript": "^3.8.3" }, "ava": { @@ -38,7 +41,8 @@ "ts" ], "require": [ - "ts-node/register" + "ts-node/register", + "tsconfig-paths/register" ], "files": [ "packages/**/*.spec.ts" diff --git a/packages/crc32/Cargo.toml b/packages/crc32/Cargo.toml index eb7d8a13..84febf4d 100644 --- a/packages/crc32/Cargo.toml +++ b/packages/crc32/Cargo.toml @@ -8,10 +8,10 @@ edition = "2018" crate-type = ["cdylib"] [dependencies] -napi-rs = { version = "0.2", path = "../../../napi-rs/napi" } -napi-rs-derive = { version = "0.1", path = "../../../napi-rs/napi-derive" } +napi-rs = { version = "0.2" } +napi-rs-derive = { version = "0.1" } crc32c = "0.4" crc32fast = "1.2" [build-dependencies] -napi-build = { version = "0.1", path = "../../../napi-rs/build" } +napi-build = { version = "0.1" } diff --git a/packages/crc32/__tests__/index.spec.ts b/packages/crc32/__tests__/index.spec.ts new file mode 100644 index 00000000..246f926e --- /dev/null +++ b/packages/crc32/__tests__/index.spec.ts @@ -0,0 +1,26 @@ +import test from 'ava' +import { crc32 as nodeCrc32 } from 'crc' + +import { crc32c, crc32 } from '../index' + +const { calculate } = require('sse4_crc32') + +const fx = Buffer.from('crc32c - test') + +test('crc32c result should be equal with sse4_crc32', (t) => { + t.is(crc32c(fx), calculate(fx)) +}) + +test('crc32c result should be equal with sse4_crc32 when caclulate with initial crc', (t) => { + const initialCrc = crc32c(fx) + t.is(crc32c(fx, initialCrc), calculate(fx, initialCrc)) +}) + +test('crc32 result should be equal with crc32 node', (t) => { + t.is(crc32(fx), nodeCrc32(fx)) +}) + +test('crc32 result should be equal with crc32 node when caclulate with initial crc', (t) => { + const initialCrc = crc32c(fx) + t.is(crc32(fx, initialCrc), nodeCrc32(fx, initialCrc)) +}) diff --git a/packages/crc32/benchmark/calculate.js b/packages/crc32/benchmark/calculate.js index 92a9f3ee..b9ad6a08 100644 --- a/packages/crc32/benchmark/calculate.js +++ b/packages/crc32/benchmark/calculate.js @@ -2,7 +2,7 @@ const { Suite } = require('benchmark') const Sse4Crc32 = require('sse4_crc32') const chalk = require('chalk') -const { crc32c } = require('../index.node') +const { crc32c } = require('../crc32.node') const suite = new Suite('Without initial crc') diff --git a/packages/crc32/index.js b/packages/crc32/index.js index da1d3269..1d2004c7 100644 --- a/packages/crc32/index.js +++ b/packages/crc32/index.js @@ -1,3 +1,3 @@ const { locateBinding } = require('@node-rs/helper') -module.exports = require(locateBinding(__dirname)) +module.exports = require(locateBinding(__dirname, 'crc32')) diff --git a/packages/crc32/package.json b/packages/crc32/package.json index 3cf3fb85..c7928ae6 100644 --- a/packages/crc32/package.json +++ b/packages/crc32/package.json @@ -25,7 +25,7 @@ "url": "git+https://github.com/Brooooooklyn/node-rs.git" }, "scripts": { - "build": "cargo build --release && napi --release ./index", + "build": "cargo build --release && napi --release ./crc32", "build:debug": "cargo build && napi ./index" }, "bugs": { @@ -35,6 +35,8 @@ "@node-rs/helper": "0.0.0" }, "devDependencies": { + "@types/crc": "^3.4.0", + "crc": "^3.8.0", "sse4_crc32": "^6.0.1" } } diff --git a/packages/helper/src/loader.ts b/packages/helper/src/loader.ts index c890b93e..643b737e 100644 --- a/packages/helper/src/loader.ts +++ b/packages/helper/src/loader.ts @@ -4,7 +4,7 @@ import { existsSync } from 'fs' const SupportedPlatforms = new Set(['darwin', 'win32', 'linux']) -export function locateBinding(dirname: string) { +export function locateBinding(dirname: string, filename = 'index') { const platformName = platform() if (!SupportedPlatforms.has(platformName)) { throw new TypeError( @@ -12,7 +12,7 @@ export function locateBinding(dirname: string) { ) } - const bindingFilePath = join(dirname, `index.${platformName}.node`) + const bindingFilePath = join(dirname, `${filename}.${platformName}.node`) if (!existsSync(bindingFilePath)) { throw new TypeError(`Could not find binding file on path ${bindingFilePath}`) diff --git a/yarn.lock b/yarn.lock index dc170545..d56f5af9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1130,6 +1130,13 @@ resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== +"@types/crc@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@types/crc/-/crc-3.4.0.tgz#2366beb4399cd734b33e42c7ac809576e617d48a" + integrity sha1-I2a+tDmc1zSzPkLHrICVduYX1Io= + dependencies: + "@types/node" "*" + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -1154,6 +1161,11 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/minimatch@*": version "3.0.3" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -1636,6 +1648,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + base@^0.11.1: version "0.11.2" resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1746,6 +1763,14 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^5.1.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtins@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -2384,6 +2409,13 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3798,6 +3830,11 @@ iconv-lite@^0.4.24, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + iferr@^0.1.5: version "0.1.5" resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" @@ -4420,6 +4457,13 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.2: version "2.1.3" resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" @@ -5148,9 +5192,9 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -napi-rs@0.2.3: +napi-rs@^0.2.3: version "0.2.3" - resolved "https://registry.npmjs.org/napi-rs/-/napi-rs-0.2.3.tgz#808e14fd4ff39f91b619d5ca42cc4ae7d762d73d" + resolved "https://registry.yarnpkg.com/napi-rs/-/napi-rs-0.2.3.tgz#808e14fd4ff39f91b619d5ca42cc4ae7d762d73d" integrity sha512-F+VNgo7uxUyB2DyCtMAPZT0r06jipFD89nnn1mkEvVsaC5p05Pwz78sd9Jz/NN2tC2FT7PlsY5Ep6EB0VY6C5Q== dependencies: minimist "^1.2.5" @@ -7205,6 +7249,16 @@ ts-node@^8.9.1: source-map-support "^0.5.17" yn "3.1.1" +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.8.1, tslib@^1.9.0: version "1.11.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" From 7825085f8094954ef92f6b5e79998c1e056a0ce4 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 27 Apr 2020 14:03:51 +0800 Subject: [PATCH 6/9] chore: add yaml prettier hook into lint-staged --- .github/workflows/ci.yaml | 8 ++++---- .github/workflows/dependabot-auto-merge.yaml | 1 - package.json | 3 +++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index df177beb..3509bc8e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/checkout@v2 - + - name: Setup node uses: actions/setup-node@v1 with: @@ -29,7 +29,7 @@ jobs: - name: Install llvm if: matrix.os == 'windows-latest' run: choco install -y llvm - + - name: Set llvm path if: matrix.os == 'windows-latest' uses: allenevans/set-env@v1.0.0 @@ -110,12 +110,12 @@ jobs: steps: - uses: actions/checkout@v2 - + - name: Setup node uses: actions/setup-node@v1 with: node-version: 12 - + - name: Set platform name run: | export NODE_PLATFORM_NAME=$(node -e "console.log(require('os').platform())") diff --git a/.github/workflows/dependabot-auto-merge.yaml b/.github/workflows/dependabot-auto-merge.yaml index d0abf695..41ae530e 100644 --- a/.github/workflows/dependabot-auto-merge.yaml +++ b/.github/workflows/dependabot-auto-merge.yaml @@ -23,4 +23,3 @@ jobs: uses: ridedott/dependabot-auto-merge-action@master with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - \ No newline at end of file diff --git a/package.json b/package.json index 579aa72a..ef2b782b 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,9 @@ "*.@(js|ts|tsx)": [ "prettier --write", "eslint -c .eslintrc.yml --fix" + ], + "*.@(yml|yaml)": [ + "prettier --parser yaml --write" ] }, "prettier": { From 74dcaf9369776f37851c9b4d4ecee3658d5548e6 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 27 Apr 2020 14:13:05 +0800 Subject: [PATCH 7/9] ci: add 12 & 14 nodejs to test matrix --- .github/workflows/ci.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3509bc8e..0a00698c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -100,12 +100,13 @@ jobs: cargo-cache test_binding: - name: Test bindings + name: Test bindings on ${{ matrix.os }} - node@${{ matrix.node }} needs: lint_and_build strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] + node: ['10', '12', '14'] runs-on: ${{ matrix.os }} steps: @@ -114,7 +115,7 @@ jobs: - name: Setup node uses: actions/setup-node@v1 with: - node-version: 12 + node-version: ${{ matrix.node }} - name: Set platform name run: | From 62816f249de37a9b99b390c8c1fc7abb4e63b9c8 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 27 Apr 2020 14:51:48 +0800 Subject: [PATCH 8/9] refactor(crc32): use faster implement --- README.md | 3 + package.json | 3 + packages/crc32/COPYING | 27 +++++++ packages/crc32/Cargo.toml | 1 - packages/crc32/LICENSE | 22 ++++++ packages/crc32/README.md | 20 +++-- packages/crc32/benchmark/calculate.js | 44 ----------- packages/crc32/benchmark/crc32.js | 95 +++++++++++++++++++++++ packages/crc32/build.rs | 74 +++++++++++++++++- packages/crc32/package.json | 4 +- packages/crc32/src/bytes.rs | 8 ++ packages/crc32/src/crc32.rs | 105 ++++++++++++++++++++++++++ packages/crc32/src/crc32_table.rs | 2 + packages/crc32/src/lib.rs | 8 +- 14 files changed, 361 insertions(+), 55 deletions(-) create mode 100644 README.md create mode 100644 packages/crc32/COPYING create mode 100644 packages/crc32/LICENSE delete mode 100644 packages/crc32/benchmark/calculate.js create mode 100644 packages/crc32/benchmark/crc32.js create mode 100644 packages/crc32/src/bytes.rs create mode 100644 packages/crc32/src/crc32.rs create mode 100644 packages/crc32/src/crc32_table.rs diff --git a/README.md b/README.md new file mode 100644 index 00000000..c331dd70 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# node-rs + +When `NodeJS` meet `Rust` = 🚀 diff --git a/package.json b/package.json index ef2b782b..a8d87310 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,9 @@ ], "*.@(yml|yaml)": [ "prettier --parser yaml --write" + ], + "*.md": [ + "prettier --parser markdown --write" ] }, "prettier": { diff --git a/packages/crc32/COPYING b/packages/crc32/COPYING new file mode 100644 index 00000000..a42659dc --- /dev/null +++ b/packages/crc32/COPYING @@ -0,0 +1,27 @@ +Copyright 2011, The Snappy-Rust Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/crc32/Cargo.toml b/packages/crc32/Cargo.toml index 84febf4d..db10240c 100644 --- a/packages/crc32/Cargo.toml +++ b/packages/crc32/Cargo.toml @@ -10,7 +10,6 @@ crate-type = ["cdylib"] [dependencies] napi-rs = { version = "0.2" } napi-rs-derive = { version = "0.1" } -crc32c = "0.4" crc32fast = "1.2" [build-dependencies] diff --git a/packages/crc32/LICENSE b/packages/crc32/LICENSE new file mode 100644 index 00000000..a55125db --- /dev/null +++ b/packages/crc32/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2020-present LongYinan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/packages/crc32/README.md b/packages/crc32/README.md index caac2946..a98929ab 100644 --- a/packages/crc32/README.md +++ b/packages/crc32/README.md @@ -1,11 +1,21 @@ -# `base64` +# `@node-rs/crc32` -> TODO: description +Fastest `crc32` implement in `NodeJS` -## Usage +## API +```ts +export function crc32(input: Buffer, crc?: number): number +export function crc32c(input: Buffer, crc?: number): number ``` -const base64 = require('base64'); -// TODO: DEMONSTRATE API +## Usage + +```ts +const { crc32 } = require('@node-rs/crc32') +const { readFileSync } = require('fs') + +const content = readFileSync('./avatar.png') + +crc32(content) ``` diff --git a/packages/crc32/benchmark/calculate.js b/packages/crc32/benchmark/calculate.js deleted file mode 100644 index b9ad6a08..00000000 --- a/packages/crc32/benchmark/calculate.js +++ /dev/null @@ -1,44 +0,0 @@ -const { Suite } = require('benchmark') -const Sse4Crc32 = require('sse4_crc32') -const chalk = require('chalk') - -const { crc32c } = require('../crc32.node') - -const suite = new Suite('Without initial crc') - -const fixture = 'hello world' - -const fx = Buffer.from(fixture) - -suite - .add('SIMD + NAPI', () => { - crc32c(fx) - }) - .add('sse4_crc32', () => { - Sse4Crc32.calculate(fx) - }) - .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'))}`) - }) - .run() - -const suite2 = new Suite('With initial crc') -const fx2 = Buffer.from('amazing napi + rust') - -suite2 - .add('SIMD + NAPI', () => { - crc32c(fx2, 3381945770) - }) - .add('sse4_crc32', () => { - Sse4Crc32.calculate(fx2, 3381945770) - }) - .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'))}`) - }) - .run() diff --git a/packages/crc32/benchmark/crc32.js b/packages/crc32/benchmark/crc32.js new file mode 100644 index 00000000..f199f99f --- /dev/null +++ b/packages/crc32/benchmark/crc32.js @@ -0,0 +1,95 @@ +const { Suite } = require('benchmark') +const Sse4Crc32 = require('sse4_crc32') +const { crc32: crc32Node } = require('crc') +const chalk = require('chalk') + +const { crc32c, crc32 } = require('../crc32.node') + +const TEST_BUFFER = Buffer.from(`Lorem ipsum dolor sit amet, consectetur +adipiscing elit. Morbi mollis cursus metus vel tristique. Proin congue massa +massa, a malesuada dolor ullamcorper a. Nulla eget leo vel orci venenatis +placerat. Donec semper condimentum justo, vel sollicitudin dolor consequat id. +Nunc sed aliquet felis, eget congue nisi. Mauris eu justo suscipit, elementum +turpis ut, molestie tellus. Mauris ornare rutrum fringilla. Nulla dignissim +luctus pretium. Nullam nec eros hendrerit sapien pellentesque sollicitudin. +Integer eget ligula dui. Mauris nec cursus nibh. Nunc interdum elementum leo, eu +sagittis eros sodales nec. Duis dictum nulla sed tincidunt malesuada. Quisque in +vulputate sapien. Sed sit amet tellus a est porta rhoncus sed eu metus. Mauris +non pulvinar nisl, volutpat luctus enim. Suspendisse est nisi, sagittis at risus +quis, ultricies rhoncus sem. Donec ullamcorper purus eget sapien facilisis, eu +eleifend felis viverra. Suspendisse elit neque, semper aliquet neque sed, +egestas tempus leo. Duis condimentum turpis duis.`) + +const initialCrc32 = crc32Node(TEST_BUFFER) +const initialCrc32c = Sse4Crc32.calculate(TEST_BUFFER) + +console.assert(crc32(TEST_BUFFER), initialCrc32) +console.assert(crc32c(TEST_BUFFER), initialCrc32c) + +const suite = new Suite('crc32c without initial crc') + +suite + .add('SIMD + NAPI', () => { + crc32c(TEST_BUFFER) + }) + .add('sse4_crc32', () => { + Sse4Crc32.calculate(TEST_BUFFER) + }) + .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'))}`) + }) + .run() + +const suite2 = new Suite('crc32c with initial crc') + +suite2 + .add('SIMD + NAPI', () => { + crc32c(TEST_BUFFER, initialCrc32c) + }) + .add('sse4_crc32', () => { + Sse4Crc32.calculate(TEST_BUFFER, initialCrc32c) + }) + .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'))}`) + }) + .run() + +const suite3 = new Suite('crc32 without initial crc') + +suite3 + .add('SIMD + NAPI', () => { + crc32(TEST_BUFFER) + }) + .add('Node crc', () => { + crc32Node(TEST_BUFFER) + }) + .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'))}`) + }) + .run() + +const suite4 = new Suite('crc32 with initial crc') + +suite4 + .add('SIMD + NAPI', () => { + crc32(TEST_BUFFER, initialCrc32) + }) + .add('Node crc32', () => { + crc32Node(TEST_BUFFER, initialCrc32) + }) + .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'))}`) + }) + .run() diff --git a/packages/crc32/build.rs b/packages/crc32/build.rs index 2875fe6d..cbae1638 100644 --- a/packages/crc32/build.rs +++ b/packages/crc32/build.rs @@ -1,9 +1,79 @@ extern crate napi_build; use std::env; +use std::fs::File; +use std::io::{self, Write}; +use std::path::{Path, PathBuf}; -fn main() { +type Result = std::result::Result>; + +const CASTAGNOLI_POLY: u32 = 0x82f63b78; + +fn main() -> Result<()> { napi_build::setup(); - env::set_var("RUSTFLAGS", "-C target-feature=+sse4.2"); + let out_dir = match env::var_os("OUT_DIR") { + None => return Err(From::from("OUT_DIR environment variable not defined")), + Some(out_dir) => PathBuf::from(out_dir), + }; + write_crc_tables(&out_dir)?; + + Ok(()) +} + +fn write_crc_tables(out_dir: &Path) -> Result<()> { + let out_path = out_dir.join("crc32_table.rs"); + let mut out = io::BufWriter::new(File::create(out_path)?); + + let table = make_table(CASTAGNOLI_POLY); + let table16 = make_table16(CASTAGNOLI_POLY); + + writeln!(out, "pub const TABLE: [u32; 256] = [")?; + for &x in table.iter() { + writeln!(out, " {},", x)?; + } + writeln!(out, "];\n")?; + + writeln!(out, "pub const TABLE16: [[u32; 256]; 16] = [")?; + for table in table16.iter() { + writeln!(out, " [")?; + for &x in table.iter() { + writeln!(out, " {},", x)?; + } + writeln!(out, " ],")?; + } + writeln!(out, "];")?; + + out.flush()?; + + Ok(()) +} + +fn make_table16(poly: u32) -> [[u32; 256]; 16] { + let mut tab = [[0; 256]; 16]; + tab[0] = make_table(poly); + for i in 0..256 { + let mut crc = tab[0][i]; + for j in 1..16 { + crc = (crc >> 8) ^ tab[0][crc as u8 as usize]; + tab[j][i] = crc; + } + } + tab +} + +fn make_table(poly: u32) -> [u32; 256] { + let mut tab = [0; 256]; + for i in 0u32..256u32 { + let mut crc = i; + for _ in 0..8 { + if crc & 1 == 1 { + crc = (crc >> 1) ^ poly; + } else { + crc >>= 1; + } + } + tab[i as usize] = crc; + } + tab } diff --git a/packages/crc32/package.json b/packages/crc32/package.json index c7928ae6..b863a942 100644 --- a/packages/crc32/package.json +++ b/packages/crc32/package.json @@ -18,7 +18,9 @@ "files": [ "index.js", "index.d.ts", - "index.*.node" + "index.*.node", + "LICENSE", + "COPYING" ], "repository": { "type": "git", diff --git a/packages/crc32/src/bytes.rs b/packages/crc32/src/bytes.rs new file mode 100644 index 00000000..9c520031 --- /dev/null +++ b/packages/crc32/src/bytes.rs @@ -0,0 +1,8 @@ +use std::convert::TryInto; + +/// Read a u32 in little endian format from the beginning of the given slice. +/// This panics if the slice has length less than 4. +#[inline] +pub fn read_u32_le(slice: &[u8]) -> u32 { + u32::from_le_bytes(slice[..4].try_into().unwrap()) +} diff --git a/packages/crc32/src/crc32.rs b/packages/crc32/src/crc32.rs new file mode 100644 index 00000000..eacd5826 --- /dev/null +++ b/packages/crc32/src/crc32.rs @@ -0,0 +1,105 @@ +use crate::bytes; +use crate::crc32_table::{TABLE, TABLE16}; + +#[inline] +#[cfg(not(target_arch = "x86_64"))] +pub fn crc32c(buf: &[u8]) -> u32 { + crc32c_slice16(buf) +} + +/// Returns the CRC32 checksum of `buf` using the Castagnoli polynomial. +#[inline] +#[cfg(target_arch = "x86_64")] +pub fn crc32c(buf: &[u8]) -> u32 { + if is_x86_feature_detected!("sse4.2") { + // SAFETY: When sse42 is true, we are guaranteed to be running on + // a CPU that supports SSE 4.2. + unsafe { crc32c_sse(buf) } + } else { + crc32c_slice16(buf) + } +} + +#[inline] +#[cfg(not(target_arch = "x86_64"))] +pub fn crc32c_append(buf: &[u8], crc: u32) -> u32 { + append_crc32c_slice16(buf, crc) +} + +/// Returns the CRC32 checksum of `buf` using the Castagnoli polynomial. +#[inline] +#[cfg(target_arch = "x86_64")] +pub fn crc32c_append(buf: &[u8], crc: u32) -> u32 { + if is_x86_feature_detected!("sse4.2") { + // SAFETY: When sse42 is true, we are guaranteed to be running on + // a CPU that supports SSE 4.2. + unsafe { append_crc32c_sse(buf, crc) } + } else { + append_crc32c_slice16(buf, crc) + } +} + +#[cfg(target_arch = "x86_64")] +#[target_feature(enable = "sse4.2")] +unsafe fn crc32c_sse(buf: &[u8]) -> u32 { + append_crc32c_sse(buf, 0) +} + +#[cfg(target_arch = "x86_64")] +#[target_feature(enable = "sse4.2")] +unsafe fn append_crc32c_sse(buf: &[u8], initial_crc: u32) -> u32 { + use std::arch::x86_64::*; + let mut crc = !initial_crc; + // SAFETY: This is safe since alignment is handled by align_to (oh how I + // love you) and since 8 adjacent u8's are guaranteed to have the same + // in-memory representation as u64 for all possible values. + let (prefix, u64s, suffix) = buf.align_to::(); + for &b in prefix { + // SAFETY: Safe since we have sse4.2 enabled. + crc = _mm_crc32_u8(crc, b); + } + for &n in u64s { + // SAFETY: Safe since we have sse4.2 enabled. + crc = _mm_crc32_u64(crc as u64, n) as u32; + } + for &b in suffix { + // SAFETY: Safe since we have sse4.2 enabled. + crc = _mm_crc32_u8(crc, b); + } + !crc +} + +/// Returns the CRC32 checksum of `buf` using the Castagnoli polynomial. +#[inline] +fn crc32c_slice16(buf: &[u8]) -> u32 { + append_crc32c_slice16(buf, 0) +} + +#[inline] +fn append_crc32c_slice16(mut buf: &[u8], initial_crc: u32) -> u32 { + let mut crc = !initial_crc; + while buf.len() >= 16 { + crc ^= bytes::read_u32_le(buf); + crc = TABLE16[0][buf[15] as usize] + ^ TABLE16[1][buf[14] as usize] + ^ TABLE16[2][buf[13] as usize] + ^ TABLE16[3][buf[12] as usize] + ^ TABLE16[4][buf[11] as usize] + ^ TABLE16[5][buf[10] as usize] + ^ TABLE16[6][buf[9] as usize] + ^ TABLE16[7][buf[8] as usize] + ^ TABLE16[8][buf[7] as usize] + ^ TABLE16[9][buf[6] as usize] + ^ TABLE16[10][buf[5] as usize] + ^ TABLE16[11][buf[4] as usize] + ^ TABLE16[12][(crc >> 24) as u8 as usize] + ^ TABLE16[13][(crc >> 16) as u8 as usize] + ^ TABLE16[14][(crc >> 8) as u8 as usize] + ^ TABLE16[15][(crc) as u8 as usize]; + buf = &buf[16..]; + } + for &b in buf { + crc = TABLE[((crc as u8) ^ b) as usize] ^ (crc >> 8); + } + !crc +} diff --git a/packages/crc32/src/crc32_table.rs b/packages/crc32/src/crc32_table.rs new file mode 100644 index 00000000..7821b5d8 --- /dev/null +++ b/packages/crc32/src/crc32_table.rs @@ -0,0 +1,2 @@ +// Generated by build.rs. +include!(concat!(env!("OUT_DIR"), "/crc32_table.rs")); diff --git a/packages/crc32/src/lib.rs b/packages/crc32/src/lib.rs index b005625b..6c41b9c4 100644 --- a/packages/crc32/src/lib.rs +++ b/packages/crc32/src/lib.rs @@ -3,11 +3,15 @@ extern crate napi_rs as napi; #[macro_use] extern crate napi_rs_derive; -use crc32c::{crc32c as native_crc32c, crc32c_append}; +use crate::crc32::{crc32c as native_crc32c, crc32c_append}; use crc32fast::Hasher; use napi::{Buffer, CallContext, Env, Number, Object, Result, Value}; use std::convert::TryInto; +mod bytes; +mod crc32; +mod crc32_table; + register_module!(test_module, init); fn init<'env>( @@ -24,7 +28,7 @@ fn crc32c<'a>(ctx: CallContext<'a>) -> Result> { let input_data = ctx.get::(0)?; let init_state = ctx.get::(1); let result = if init_state.is_ok() { - crc32c_append(init_state?.try_into()?, &input_data) + crc32c_append(&input_data, init_state?.try_into()?) } else { native_crc32c(&input_data) }; From c1537a5eed391dd5e442b1d4bfe5cec6c2c5f99b Mon Sep 17 00:00:00 2001 From: LongYinan Date: Mon, 27 Apr 2020 21:21:18 +0800 Subject: [PATCH 9/9] style: add format command and apply it --- .eslintrc.yml | 70 +++++++++++++++++++---------------- .prettierignore | 3 ++ lerna.json | 4 +- package.json | 37 +++++++----------- packages/crc32/package.json | 17 +-------- packages/helper/README.md | 1 + packages/helper/package.json | 11 +----- packages/helper/tsconfig.json | 4 +- tsconfig.json | 20 ++-------- tsconfig.project.json | 4 +- yarn.lock | 38 +++++++++++++++++++ 11 files changed, 105 insertions(+), 104 deletions(-) create mode 100644 .prettierignore diff --git a/.eslintrc.yml b/.eslintrc.yml index 7f020c66..e411a170 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -17,7 +17,7 @@ globals: plugins: - import - sonarjs - + extends: - eslint:recommended - plugin:sonarjs/recommended @@ -28,10 +28,10 @@ settings: pragma: React version: 16.12.0 -rules: +rules: # 0 = off, 1 = warn, 2 = error 'no-undef': 2 - 'no-console': [2, { allow: ['error', 'warn', 'info', 'assert']}] + 'no-console': [2, { allow: ['error', 'warn', 'info', 'assert'] }] 'comma-dangle': ['error', 'only-multiline'] 'no-unused-vars': 0 'no-var': 2 @@ -42,10 +42,14 @@ rules: 'no-use-before-define': [2, { 'functions': false, 'classes': false }] 'eqeqeq': [2, 'always', { 'null': 'ignore' }] 'no-case-declarations': 0 - 'no-restricted-syntax': [2, { - 'selector': 'BinaryExpression[operator=/(==|===|!=|!==)/][left.raw=true], BinaryExpression[operator=/(==|===|!=|!==)/][right.raw=true]', - 'message': Don't compare for equality against boolean literals - }] + 'no-restricted-syntax': + [ + 2, + { + 'selector': 'BinaryExpression[operator=/(==|===|!=|!==)/][left.raw=true], BinaryExpression[operator=/(==|===|!=|!==)/][right.raw=true]', + 'message': Don't compare for equality against boolean literals, + }, + ] 'import/first': 2 'import/newline-after-import': 2 @@ -57,14 +61,12 @@ rules: 'sonarjs/no-small-switch': 0 overrides: - - - files: + - files: - packages/**/*.ts rules: 'no-unused-vars': [2, { varsIgnorePattern: '^_', argsIgnorePattern: '^_', ignoreRestSiblings: true }] - - - - files: + + - files: - packages/**/*.ts plugins: - '@typescript-eslint' @@ -84,23 +86,29 @@ overrides: '@typescript-eslint/no-empty-function': 2 - '@typescript-eslint/no-unused-vars': [2, { varsIgnorePattern: '^_', argsIgnorePattern: '^_', ignoreRestSiblings: true }] - '@typescript-eslint/member-ordering': [2, { - default: [ - 'public-static-field', - 'protected-static-field', - 'private-static-field', - 'public-static-method', - 'protected-static-method', - 'private-static-method', - 'public-instance-field', - 'protected-instance-field', - 'private-instance-field', - 'public-constructor', - 'protected-constructor', - 'private-constructor', - 'public-instance-method', - 'protected-instance-method', - 'private-instance-method' + '@typescript-eslint/no-unused-vars': + [2, { varsIgnorePattern: '^_', argsIgnorePattern: '^_', ignoreRestSiblings: true }] + '@typescript-eslint/member-ordering': + [ + 2, + { + default: + [ + 'public-static-field', + 'protected-static-field', + 'private-static-field', + 'public-static-method', + 'protected-static-method', + 'private-static-method', + 'public-instance-field', + 'protected-instance-field', + 'private-instance-field', + 'public-constructor', + 'protected-constructor', + 'private-constructor', + 'public-instance-method', + 'protected-instance-method', + 'private-instance-method', + ], + }, ] - }] \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..25f5ccc8 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +target +node_modules +lib diff --git a/lerna.json b/lerna.json index 3a60d401..bcdca041 100644 --- a/lerna.json +++ b/lerna.json @@ -1,7 +1,5 @@ { - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "npmClient": "yarn", "useWorkspaces": true, "version": "independent" diff --git a/package.json b/package.json index a8d87310..22d87bf0 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,15 @@ "author": "LongYinan ", "license": "MIT", "private": true, - "workspaces": [ - "packages/*" - ], + "workspaces": ["packages/*"], "scripts": { "lint": "eslint . -c ./.eslintrc.yml 'packages/**/*.{ts,js}'", "test": "ava", + "format": "run-p format:md format:json format:yaml format:source", + "format:md": "prettier --parser markdown --write './**/*.md'", + "format:json": "prettier --parser json --write './**/*.json'", + "format:source": "prettier --config ./package.json --write './**/*.{js,ts}'", + "format:yaml": "prettier --parser yaml --write './**/*.{yml,yaml}'", "typecheck": "tsc -b tsconfig.project.json -verbose" }, "devDependencies": { @@ -30,6 +33,7 @@ "lerna": "^3.20.2", "lint-staged": "^10.1.7", "napi-rs": "^0.2.3", + "npm-run-all": "^4.1.5", "nyc": "^15.0.1", "prettier": "^2.0.5", "ts-node": "^8.9.1", @@ -37,28 +41,15 @@ "typescript": "^3.8.3" }, "ava": { - "extensions": [ - "ts" - ], - "require": [ - "ts-node/register", - "tsconfig-paths/register" - ], - "files": [ - "packages/**/*.spec.ts" - ] + "extensions": ["ts"], + "require": ["ts-node/register", "tsconfig-paths/register"], + "files": ["packages/**/*.spec.ts"] }, "lint-staged": { - "*.@(js|ts|tsx)": [ - "prettier --write", - "eslint -c .eslintrc.yml --fix" - ], - "*.@(yml|yaml)": [ - "prettier --parser yaml --write" - ], - "*.md": [ - "prettier --parser markdown --write" - ] + "*.@(js|ts|tsx)": ["prettier --write", "eslint -c .eslintrc.yml --fix"], + "*.@(yml|yaml)": ["prettier --parser yaml --write"], + "*.json": ["prettier --parser json --write"], + "*.md": ["prettier --parser markdown --write"] }, "prettier": { "printWidth": 120, diff --git a/packages/crc32/package.json b/packages/crc32/package.json index b863a942..3d4ac97f 100644 --- a/packages/crc32/package.json +++ b/packages/crc32/package.json @@ -2,26 +2,13 @@ "name": "@node-rs/crc32", "version": "0.0.0", "description": "SIMD crc32", - "keywords": [ - "SIMD", - "NAPI", - "napi-rs", - "node-rs", - "crc32", - "crc32c" - ], + "keywords": ["SIMD", "NAPI", "napi-rs", "node-rs", "crc32", "crc32c"], "author": "LongYinan ", "homepage": "https://github.com/Brooooooklyn/node-rs", "license": "MIT", "main": "index.js", "typings": "index.d.ts", - "files": [ - "index.js", - "index.d.ts", - "index.*.node", - "LICENSE", - "COPYING" - ], + "files": ["index.js", "index.d.ts", "index.*.node", "LICENSE", "COPYING"], "repository": { "type": "git", "url": "git+https://github.com/Brooooooklyn/node-rs.git" diff --git a/packages/helper/README.md b/packages/helper/README.md index f26bd4ad..d85c7f27 100644 --- a/packages/helper/README.md +++ b/packages/helper/README.md @@ -5,6 +5,7 @@ ## Usage ### locateBinding + Load native binding file from `dirname` ```ts diff --git a/packages/helper/package.json b/packages/helper/package.json index 9de8aec1..9105b937 100644 --- a/packages/helper/package.json +++ b/packages/helper/package.json @@ -2,20 +2,13 @@ "name": "@node-rs/helper", "version": "0.0.0", "description": "Helper library for node-rs", - "keywords": [ - "N-API", - "napi", - "Rust", - "Performance" - ], + "keywords": ["N-API", "napi", "Rust", "Performance"], "author": "LongYinan ", "homepage": "https://github.com/brooooooklyn/node-rs", "license": "MIT", "main": "lib/index.js", "typings": "lib/index.d.ts", - "files": [ - "lib" - ], + "files": ["lib"], "repository": { "type": "git", "url": "git+https://github.com/Brooooooklyn/node-rs.git" diff --git a/packages/helper/tsconfig.json b/packages/helper/tsconfig.json index 09b97691..524c13ab 100644 --- a/packages/helper/tsconfig.json +++ b/packages/helper/tsconfig.json @@ -5,7 +5,5 @@ "rootDir": "./src", "composite": true }, - "include": [ - "./src" - ] + "include": ["./src"] } diff --git a/tsconfig.json b/tsconfig.json index 1744312c..2711ccee 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,23 +26,9 @@ "importsNotUsedAsValues": "remove", "baseUrl": "./packages", "paths": { - "@node-rs/*": [ - "./*/src" - ] + "@node-rs/*": ["./*/src"] }, - "lib": [ - "dom", - "ES5", - "ES2015", - "ES2016", - "ES2017", - "ES2018", - "ES2019", - "ES2020", - "esnext" - ] + "lib": ["dom", "ES5", "ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "esnext"] }, - "exclude": [ - "node_modules" - ] + "exclude": ["node_modules"] } diff --git a/tsconfig.project.json b/tsconfig.project.json index c6fe93e9..cce2bc98 100644 --- a/tsconfig.project.json +++ b/tsconfig.project.json @@ -1,7 +1,5 @@ { - "references": [ - { "path": "./packages/helper" } - ], + "references": [{ "path": "./packages/helper" }], "compilerOptions": { "noEmit": true } diff --git a/yarn.lock b/yarn.lock index d56f5af9..b3fbe121 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4926,6 +4926,11 @@ mem@^6.1.0: map-age-cleaner "^0.1.3" mimic-fn "^3.0.0" +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + meow@^3.3.0: version "3.7.0" resolved "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -5345,6 +5350,21 @@ npm-pick-manifest@^3.0.0: npm-package-arg "^6.0.0" semver "^5.4.1" +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -5844,6 +5864,11 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6548,6 +6573,11 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -6852,6 +6882,14 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.padend@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + string.prototype.trimend@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"