From 206da128a1f1ecd43c7580a7ad5f58ebc363c812 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Fri, 24 Dec 2021 10:21:24 +0800 Subject: [PATCH] feat(node): Upgrade `napi` to v2 (#2958) --- .github/workflows/publish-node.yml | 11 + Cargo.lock | 93 +++- crates/node/Cargo.toml | 6 +- crates/node/src/bundle.rs | 44 +- crates/node/src/lib.rs | 61 +-- crates/node/src/minify.rs | 47 +- crates/node/src/parse.rs | 107 ++-- crates/node/src/print.rs | 89 ++-- crates/node/src/transform.rs | 172 +++--- crates/node/src/util.rs | 68 +-- crates/swc/Cargo.toml | 13 + crates/swc/src/lib.rs | 10 + crates/swc_node_base/Cargo.toml | 4 +- crates/swc_node_base/src/lib.rs | 5 +- node-swc/src/binding.d.ts | 32 ++ node-swc/src/binding.js | 228 ++++++++ node-swc/src/index.ts | 3 +- package.json | 11 +- scripts/npm/android-arm-eabi/README.md | 3 + scripts/npm/android-arm-eabi/package.json | 42 ++ tsconfig.json | 2 +- yarn.lock | 618 +--------------------- 22 files changed, 739 insertions(+), 930 deletions(-) create mode 100644 node-swc/src/binding.d.ts create mode 100644 node-swc/src/binding.js create mode 100644 scripts/npm/android-arm-eabi/README.md create mode 100644 scripts/npm/android-arm-eabi/package.json diff --git a/.github/workflows/publish-node.yml b/.github/workflows/publish-node.yml index 409560c57fc..2837d67e2e2 100644 --- a/.github/workflows/publish-node.yml +++ b/.github/workflows/publish-node.yml @@ -102,6 +102,17 @@ jobs: cp ./target/aarch64-linux-android/release/swc . yarn build --target aarch64-linux-android ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip *.node + - host: ubuntu-latest + target: armv7-linux-androideabi + build: | + export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" + export CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang" + export CXX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++" + export PATH="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:${PATH}" + cargo build -p swc_cli --release --target armv7-linux-androideabi + cp ./target/armv7-linux-androideabi/release/swc . + yarn build --target armv7-linux-androideabi + ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip *.node - host: ubuntu-latest target: aarch64-unknown-linux-musl downloadTarget: aarch64-unknown-linux-musl diff --git a/Cargo.lock b/Cargo.lock index 35715caf4de..4b94c83ec12 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -401,6 +401,12 @@ dependencies = [ "tiny-keccak", ] +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "copyless" version = "0.1.5" @@ -1183,9 +1189,9 @@ dependencies = [ [[package]] name = "mimalloc-rust" -version = "0.1.1" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffcd5c93c5b59f49b89b58100fad6ea023dbec6f9344f0d0932a96d9497821a" +checksum = "bcc30df9dfdb5bb6cb2470de65ca604c3eaa3e5dc2ad02a9a98f567df5844472" dependencies = [ "cty", "mimalloc-rust-sys", @@ -1193,9 +1199,9 @@ dependencies = [ [[package]] name = "mimalloc-rust-sys" -version = "1.7.2" +version = "1.7.3-source" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96f7f32dcc7aeb79781116048bbd27cc819b9db55805690b3379d536d40e9590" +checksum = "3adc8731262b982f4e0860770dba118305cafe1b2e7ebe95b29b2c2f46a70666" dependencies = [ "cc", "cty", @@ -1247,14 +1253,16 @@ dependencies = [ [[package]] name = "napi" -version = "1.8.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5586ff59e18f42d41f68139a8ca72ef1dbcc243ec62c5696e6383169a8a05a4" +checksum = "c4cfe7fef533df6323a5aa17d75cb162850f2b045adabb9922bfbd234426a1bb" dependencies = [ + "ctor", + "lazy_static", "napi-sys", "serde", "serde_json", - "winapi", + "windows", ] [[package]] @@ -1265,20 +1273,36 @@ checksum = "ebd4419172727423cf30351406c54f6cc1b354a2cfb4f1dba3e6cd07f6d5522b" [[package]] name = "napi-derive" -version = "1.1.2" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee880798e942fc785e2e234544b9db578019a1d7676f45dad7f38d432ab0fe4" +checksum = "99deb5dff51f1301df7e01e4ce3ef03abba278d7d08e2fffb969c28c150c013c" dependencies = [ + "convert_case", + "napi-derive-backend", "proc-macro2", "quote", "syn", ] [[package]] -name = "napi-sys" -version = "1.1.2" +name = "napi-derive-backend" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67cf20e0081fea04e044aa4adf74cfea8ddc0324eec2894b1c700f4cafc72a56" +checksum = "92f4038329fd9986f15382c8f6253829273cbfbcc7fbf2d88588fe7f42ae8e09" +dependencies = [ + "convert_case", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "napi-sys" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a385494dac3c52cbcacb393bb3b42669e7db8ab240c7ad5115f549eb061f2cc" [[package]] name = "native-tls" @@ -2568,6 +2592,8 @@ dependencies = [ "either", "indexmap", "lru", + "napi", + "napi-derive", "once_cell", "pathdiff", "rayon", @@ -4148,6 +4174,49 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac7fef12f4b59cd0a29339406cc9203ab44e440ddff6b3f5a41455349fa9cf3" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d027175d00b01e0cbeb97d6ab6ebe03b12330a35786cbaca5252b1c4bf5d9b" + +[[package]] +name = "windows_i686_gnu" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8793f59f7b8e8b01eda1a652b2697d87b93097198ae85f823b969ca5b89bba58" + +[[package]] +name = "windows_i686_msvc" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8602f6c418b67024be2996c512f5f995de3ba417f4c75af68401ab8756796ae4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d615f419543e0bd7d2b3323af0d86ff19cbc4f816e6453f36a2c2ce889c354" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d95421d9ed3672c280884da53201a5c46b7b2765ca6faf34b0d71cf34a3561" + [[package]] name = "winreg" version = "0.7.0" diff --git a/crates/node/Cargo.toml b/crates/node/Cargo.toml index 50452a0f534..50498edde4b 100644 --- a/crates/node/Cargo.toml +++ b/crates/node/Cargo.toml @@ -22,13 +22,13 @@ napi-build = {version = "1"} [dependencies] anyhow = "1" backtrace = "0.3" -napi = {version = "1", features = ["serde-json"]} -napi-derive = {version = "1"} +napi = {version = "2", default-features = false, features = ["napi3", "serde-json"]} +napi-derive = {version = "2", default-features = false, features = ["type-def"]} path-clean = "0.1" proc-macro2 = "=1.0.32" serde = {version = "1", features = ["derive"]} serde_json = {version = "1", features = ["unbounded_depth"]} -swc = {path = "../swc", features = ["concurrent", "plugin"]} +swc = {path = "../swc", features = ["concurrent", "plugin", "node"]} swc_atoms = {version = "0.2.4", path = "../swc_atoms"} swc_bundler = {path = "../swc_bundler"} swc_common = {path = "../swc_common", features = ["sourcemap"]} diff --git a/crates/node/src/bundle.rs b/crates/node/src/bundle.rs index c4de9cbedc8..3e403fda693 100644 --- a/crates/node/src/bundle.rs +++ b/crates/node/src/bundle.rs @@ -1,9 +1,12 @@ use crate::{ get_compiler, - util::{CtxtExt, MapErr}, + util::{get_deserialized, MapErr}, }; use anyhow::{bail, Error}; -use napi::{CallContext, Env, JsObject, Status, Task}; +use napi::{ + bindgen_prelude::{AbortSignal, AsyncTask, Buffer}, + Env, Status, Task, +}; use serde::Deserialize; use std::{ panic::{catch_unwind, AssertUnwindSafe}, @@ -36,15 +39,16 @@ struct StaticConfigItem { config: swc_node_bundler::v1::Config, } -struct BundleTask { +pub(crate) struct BundleTask { swc: Arc, config: ConfigItem, } #[cfg(feature = "swc_v1")] +#[napi] impl Task for BundleTask { type Output = AHashMap; - type JsValue = JsObject; + type JsValue = AHashMap; fn compute(&mut self) -> napi::Result { let builtins = if let TargetEnv::Node = self.config.static_items.config.target { @@ -154,31 +158,34 @@ impl Task for BundleTask { )) } - fn resolve(self, env: Env, output: Self::Output) -> napi::Result { - env.to_js_value(&output)?.coerce_to_object() + fn resolve(&mut self, _env: Env, output: Self::Output) -> napi::Result { + Ok(output) } } #[cfg(feature = "swc_v2")] impl Task for BundleTask { type Output = AHashMap; - type JsValue = JsObject; + type JsValue = AHashMap; fn compute(&mut self) -> napi::Result { todo!() } - fn resolve(self, env: Env, output: Self::Output) -> napi::Result { + fn resolve(&mut self, env: Env, output: Self::Output) -> napi::Result { todo!() } } #[cfg(feature = "swc_v1")] -#[js_function(1)] -pub(crate) fn bundle(cx: CallContext) -> napi::Result { - let c: Arc = get_compiler(&cx); +#[napi(ts_return_type = "Promise<{ [index: string]: { code: string, map?: string } }>")] +pub(crate) fn bundle( + conf_items: Buffer, + signal: Option, +) -> napi::Result> { + let c: Arc = get_compiler(); - let static_items: StaticConfigItem = cx.get_deserialized(0)?; + let static_items: StaticConfigItem = get_deserialized(&conf_items)?; let loader = Box::new(swc_node_bundler::loaders::swc::SwcLoader::new( c.clone(), @@ -218,21 +225,22 @@ pub(crate) fn bundle(cx: CallContext) -> napi::Result { Box::new(environment_resolver(target_env, alias)) }; - cx.env - .spawn(BundleTask { + Ok(AsyncTask::with_optional_signal( + BundleTask { swc: c.clone(), config: ConfigItem { loader, resolver, static_items, }, - }) - .map(|t| t.promise_object()) + }, + signal, + )) } #[cfg(feature = "swc_v2")] -#[js_function(1)] -pub(crate) fn bundle(cx: CallContext) -> napi::Result { +#[napi] +pub(crate) fn bundle() -> napi::Result> { todo!() } diff --git a/crates/node/src/lib.rs b/crates/node/src/lib.rs index 034d055afac..ccdb2469fac 100644 --- a/crates/node/src/lib.rs +++ b/crates/node/src/lib.rs @@ -6,9 +6,8 @@ extern crate napi_derive; extern crate swc_node_base; use backtrace::Backtrace; -use napi::{CallContext, Env, JsFunction, JsObject, JsUndefined}; use std::{env, panic::set_hook, sync::Arc}; -use swc::{Compiler, TransformOutput}; +use swc::Compiler; use swc_common::{self, sync::Lazy, FilePathMapping, SourceMap}; use tracing_subscriber::EnvFilter; @@ -25,8 +24,8 @@ static COMPILER: Lazy> = Lazy::new(|| { Arc::new(Compiler::new(cm.clone())) }); -#[module_exports] -fn init(mut exports: JsObject) -> napi::Result<()> { +#[napi::module_init] +fn init() { if cfg!(debug_assertions) || env::var("SWC_DEBUG").unwrap_or_default() == "1" { set_hook(Box::new(|panic_info| { let backtrace = Backtrace::new(); @@ -40,48 +39,32 @@ fn init(mut exports: JsObject) -> napi::Result<()> { .with_ansi(true) .with_env_filter(EnvFilter::from_env("SWC_LOG")) .try_init(); - - exports.create_named_method("define", define_compiler_class)?; - - exports.create_named_method("minify", minify::minify)?; - exports.create_named_method("minifySync", minify::minify_sync)?; - - exports.create_named_method("transform", transform::transform)?; - exports.create_named_method("transformSync", transform::transform_sync)?; - exports.create_named_method("transformFile", transform::transform_file)?; - exports.create_named_method("transformFileSync", transform::transform_file_sync)?; - - exports.create_named_method("parse", parse::parse)?; - exports.create_named_method("parseSync", parse::parse_sync)?; - exports.create_named_method("parseFile", parse::parse_file)?; - exports.create_named_method("parseFileSync", parse::parse_file_sync)?; - - exports.create_named_method("print", print::print)?; - exports.create_named_method("printSync", print::print_sync)?; - - exports.create_named_method("bundle", bundle::bundle)?; - - Ok(()) } -fn get_compiler(_ctx: &CallContext) -> Arc { +fn get_compiler() -> Arc { COMPILER.clone() } -#[js_function] -fn define_compiler_class(ctx: CallContext) -> napi::Result { - ctx.env - .define_class("Compiler", construct_compiler, &vec![]) +#[napi(js_name = "Compiler")] +pub struct JsCompiler { + _compiler: Arc, } -#[js_function] -fn construct_compiler(ctx: CallContext) -> napi::Result { - // TODO: Assign swc::Compiler - ctx.env.get_undefined() -} - -pub fn complete_output(env: &Env, output: TransformOutput) -> napi::Result { - env.to_js_value(&output)?.coerce_to_object() +#[napi] +impl JsCompiler { + #[napi(constructor)] + pub fn new() -> Self { + Self { + _compiler: COMPILER.clone(), + } + } } pub type ArcCompiler = Arc; + +/// Hack for `Type Generation` +#[napi(object)] +pub struct TransformOutput { + pub code: String, + pub map: Option, +} diff --git a/crates/node/src/minify.rs b/crates/node/src/minify.rs index 8bb8e5ee457..a0ee8fcb46b 100644 --- a/crates/node/src/minify.rs +++ b/crates/node/src/minify.rs @@ -1,8 +1,11 @@ use crate::{ - complete_output, get_compiler, - util::{deserialize_json, try_with, CtxtExt, MapErr}, + get_compiler, + util::{deserialize_json, get_deserialized, try_with, MapErr}, +}; +use napi::{ + bindgen_prelude::{AbortSignal, AsyncTask, Buffer}, + Task, }; -use napi::{CallContext, JsObject, Task}; use serde::Deserialize; use std::sync::Arc; use swc::{config::JsMinifyOptions, TransformOutput}; @@ -42,14 +45,15 @@ impl MinifyTarget { } } +#[napi] impl Task for MinifyTask { type Output = TransformOutput; - type JsValue = JsObject; + type JsValue = TransformOutput; fn compute(&mut self) -> napi::Result { - let input: MinifyTarget = deserialize_json(&self.code).convert_err()?; - let options: JsMinifyOptions = deserialize_json(&self.options).convert_err()?; + let input: MinifyTarget = deserialize_json(&self.code)?; + let options: JsMinifyOptions = deserialize_json(&self.options)?; try_with(self.c.cm.clone(), false, |handler| { let fm = input.to_file(self.c.cm.clone()); @@ -59,34 +63,31 @@ impl Task for MinifyTask { .convert_err() } - fn resolve(self, env: napi::Env, output: Self::Output) -> napi::Result { - complete_output(&env, output) + fn resolve(&mut self, _env: napi::Env, output: Self::Output) -> napi::Result { + Ok(output) } } -#[js_function(2)] -pub fn minify(cx: CallContext) -> napi::Result { - let code = cx.get_buffer_as_string(0)?; - let options = cx.get_buffer_as_string(1)?; +#[napi] +fn minify(code: Buffer, opts: Buffer, signal: Option) -> AsyncTask { + let code = String::from_utf8_lossy(code.as_ref()).to_string(); + let options = String::from_utf8_lossy(opts.as_ref()).to_string(); - let c = get_compiler(&cx); + let c = get_compiler(); let task = MinifyTask { c, code, options }; - cx.env.spawn(task).map(|t| t.promise_object()) + AsyncTask::with_optional_signal(task, signal) } -#[js_function(2)] -pub fn minify_sync(cx: CallContext) -> napi::Result { - let code: MinifyTarget = cx.get_deserialized(0)?; - let opts = cx.get_deserialized(1)?; +#[napi] +pub fn minify_sync(code: Buffer, opts: Buffer) -> napi::Result { + let code: MinifyTarget = get_deserialized(code)?; + let opts = get_deserialized(opts)?; - let c = get_compiler(&cx); + let c = get_compiler(); let fm = code.to_file(c.cm.clone()); - let output = - try_with(c.cm.clone(), false, |handler| c.minify(fm, &handler, &opts)).convert_err()?; - - complete_output(&cx.env, output) + try_with(c.cm.clone(), false, |handler| c.minify(fm, &handler, &opts)).convert_err() } diff --git a/crates/node/src/parse.rs b/crates/node/src/parse.rs index 10ab000d107..ed7cd940837 100644 --- a/crates/node/src/parse.rs +++ b/crates/node/src/parse.rs @@ -1,9 +1,12 @@ use crate::{ get_compiler, - util::{deserialize_json, try_with, CtxtExt, MapErr}, + util::{deserialize_json, get_deserialized, try_with, MapErr}, }; use anyhow::Context as _; -use napi::{CallContext, Either, Env, JsObject, JsString, JsUndefined, Task}; +use napi::{ + bindgen_prelude::{AbortSignal, AsyncTask, Buffer}, + Env, Task, +}; use std::{ path::{Path, PathBuf}, sync::Arc, @@ -27,19 +30,13 @@ pub struct ParseFileTask { pub options: String, } -pub fn complete_parse<'a>(env: &Env, program: Program, _c: &Compiler) -> napi::Result { - let s = serde_json::to_string(&program) - .context("failed to serialize Program") - .convert_err()?; - env.create_string_from_std(s) -} - +#[napi] impl Task for ParseTask { type Output = Program; - type JsValue = JsString; + type JsValue = String; fn compute(&mut self) -> napi::Result { - let options: ParseOptions = deserialize_json(&self.options).convert_err()?; + let options: ParseOptions = deserialize_json(&self.options)?; let fm = self .c .cm @@ -60,19 +57,20 @@ impl Task for ParseTask { Ok(program) } - fn resolve(self, env: Env, result: Self::Output) -> napi::Result { - complete_parse(&env, result, &self.c) + fn resolve(&mut self, _env: Env, result: Self::Output) -> napi::Result { + Ok(serde_json::to_string(&result)?) } } +#[napi] impl Task for ParseFileTask { type Output = Program; - type JsValue = JsString; + type JsValue = String; fn compute(&mut self) -> napi::Result { try_with(self.c.cm.clone(), false, |handler| { self.c.run(|| { - let options: ParseOptions = deserialize_json(&self.options).convert_err()?; + let options: ParseOptions = deserialize_json(&self.options)?; let fm = self .c @@ -93,42 +91,44 @@ impl Task for ParseFileTask { .convert_err() } - fn resolve(self, env: Env, result: Self::Output) -> napi::Result { - complete_parse(&env, result, &self.c) + fn resolve(&mut self, _env: Env, result: Self::Output) -> napi::Result { + Ok(serde_json::to_string(&result)?) } } -#[js_function(3)] -pub fn parse(ctx: CallContext) -> napi::Result { - let c = get_compiler(&ctx); - let src = ctx.get::(0)?.into_utf8()?.as_str()?.to_string(); - let options = ctx.get_buffer_as_string(1)?; - let filename = ctx.get::>(2)?; - let filename = if let Either::A(value) = filename { - FileName::Real(value.into_utf8()?.as_str()?.to_owned().into()) +#[napi] +pub fn parse( + src: String, + options: Buffer, + filename: Option, + signal: Option, +) -> AsyncTask { + let c = get_compiler(); + let options = String::from_utf8_lossy(options.as_ref()).to_string(); + let filename = if let Some(value) = filename { + FileName::Real(value.into()) } else { FileName::Anon }; - ctx.env - .spawn(ParseTask { + AsyncTask::with_optional_signal( + ParseTask { c: c.clone(), filename, src, options, - }) - .map(|t| t.promise_object()) + }, + signal, + ) } -#[js_function(3)] -pub fn parse_sync(cx: CallContext) -> napi::Result { - let c = get_compiler(&cx); +#[napi] +pub fn parse_sync(src: String, opts: Buffer, filename: Option) -> napi::Result { + let c = get_compiler(); - let src = cx.get::(0)?.into_utf8()?.as_str()?.to_owned(); - let options: ParseOptions = cx.get_deserialized(1)?; - let filename = cx.get::>(2)?; - let filename = if let Either::A(value) = filename { - FileName::Real(value.into_utf8()?.as_str()?.to_owned().into()) + let options: ParseOptions = get_deserialized(&opts)?; + let filename = if let Some(value) = filename { + FileName::Real(value.into()) } else { FileName::Anon }; @@ -148,19 +148,18 @@ pub fn parse_sync(cx: CallContext) -> napi::Result { }) .convert_err()?; - complete_parse(&cx.env, program, &c) + Ok(serde_json::to_string(&program)?) } -#[js_function(2)] -pub fn parse_file_sync(cx: CallContext) -> napi::Result { - let c = get_compiler(&cx); - let path = cx.get::(0)?.into_utf8()?; - let options: ParseOptions = cx.get_deserialized(1)?; +#[napi] +pub fn parse_file_sync(path: String, opts: Buffer) -> napi::Result { + let c = get_compiler(); + let options: ParseOptions = get_deserialized(&opts)?; let program = { try_with(c.cm.clone(), false, |handler| { let fm = - c.cm.load_file(Path::new(path.as_str()?)) + c.cm.load_file(Path::new(path.as_str())) .expect("failed to read program file"); c.parse_js( @@ -175,16 +174,18 @@ pub fn parse_file_sync(cx: CallContext) -> napi::Result { } .convert_err()?; - complete_parse(cx.env, program, &c) + Ok(serde_json::to_string(&program)?) } -#[js_function(2)] -pub fn parse_file(cx: CallContext) -> napi::Result { - let c = get_compiler(&cx); - let path = PathBuf::from(cx.get::(0)?.into_utf8()?.as_str()?); - let options = cx.get_buffer_as_string(1)?; +#[napi] +pub fn parse_file( + path: String, + options: Buffer, + signal: Option, +) -> AsyncTask { + let c = get_compiler(); + let path = PathBuf::from(&path); + let options = String::from_utf8_lossy(options.as_ref()).to_string(); - cx.env - .spawn(ParseFileTask { c, path, options }) - .map(|t| t.promise_object()) + AsyncTask::with_optional_signal(ParseFileTask { c, path, options }, signal) } diff --git a/crates/node/src/print.rs b/crates/node/src/print.rs index cec730630fd..b4a0066c3d3 100644 --- a/crates/node/src/print.rs +++ b/crates/node/src/print.rs @@ -1,8 +1,11 @@ use crate::{ - complete_output, get_compiler, - util::{deserialize_json, CtxtExt, MapErr}, + get_compiler, + util::{deserialize_json, get_deserialized, MapErr}, +}; +use napi::{ + bindgen_prelude::{AbortSignal, AsyncTask, Buffer}, + Env, Task, }; -use napi::{CallContext, Env, JsObject, JsString, Task}; use std::sync::Arc; use swc::{ config::{Options, SourceMapsConfig}, @@ -18,13 +21,14 @@ pub struct PrintTask { pub options: String, } +#[napi] impl Task for PrintTask { type Output = TransformOutput; - type JsValue = JsObject; + type JsValue = TransformOutput; fn compute(&mut self) -> napi::Result { - let program: Program = deserialize_json(&self.program_json).convert_err()?; - let options: Options = deserialize_json(&self.options).convert_err()?; + let program: Program = deserialize_json(&self.program_json)?; + let options: Options = deserialize_json(&self.options)?; self.c .print( @@ -45,56 +49,55 @@ impl Task for PrintTask { .convert_err() } - fn resolve(self, env: Env, result: Self::Output) -> napi::Result { - complete_output(&env, result) + fn resolve(&mut self, _env: Env, result: Self::Output) -> napi::Result { + Ok(result) } } -#[js_function(2)] -pub fn print(cx: CallContext) -> napi::Result { - let c = get_compiler(&cx); - let program_json = cx.get::(0)?.into_utf8()?.as_str()?.to_string(); - let options = cx.get_buffer_as_string(1)?; +#[napi] +pub fn print( + program_json: String, + options: Buffer, + signal: Option, +) -> napi::Result> { + let c = get_compiler(); + let options = String::from_utf8_lossy(&options).to_string(); - cx.env - .spawn(PrintTask { + Ok(AsyncTask::with_optional_signal( + PrintTask { c: c.clone(), program_json, options, - }) - .map(|t| t.promise_object()) + }, + signal, + )) } -#[js_function(2)] -pub fn print_sync(cx: CallContext) -> napi::Result { - let c = get_compiler(&cx); +#[napi] +pub fn print_sync(program: String, options: Buffer) -> napi::Result { + let c = get_compiler(); - let program = cx.get::(0)?.into_utf8()?; - let program: Program = - deserialize_json(&program.as_str()?).expect("failed to deserialize Program"); + let program: Program = deserialize_json(&program.as_str())?; - let options: Options = cx.get_deserialized(1)?; + let options: Options = get_deserialized(&options)?; // Defaults to es3 let codegen_target = options.codegen_target().unwrap_or_default(); - let result = { - c.print( - &program, - None, - options.output_path, - true, - codegen_target, - options - .source_maps - .clone() - .unwrap_or(SourceMapsConfig::Bool(false)), - &Default::default(), - None, - options.config.minify, - None, - ) - } - .convert_err()?; - complete_output(cx.env, result) + c.print( + &program, + None, + options.output_path, + true, + codegen_target, + options + .source_maps + .clone() + .unwrap_or(SourceMapsConfig::Bool(false)), + &Default::default(), + None, + options.config.minify, + None, + ) + .convert_err() } diff --git a/crates/node/src/transform.rs b/crates/node/src/transform.rs index f6c262668d9..6c911b3ec96 100644 --- a/crates/node/src/transform.rs +++ b/crates/node/src/transform.rs @@ -1,16 +1,19 @@ use crate::{ - complete_output, get_compiler, - util::{deserialize_json, try_with, CtxtExt, MapErr}, + get_compiler, + util::{deserialize_json, get_deserialized, try_with, MapErr}, +}; +use anyhow::Context as _; +use napi::{ + bindgen_prelude::{AbortSignal, AsyncTask, Buffer}, + Env, Task, }; -use anyhow::{Context as _, Error}; -use napi::{CallContext, Env, JsBoolean, JsObject, JsString, Task}; use path_clean::clean; use std::{ path::{Path, PathBuf}, sync::Arc, }; use swc::{config::Options, Compiler, TransformOutput}; -use swc_common::{FileName, SourceFile}; +use swc_common::FileName; use swc_ecma_ast::Program; /// Input to transform @@ -30,12 +33,13 @@ pub struct TransformTask { pub options: String, } +#[napi] impl Task for TransformTask { type Output = TransformOutput; - type JsValue = JsObject; + type JsValue = TransformOutput; fn compute(&mut self) -> napi::Result { - let mut options: Options = deserialize_json(&self.options).convert_err()?; + let mut options: Options = deserialize_json(&self.options)?; if !options.filename.is_empty() { options.config.adjust(Path::new(&options.filename)); } @@ -75,108 +79,112 @@ impl Task for TransformTask { .convert_err() } - fn resolve(self, env: Env, result: Self::Output) -> napi::Result { - complete_output(&env, result) + fn resolve(&mut self, _env: Env, result: Self::Output) -> napi::Result { + Ok(result) } } -/// returns `compiler, (src / path), options, plugin, callback` -pub fn schedule_transform(cx: CallContext, op: F) -> napi::Result -where - F: FnOnce(&Arc, String, bool, String) -> TransformTask, -{ - let c = get_compiler(&cx); +#[napi] +pub fn transform( + src: String, + is_module: bool, + options: Buffer, + signal: Option, +) -> napi::Result> { + let c = get_compiler(); - let src = cx.get::(0)?.into_utf8()?.as_str()?.to_owned(); - let is_module = cx.get::(1)?; - let options = cx.get_buffer_as_string(2)?; + let options = String::from_utf8_lossy(options.as_ref()).to_string(); - let task = op(&c, src, is_module.get_value()?, options); + let input = if is_module { + Input::Program(src) + } else { + Input::Source { src } + }; - cx.env.spawn(task).map(|t| t.promise_object()) + let task = TransformTask { + c: c.clone(), + input, + options, + }; + Ok(AsyncTask::with_optional_signal(task, signal)) } -pub fn exec_transform(cx: CallContext, op: F) -> napi::Result -where - F: FnOnce(&Compiler, String, &Options) -> Result, Error>, -{ - let c = get_compiler(&cx); +#[napi] +pub fn transform_sync(s: String, is_module: bool, opts: Buffer) -> napi::Result { + let c = get_compiler(); - let s = cx.get::(0)?.into_utf8()?; - let is_module = cx.get::(1)?; - let mut options: Options = cx.get_deserialized(2)?; + let mut options: Options = get_deserialized(&opts)?; if !options.filename.is_empty() { options.config.adjust(Path::new(&options.filename)); } - let output = try_with(c.cm.clone(), !options.config.error.filename, |handler| { + try_with(c.cm.clone(), !options.config.error.filename, |handler| { c.run(|| { - if is_module.get_value()? { + if is_module { let program: Program = - deserialize_json(s.as_str()?).context("failed to deserialize Program")?; + deserialize_json(s.as_str()).context("failed to deserialize Program")?; c.process_js(&handler, program, &options) } else { - let fm = - op(&c, s.as_str()?.to_string(), &options).context("failed to load file")?; + let fm = c.cm.new_source_file( + if options.filename.is_empty() { + FileName::Anon + } else { + FileName::Real(options.filename.clone().into()) + }, + s, + ); c.process_js_file(fm, &handler, &options) } }) }) - .convert_err()?; - - complete_output(cx.env, output) + .convert_err() } -#[js_function(4)] -pub fn transform(cx: CallContext) -> napi::Result { - schedule_transform(cx, |c, src, is_module, options| { - let input = if is_module { - Input::Program(src) - } else { - Input::Source { src } - }; +#[napi] +pub fn transform_file( + src: String, + _is_module: bool, + options: Buffer, + signal: Option, +) -> napi::Result> { + let c = get_compiler(); - TransformTask { - c: c.clone(), - input, - options, - } - }) + let options = String::from_utf8_lossy(options.as_ref()).to_string(); + let path = clean(&src); + let task = TransformTask { + c: c.clone(), + input: Input::File(path.into()), + options, + }; + Ok(AsyncTask::with_optional_signal(task, signal)) } -#[js_function(4)] -pub fn transform_sync(cx: CallContext) -> napi::Result { - exec_transform(cx, |c, src, options| { - Ok(c.cm.new_source_file( - if options.filename.is_empty() { - FileName::Anon +#[napi] +pub fn transform_file_sync( + s: String, + is_module: bool, + opts: Buffer, +) -> napi::Result { + let c = get_compiler(); + + let mut options: Options = get_deserialized(&opts)?; + + if !options.filename.is_empty() { + options.config.adjust(Path::new(&options.filename)); + } + + try_with(c.cm.clone(), !options.config.error.filename, |handler| { + c.run(|| { + if is_module { + let program: Program = + deserialize_json(s.as_str()).context("failed to deserialize Program")?; + c.process_js(&handler, program, &options) } else { - FileName::Real(options.filename.clone().into()) - }, - src, - )) - }) -} - -#[js_function(4)] -pub fn transform_file(cx: CallContext) -> napi::Result { - schedule_transform(cx, |c, path, _, options| { - let path = clean(&path); - - TransformTask { - c: c.clone(), - input: Input::File(path.into()), - options, - } - }) -} - -#[js_function(4)] -pub fn transform_file_sync(cx: CallContext) -> napi::Result { - exec_transform(cx, |c, path, _| { - Ok(c.cm - .load_file(Path::new(&path)) - .expect("failed to load file")) + let fm = c.cm.load_file(Path::new(&s)).expect("failed to load file"); + c.process_js_file(fm, &handler, &options) + } + }) }) + .convert_err() } diff --git a/crates/node/src/util.rs b/crates/node/src/util.rs index f7b943e5350..7626d423a5a 100644 --- a/crates/node/src/util.rs +++ b/crates/node/src/util.rs @@ -1,5 +1,5 @@ use anyhow::{anyhow, Context, Error}; -use napi::{CallContext, JsBuffer, Status}; +use napi::Status; use serde::de::DeserializeOwned; use std::{ any::type_name, @@ -40,59 +40,33 @@ pub trait MapErr: Into> { impl MapErr for Result {} -pub trait CtxtExt { - fn get_buffer_as_string(&self, index: usize) -> napi::Result; +pub(crate) fn get_deserialized(buffer: B) -> napi::Result +where + T: DeserializeOwned, + B: AsRef<[u8]>, +{ + let mut deserializer = serde_json::Deserializer::from_slice(buffer.as_ref()); + deserializer.disable_recursion_limit(); - /// Currently this uses JsBuffer - fn get_deserialized(&self, index: usize) -> napi::Result - where - T: DeserializeOwned; + let v = T::deserialize(&mut deserializer) + .with_context(|| { + format!( + "Failed to deserialize buffer as {}\nJSON: {}", + type_name::(), + String::from_utf8_lossy(buffer.as_ref()) + ) + }) + .convert_err()?; + + Ok(v) } -impl CtxtExt for CallContext<'_> { - fn get_buffer_as_string(&self, index: usize) -> napi::Result { - let buffer = self.get::(index)?.into_value()?; - - Ok(String::from_utf8_lossy(buffer.as_ref()).to_string()) - } - - fn get_deserialized(&self, index: usize) -> napi::Result - where - T: DeserializeOwned, - { - let buffer = self.get::(index)?.into_value()?; - let mut deserializer = serde_json::Deserializer::from_slice(&buffer); - deserializer.disable_recursion_limit(); - - let v = T::deserialize(&mut deserializer) - .with_context(|| { - format!( - "Failed to deserialize argument at `{}` as {}\nJSON: {}", - index, - type_name::(), - String::from_utf8_lossy(&buffer) - ) - }) - .convert_err()?; - - Ok(v) - } -} - -pub(crate) fn deserialize_json(json: &str) -> Result +pub(crate) fn deserialize_json(json: &str) -> Result where T: DeserializeOwned, { let mut deserializer = serde_json::Deserializer::from_str(&json); deserializer.disable_recursion_limit(); - let val = T::deserialize(&mut deserializer); - - val.with_context(|| { - format!( - "Failed to deserialize {} from json string (`{}`)", - type_name::(), - json - ) - }) + T::deserialize(&mut deserializer) } diff --git a/crates/swc/Cargo.toml b/crates/swc/Cargo.toml index 76ca939fcf6..22e98f9216f 100644 --- a/crates/swc/Cargo.toml +++ b/crates/swc/Cargo.toml @@ -33,6 +33,7 @@ concurrent = [ "swc_ecma_transforms_optimization/concurrent", ] debug = ["swc_ecma_visit/debug"] +node = ["napi", "napi-derive"] plugin = [ "swc_plugin_runner", ] @@ -80,6 +81,18 @@ swc_plugin_runner = {version = "0.22.0", path = "../swc_plugin_runner", optional swc_visit = {version = "0.3.0", path = "../swc_visit"} tracing = "0.1.28" +[dependencies.napi-derive] +default-features = false +features = ["type-def"] +optional = true +version = "2.0.0" + +[dependencies.napi] +default-features = false +features = ["napi3"] +optional = true +version = "2.0.0" + [dev-dependencies] rayon = "1" swc_node_base = {version = "0.5.0", path = "../swc_node_base"} diff --git a/crates/swc/src/lib.rs b/crates/swc/src/lib.rs index 3acf8a76c98..a3cee911290 100644 --- a/crates/swc/src/lib.rs +++ b/crates/swc/src/lib.rs @@ -264,6 +264,16 @@ pub struct Compiler { comments: SwcComments, } +#[cfg(feature = "node")] +#[napi_derive::napi(object)] +#[derive(Debug, Serialize)] +pub struct TransformOutput { + pub code: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub map: Option, +} + +#[cfg(not(feature = "node"))] #[derive(Debug, Serialize)] pub struct TransformOutput { pub code: String, diff --git a/crates/swc_node_base/Cargo.toml b/crates/swc_node_base/Cargo.toml index 5e7d1b6e3c7..6ee32f184cc 100644 --- a/crates/swc_node_base/Cargo.toml +++ b/crates/swc_node_base/Cargo.toml @@ -12,5 +12,5 @@ version = "0.5.1" [dependencies] -[target.'cfg(all(target_arch = "x86_64", not(target_env = "musl")))'.dependencies] -mimalloc-rust = "=0.1.1" +[target.'cfg(not(all(target_os = "linux", target_arch = "aarch64", target_env = "musl")))'.dependencies] +mimalloc-rust = "=0.1.5" diff --git a/crates/swc_node_base/src/lib.rs b/crates/swc_node_base/src/lib.rs index 3c6cc49a37c..ff5c3d2ed83 100644 --- a/crates/swc_node_base/src/lib.rs +++ b/crates/swc_node_base/src/lib.rs @@ -3,9 +3,8 @@ //! The swc crates related to the node binding should depend on this crate. #[cfg(all( - target_arch = "x86_64", - not(target_env = "musl"), - not(debug_assertions) + not(debug_assertions), + not(all(target_os = "linux", target_arch = "aarch64", target_env = "musl")), ))] #[global_allocator] static ALLOC: mimalloc_rust::GlobalMiMalloc = mimalloc_rust::GlobalMiMalloc; diff --git a/node-swc/src/binding.d.ts b/node-swc/src/binding.d.ts new file mode 100644 index 00000000000..c34a6b24cb8 --- /dev/null +++ b/node-swc/src/binding.d.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ + +/* auto-generated by NAPI-RS */ + +export class ExternalObject { + readonly '': { + readonly '': unique symbol + [K: symbol]: T + } +} +export function bundle(confItems: Buffer, signal?: AbortSignal | undefined | null): Promise<{ [index: string]: { code: string, map?: string } }> +export function minify(code: Buffer, opts: Buffer, signal?: AbortSignal | undefined | null): Promise +export function minifySync(code: Buffer, opts: Buffer): TransformOutput +export function parse(src: string, options: Buffer, filename?: string | undefined | null, signal?: AbortSignal | undefined | null): Promise +export function parseSync(src: string, opts: Buffer, filename?: string | undefined | null): string +export function parseFileSync(path: string, opts: Buffer): string +export function parseFile(path: string, options: Buffer, signal?: AbortSignal | undefined | null): Promise +export function print(programJson: string, options: Buffer, signal?: AbortSignal | undefined | null): Promise +export function printSync(program: string, options: Buffer): TransformOutput +export function transform(src: string, isModule: boolean, options: Buffer, signal?: AbortSignal | undefined | null): Promise +export function transformSync(s: string, isModule: boolean, opts: Buffer): TransformOutput +export function transformFile(src: string, isModule: boolean, options: Buffer, signal?: AbortSignal | undefined | null): Promise +export function transformFileSync(s: string, isModule: boolean, opts: Buffer): TransformOutput +/** Hack for `Type Generation` */ +export interface TransformOutput { + code: string + map?: string | undefined | null +} +export class Compiler { + constructor() +} diff --git a/node-swc/src/binding.js b/node-swc/src/binding.js new file mode 100644 index 00000000000..692cad36c3f --- /dev/null +++ b/node-swc/src/binding.js @@ -0,0 +1,228 @@ +const { existsSync, readFileSync } = require('fs') +const { join } = require('path') + +const { platform, arch } = process + +let nativeBinding = null +let localFileExisted = false +let isMusl = false +let loadError = null + +switch (platform) { + case 'android': + if (arch !== 'arm64') { + throw new Error(`Unsupported architecture on Android ${arch}`) + } + localFileExisted = existsSync(join(__dirname, 'swc.android-arm64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./swc.android-arm64.node') + } else { + nativeBinding = require('@swc/core-android-arm64') + } + } catch (e) { + loadError = e + } + break + case 'win32': + switch (arch) { + case 'x64': + localFileExisted = existsSync( + join(__dirname, 'swc.win32-x64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.win32-x64-msvc.node') + } else { + nativeBinding = require('@swc/core-win32-x64-msvc') + } + } catch (e) { + loadError = e + } + break + case 'ia32': + localFileExisted = existsSync( + join(__dirname, 'swc.win32-ia32-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.win32-ia32-msvc.node') + } else { + nativeBinding = require('@swc/core-win32-ia32-msvc') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, 'swc.win32-arm64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.win32-arm64-msvc.node') + } else { + nativeBinding = require('@swc/core-win32-arm64-msvc') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Windows: ${arch}`) + } + break + case 'darwin': + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, 'swc.darwin-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./swc.darwin-x64.node') + } else { + nativeBinding = require('@swc/core-darwin-x64') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, 'swc.darwin-arm64.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.darwin-arm64.node') + } else { + nativeBinding = require('@swc/core-darwin-arm64') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on macOS: ${arch}`) + } + break + case 'freebsd': + if (arch !== 'x64') { + throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) + } + localFileExisted = existsSync(join(__dirname, 'swc.freebsd-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./swc.freebsd-x64.node') + } else { + nativeBinding = require('@swc/core-freebsd-x64') + } + } catch (e) { + loadError = e + } + break + case 'linux': + switch (arch) { + case 'x64': + isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') + if (isMusl) { + localFileExisted = existsSync( + join(__dirname, 'swc.linux-x64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.linux-x64-musl.node') + } else { + nativeBinding = require('@swc/core-linux-x64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'swc.linux-x64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.linux-x64-gnu.node') + } else { + nativeBinding = require('@swc/core-linux-x64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm64': + isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') + if (isMusl) { + localFileExisted = existsSync( + join(__dirname, 'swc.linux-arm64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.linux-arm64-musl.node') + } else { + nativeBinding = require('@swc/core-linux-arm64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'swc.linux-arm64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.linux-arm64-gnu.node') + } else { + nativeBinding = require('@swc/core-linux-arm64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm': + localFileExisted = existsSync( + join(__dirname, 'swc.linux-arm-gnueabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./swc.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('@swc/core-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Linux: ${arch}`) + } + break + default: + throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) +} + +if (!nativeBinding) { + if (loadError) { + throw loadError + } + throw new Error(`Failed to load native binding`) +} + +const { bundle, minify, minifySync, parse, parseSync, parseFileSync, parseFile, print, printSync, transform, transformSync, transformFile, transformFileSync, Compiler } = nativeBinding + +module.exports.bundle = bundle +module.exports.minify = minify +module.exports.minifySync = minifySync +module.exports.parse = parse +module.exports.parseSync = parseSync +module.exports.parseFileSync = parseFileSync +module.exports.parseFile = parseFile +module.exports.print = print +module.exports.printSync = printSync +module.exports.transform = transform +module.exports.transformSync = transformSync +module.exports.transformFile = transformFile +module.exports.transformFileSync = transformFileSync +module.exports.Compiler = Compiler diff --git a/node-swc/src/index.ts b/node-swc/src/index.ts index 7f0c5251c6e..c019e037998 100644 --- a/node-swc/src/index.ts +++ b/node-swc/src/index.ts @@ -11,11 +11,10 @@ import { } from "./types"; export * from "./types"; import { BundleInput, compileBundleOptions } from "./spack"; -import { loadBinding } from "@node-rs/helper"; // Allow overrides to the location of the .node binding file const bindingsOverride = process.env["SWC_BINARY_PATH"]; -const bindings = !!bindingsOverride ? require(resolve(bindingsOverride)) : loadBinding(__dirname, "swc", "@swc/core"); +const bindings = !!bindingsOverride ? require(resolve(bindingsOverride)) : require('./binding'); /** * Version of the swc binding. diff --git a/package.json b/package.json index b752f72d56d..fad4ac56c37 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,8 @@ "aarch64-apple-darwin", "aarch64-linux-android", "aarch64-unknown-linux-musl", - "aarch64-pc-windows-msvc" + "aarch64-pc-windows-msvc", + "armv7-linux-androideabi" ] } }, @@ -56,8 +57,8 @@ "prepare": "husky install && git config feature.manyFiles true", "artifacts": "napi artifacts --dist scripts/npm", "prepublishOnly": "tsc -d && napi prepublish -p scripts/npm --tagstyle npm", - "build": "tsc -d && napi build --platform --release --cargo-name node --cargo-flags=\"-p node\"", - "build:dev": "tsc -d && napi build --platform --cargo-name node --cargo-flags=\"-p node\"", + "build": "napi build --platform --cargo-name node --js ./node-swc/src/binding.js --dts ./node-swc/src/binding.d.ts -p node --release && tsc -d", + "build:dev": "napi build --platform --cargo-name node --js ./node-swc/src/binding.js --dts ./node-swc/src/binding.d.ts -p node && tsc -d", "build:ts": "tsc -d", "test": "cross-env NODE_OPTIONS='--experimental-vm-modules' jest node-swc/__tests__", "version": "napi version -p scripts/npm" @@ -72,7 +73,7 @@ "@babel/preset-react": "^7.13.13", "@babel/preset-typescript": "^7.13.0", "@babel/types": "^7.14.0", - "@napi-rs/cli": "^1.0.4", + "@napi-rs/cli": "^2.0.0", "@swc/helpers": "^0.2.10", "@types/jest": "^26.0.23", "@types/node": "^14.14.41", @@ -99,7 +100,7 @@ "source-map-support": "^0.5.19", "sourcemap-validator": "^2.1.0", "terser": "^5.7.1", - "typescript": "^4.2.0-beta" + "typescript": "^4.5.2" }, "funding": { "type": "opencollective", diff --git a/scripts/npm/android-arm-eabi/README.md b/scripts/npm/android-arm-eabi/README.md new file mode 100644 index 00000000000..4b907d9ebce --- /dev/null +++ b/scripts/npm/android-arm-eabi/README.md @@ -0,0 +1,3 @@ +# `@swc/core-android-arm-eabi` + +This is the **armv7-linux-androideabi** binary for `@swc/core` diff --git a/scripts/npm/android-arm-eabi/package.json b/scripts/npm/android-arm-eabi/package.json new file mode 100644 index 00000000000..793fb69f2e5 --- /dev/null +++ b/scripts/npm/android-arm-eabi/package.json @@ -0,0 +1,42 @@ +{ + "name": "@swc/core-android-arm-eabi", + "version": "1.2.122", + "os": [ + "android" + ], + "cpu": [ + "arm" + ], + "main": "swc.android-arm-eabi.node", + "files": [ + "swc.android-arm-eabi.node", + "swc" + ], + "description": "Super-fast alternative for babel", + "keywords": [ + "swc", + "swcpack", + "babel", + "typescript", + "rust", + "webpack", + "tsc" + ], + "author": "강동윤 ", + "homepage": "https://swc.rs", + "license": "Apache-2.0 AND MIT", + "engines": { + "node": ">=10" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/swc-project/swc.git" + }, + "bugs": { + "url": "https://github.com/swc-project/swc/issues" + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 13856c72d26..662fcd6857b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "target": "es2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ + "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ "declaration": true /* Generates corresponding '.d.ts' file. */, diff --git a/yarn.lock b/yarn.lock index dfe94d26827..7b0c5cd774c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1420,21 +1420,10 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@napi-rs/cli@^1.0.4": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@napi-rs/cli/-/cli-1.1.0.tgz#ca58a0ff18a0af133f009773282846fb4509f9d1" - integrity sha512-eGOOybqsuABoeocHron/R8cA4A1JJeLlt8dBsmyIbdXduEs0SPr+caLX5avdz8D4xG9tYfxj0k8fN/PAletLPA== - dependencies: - "@octokit/rest" "^18.5.6" - chalk "^4.1.1" - clipanion "^2.6.2" - debug "^4.3.1" - fdir "^5.1.0" - inquirer "^8.1.0" - lodash "^4.17.21" - putasset "^5.0.3" - toml "^3.0.0" - tslib "^2.2.0" +"@napi-rs/cli@^2.0.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.2.0.tgz#0129406192c2dfff6e8fc3de0c8be1d2ec286e3f" + integrity sha512-lXOKq0EZWztzHIlpXhKG0Nrv/PDZAl/yBsqQTG0aDfdjGCJudtPgWLR7zzaJoYzkkdFJo0r+teYYzgC+cXB4KQ== "@napi-rs/triples@^1.0.3": version "1.0.3" @@ -1448,151 +1437,6 @@ dependencies: "@napi-rs/triples" "^1.0.3" -"@octokit/auth-token@^2.4.0", "@octokit/auth-token@^2.4.4": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" - integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== - dependencies: - "@octokit/types" "^6.0.3" - -"@octokit/core@^2.4.3": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-2.5.4.tgz#f7fbf8e4f86c5cc2497a8887ba2561ec8d358054" - integrity sha512-HCp8yKQfTITYK+Nd09MHzAlP1v3Ii/oCohv0/TW9rhSLvzb98BOVs2QmVYuloE6a3l6LsfyGIwb6Pc4ycgWlIQ== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/graphql" "^4.3.1" - "@octokit/request" "^5.4.0" - "@octokit/types" "^5.0.0" - before-after-hook "^2.1.0" - universal-user-agent "^5.0.0" - -"@octokit/core@^3.5.0": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" - integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.0" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.3.1", "@octokit/graphql@^4.5.8": - version "4.6.4" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.4.tgz#0c3f5bed440822182e972317122acb65d311a5ed" - integrity sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg== - dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^9.2.0": - version "9.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-9.2.0.tgz#46bbfe6a85bfd2987e69216955fcd04df7d025bb" - integrity sha512-c4A1Xm0At+ypvBfEETREu519wLncJYQXvY+dBGg/V5YA51eg5EwdDsPPfcOMG0cuXscqRvsIgIySTmTJUdcTNA== - -"@octokit/plugin-paginate-rest@^2.2.0", "@octokit/plugin-paginate-rest@^2.6.2": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.14.0.tgz#f469cb4a908792fb44679c5973d8bba820c88b0f" - integrity sha512-S2uEu2uHeI7Vf+Lvj8tv3O5/5TCAa8GHS0dUQN7gdM7vKA6ZHAbR6HkAVm5yMb1mbedLEbxOuQ+Fa0SQ7tCDLA== - dependencies: - "@octokit/types" "^6.18.0" - -"@octokit/plugin-request-log@^1.0.0", "@octokit/plugin-request-log@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-3.17.0.tgz#d8ba04eb883849dd98666c55bf49d8c9fe7be055" - integrity sha512-NFV3vq7GgoO2TrkyBRUOwflkfTYkFKS0tLAPym7RNpkwLCttqShaEGjthOsPEEL+7LFcYv3mU24+F2yVd3npmg== - dependencies: - "@octokit/types" "^4.1.6" - deprecation "^2.3.1" - -"@octokit/plugin-rest-endpoint-methods@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.5.2.tgz#c8bdb3065a9725e30802295f10a31b3ff434830c" - integrity sha512-1ArooY7AYQdUd2zyqWLFHQ6gver9PvZSiuM+EPAsDplv1Y6u8zHl6yZ7yGIgaf7xvWupwUkJS2WttGYyb1P0DQ== - dependencies: - "@octokit/types" "^6.22.0" - deprecation "^2.3.1" - -"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== - dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.4.0", "@octokit/request@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" - integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.1" - universal-user-agent "^6.0.0" - -"@octokit/rest@^17.1.3": - version "17.11.2" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-17.11.2.tgz#f3dbd46f9f06361c646230fd0ef8598e59183ead" - integrity sha512-4jTmn8WossTUaLfNDfXk4fVJgbz5JgZE8eCs4BvIb52lvIH8rpVMD1fgRCrHbSd6LRPE5JFZSfAEtszrOq3ZFQ== - dependencies: - "@octokit/core" "^2.4.3" - "@octokit/plugin-paginate-rest" "^2.2.0" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "3.17.0" - -"@octokit/rest@^18.5.6": - version "18.7.2" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.7.2.tgz#8239b5acd40fccb3f5d074e7a4386980f3770821" - integrity sha512-TAedgLqNRS+rdGqS9v00sqBeS6IgyLSoqqCDu6pmoadAB7xSjFHShxzaXUAbxxJjyHtb7mencRGzgH4W/V6Myg== - dependencies: - "@octokit/core" "^3.5.0" - "@octokit/plugin-paginate-rest" "^2.6.2" - "@octokit/plugin-request-log" "^1.0.2" - "@octokit/plugin-rest-endpoint-methods" "5.5.2" - -"@octokit/types@^4.1.6": - version "4.1.10" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-4.1.10.tgz#e4029c11e2cc1335051775bc1600e7e740e4aca4" - integrity sha512-/wbFy1cUIE5eICcg0wTKGXMlKSbaAxEr00qaBXzscLXpqhcwgXeS6P8O0pkysBhRfyjkKjJaYrvR1ExMO5eOXQ== - dependencies: - "@types/node" ">= 8" - -"@octokit/types@^5.0.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" - integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== - dependencies: - "@types/node" ">= 8" - -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.18.0", "@octokit/types@^6.22.0": - version "6.22.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.22.0.tgz#389bade20955c919241b6ffb9dd33f6e0cf1cc6c" - integrity sha512-Y8GR0BJHQDpO09qw/ZQpN+DXrFzCWaE0pvK4frDm3zJ+h99AktsFfBoDazbCtHxiL8d0jD8xRH4BeynlKLeChg== - dependencies: - "@octokit/openapi-types" "^9.2.0" - "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -1684,7 +1528,7 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/node@*", "@types/node@>= 8": +"@types/node@*": version "16.4.10" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.10.tgz#e57e2a54fc6da58da94b3571b1cb456d39f88597" integrity sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ== @@ -1968,16 +1812,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -before-after-hook@^2.1.0, before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== - benchmark@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" @@ -1991,15 +1825,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2048,14 +1873,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -2069,7 +1886,7 @@ callsites@^3.0.0, callsites@^3.1.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -2098,7 +1915,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2111,16 +1928,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -checkup@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/checkup/-/checkup-1.3.0.tgz#d3800276fea5d0f247ffc951be78c8b02f8e0d76" - integrity sha1-04ACdv6l0PJH/8lRvnjIsC+ODXY= - chokidar@3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" @@ -2163,28 +1970,6 @@ clear-module@^4.1.1: parent-module "^2.0.0" resolve-from "^5.0.0" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clipanion@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/clipanion/-/clipanion-2.6.2.tgz#820e7440812052442455b248f927b187ed732f71" - integrity sha512-0tOHJNMF9+4R3qcbBL+4IxLErpaYSYvzs10aXuECDbZdJOuJHdagJMAqvLdeaUQTI/o2uSCDRpet6ywDiKOAYw== - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -2194,11 +1979,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2326,17 +2106,6 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.1, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2447,18 +2216,13 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@4, debug@4.3.2, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@4, debug@4.3.2, debug@^4.1.0, debug@^4.1.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" @@ -2484,13 +2248,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -2503,11 +2260,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -2562,13 +2314,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2623,19 +2368,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2680,15 +2412,6 @@ expect@^27.4.2: jest-message-util "^27.4.2" jest-regex-util "^27.4.0" -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2706,18 +2429,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fdir@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-5.1.0.tgz#973e4934e6a3666b59ebdfc56f60bb8e9b16acb8" - integrity sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q== - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -2838,13 +2549,6 @@ get-stdin@^8.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -2979,18 +2683,13 @@ husky@^7.0.2: resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3020,7 +2719,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3030,26 +2729,6 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^8.1.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d" - integrity sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.3.0" - run-async "^2.4.0" - rxjs "^7.2.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -3098,11 +2777,6 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -3118,21 +2792,11 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -3145,7 +2809,7 @@ is-typedarray@^1.0.0: is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isexe@^2.0.0: @@ -3663,11 +3327,6 @@ jest@^27.0.1: import-local "^3.0.2" jest-cli "^27.0.6" -jju@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3834,7 +3493,7 @@ lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0, log-symbols@^4.1.0: +log-symbols@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -3856,11 +3515,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -macos-release@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" - integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g== - make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -3893,7 +3547,7 @@ mime-db@1.49.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== -mime-types@^2.1.12, mime-types@^2.1.21: +mime-types@^2.1.12: version "2.1.32" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== @@ -3957,11 +3611,6 @@ ms@2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nanoid@3.1.25: version "3.1.25" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" @@ -3972,16 +3621,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -4002,13 +3641,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -4041,14 +3673,14 @@ object.assign@^4.1.0: has-symbols "^1.0.1" object-keys "^1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -4067,44 +3699,11 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -4177,11 +3776,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -4283,32 +3877,11 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -putasset@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/putasset/-/putasset-5.0.3.tgz#2fa82a8fc5e2333869df8ffb0e1f8618b1c87b9b" - integrity sha512-LGRp0SLOC4PDP/BawMaG3/hw6iKgQPRXcBF7WIzx2XTYwHVk2sS3gpvZqz6bf9GhKMal2phs+DF7J6eIAXEL4w== - dependencies: - "@octokit/rest" "^17.1.3" - checkup "^1.3.0" - mime-types "^2.1.21" - readjson "^2.0.1" - try-catch "^3.0.0" - try-to-catch "^3.0.0" - yargs-parser "^18.1.1" - randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4334,15 +3907,6 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -4350,14 +3914,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -readjson@^2.0.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readjson/-/readjson-2.2.2.tgz#ed940ebdd72b88b383e02db7117402f980158959" - integrity sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw== - dependencies: - jju "^1.4.0" - try-catch "^3.0.0" - reflect-metadata@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" @@ -4453,14 +4009,6 @@ resolve@^1.14.2, resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -4468,19 +4016,7 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" - integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== - dependencies: - tslib "~2.1.0" - -safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -4507,11 +4043,6 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -4531,13 +4062,6 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4545,17 +4069,12 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -4647,13 +4166,6 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -4673,11 +4185,6 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -4753,18 +4260,6 @@ throat@^6.0.1: resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -4782,11 +4277,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -4803,26 +4293,6 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -try-catch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/try-catch/-/try-catch-3.0.0.tgz#7996d8b89895e2e8ae62cbdbeb4fe17470f8131b" - integrity sha512-3uAqUnoemzca1ENvZ72EVimR+E8lqBbzwZ9v4CEbLjkaV3Q+FtdmPUt7jRtoSoTiYjyIMxEkf6YgUpe/voJ1ng== - -try-to-catch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/try-to-catch/-/try-to-catch-3.0.0.tgz#a1903b44d13d5124c54d14a461d22ec1f52ea14b" - integrity sha512-eIm6ZXwR35jVF8By/HdbbkcaCDTBI5PpCPkejRKrYp0jyf/DbCCcRhHD7/O9jtFI3ewsqo9WctFEiJTS6i+CQA== - -tslib@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== - -tslib@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -4847,10 +4317,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.2.0-beta: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@^4.5.2: + version "4.5.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" + integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -4882,18 +4352,6 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -universal-user-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" - integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== - dependencies: - os-name "^3.1.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -4904,11 +4362,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - v8-to-istanbul@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c" @@ -4949,13 +4402,6 @@ walker@^1.0.7: dependencies: makeerror "1.0.x" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -4994,20 +4440,6 @@ which@2.0.2, which@^2.0.1: dependencies: isexe "^2.0.0" -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -windows-release@^3.1.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999" - integrity sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg== - dependencies: - execa "^1.0.0" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -5082,14 +4514,6 @@ yargs-parser@20.2.4: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^18.1.1: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"