diff --git a/bench/.env b/bench/.env new file mode 100644 index 0000000000..862e34733d --- /dev/null +++ b/bench/.env @@ -0,0 +1,3 @@ +BUN=bun +DENO=deno +NODE=node \ No newline at end of file diff --git a/bench/.gitignore b/bench/.gitignore new file mode 100644 index 0000000000..174b4ee4f2 --- /dev/null +++ b/bench/.gitignore @@ -0,0 +1,2 @@ +ffi/src/target +ffi/src/*.node \ No newline at end of file diff --git a/bench/README.md b/bench/README.md new file mode 100644 index 0000000000..3539930c38 --- /dev/null +++ b/bench/README.md @@ -0,0 +1,12 @@ +```bash +npm install + +bun run ffi +bun run gzip +bun run async +bun run sqlite + +# to use custom version of bun/deno/node binary +BUN=path/to/bun bun run ffi +# or edit .env file +``` diff --git a/bench/async/.env b/bench/async/.env new file mode 100644 index 0000000000..862e34733d --- /dev/null +++ b/bench/async/.env @@ -0,0 +1,3 @@ +BUN=bun +DENO=deno +NODE=node \ No newline at end of file diff --git a/bench/async-overhead.mjs b/bench/async/bun.js similarity index 61% rename from bench/async-overhead.mjs rename to bench/async/bun.js index 1fe94f15b5..51d0d119bb 100644 --- a/bench/async-overhead.mjs +++ b/bench/async/bun.js @@ -1,7 +1,7 @@ import { run, bench } from "mitata"; -bench("async", async () => 1); +bench("sync", () => {}); +bench("async", async () => {}); bench("await 1", async () => await 1); -bench("noop", () => {}); await run(); diff --git a/bench/async/deno.js b/bench/async/deno.js new file mode 100644 index 0000000000..9e4347b539 --- /dev/null +++ b/bench/async/deno.js @@ -0,0 +1,7 @@ +import { run, bench } from "../node_modules/mitata/src/cli.mjs"; + +bench("sync", () => {}); +bench("async", async () => {}); +bench("await 1", async () => await 1); + +await run(); diff --git a/bench/async/node.mjs b/bench/async/node.mjs new file mode 100644 index 0000000000..51d0d119bb --- /dev/null +++ b/bench/async/node.mjs @@ -0,0 +1,7 @@ +import { run, bench } from "mitata"; + +bench("sync", () => {}); +bench("async", async () => {}); +bench("await 1", async () => await 1); + +await run(); diff --git a/bench/async/package.json b/bench/async/package.json new file mode 100644 index 0000000000..f5c377686b --- /dev/null +++ b/bench/async/package.json @@ -0,0 +1,11 @@ +{ + "name": "bench", + "scripts": { + "deps": "exit 0", + "build": "exit 0", + "bench:bun": "$BUN bun.js", + "bench:node": "$NODE node.mjs", + "bench:deno": "$DENO run -A --unstable deno.js", + "bench": "bun run bench:bun && bun run bench:node && bun run bench:deno" + } +} diff --git a/bench/cat.bun.js b/bench/cat/bun.js similarity index 100% rename from bench/cat.bun.js rename to bench/cat/bun.js diff --git a/bench/cat.mjs b/bench/cat/cat.mjs similarity index 55% rename from bench/cat.mjs rename to bench/cat/cat.mjs index ca6dfe8380..fc87198291 100644 --- a/bench/cat.mjs +++ b/bench/cat/cat.mjs @@ -1,6 +1,12 @@ // works in both bun & node import { readFileSync } from "node:fs"; const count = parseInt(process.env.ITERATIONS || "1", 10) || 1; + const arg = process.argv.slice(1); + +// TODO: remove Buffer.from() when readFileSync() returns Buffer + for (let i = 0; i < count; i++) - console.log(arg.map((file) => readFileSync(file, "utf8")).join("")); + console.log( + arg.map((file) => Buffer.from(readFileSync(file, "utf8"))).join("") + ); diff --git a/bench/cat.node.js b/bench/cat/node.js similarity index 98% rename from bench/cat.node.js rename to bench/cat/node.js index d38d7c5372..09fcee4d63 100644 --- a/bench/cat.node.js +++ b/bench/cat/node.js @@ -1,4 +1,6 @@ -const path = require("path"); const fs = require("fs"); +const path = require("path"); + const input = path.resolve(process.argv[process.argv.length - 1]); + fs.createReadStream(input).pipe(process.stdout); diff --git a/bench/copy.bun.js b/bench/copyfile/bun.js similarity index 99% rename from bench/copy.bun.js rename to bench/copyfile/bun.js index 20269212a2..7e5e2c9b13 100644 --- a/bench/copy.bun.js +++ b/bench/copyfile/bun.js @@ -1,4 +1,5 @@ import path from "path"; const input = path.resolve(process.argv[process.argv.length - 2]); const output = path.resolve(process.argv[process.argv.length - 1]); + await Bun.write(Bun.file(output), Bun.file(input)); diff --git a/bench/copyfile/node-streams.js b/bench/copyfile/node-streams.js new file mode 100644 index 0000000000..835769cdfc --- /dev/null +++ b/bench/copyfile/node-streams.js @@ -0,0 +1,4 @@ +import { createReadStream, createWriteStream } from "node:fs"; + +const arg = process.argv.slice(2); +createReadStream(arg[0]).pipe(createWriteStream(arg[1])); diff --git a/bench/copyfile.mjs b/bench/copyfile/node.mjs similarity index 98% rename from bench/copyfile.mjs rename to bench/copyfile/node.mjs index 9db9faefeb..6769eff0c9 100644 --- a/bench/copyfile.mjs +++ b/bench/copyfile/node.mjs @@ -1,3 +1,5 @@ import { copyFileSync } from "node:fs"; + const arg = process.argv.slice(2); + copyFileSync(arg[0], arg[1]); diff --git a/bench/ffi/.env b/bench/ffi/.env new file mode 100644 index 0000000000..862e34733d --- /dev/null +++ b/bench/ffi/.env @@ -0,0 +1,3 @@ +BUN=bun +DENO=deno +NODE=node \ No newline at end of file diff --git a/bench/ffi/bun.js b/bench/ffi/bun.js new file mode 100644 index 0000000000..ccf81f366f --- /dev/null +++ b/bench/ffi/bun.js @@ -0,0 +1,33 @@ +import { run, bench, group } from "mitata"; +import { ptr, dlopen, CString } from "bun:ffi"; +const { napiNoop, napiHash, napiString } = require("./src/ffi_napi_bench.node"); + +const { + symbols: { + ffi_noop: { native: ffi_noop }, + ffi_hash: { native: ffi_hash }, + ffi_string: { native: ffi_string }, + }, +} = dlopen("./src/ffi_napi_bench.node", { + ffi_noop: { args: [], returns: "void" }, + ffi_string: { args: [], returns: "ptr" }, + ffi_hash: { args: ["ptr", "usize"], returns: "u32" }, +}); + +const bytes = new Uint8Array(64); + +group("bun:ffi", () => { + bench("noop", () => ffi_noop()); + bench("hash", () => ffi_hash(ptr(bytes), bytes.byteLength)); + + bench("c string", () => new CString(ffi_string())); +}); + +group("bun:napi", () => { + bench("noop", () => napiNoop()); + bench("hash", () => napiHash(bytes)); + + bench("string", () => napiString()); +}); + +await run(); diff --git a/bench/ffi/deno.js b/bench/ffi/deno.js new file mode 100644 index 0000000000..ee6206108d --- /dev/null +++ b/bench/ffi/deno.js @@ -0,0 +1,27 @@ +import { run, bench, group } from "../node_modules/mitata/src/cli.mjs"; + +const extension = "darwin" !== Deno.build.os ? "so" : "dylib"; +const path = new URL( + "src/target/release/libffi_napi_bench." + extension, + import.meta.url +).pathname; + +const { + symbols: { ffi_noop, ffi_hash, ffi_string }, +} = Deno.dlopen(path, { + ffi_noop: { parameters: [], result: "void" }, + ffi_string: { parameters: [], result: "pointer" }, + ffi_hash: { parameters: ["pointer", "usize"], result: "u32" }, +}); + +const bytes = new Uint8Array(64); + +group("deno:ffi", () => { + bench("noop", () => ffi_noop()); + bench("hash", () => ffi_hash(bytes, bytes.byteLength)); + bench("c string", () => + new Deno.UnsafePointerView(ffi_string()).getCString() + ); +}); + +await run(); diff --git a/bench/ffi/ffi-data-overhead.js b/bench/ffi/ffi-data-overhead.js deleted file mode 100644 index 3bc2884f4a..0000000000 --- a/bench/ffi/ffi-data-overhead.js +++ /dev/null @@ -1,33 +0,0 @@ -import { - viewSource, - dlopen, - CString, - ptr, - toBuffer, - toArrayBuffer, - FFIType, - callback, -} from "bun:ffi"; - -import { bench, group, run } from "mitata"; - -var buffer = new Uint8Array(32); -var bufferPtr = ptr(buffer); -var arrayBuffer = new ArrayBuffer(32); -bench("ptr(Uint8Array)", () => { - return ptr(buffer); -}); - -bench("ptr(ArrayBuffer)", () => { - return ptr(arrayBuffer); -}); - -bench("toBuffer(ptr)", () => { - return toBuffer(bufferPtr, 32); -}); - -bench("toArrayBuffer(ptr)", () => { - return toArrayBuffer(bufferPtr, 32); -}); - -await run(); diff --git a/bench/ffi/ffi-overhead.js b/bench/ffi/ffi-overhead.js deleted file mode 100644 index 4f63cebe5d..0000000000 --- a/bench/ffi/ffi-overhead.js +++ /dev/null @@ -1,419 +0,0 @@ -import { - viewSource, - dlopen, - CString, - ptr, - toBuffer, - toArrayBuffer, - FFIType, - callback, -} from "bun:ffi"; -import { bench, group, run } from "mitata"; - -const types = { - returns_true: { - returns: "bool", - args: [], - }, - returns_false: { - returns: "bool", - args: [], - }, - returns_42_char: { - returns: "char", - args: [], - }, - // returns_42_float: { - // returns: "float", - // args: [], - // }, - // returns_42_double: { - // returns: "double", - // args: [], - // }, - returns_42_uint8_t: { - returns: "uint8_t", - args: [], - }, - returns_neg_42_int8_t: { - returns: "int8_t", - args: [], - }, - returns_42_uint16_t: { - returns: "uint16_t", - args: [], - }, - returns_42_uint32_t: { - returns: "uint32_t", - args: [], - }, - // // returns_42_uint64_t: { - // // returns: "uint64_t", - // // args: [], - // // }, - returns_neg_42_int16_t: { - returns: "int16_t", - args: [], - }, - returns_neg_42_int32_t: { - returns: "int32_t", - args: [], - }, - // returns_neg_42_int64_t: { - // returns: "int64_t", - // args: [], - // }, - - identity_char: { - returns: "char", - args: ["char"], - }, - // identity_float: { - // returns: "float", - // args: ["float"], - // }, - identity_bool: { - returns: "bool", - args: ["bool"], - }, - // identity_double: { - // returns: "double", - // args: ["double"], - // }, - identity_int8_t: { - returns: "int8_t", - args: ["int8_t"], - }, - identity_int16_t: { - returns: "int16_t", - args: ["int16_t"], - }, - identity_int32_t: { - returns: "int32_t", - args: ["int32_t"], - }, - // identity_int64_t: { - // returns: "int64_t", - // args: ["int64_t"], - // }, - identity_uint8_t: { - returns: "uint8_t", - args: ["uint8_t"], - }, - identity_uint16_t: { - returns: "uint16_t", - args: ["uint16_t"], - }, - identity_uint32_t: { - returns: "uint32_t", - args: ["uint32_t"], - }, - // identity_uint64_t: { - // returns: "uint64_t", - // args: ["uint64_t"], - // }, - - add_char: { - returns: "char", - args: ["char", "char"], - }, - add_float: { - returns: "float", - args: ["float", "float"], - }, - add_double: { - returns: "double", - args: ["double", "double"], - }, - add_int8_t: { - returns: "int8_t", - args: ["int8_t", "int8_t"], - }, - add_int16_t: { - returns: "int16_t", - args: ["int16_t", "int16_t"], - }, - add_int32_t: { - returns: "int32_t", - args: ["int32_t", "int32_t"], - }, - // add_int64_t: { - // returns: "int64_t", - // args: ["int64_t", "int64_t"], - // }, - add_uint8_t: { - returns: "uint8_t", - args: ["uint8_t", "uint8_t"], - }, - add_uint16_t: { - returns: "uint16_t", - args: ["uint16_t", "uint16_t"], - }, - add_uint32_t: { - returns: "uint32_t", - args: ["uint32_t", "uint32_t"], - }, - - does_pointer_equal_42_as_int32_t: { - returns: "bool", - args: ["ptr"], - }, - - ptr_should_point_to_42_as_int32_t: { - returns: "ptr", - args: [], - }, - identity_ptr: { - returns: "ptr", - args: ["ptr"], - }, - // add_uint64_t: { - // returns: "uint64_t", - // args: ["uint64_t", "uint64_t"], - // }, - - cb_identity_true: { - returns: "bool", - args: ["ptr"], - }, - cb_identity_false: { - returns: "bool", - args: ["ptr"], - }, - cb_identity_42_char: { - returns: "char", - args: ["ptr"], - }, - // cb_identity_42_float: { - // returns: "float", - // args: ["ptr"], - // }, - // cb_identity_42_double: { - // returns: "double", - // args: ["ptr"], - // }, - cb_identity_42_uint8_t: { - returns: "uint8_t", - args: ["ptr"], - }, - cb_identity_neg_42_int8_t: { - returns: "int8_t", - args: ["ptr"], - }, - cb_identity_42_uint16_t: { - returns: "uint16_t", - args: ["ptr"], - }, - cb_identity_42_uint32_t: { - returns: "uint32_t", - args: ["ptr"], - }, - // cb_identity_42_uint64_t: { - // returns: "uint64_t", - // args: ["ptr"], - // }, - cb_identity_neg_42_int16_t: { - returns: "int16_t", - args: ["ptr"], - }, - cb_identity_neg_42_int32_t: { - returns: "int32_t", - args: ["ptr"], - }, - // cb_identity_neg_42_int64_t: { - // returns: "int64_t", - // args: ["ptr"], - // }, - - return_a_function_ptr_to_function_that_returns_true: { - returns: "ptr", - args: [], - }, -}; - -const { - symbols: { - returns_true, - returns_false, - return_a_function_ptr_to_function_that_returns_true, - returns_42_char, - returns_42_float, - returns_42_double, - returns_42_uint8_t, - returns_neg_42_int8_t, - returns_42_uint16_t, - returns_42_uint32_t, - returns_42_uint64_t, - returns_neg_42_int16_t, - returns_neg_42_int32_t, - returns_neg_42_int64_t, - identity_char, - identity_float, - identity_bool, - identity_double, - identity_int8_t, - identity_int16_t, - identity_int32_t, - identity_int64_t, - identity_uint8_t, - identity_uint16_t, - identity_uint32_t, - identity_uint64_t, - add_char, - add_float, - add_double, - add_int8_t, - add_int16_t, - add_int32_t, - add_int64_t, - add_uint8_t, - add_uint16_t, - identity_ptr, - add_uint32_t, - add_uint64_t, - does_pointer_equal_42_as_int32_t, - ptr_should_point_to_42_as_int32_t, - cb_identity_true, - cb_identity_false, - cb_identity_42_char, - cb_identity_42_float, - cb_identity_42_double, - cb_identity_42_uint8_t, - cb_identity_neg_42_int8_t, - cb_identity_42_uint16_t, - cb_identity_42_uint32_t, - cb_identity_42_uint64_t, - cb_identity_neg_42_int16_t, - cb_identity_neg_42_int32_t, - cb_identity_neg_42_int64_t, - }, - close, -} = dlopen("/tmp/bun-ffi-test.dylib", types); - -group("add_char", () => { - bench("add_char (raw)", () => raw_add_char(1, 1)); - bench("add_char", () => add_char(1, 1)); -}); -group("add_int16_t", () => { - bench("add_int16_t (raw)", () => raw_add_int16_t(1, 1)); - bench("add_int16_t", () => add_int16_t(1, 1)); -}); -group("add_int32_t", () => { - bench("add_int32_t (raw)", () => raw_add_int32_t(1, 1)); - bench("add_int32_t", () => add_int32_t(1, 1)); -}); -group("add_int8_t", () => { - bench("add_int8_t (raw)", () => raw_add_int8_t(1, 1)); - bench("add_int8_t", () => add_int8_t(1, 1)); -}); -group("add_uint16_t", () => { - bench("add_uint16_t (raw)", () => raw_add_uint16_t(1, 1)); - bench("add_uint16_t", () => add_uint16_t(1, 1)); -}); -group("add_uint32_t", () => { - bench("add_uint32_t (raw)", () => raw_add_uint32_t(1, 1)); - bench("add_uint32_t", () => add_uint32_t(1, 1)); -}); -group("add_uint8_t", () => { - bench("add_uint8_t (raw)", () => raw_add_uint8_t(1, 1)); - bench("add_uint8_t", () => add_uint8_t(1, 1)); -}); -group("identity_bool", () => { - bench("identity_bool (raw)", () => raw_identity_bool(false)); - bench("identity_bool", () => identity_bool(true)); -}); -group("identity_char", () => { - bench("identity_char (raw)", () => raw_identity_char(10)); - bench("identity_char", () => identity_char(10)); -}); -group("identity_int16_t", () => { - bench("identity_int16_t (raw)", () => raw_identity_int16_t(10)); - bench("identity_int16_t", () => identity_int16_t(10)); -}); -group("identity_int32_t", () => { - bench("identity_int32_t (raw)", () => raw_identity_int32_t(10)); - bench("identity_int32_t", () => identity_int32_t(10)); -}); -group("identity_int8_t", () => { - bench("identity_int8_t (raw)", () => raw_identity_int8_t(10)); - bench("identity_int8_t", () => identity_int8_t(10)); -}); -group("identity_uint16_t", () => { - bench("identity_uint16_t (raw)", () => raw_identity_uint16_t(10)); - bench("identity_uint16_t", () => identity_uint16_t(10)); -}); -group("identity_uint32_t", () => { - bench("identity_uint32_t (raw)", () => raw_identity_uint32_t(10)); - bench("identity_uint32_t", () => identity_uint32_t(10)); -}); -group("identity_uint8_t", () => { - bench("identity_uint8_t (raw)", () => raw_identity_uint8_t(10)); - bench("identity_uint8_t", () => identity_uint8_t(10)); -}); -group("returns_42_char", () => { - bench("returns_42_char (raw)", () => raw_returns_42_char()); - bench("returns_42_char", () => returns_42_char()); -}); -group("returns_42_uint16_t", () => { - bench("returns_42_uint16_t (raw)", () => raw_returns_42_uint16_t()); - bench("returns_42_uint16_t", () => returns_42_uint16_t()); -}); -group("returns_42_uint32_t", () => { - bench("returns_42_uint32_t (raw)", () => raw_returns_42_uint32_t()); - bench("returns_42_uint32_t", () => returns_42_uint32_t()); -}); -group("returns_42_uint8_t", () => { - bench("returns_42_uint8_t (raw)", () => raw_returns_42_uint8_t()); - bench("returns_42_uint8_t", () => returns_42_uint8_t()); -}); -group("returns_false", () => { - bench("returns_false (raw)", () => raw_returns_false()); - bench("returns_false", () => returns_false()); -}); -group("returns_neg_42_int16_t", () => { - bench("returns_neg_42_int16_t (raw)", () => raw_returns_neg_42_int16_t()); - bench("returns_neg_42_int16_t", () => returns_neg_42_int16_t()); -}); -group("returns_neg_42_int32_t", () => { - bench("returns_neg_42_int32_t (raw)", () => raw_returns_neg_42_int32_t()); - bench("returns_neg_42_int32_t", () => returns_neg_42_int32_t()); -}); -group("returns_neg_42_int8_t", () => { - bench("returns_neg_42_int8_t (raw)", () => raw_returns_neg_42_int8_t()); - bench("returns_neg_42_int8_t", () => returns_neg_42_int8_t()); -}); -group("returns_true", () => { - bench("returns_true (raw)", () => raw_returns_true()); - bench("returns_true", () => returns_true()); -}); - -var raw_returns_true = returns_true.native ?? returns_true; -var raw_returns_false = returns_false.native ?? returns_false; -var raw_returns_42_char = returns_42_char.native ?? returns_42_char; -var raw_returns_42_uint8_t = returns_42_uint8_t.native ?? returns_42_uint8_t; -var raw_returns_neg_42_int8_t = - returns_neg_42_int8_t.native ?? returns_neg_42_int8_t; -var raw_returns_42_uint16_t = returns_42_uint16_t.native ?? returns_42_uint16_t; -var raw_returns_42_uint32_t = returns_42_uint32_t.native ?? returns_42_uint32_t; -var raw_returns_neg_42_int16_t = - returns_neg_42_int16_t.native ?? returns_neg_42_int16_t; -var raw_returns_neg_42_int32_t = - returns_neg_42_int32_t.native ?? returns_neg_42_int32_t; -var raw_identity_char = identity_char.native ?? identity_char; -var raw_identity_bool = identity_bool.native ?? identity_bool; -var raw_identity_bool = identity_bool.native ?? identity_bool; -var raw_identity_int8_t = identity_int8_t.native ?? identity_int8_t; -var raw_identity_int16_t = identity_int16_t.native ?? identity_int16_t; -var raw_identity_int32_t = identity_int32_t.native ?? identity_int32_t; -var raw_identity_uint8_t = identity_uint8_t.native ?? identity_uint8_t; -var raw_identity_uint16_t = identity_uint16_t.native ?? identity_uint16_t; -var raw_identity_uint32_t = identity_uint32_t.native ?? identity_uint32_t; -var raw_add_char = add_char.native ?? add_char; -var raw_add_int8_t = add_int8_t.native ?? add_int8_t; -var raw_add_int16_t = add_int16_t.native ?? add_int16_t; -var raw_add_int32_t = add_int32_t.native ?? add_int32_t; -var raw_add_uint8_t = add_uint8_t.native ?? add_uint8_t; -var raw_add_uint16_t = add_uint16_t.native ?? add_uint16_t; -var raw_add_uint32_t = add_uint32_t.native ?? add_uint32_t; - -run({ collect: false, percentiles: true }); diff --git a/bench/ffi/node.mjs b/bench/ffi/node.mjs new file mode 100644 index 0000000000..8c2d069717 --- /dev/null +++ b/bench/ffi/node.mjs @@ -0,0 +1,16 @@ +import { run, bench, group } from "mitata"; +import { createRequire } from "node:module"; + +const require = createRequire(import.meta.url); +const { napiNoop, napiHash, napiString } = require("./src/ffi_napi_bench.node"); + +const bytes = new Uint8Array(64); + +group("napi", () => { + bench("noop", () => napiNoop()); + bench("hash", () => napiHash(bytes)); + + bench("string", () => napiString()); +}); + +await run(); diff --git a/bench/ffi/noop.c b/bench/ffi/noop.c deleted file mode 100644 index de15eb5e0c..0000000000 --- a/bench/ffi/noop.c +++ /dev/null @@ -1,5 +0,0 @@ -// clang -O3 -shared -mtune=native ./noop.c -o noop.dylib - -void noop(); - -void noop() {} \ No newline at end of file diff --git a/bench/ffi/noop.dylib b/bench/ffi/noop.dylib deleted file mode 100755 index 66c00c17cf..0000000000 Binary files a/bench/ffi/noop.dylib and /dev/null differ diff --git a/bench/ffi/noop.js b/bench/ffi/noop.js deleted file mode 100644 index 13c8aef28d..0000000000 --- a/bench/ffi/noop.js +++ /dev/null @@ -1,15 +0,0 @@ -import { dlopen } from "bun:ffi"; -import { bench, run } from "mitata"; - -const { - symbols: { noop }, -} = dlopen("./noop.dylib", { - noop: { - args: [], - returns: "void", - }, -}); -bench("noop", () => { - noop(); -}); -run({ collect: false, percentiles: true }); diff --git a/bench/ffi/package.json b/bench/ffi/package.json new file mode 100644 index 0000000000..b7de8e9dd9 --- /dev/null +++ b/bench/ffi/package.json @@ -0,0 +1,11 @@ +{ + "name": "bench", + "scripts": { + "bench:bun": "$BUN bun.js", + "bench:node": "$NODE node.mjs", + "deps": "cd src && bun run deps", + "build": "cd src && bun run build", + "bench:deno": "$DENO run -A --unstable deno.js", + "bench": "bun run bench:bun && bun run bench:node && bun run bench:deno" + } +} diff --git a/bench/ffi/plus100/.gitignore b/bench/ffi/plus100/.gitignore deleted file mode 100644 index 8911651eda..0000000000 --- a/bench/ffi/plus100/.gitignore +++ /dev/null @@ -1 +0,0 @@ -./napi-plus100 diff --git a/bench/ffi/plus100/README.md b/bench/ffi/plus100/README.md deleted file mode 100644 index 954eaa607e..0000000000 --- a/bench/ffi/plus100/README.md +++ /dev/null @@ -1,37 +0,0 @@ -## FFI overhead comparison - -This compares the cost of simple function calls going from JavaScript to native code and back in: - -- Bun v0.0.79 -- napi.rs (Node v17.7.1) -- Deno v1.21.1 - -To set up: - -```bash -bun setup -``` - -To run the benchmark: - -```bash -bun bench -``` - -**add 100 to a number**: - -| Overhead | Using | Version | Platform | -| -------- | ------- | ------- | --------------- | -| 7ns | bun:ffi | 0.0.79 | macOS (aarch64) | -| 18ns | napi.rs | 17.7.1 | macOS (aarch64) | -| 580ns | Deno | 1.21.1 | macOS (aarch64) | - -**function that does nothing**: - -| Overhead | Using | Version | Platform | -| -------- | ------- | ------- | --------------- | -| 3ns | bun:ffi | 0.0.79 | macOS (aarch64) | -| 15ns | napi.rs | 17.7.1 | macOS (aarch64) | -| 431ns | Deno | 1.21.1 | macOS (aarch64) | - -The native [functions](./plus100.c) called in Deno & Bun are the same. The function called with napi.rs is based on napi's official [package-template](https://github.com/napi-rs/package-template) in https://github.com/Jarred-Sumner/napi-plus100 diff --git a/bench/ffi/plus100/add3.bun.js b/bench/ffi/plus100/add3.bun.js deleted file mode 100644 index 4e79d4ceaf..0000000000 --- a/bench/ffi/plus100/add3.bun.js +++ /dev/null @@ -1,49 +0,0 @@ -import { run, bench, group, baseline } from "mitata"; -import { dlopen, suffix } from "bun:ffi"; -import { readdirSync } from "fs"; - -const { - symbols: { - add3: { native: add3 }, - noop, - }, - close, -} = dlopen(`./plus100.dylib`, { - add3: { - args: ["int32_t", "int32_t", "int32_t"], - returns: "int32_t", - }, - noop: { - args: [], - }, -}); -const { add3: add3napi, noop: noopNapi } = require("./plus100-napi/index.js"); - -group("add3", () => { - bench("add3(1,2,3) ffi", () => { - add3(1, 2, 3); - }); - - bench("add3(1,2,3) napi", () => { - add3napi(1, 2, 3); - }); -}); - -group("noop", () => { - bench("noop() ffi", () => { - noop(); - }); - - bench("noop() napi", () => { - noopNapi(); - }); -}); - -// collect option collects benchmark returned values into array -// prevents gc and can help with jit optimizing out functions -await run({ collect: false, percentiles: true }); -console.log("\n"); - -if (add3(1, 2, 3) !== 1 + 2 + 3) { - throw new Error("add3(1) !== 101"); -} diff --git a/bench/ffi/plus100/add3.deno.js b/bench/ffi/plus100/add3.deno.js deleted file mode 100644 index 75508d39a1..0000000000 --- a/bench/ffi/plus100/add3.deno.js +++ /dev/null @@ -1,30 +0,0 @@ -import { run, bench, group, baseline } from "https://esm.sh/mitata"; - -const { - symbols: { add3: add3, noop }, - close, -} = Deno.dlopen("./plus100.dylib", { - add3: { - parameters: ["i32", "i32", "i32"], - result: "i32", - }, - noop: { - parameters: [], - result: "void", - }, -}); -bench("add3(1,2,3) ", () => { - add3(1, 2, 3); -}); - -bench("noop() ", () => { - noop(); -}); - -// collect option collects benchmark returned values into array -// prevents gc and can help with jit optimizing out functions -await run({ collect: false, percentiles: true }); - -if (add3(1, 2, 3) !== 1 + 2 + 3) { - throw new Error("add3(1) !== 101"); -} diff --git a/bench/ffi/plus100/add3.napi.mjs b/bench/ffi/plus100/add3.napi.mjs deleted file mode 100644 index fd96d8eb52..0000000000 --- a/bench/ffi/plus100/add3.napi.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import { bench, run } from "mitata"; - -const { add3, noop } = - "Bun" in globalThis - ? require("./plus100-napi") - : (await import("module")).createRequire(import.meta.url)("./plus100-napi"); - -bench("add3(1,2,3) napi", () => { - add3(1, 2, 3); -}); -bench("noop() napi", () => { - noop(); -}); -await run({ collect: false, percentiles: true }); -console.log("\n"); - -if (add3(1, 2, 3) !== 1 + 2 + 3) { - throw new Error("plus100(1) !== 101"); -} diff --git a/bench/ffi/plus100/download-napi-plus100.sh b/bench/ffi/plus100/download-napi-plus100.sh deleted file mode 100644 index 6fff674c65..0000000000 --- a/bench/ffi/plus100/download-napi-plus100.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -rm -rf plus100-napi -git clone https://github.com/Jarred-Sumner/napi-plus100 plus100-napi --depth=1 -cd plus100-napi -npm install -npm run build diff --git a/bench/ffi/plus100/libadd.dylib b/bench/ffi/plus100/libadd.dylib deleted file mode 100755 index a2a1039eec..0000000000 Binary files a/bench/ffi/plus100/libadd.dylib and /dev/null differ diff --git a/bench/ffi/plus100/package.json b/bench/ffi/plus100/package.json deleted file mode 100644 index 6ac5d60e0a..0000000000 --- a/bench/ffi/plus100/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "plus100", - "scripts": { - "setup": "bun run napi-setup && bun run compile", - "bench-deno": "deno run --allow-ffi --unstable -A plus100.deno.js", - "napi-setup": "bash download-napi-plus100.sh", - "bench-napi": "node plus100.napi.mjs", - "bench-bun": "bun ./plus100.bun.js", - "compile": "clang -mtune=native -O3 -shared ./plus100.c -o plus100.dylib", - "bench": "bun run bench-bun && bun run bench-napi && bun run bench-deno" - } -} diff --git a/bench/ffi/plus100/plus100.bun.js b/bench/ffi/plus100/plus100.bun.js deleted file mode 100644 index d40b81ae38..0000000000 --- a/bench/ffi/plus100/plus100.bun.js +++ /dev/null @@ -1,52 +0,0 @@ -import { run, bench, group, baseline } from "mitata"; -import { dlopen, suffix } from "bun:ffi"; -import { readdirSync } from "fs"; - -const { - symbols: { - plus100: { native: plus100 }, - noop, - }, - close, -} = dlopen(`./plus100.dylib`, { - plus100: { - args: ["int32_t"], - returns: "int32_t", - }, - noop: { - args: [], - }, -}); -const { - plus100: plus100napi, - noop: noopNapi, -} = require("./plus100-napi/index.js"); - -group("plus100", () => { - bench("plus100(1) ffi", () => { - plus100(1); - }); - - bench("plus100(1) napi", () => { - plus100napi(1); - }); -}); - -group("noop", () => { - bench("noop() ffi", () => { - noop(); - }); - - bench("noop() napi", () => { - noopNapi(); - }); -}); - -// collect option collects benchmark returned values into array -// prevents gc and can help with jit optimizing out functions -await run({ collect: false, percentiles: true }); -console.log("\n"); - -if (plus100(1) !== 101) { - throw new Error("plus100(1) !== 101"); -} diff --git a/bench/ffi/plus100/plus100.c b/bench/ffi/plus100/plus100.c deleted file mode 100644 index 17ceb67a00..0000000000 --- a/bench/ffi/plus100/plus100.c +++ /dev/null @@ -1,9 +0,0 @@ -// clang -mtune=native -O3 -shared ./plus100.c -o plus100.dylib -#include - -int32_t plus100(int32_t a); -int32_t plus100(int32_t a) { return a + 100; } -int32_t add3(int32_t a, int32_t b, int32_t c) { return a + b + c; } - -void noop(void); -void noop(void) {} \ No newline at end of file diff --git a/bench/ffi/plus100/plus100.deno.js b/bench/ffi/plus100/plus100.deno.js deleted file mode 100644 index ec58a8b646..0000000000 --- a/bench/ffi/plus100/plus100.deno.js +++ /dev/null @@ -1,30 +0,0 @@ -import { run, bench, group, baseline } from "https://esm.sh/mitata"; - -const { - symbols: { plus100: plus100, noop }, - close, -} = Deno.dlopen("./plus100.dylib", { - plus100: { - parameters: ["i32"], - result: "i32", - }, - noop: { - parameters: [], - result: "void", - }, -}); -bench("plus100(1) ", () => { - plus100(1); -}); - -bench("noop() ", () => { - noop(); -}); - -// collect option collects benchmark returned values into array -// prevents gc and can help with jit optimizing out functions -await run({ collect: false, percentiles: true }); - -if (plus100(1) !== 101) { - throw new Error("plus100(1) !== 101"); -} diff --git a/bench/ffi/plus100/plus100.dylib b/bench/ffi/plus100/plus100.dylib deleted file mode 100755 index 7b5ec3962d..0000000000 Binary files a/bench/ffi/plus100/plus100.dylib and /dev/null differ diff --git a/bench/ffi/plus100/plus100.napi.mjs b/bench/ffi/plus100/plus100.napi.mjs deleted file mode 100644 index 65ca85ca6d..0000000000 --- a/bench/ffi/plus100/plus100.napi.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import { bench, run } from "mitata"; - -const { plus100, noop } = - "Bun" in globalThis - ? require("./plus100-napi") - : (await import("module")).createRequire(import.meta.url)("./plus100-napi"); - -bench("plus100(1) napi", () => { - plus100(1); -}); -bench("noop() napi", () => { - noop(); -}); -await run({ collect: false, percentiles: true }); -console.log("\n"); - -if (plus100(1) !== 101) { - throw new Error("plus100(1) !== 101"); -} diff --git a/bench/ffi/src/Cargo.lock b/bench/ffi/src/Cargo.lock new file mode 100644 index 0000000000..ab0268b612 --- /dev/null +++ b/bench/ffi/src/Cargo.lock @@ -0,0 +1,202 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "convert_case" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8" + +[[package]] +name = "ctor" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ffi_napi_bench" +version = "0.1.0" +dependencies = [ + "napi", + "napi-build", + "napi-derive", +] + +[[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "napi" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3517d4a4af99e0a9960e26332ee1e1bcb9e0298657f58e7e97157a8532dfcd4b" +dependencies = [ + "ctor", + "napi-sys", + "once_cell", + "thread_local", +] + +[[package]] +name = "napi-build" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882a73d9ef23e8dc2ebbffb6a6ae2ef467c0f18ac10711e4cc59c5485d41df0e" + +[[package]] +name = "napi-derive" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aaa8a11b0ae982306d311627cafd997ef556abdf1d79a01e6e75bc1ac5cfced" +dependencies = [ + "convert_case", + "napi-derive-backend", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "napi-derive-backend" +version = "1.0.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cdb9be87524eccc14f988825b26eaa3752e07a81cb04c34436057823d91e421" +dependencies = [ + "convert_case", + "once_cell", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "napi-sys" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "529671ebfae679f2ce9630b62dd53c72c56b3eb8b2c852e7e2fa91704ff93d67" +dependencies = [ + "libloading", +] + +[[package]] +name = "once_cell" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + +[[package]] +name = "proc-macro2" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" + +[[package]] +name = "syn" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/bench/ffi/src/Cargo.toml b/bench/ffi/src/Cargo.toml new file mode 100644 index 0000000000..84a30eeab5 --- /dev/null +++ b/bench/ffi/src/Cargo.toml @@ -0,0 +1,18 @@ +[package] +edition = "2021" +version = "0.1.0" +name = "ffi_napi_bench" + +[lib] +crate-type = ["cdylib"] + +[features] +napi = [] +default = [] + +[dependencies] +napi = "2" +napi-derive = "2" + +[build-dependencies] +napi-build = "2.0.1" \ No newline at end of file diff --git a/bench/ffi/src/build.rs b/bench/ffi/src/build.rs new file mode 100644 index 0000000000..4624d829bd --- /dev/null +++ b/bench/ffi/src/build.rs @@ -0,0 +1,5 @@ +#[cfg(feature="napi")] extern crate napi_build; + +fn main() { + #[cfg(feature="napi")] napi_build::setup(); +} \ No newline at end of file diff --git a/bench/ffi/src/bun.lockb b/bench/ffi/src/bun.lockb new file mode 100755 index 0000000000..184cb439cf Binary files /dev/null and b/bench/ffi/src/bun.lockb differ diff --git a/bench/ffi/src/package.json b/bench/ffi/src/package.json new file mode 100644 index 0000000000..4049f22c85 --- /dev/null +++ b/bench/ffi/src/package.json @@ -0,0 +1,17 @@ +{ + "name": "bench", + "napi": { + "name": "napi" + }, + "dependencies": { + "@napi-rs/cli": "^2.10.1", + "@node-rs/helper": "^1.3.3" + }, + "scripts": { + "deps": "bun install", + "build:ffi": "cargo build --release", + "build": "bun run build:napi && bun run build:ffi", + "cleanup": "rm -f index.js index.d.ts && mv napi.*.node ffi_napi_bench.node", + "build:napi": "napi build --release --platform --no-dts-header --features napi && bun run cleanup" + } +} diff --git a/bench/ffi/src/src/lib.rs b/bench/ffi/src/src/lib.rs new file mode 100644 index 0000000000..dd0bd9a00c --- /dev/null +++ b/bench/ffi/src/src/lib.rs @@ -0,0 +1,49 @@ +// double src o.O + +#[cfg(feature="napi")] use napi_derive::napi; +#[cfg(feature="napi")] use napi::bindgen_prelude::*; + +static STRING: &'static str = "Hello, world!\0"; + +fn hash(buf: &[u8]) -> u32 { + let mut hash: u32 = 0; + + for byte in buf { + hash = hash.wrapping_mul(0x10001000).wrapping_add(*byte as u32); + } + + return hash; +} + + + +#[cfg(feature="napi")] +#[napi] pub fn napi_noop() { + // do nothing +} + +#[no_mangle] unsafe extern "C" fn ffi_noop() { + // do nothing +} + + + +#[cfg(feature="napi")] +#[napi] pub fn napi_string() -> &'static str { + return &STRING[0..(STRING.len() - 1)]; +} + +#[no_mangle] unsafe extern "C" fn ffi_string() -> *const u8 { + return STRING.as_ptr(); +} + + + +#[cfg(feature="napi")] +#[napi] pub fn napi_hash(buffer: Buffer) -> u32 { + return hash(&buffer); +} + +#[no_mangle] unsafe extern "C" fn ffi_hash(ptr: *const u8, length: u32) -> u32 { + return hash(std::slice::from_raw_parts(ptr, length as usize)); +} \ No newline at end of file diff --git a/bench/gzip/.env b/bench/gzip/.env new file mode 100644 index 0000000000..862e34733d --- /dev/null +++ b/bench/gzip/.env @@ -0,0 +1,3 @@ +BUN=bun +DENO=deno +NODE=node \ No newline at end of file diff --git a/bench/gzip.js b/bench/gzip/bun.js similarity index 82% rename from bench/gzip.js rename to bench/gzip/bun.js index 6d9971b399..1c5cdcaddd 100644 --- a/bench/gzip.js +++ b/bench/gzip/bun.js @@ -1,4 +1,4 @@ -import { bench, group, run } from "mitata"; +import { run, bench } from "mitata"; import { gzipSync, gunzipSync } from "bun"; const data = new TextEncoder().encode("Hello World!".repeat(9999)); @@ -17,4 +17,4 @@ bench(`gunzipSync("Hello World!".repeat(9999)))`, () => { gunzipSync(compressed); }); -run({ collect: false, percentiles: true }); +await run(); diff --git a/bench/gzip/deno.js b/bench/gzip/deno.js new file mode 100644 index 0000000000..66c858e55b --- /dev/null +++ b/bench/gzip/deno.js @@ -0,0 +1,85 @@ +import { run, bench } from "../node_modules/mitata/src/cli.mjs"; + +const data = new TextEncoder().encode("Hello World!".repeat(9999)); + +const compressed = await compress(data); + +bench(`roundtrip - "Hello World!".repeat(9999))`, async () => { + await decompress(await compress(data)); +}); + +bench(`gzip("Hello World!".repeat(9999)))`, async () => { + await compress(data); +}); + +bench(`gunzip("Hello World!".repeat(9999)))`, async () => { + await decompress(compressed); +}); + +await run(); + +async function compress(buffer) { + const cs = new CompressionStream("gzip"); + + const writer = cs.writable.getWriter(); + + writer.write(buffer); + + writer.close(); + const chunks = []; + const reader = cs.readable.getReader(); + + let length = 0; + + while (true) { + const { done, value } = await reader.read(); + + if (done) break; + chunks.push(value); + length += value.length; + } + + const u8 = new Uint8Array(length); + + let offset = 0; + + for (const chunk of chunks) { + u8.set(chunk, offset); + offset += chunk.length; + } + + return u8; +} + +async function decompress(buffer) { + const ds = new DecompressionStream("gzip"); + + const writer = ds.writable.getWriter(); + + writer.write(buffer); + + writer.close(); + const chunks = []; + const reader = ds.readable.getReader(); + + let length = 0; + + while (true) { + const { done, value } = await reader.read(); + + if (done) break; + chunks.push(value); + length += value.length; + } + + const u8 = new Uint8Array(length); + + let offset = 0; + + for (const chunk of chunks) { + u8.set(chunk, offset); + offset += chunk.length; + } + + return u8; +} diff --git a/bench/gzip.node.mjs b/bench/gzip/node.mjs similarity index 82% rename from bench/gzip.node.mjs rename to bench/gzip/node.mjs index d931048504..0d6ea51249 100644 --- a/bench/gzip.node.mjs +++ b/bench/gzip/node.mjs @@ -1,4 +1,4 @@ -import { bench, group, run } from "mitata"; +import { run, bench } from "mitata"; import { gzipSync, gunzipSync } from "zlib"; const data = new TextEncoder().encode("Hello World!".repeat(9999)); @@ -17,4 +17,4 @@ bench(`gunzipSync("Hello World!".repeat(9999)))`, () => { gunzipSync(compressed); }); -run({ collect: false, percentiles: true }); +await run(); diff --git a/bench/gzip/package.json b/bench/gzip/package.json new file mode 100644 index 0000000000..f5c377686b --- /dev/null +++ b/bench/gzip/package.json @@ -0,0 +1,11 @@ +{ + "name": "bench", + "scripts": { + "deps": "exit 0", + "build": "exit 0", + "bench:bun": "$BUN bun.js", + "bench:node": "$NODE node.mjs", + "bench:deno": "$DENO run -A --unstable deno.js", + "bench": "bun run bench:bun && bun run bench:node && bun run bench:deno" + } +} diff --git a/bench/hot-module-reloading/css-stress-test/src/css-in-js-styles.tsx b/bench/hot-module-reloading/css-stress-test/src/css-in-js-styles.tsx index d12f4f1398..f233e0f6d0 100644 --- a/bench/hot-module-reloading/css-stress-test/src/css-in-js-styles.tsx +++ b/bench/hot-module-reloading/css-stress-test/src/css-in-js-styles.tsx @@ -1,4 +1,3 @@ - import { Global } from "@emotion/react"; export function CSSInJSStyles() { return ( diff --git a/bench/hot-module-reloading/css-stress-test/tsconfig.json b/bench/hot-module-reloading/css-stress-test/tsconfig.json index 24b9198700..19d4ac2e6f 100644 --- a/bench/hot-module-reloading/css-stress-test/tsconfig.json +++ b/bench/hot-module-reloading/css-stress-test/tsconfig.json @@ -1,6 +1,6 @@ { - "compilerOptions": { - "baseUrl": ".", - "paths": {} - } -} \ No newline at end of file + "compilerOptions": { + "baseUrl": ".", + "paths": {} + } +} diff --git a/bench/package-lock.json b/bench/package-lock.json new file mode 100644 index 0000000000..4971b05da9 --- /dev/null +++ b/bench/package-lock.json @@ -0,0 +1,1986 @@ +{ + "name": "bench", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "bench", + "dependencies": { + "@babel/core": "^7.16.10", + "@babel/preset-react": "^7.16.7", + "@swc/core": "^1.2.133", + "esbuild": "^0.14.12", + "mitata": "^0.1.6" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dependencies": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz", + "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@babel/types": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz", + "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", + "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz", + "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.8", + "@babel/types": "^7.18.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz", + "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@swc/core": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.212.tgz", + "integrity": "sha512-mFYHz8cOhccN5VqB8Y4GxyRnqVrnud/qLLQu71qmg/Im6ZOk59nmNpgvjJTGzxtBrGaCe0/PLqIbho3D6MpdZg==", + "bin": { + "swcx": "run_swcx.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-android-arm-eabi": "1.2.212", + "@swc/core-android-arm64": "1.2.212", + "@swc/core-darwin-arm64": "1.2.212", + "@swc/core-darwin-x64": "1.2.212", + "@swc/core-freebsd-x64": "1.2.212", + "@swc/core-linux-arm-gnueabihf": "1.2.212", + "@swc/core-linux-arm64-gnu": "1.2.212", + "@swc/core-linux-arm64-musl": "1.2.212", + "@swc/core-linux-x64-gnu": "1.2.212", + "@swc/core-linux-x64-musl": "1.2.212", + "@swc/core-win32-arm64-msvc": "1.2.212", + "@swc/core-win32-ia32-msvc": "1.2.212", + "@swc/core-win32-x64-msvc": "1.2.212" + } + }, + "node_modules/@swc/core-android-arm-eabi": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.212.tgz", + "integrity": "sha512-PDggEV2+YhfmDE46dIGg0NQ0tmXxw4i+PXubGXTIFejkT9wY/6lM59hr6g2hB0zLCQY59Wci8DtGyddAPrw4hg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-android-arm64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.212.tgz", + "integrity": "sha512-74l1UB9TYniGDo6ETB2Y5un67F5rTWxX+kuEk/ZoaFNuHiXpvsrU/ai3nltuTL5NLyBvqEIUVVvwM53zquh4IA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.212.tgz", + "integrity": "sha512-CI7sGni298BRo9Ybc/+Rp9KI11TQS4Vm40DIsYwno9/Q3Zie23acRYHZz+vKoy2Wavq+8/VlKe+3EwHahiwfXw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.212.tgz", + "integrity": "sha512-rzBGCzKAPMqXXoMw4H1kpHU00P/3GMDycLlK24f7cQ74tIPhmP2kfRRpiYI4/BiKiYilSOW/qJQ0GjMNu+4ywQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-freebsd-x64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.212.tgz", + "integrity": "sha512-1oV3WDmJcXnsu/aXCgDOsRL5RYev5Bn5aC3KrUQZcWpzwJLPn6+OayHGCPm6yStQJABgACRizPvlWFDoO8VuxQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.212.tgz", + "integrity": "sha512-CsbJXvgXVnE/kC4hypYvsPFwXPRl5InDjdXmJWgaRatDYMFbxZrc744iz/tDAUJiDFMeuqDiH4imd/7RhvUM9w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.212.tgz", + "integrity": "sha512-19tV0iCAMmd2qxQg+21UKSTWcPIoFex5pMmfypnNpCU6GO1PWqvZ4Fe0scIaQlQz+GqtmPI0C4RUhrL8Z6SlHg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.212.tgz", + "integrity": "sha512-aST6H0wUX32Uwdsch5uA7WBM7oHb2xLCA67YUGvrBu7HAtj92xo1fVtVAIsAKXI8hrxH9nnwn2XbaNSxxNZoRw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.212.tgz", + "integrity": "sha512-mnQgUPrxQ9Kky93y+B16BEjQu2fCiVnsgVj9pTXz3+3EVf94s5cRKzSDWkyZZIN2E+dkH1ePNxESHv/GbSTQWw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.212.tgz", + "integrity": "sha512-nFHKlGUlieA015+V/K8EwEwjXD7jiOuAqGNrmy0Yele5xJinvm5xQlTBDeQdX4z0MYYPiKGWVDy6sytt8/yS3Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.212.tgz", + "integrity": "sha512-3vZs8yPzW7t3W+7SGsVA8Ve5jWNNwH9vptIL4JAKNnif9IwEw4vgZIPrATOY+/eFOCbLDIJSxq9HLcUvm071xw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.212.tgz", + "integrity": "sha512-dTxDFoJkW2Wxj8+PWtUola6rCSdX28O3M1QleG3+DGN+BlhJ69pjXtscvlfOpS7cNnOqQB/6bJVK4QSalUFQBQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.212.tgz", + "integrity": "sha512-vfKAOTFhsSHByWVGt3qIkL0IcTyY0DmHNKKT0/Nkx+hgIagLeHU5LeW+54sBTpGeTlxMwhMGnCWHbSZBlODWkA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001364", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001364.tgz", + "integrity": "sha512-9O0xzV3wVyX0SlegIQ6knz+okhBB5pE0PC40MNdwcipjwpxoUEHL24uJ+gG42cgklPjfO5ZjZPme9FTSN3QT2Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.185", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.185.tgz", + "integrity": "sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw==" + }, + "node_modules/esbuild": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz", + "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", + "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", + "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", + "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", + "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", + "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", + "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", + "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", + "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", + "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", + "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", + "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", + "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", + "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", + "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", + "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", + "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", + "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", + "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", + "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", + "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mitata": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mitata/-/mitata-0.1.6.tgz", + "integrity": "sha512-VKQ0r3jriTOU9E2Z+mwbZrUmbg4Li4QyFfi7kfHKl6reZhGzL0AYlu3wE0VPXzIwA5xnFzmEQoBwCcNT8stUkA==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==" + }, + "@babel/core": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "requires": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==" + }, + "@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz", + "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@babel/types": "^7.18.8" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==" + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helpers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz", + "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", + "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz", + "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.8", + "@babel/types": "^7.18.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz", + "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@swc/core": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.2.212.tgz", + "integrity": "sha512-mFYHz8cOhccN5VqB8Y4GxyRnqVrnud/qLLQu71qmg/Im6ZOk59nmNpgvjJTGzxtBrGaCe0/PLqIbho3D6MpdZg==", + "requires": { + "@swc/core-android-arm-eabi": "1.2.212", + "@swc/core-android-arm64": "1.2.212", + "@swc/core-darwin-arm64": "1.2.212", + "@swc/core-darwin-x64": "1.2.212", + "@swc/core-freebsd-x64": "1.2.212", + "@swc/core-linux-arm-gnueabihf": "1.2.212", + "@swc/core-linux-arm64-gnu": "1.2.212", + "@swc/core-linux-arm64-musl": "1.2.212", + "@swc/core-linux-x64-gnu": "1.2.212", + "@swc/core-linux-x64-musl": "1.2.212", + "@swc/core-win32-arm64-msvc": "1.2.212", + "@swc/core-win32-ia32-msvc": "1.2.212", + "@swc/core-win32-x64-msvc": "1.2.212" + } + }, + "@swc/core-android-arm-eabi": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.212.tgz", + "integrity": "sha512-PDggEV2+YhfmDE46dIGg0NQ0tmXxw4i+PXubGXTIFejkT9wY/6lM59hr6g2hB0zLCQY59Wci8DtGyddAPrw4hg==", + "optional": true + }, + "@swc/core-android-arm64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.2.212.tgz", + "integrity": "sha512-74l1UB9TYniGDo6ETB2Y5un67F5rTWxX+kuEk/ZoaFNuHiXpvsrU/ai3nltuTL5NLyBvqEIUVVvwM53zquh4IA==", + "optional": true + }, + "@swc/core-darwin-arm64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.2.212.tgz", + "integrity": "sha512-CI7sGni298BRo9Ybc/+Rp9KI11TQS4Vm40DIsYwno9/Q3Zie23acRYHZz+vKoy2Wavq+8/VlKe+3EwHahiwfXw==", + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.2.212.tgz", + "integrity": "sha512-rzBGCzKAPMqXXoMw4H1kpHU00P/3GMDycLlK24f7cQ74tIPhmP2kfRRpiYI4/BiKiYilSOW/qJQ0GjMNu+4ywQ==", + "optional": true + }, + "@swc/core-freebsd-x64": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.2.212.tgz", + "integrity": "sha512-1oV3WDmJcXnsu/aXCgDOsRL5RYev5Bn5aC3KrUQZcWpzwJLPn6+OayHGCPm6yStQJABgACRizPvlWFDoO8VuxQ==", + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.2.212.tgz", + "integrity": "sha512-CsbJXvgXVnE/kC4hypYvsPFwXPRl5InDjdXmJWgaRatDYMFbxZrc744iz/tDAUJiDFMeuqDiH4imd/7RhvUM9w==", + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.2.212.tgz", + "integrity": "sha512-19tV0iCAMmd2qxQg+21UKSTWcPIoFex5pMmfypnNpCU6GO1PWqvZ4Fe0scIaQlQz+GqtmPI0C4RUhrL8Z6SlHg==", + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.2.212.tgz", + "integrity": "sha512-aST6H0wUX32Uwdsch5uA7WBM7oHb2xLCA67YUGvrBu7HAtj92xo1fVtVAIsAKXI8hrxH9nnwn2XbaNSxxNZoRw==", + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.2.212.tgz", + "integrity": "sha512-mnQgUPrxQ9Kky93y+B16BEjQu2fCiVnsgVj9pTXz3+3EVf94s5cRKzSDWkyZZIN2E+dkH1ePNxESHv/GbSTQWw==", + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.2.212.tgz", + "integrity": "sha512-nFHKlGUlieA015+V/K8EwEwjXD7jiOuAqGNrmy0Yele5xJinvm5xQlTBDeQdX4z0MYYPiKGWVDy6sytt8/yS3Q==", + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.2.212.tgz", + "integrity": "sha512-3vZs8yPzW7t3W+7SGsVA8Ve5jWNNwH9vptIL4JAKNnif9IwEw4vgZIPrATOY+/eFOCbLDIJSxq9HLcUvm071xw==", + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.2.212.tgz", + "integrity": "sha512-dTxDFoJkW2Wxj8+PWtUola6rCSdX28O3M1QleG3+DGN+BlhJ69pjXtscvlfOpS7cNnOqQB/6bJVK4QSalUFQBQ==", + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.2.212", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.2.212.tgz", + "integrity": "sha512-vfKAOTFhsSHByWVGt3qIkL0IcTyY0DmHNKKT0/Nkx+hgIagLeHU5LeW+54sBTpGeTlxMwhMGnCWHbSZBlODWkA==", + "optional": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "requires": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + } + }, + "caniuse-lite": { + "version": "1.0.30001364", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001364.tgz", + "integrity": "sha512-9O0xzV3wVyX0SlegIQ6knz+okhBB5pE0PC40MNdwcipjwpxoUEHL24uJ+gG42cgklPjfO5ZjZPme9FTSN3QT2Q==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "electron-to-chromium": { + "version": "1.4.185", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.185.tgz", + "integrity": "sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw==" + }, + "esbuild": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz", + "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==", + "requires": { + "esbuild-android-64": "0.14.49", + "esbuild-android-arm64": "0.14.49", + "esbuild-darwin-64": "0.14.49", + "esbuild-darwin-arm64": "0.14.49", + "esbuild-freebsd-64": "0.14.49", + "esbuild-freebsd-arm64": "0.14.49", + "esbuild-linux-32": "0.14.49", + "esbuild-linux-64": "0.14.49", + "esbuild-linux-arm": "0.14.49", + "esbuild-linux-arm64": "0.14.49", + "esbuild-linux-mips64le": "0.14.49", + "esbuild-linux-ppc64le": "0.14.49", + "esbuild-linux-riscv64": "0.14.49", + "esbuild-linux-s390x": "0.14.49", + "esbuild-netbsd-64": "0.14.49", + "esbuild-openbsd-64": "0.14.49", + "esbuild-sunos-64": "0.14.49", + "esbuild-windows-32": "0.14.49", + "esbuild-windows-64": "0.14.49", + "esbuild-windows-arm64": "0.14.49" + } + }, + "esbuild-android-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz", + "integrity": "sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz", + "integrity": "sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz", + "integrity": "sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz", + "integrity": "sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz", + "integrity": "sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz", + "integrity": "sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz", + "integrity": "sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz", + "integrity": "sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz", + "integrity": "sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz", + "integrity": "sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz", + "integrity": "sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz", + "integrity": "sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz", + "integrity": "sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz", + "integrity": "sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz", + "integrity": "sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz", + "integrity": "sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz", + "integrity": "sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz", + "integrity": "sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz", + "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.49", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz", + "integrity": "sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==", + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "mitata": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mitata/-/mitata-0.1.6.tgz", + "integrity": "sha512-VKQ0r3jriTOU9E2Z+mwbZrUmbg4Li4QyFfi7kfHKl6reZhGzL0AYlu3wE0VPXzIwA5xnFzmEQoBwCcNT8stUkA==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + } + } +} diff --git a/bench/package.json b/bench/package.json index 1025e4fd8e..0cfc1beaa5 100644 --- a/bench/package.json +++ b/bench/package.json @@ -1,12 +1,16 @@ { - "name": "snippets", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", + "name": "bench", "dependencies": { - "@babel/core": "^7.16.10", - "@babel/preset-react": "^7.16.7", + "mitata": "^0.1.6", + "esbuild": "^0.14.12", "@swc/core": "^1.2.133", - "esbuild": "^0.14.12" + "@babel/core": "^7.16.10", + "@babel/preset-react": "^7.16.7" + }, + "scripts": { + "ffi": "cd ffi && bun run deps && bun run build && bun run bench", + "gzip": "cd gzip && bun run deps && bun run build && bun run bench", + "async": "cd async && bun run deps && bun run build && bun run bench", + "sqlite": "cd sqlite && bun run deps && bun run build && bun run bench" } } diff --git a/bench/react-hello-world.node.js b/bench/react-hello-world.node.js deleted file mode 100644 index 9227823c1e..0000000000 --- a/bench/react-hello-world.node.js +++ /dev/null @@ -1,157 +0,0 @@ -var Gd=Object.create;var Ac=Object.defineProperty;var Xd=Object.getOwnPropertyDescriptor;var Zd=Object.getOwnPropertyNames;var Jd=Object.getPrototypeOf,Qd=Object.prototype.hasOwnProperty;var an=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var Kd=(e,n,i,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let v of Zd(n))!Qd.call(e,v)&&v!==i&&Ac(e,v,{get:()=>n[v],enumerable:!(s=Xd(n,v))||s.enumerable});return e};var Dc=(e,n,i)=>(i=e!=null?Gd(Jd(e)):{},Kd(n||!e||!e.__esModule?Ac(i,"default",{value:e,enumerable:!0}):i,e));var Nc=an($=>{"use strict";var Ai=Symbol.for("react.element"),qd=Symbol.for("react.portal"),ep=Symbol.for("react.fragment"),tp=Symbol.for("react.strict_mode"),rp=Symbol.for("react.profiler"),np=Symbol.for("react.provider"),op=Symbol.for("react.context"),ap=Symbol.for("react.forward_ref"),ip=Symbol.for("react.suspense"),lp=Symbol.for("react.memo"),sp=Symbol.for("react.lazy"),Oc=Symbol.iterator;function up(e){return e===null||typeof e!="object"?null:(e=Oc&&e[Oc]||e["@@iterator"],typeof e=="function"?e:null)}var Bc={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Uc=Object.assign,jc={};function sa(e,n,i){this.props=e,this.context=n,this.refs=jc,this.updater=i||Bc}sa.prototype.isReactComponent={};sa.prototype.setState=function(e,n){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,n,"setState")};sa.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Hc(){}Hc.prototype=sa.prototype;function Hu(e,n,i){this.props=e,this.context=n,this.refs=jc,this.updater=i||Bc}var Wu=Hu.prototype=new Hc;Wu.constructor=Hu;Uc(Wu,sa.prototype);Wu.isPureReactComponent=!0;var Mc=Array.isArray,Wc=Object.prototype.hasOwnProperty,zu={current:null},zc={key:!0,ref:!0,__self:!0,__source:!0};function $c(e,n,i){var s,v={},c=null,m=null;if(n!=null)for(s in n.ref!==void 0&&(m=n.ref),n.key!==void 0&&(c=""+n.key),n)Wc.call(n,s)&&!zc.hasOwnProperty(s)&&(v[s]=n[s]);var S=arguments.length-2;if(S===1)v.children=i;else if(1{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var e="18.2.0",n=Symbol.for("react.element"),i=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),c=Symbol.for("react.profiler"),m=Symbol.for("react.provider"),S=Symbol.for("react.context"),E=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),R=Symbol.for("react.suspense_list"),D=Symbol.for("react.memo"),V=Symbol.for("react.lazy"),te=Symbol.for("react.offscreen"),J=Symbol.iterator,Oe="@@iterator";function P(h){if(h===null||typeof h!="object")return null;var b=J&&h[J]||h[Oe];return typeof b=="function"?b:null}var ue={current:null},W={transition:null},q={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},xe={current:null},_e={},he=null;function F(h){he=h}_e.setExtraStackFrame=function(h){he=h},_e.getCurrentStack=null,_e.getStackAddendum=function(){var h="";he&&(h+=he);var b=_e.getCurrentStack;return b&&(h+=b()||""),h};var ct=!1,qt=!1,yt=!1,Mt=!1,Lt=!1,ft={ReactCurrentDispatcher:ue,ReactCurrentBatchConfig:W,ReactCurrentOwner:xe};ft.ReactDebugCurrentFrame=_e,ft.ReactCurrentActQueue=q;function Me(h){{for(var b=arguments.length,k=new Array(b>1?b-1:0),T=1;T1?b-1:0),T=1;T1){for(var Q=Array(Y),K=0;K1){for(var ee=Array(K),fe=0;fe is not supported and will be removed in a future major release. Did you mean to render instead?")),b.Provider},set:function(M){b.Provider=M}},_currentValue:{get:function(){return b._currentValue},set:function(M){b._currentValue=M}},_currentValue2:{get:function(){return b._currentValue2},set:function(M){b._currentValue2=M}},_threadCount:{get:function(){return b._threadCount},set:function(M){b._threadCount=M}},Consumer:{get:function(){return k||(k=!0,B("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),b.Consumer}},displayName:{get:function(){return b.displayName},set:function(M){I||(Me("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",M),I=!0)}}}),b.Consumer=U}return b._currentRenderer=null,b._currentRenderer2=null,b}var jt=-1,Pr=0,ge=1,Sa=2;function wa(h){if(h._status===jt){var b=h._result,k=b();if(k.then(function(U){if(h._status===Pr||h._status===jt){var M=h;M._status=ge,M._result=U}},function(U){if(h._status===Pr||h._status===jt){var M=h;M._status=Sa,M._result=U}}),h._status===jt){var T=h;T._status=Pr,T._result=k}}if(h._status===ge){var I=h._result;return I===void 0&&B(`lazy: Expected the result of a dynamic import() call. Instead received: %s - -Your code should look like: - const MyComponent = lazy(() => import('./MyComponent')) - -Did you accidentally put curly braces around the import?`,I),"default"in I||B(`lazy: Expected the result of a dynamic import() call. Instead received: %s - -Your code should look like: - const MyComponent = lazy(() => import('./MyComponent'))`,I),I.default}else throw h._result}function xa(h){var b={_status:jt,_result:h},k={$$typeof:V,_payload:b,_init:wa};{var T,I;Object.defineProperties(k,{defaultProps:{configurable:!0,get:function(){return T},set:function(U){B("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),T=U,Object.defineProperty(k,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return I},set:function(U){B("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),I=U,Object.defineProperty(k,"propTypes",{enumerable:!0})}}})}return k}function ka(h){h!=null&&h.$$typeof===D?B("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof h!="function"?B("forwardRef requires a render function but was given %s.",h===null?"null":typeof h):h.length!==0&&h.length!==2&&B("forwardRef render functions accept exactly two parameters: props and ref. %s",h.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),h!=null&&(h.defaultProps!=null||h.propTypes!=null)&&B("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?");var b={$$typeof:E,render:h};{var k;Object.defineProperty(b,"displayName",{enumerable:!1,configurable:!0,get:function(){return k},set:function(T){k=T,!h.name&&!h.displayName&&(h.displayName=T)}})}return b}var mn;mn=Symbol.for("react.module.reference");function yo(h){return!!(typeof h=="string"||typeof h=="function"||h===s||h===c||Lt||h===v||h===x||h===R||Mt||h===te||ct||qt||yt||typeof h=="object"&&h!==null&&(h.$$typeof===V||h.$$typeof===D||h.$$typeof===m||h.$$typeof===S||h.$$typeof===E||h.$$typeof===mn||h.getModuleId!==void 0))}function Ta(h,b){yo(h)||B("memo: The first argument must be a component. Instead received: %s",h===null?"null":typeof h);var k={$$typeof:D,type:h,compare:b===void 0?null:b};{var T;Object.defineProperty(k,"displayName",{enumerable:!1,configurable:!0,get:function(){return T},set:function(I){T=I,!h.name&&!h.displayName&&(h.displayName=I)}})}return k}function me(){var h=ue.current;return h===null&&B(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: -1. You might have mismatching versions of React and the renderer (such as React DOM) -2. You might be breaking the Rules of Hooks -3. You might have more than one copy of React in the same app -See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`),h}function be(h){var b=me();if(h._context!==void 0){var k=h._context;k.Consumer===h?B("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):k.Provider===h&&B("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return b.useContext(h)}function Ca(h){var b=me();return b.useState(h)}function Ea(h,b,k){var T=me();return T.useReducer(h,b,k)}function Ra(h){var b=me();return b.useRef(h)}function bo(h,b){var k=me();return k.useEffect(h,b)}function So(h,b){var k=me();return k.useInsertionEffect(h,b)}function Ia(h,b){var k=me();return k.useLayoutEffect(h,b)}function _a(h,b){var k=me();return k.useCallback(h,b)}function cr(h,b){var k=me();return k.useMemo(h,b)}function Fr(h,b,k){var T=me();return T.useImperativeHandle(h,b,k)}function kt(h,b){{var k=me();return k.useDebugValue(h,b)}}function Ar(){var h=me();return h.useTransition()}function Dr(h){var b=me();return b.useDeferredValue(h)}function fr(){var h=me();return h.useId()}function yn(h,b,k){var T=me();return T.useSyncExternalStore(h,b,k)}var Tt=0,Or,He,Ht,Ct,Wt,zt,Et;function dr(){}dr.__reactDisabledLog=!0;function bn(){{if(Tt===0){Or=console.log,He=console.info,Ht=console.warn,Ct=console.error,Wt=console.group,zt=console.groupCollapsed,Et=console.groupEnd;var h={configurable:!0,enumerable:!0,value:dr,writable:!0};Object.defineProperties(console,{info:h,log:h,warn:h,error:h,group:h,groupCollapsed:h,groupEnd:h})}Tt++}}function Sn(){{if(Tt--,Tt===0){var h={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:Le({},h,{value:Or}),info:Le({},h,{value:He}),warn:Le({},h,{value:Ht}),error:Le({},h,{value:Ct}),group:Le({},h,{value:Wt}),groupCollapsed:Le({},h,{value:zt}),groupEnd:Le({},h,{value:Et})})}Tt<0&&B("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var Ee=ft.ReactCurrentDispatcher,wn;function Mr(h,b,k){{if(wn===void 0)try{throw Error()}catch(I){var T=I.stack.trim().match(/\n( *(at )?)/);wn=T&&T[1]||""}return` -`+wn+h}}var Lr=!1,Br;{var wo=typeof WeakMap=="function"?WeakMap:Map;Br=new wo}function We(h,b){if(!h||Lr)return"";{var k=Br.get(h);if(k!==void 0)return k}var T;Lr=!0;var I=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var U;U=Ee.current,Ee.current=null,bn();try{if(b){var M=function(){throw Error()};if(Object.defineProperty(M.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(M,[])}catch(Se){T=Se}Reflect.construct(h,[],M)}else{try{M.call()}catch(Se){T=Se}h.call(M.prototype)}}else{try{throw Error()}catch(Se){T=Se}h()}}catch(Se){if(Se&&T&&typeof Se.stack=="string"){for(var H=Se.stack.split(` -`),z=T.stack.split(` -`),Y=H.length-1,Q=z.length-1;Y>=1&&Q>=0&&H[Y]!==z[Q];)Q--;for(;Y>=1&&Q>=0;Y--,Q--)if(H[Y]!==z[Q]){if(Y!==1||Q!==1)do if(Y--,Q--,Q<0||H[Y]!==z[Q]){var K=` -`+H[Y].replace(" at new "," at ");return h.displayName&&K.includes("")&&(K=K.replace("",h.displayName)),typeof h=="function"&&Br.set(h,K),K}while(Y>=1&&Q>=0);break}}}finally{Lr=!1,Ee.current=U,Sn(),Error.prepareStackTrace=I}var ee=h?h.displayName||h.name:"",fe=ee?Mr(ee):"";return typeof h=="function"&&Br.set(h,fe),fe}function Rt(h,b,k){return We(h,!1)}function ht(h){var b=h.prototype;return!!(b&&b.isReactComponent)}function $t(h,b,k){if(h==null)return"";if(typeof h=="function")return We(h,ht(h));if(typeof h=="string")return Mr(h);switch(h){case x:return Mr("Suspense");case R:return Mr("SuspenseList")}if(typeof h=="object")switch(h.$$typeof){case E:return Rt(h.render);case D:return $t(h.type,b,k);case V:{var T=h,I=T._payload,U=T._init;try{return $t(U(I),b,k)}catch{}}}return""}var Ce={},rt=ft.ReactDebugCurrentFrame;function pr(h){if(h){var b=h._owner,k=$t(h.type,h._source,b?b.type:null);rt.setExtraStackFrame(k)}else rt.setExtraStackFrame(null)}function hr(h,b,k,T,I){{var U=Function.call.bind(ir);for(var M in h)if(U(h,M)){var H=void 0;try{if(typeof h[M]!="function"){var z=Error((T||"React class")+": "+k+" type `"+M+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof h[M]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw z.name="Invariant Violation",z}H=h[M](b,M,T,k,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(Y){H=Y}H&&!(H instanceof Error)&&(pr(I),B("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",T||"React class",k,M,typeof H),pr(null)),H instanceof Error&&!(H.message in Ce)&&(Ce[H.message]=!0,pr(I),B("Failed %s type: %s",k,H.message),pr(null))}}}function It(h){if(h){var b=h._owner,k=$t(h.type,h._source,b?b.type:null);F(k)}else F(null)}var vr;vr=!1;function Ze(){if(xe.current){var h=dt(xe.current.type);if(h)return` - -Check the render method of \``+h+"`."}return""}function _t(h){if(h!==void 0){var b=h.fileName.replace(/^.*[\\\/]/,""),k=h.lineNumber;return` - -Check your code at `+b+":"+k+"."}return""}function vt(h){return h!=null?_t(h.__source):""}var Ur={};function Re(h){var b=Ze();if(!b){var k=typeof h=="string"?h:h.displayName||h.name;k&&(b=` - -Check the top-level render call using <`+k+">.")}return b}function Je(h,b){if(!(!h._store||h._store.validated||h.key!=null)){h._store.validated=!0;var k=Re(b);if(!Ur[k]){Ur[k]=!0;var T="";h&&h._owner&&h._owner!==xe.current&&(T=" It was passed a child from "+dt(h._owner.type)+"."),It(h),B('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',k,T),It(null)}}}function xn(h,b){if(typeof h=="object"){if(ye(h))for(var k=0;k",I=" Did you accidentally export a JSX literal instead of a component?"):M=typeof h,B("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",M,I)}var H=ho.apply(this,arguments);if(H==null)return H;if(T)for(var z=2;z10&&Me("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."),T._updatedFibers.clear()}}}var Cn=!1,Pt=null;function Pa(h){if(Pt===null)try{var b=("require"+Math.random()).slice(0,7),k=Bl&&Bl[b];Pt=k.call(Bl,"timers").setImmediate}catch{Pt=function(I){Cn===!1&&(Cn=!0,typeof MessageChannel>"u"&&B("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var U=new MessageChannel;U.port1.onmessage=I,U.port2.postMessage(void 0)}}return Pt(h)}var gt=0,Hr=!1;function Fa(h){{var b=gt;gt++,q.current===null&&(q.current=[]);var k=q.isBatchingLegacy,T;try{if(q.isBatchingLegacy=!0,T=h(),!k&&q.didScheduleLegacyUpdate){var I=q.current;I!==null&&(q.didScheduleLegacyUpdate=!1,Rn(I))}}catch(ee){throw mr(b),ee}finally{q.isBatchingLegacy=k}if(T!==null&&typeof T=="object"&&typeof T.then=="function"){var U=T,M=!1,H={then:function(ee,fe){M=!0,U.then(function(Se){mr(b),gt===0?Be(Se,ee,fe):ee(Se)},function(Se){mr(b),fe(Se)})}};return!Hr&&typeof Promise<"u"&&Promise.resolve().then(function(){}).then(function(){M||(Hr=!0,B("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),H}else{var z=T;if(mr(b),gt===0){var Y=q.current;Y!==null&&(Rn(Y),q.current=null);var Q={then:function(ee,fe){q.current===null?(q.current=[],Be(z,ee,fe)):ee(z)}};return Q}else{var K={then:function(ee,fe){ee(z)}};return K}}}}function mr(h){h!==gt-1&&B("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),gt=h}function Be(h,b,k){{var T=q.current;if(T!==null)try{Rn(T),Pa(function(){T.length===0?(q.current=null,b(h)):Be(h,b,k)})}catch(I){k(I)}else b(h)}}var En=!1;function Rn(h){if(!En){En=!0;var b=0;try{for(;b{"use strict";process.env.NODE_ENV==="production"?Nu.exports=Nc():Nu.exports=Vc()});var Wf=an(ca=>{"use strict";var pf=ua(),hp=require("stream"),qe=Object.prototype.hasOwnProperty,vp=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Yc={},Gc={};function hf(e){return qe.call(Gc,e)?!0:qe.call(Yc,e)?!1:vp.test(e)?Gc[e]=!0:(Yc[e]=!0,!1)}function Ge(e,n,i,s,v,c,m){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=v,this.mustUseProperty=i,this.propertyName=e,this.type=n,this.sanitizeURL=c,this.removeEmptyString=m}var Fe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Fe[e]=new Ge(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];Fe[n]=new Ge(n,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Fe[e]=new Ge(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Fe[e]=new Ge(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Fe[e]=new Ge(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Fe[e]=new Ge(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Fe[e]=new Ge(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Fe[e]=new Ge(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Fe[e]=new Ge(e,5,!1,e.toLowerCase(),null,!1,!1)});var qu=/[\-:]([a-z])/g;function ec(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(qu,ec);Fe[n]=new Ge(n,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(qu,ec);Fe[n]=new Ge(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(qu,ec);Fe[n]=new Ge(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Fe[e]=new Ge(e,1,!1,e.toLowerCase(),null,!1,!1)});Fe.xlinkHref=new Ge("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Fe[e]=new Ge(e,1,!1,e.toLowerCase(),null,!0,!0)});var Hl={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},gp=["Webkit","ms","Moz","O"];Object.keys(Hl).forEach(function(e){gp.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),Hl[n]=Hl[e]})});var mp=/["'&<>]/;function Ye(e){if(typeof e=="boolean"||typeof e=="number")return""+e;e=""+e;var n=mp.exec(e);if(n){var i="",s,v=0;for(s=n.index;s"),Wl(e,v,i),typeof i=="string"?(e.push(Ye(i)),null):i}var xp=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Zc=new Map;function Jt(e){var n=Zc.get(e);if(n===void 0){if(!xp.test(e))throw Error("Invalid tag: "+e);n="<"+e,Zc.set(e,n)}return n}function kp(e,n,i,s,v){switch(n){case"select":e.push(Jt("select"));var c=null,m=null;for(R in i)if(qe.call(i,R)){var S=i[R];if(S!=null)switch(R){case"children":c=S;break;case"dangerouslySetInnerHTML":m=S;break;case"defaultValue":case"value":break;default:it(e,s,R,S)}}return e.push(">"),Wl(e,m,c),c;case"option":m=v.selectedValue,e.push(Jt("option"));var E=S=null,x=null,R=null;for(c in i)if(qe.call(i,c)){var D=i[c];if(D!=null)switch(c){case"children":S=D;break;case"selected":x=D;break;case"dangerouslySetInnerHTML":R=D;break;case"value":E=D;default:it(e,s,c,D)}}if(m!=null)if(i=E!==null?""+E:wp(S),Xu(m)){for(s=0;s"),Wl(e,R,S),S;case"textarea":e.push(Jt("textarea")),R=m=c=null;for(S in i)if(qe.call(i,S)&&(E=i[S],E!=null))switch(S){case"children":R=E;break;case"value":c=E;break;case"defaultValue":m=E;break;case"dangerouslySetInnerHTML":throw Error("`dangerouslySetInnerHTML` does not make sense on