From a9e4ff2029a769737982fcf7e0b7d76d35cf35e4 Mon Sep 17 00:00:00 2001 From: evan Date: Tue, 12 Jul 2022 04:40:12 -0400 Subject: [PATCH] cleanup benchmarks folder (#587) * cleanup benchmarks * run prettier --- bench/.env | 3 + bench/.gitignore | 2 + bench/README.md | 12 + bench/async/.env | 3 + bench/{async-overhead.mjs => async/bun.js} | 4 +- bench/async/deno.js | 7 + bench/async/node.mjs | 7 + bench/async/package.json | 11 + bench/{cat.bun.js => cat/bun.js} | 0 bench/{ => cat}/cat.mjs | 8 +- bench/{cat.node.js => cat/node.js} | 4 +- bench/{copy.bun.js => copyfile/bun.js} | 1 + bench/copyfile/node-streams.js | 4 + bench/{copyfile.mjs => copyfile/node.mjs} | 2 + bench/ffi/.env | 3 + bench/ffi/bun.js | 33 + bench/ffi/deno.js | 27 + bench/ffi/ffi-data-overhead.js | 33 - bench/ffi/ffi-overhead.js | 419 - bench/ffi/node.mjs | 16 + bench/ffi/noop.c | 5 - bench/ffi/noop.dylib | Bin 16759 -> 0 bytes bench/ffi/noop.js | 15 - bench/ffi/package.json | 11 + bench/ffi/plus100/.gitignore | 1 - bench/ffi/plus100/README.md | 37 - bench/ffi/plus100/add3.bun.js | 49 - bench/ffi/plus100/add3.deno.js | 30 - bench/ffi/plus100/add3.napi.mjs | 19 - bench/ffi/plus100/download-napi-plus100.sh | 7 - bench/ffi/plus100/libadd.dylib | Bin 396768 -> 0 bytes bench/ffi/plus100/package.json | 12 - bench/ffi/plus100/plus100.bun.js | 52 - bench/ffi/plus100/plus100.c | 9 - bench/ffi/plus100/plus100.deno.js | 30 - bench/ffi/plus100/plus100.dylib | Bin 16810 -> 0 bytes bench/ffi/plus100/plus100.napi.mjs | 19 - bench/ffi/src/Cargo.lock | 202 + bench/ffi/src/Cargo.toml | 18 + bench/ffi/src/build.rs | 5 + bench/ffi/src/bun.lockb | Bin 0 -> 1643 bytes bench/ffi/src/package.json | 17 + bench/ffi/src/src/lib.rs | 49 + bench/gzip/.env | 3 + bench/{gzip.js => gzip/bun.js} | 4 +- bench/gzip/deno.js | 85 + bench/{gzip.node.mjs => gzip/node.mjs} | 4 +- bench/gzip/package.json | 11 + .../css-stress-test/src/css-in-js-styles.tsx | 1 - .../css-stress-test/tsconfig.json | 10 +- bench/package-lock.json | 1986 ++ bench/package.json | 18 +- bench/react-hello-world.node.js | 157 - .../react-hello-world.deno.jsx | 2 +- .../react-hello-world.jsx | 4 +- .../react-hello-world.node.js | 15935 ++++++++++++++++ .../react-hello-world.node.jsx | 0 bench/scanner/package.json | 2 +- bench/{ => snippets}/_fixture.txt | 0 bench/{ => snippets}/buffer-read.js | 0 bench/{ => snippets}/buffer.js | 0 bench/{ => snippets}/callbacks-overhead.mjs | 0 bench/{ => snippets}/concat.js | 0 bench/{ => snippets}/escapeHTML.js | 0 bench/{ => snippets}/exists.js | 0 bench/{ => snippets}/jsx-entity-decoding.jsx | 0 bench/{ => snippets}/noop.js | 0 .../performance-now-overhead.js | 0 bench/{ => snippets}/react-dom-render.bun.js | 0 bench/{ => snippets}/realpath.mjs | 0 bench/{ => snippets}/render.js | 0 bench/{ => snippets}/transpiler.mjs | 0 bench/sqlite/.env | 3 + bench/sqlite/{query.js => bun.js} | 7 +- bench/sqlite/{query.deno.js => deno.js} | 7 +- bench/sqlite/download-northwind.sh | 10 - .../{query.better-sqlite3.mjs => node.mjs} | 10 +- bench/sqlite/package-lock.json | 495 +- bench/sqlite/package.json | 11 +- bench/sqlite/src/download.sh | 16 + 80 files changed, 18606 insertions(+), 1361 deletions(-) create mode 100644 bench/.env create mode 100644 bench/.gitignore create mode 100644 bench/README.md create mode 100644 bench/async/.env rename bench/{async-overhead.mjs => async/bun.js} (61%) create mode 100644 bench/async/deno.js create mode 100644 bench/async/node.mjs create mode 100644 bench/async/package.json rename bench/{cat.bun.js => cat/bun.js} (100%) rename bench/{ => cat}/cat.mjs (55%) rename bench/{cat.node.js => cat/node.js} (98%) rename bench/{copy.bun.js => copyfile/bun.js} (99%) create mode 100644 bench/copyfile/node-streams.js rename bench/{copyfile.mjs => copyfile/node.mjs} (98%) create mode 100644 bench/ffi/.env create mode 100644 bench/ffi/bun.js create mode 100644 bench/ffi/deno.js delete mode 100644 bench/ffi/ffi-data-overhead.js delete mode 100644 bench/ffi/ffi-overhead.js create mode 100644 bench/ffi/node.mjs delete mode 100644 bench/ffi/noop.c delete mode 100755 bench/ffi/noop.dylib delete mode 100644 bench/ffi/noop.js create mode 100644 bench/ffi/package.json delete mode 100644 bench/ffi/plus100/.gitignore delete mode 100644 bench/ffi/plus100/README.md delete mode 100644 bench/ffi/plus100/add3.bun.js delete mode 100644 bench/ffi/plus100/add3.deno.js delete mode 100644 bench/ffi/plus100/add3.napi.mjs delete mode 100644 bench/ffi/plus100/download-napi-plus100.sh delete mode 100755 bench/ffi/plus100/libadd.dylib delete mode 100644 bench/ffi/plus100/package.json delete mode 100644 bench/ffi/plus100/plus100.bun.js delete mode 100644 bench/ffi/plus100/plus100.c delete mode 100644 bench/ffi/plus100/plus100.deno.js delete mode 100755 bench/ffi/plus100/plus100.dylib delete mode 100644 bench/ffi/plus100/plus100.napi.mjs create mode 100644 bench/ffi/src/Cargo.lock create mode 100644 bench/ffi/src/Cargo.toml create mode 100644 bench/ffi/src/build.rs create mode 100755 bench/ffi/src/bun.lockb create mode 100644 bench/ffi/src/package.json create mode 100644 bench/ffi/src/src/lib.rs create mode 100644 bench/gzip/.env rename bench/{gzip.js => gzip/bun.js} (82%) create mode 100644 bench/gzip/deno.js rename bench/{gzip.node.mjs => gzip/node.mjs} (82%) create mode 100644 bench/gzip/package.json create mode 100644 bench/package-lock.json delete mode 100644 bench/react-hello-world.node.js rename bench/{ => react-hello-world}/react-hello-world.deno.jsx (75%) rename bench/{ => react-hello-world}/react-hello-world.jsx (71%) create mode 100644 bench/react-hello-world/react-hello-world.node.js rename bench/{ => react-hello-world}/react-hello-world.node.jsx (100%) rename bench/{ => snippets}/_fixture.txt (100%) rename bench/{ => snippets}/buffer-read.js (100%) rename bench/{ => snippets}/buffer.js (100%) rename bench/{ => snippets}/callbacks-overhead.mjs (100%) rename bench/{ => snippets}/concat.js (100%) rename bench/{ => snippets}/escapeHTML.js (100%) rename bench/{ => snippets}/exists.js (100%) rename bench/{ => snippets}/jsx-entity-decoding.jsx (100%) rename bench/{ => snippets}/noop.js (100%) rename bench/{ => snippets}/performance-now-overhead.js (100%) rename bench/{ => snippets}/react-dom-render.bun.js (100%) rename bench/{ => snippets}/realpath.mjs (100%) rename bench/{ => snippets}/render.js (100%) rename bench/{ => snippets}/transpiler.mjs (100%) create mode 100644 bench/sqlite/.env rename bench/sqlite/{query.js => bun.js} (78%) rename bench/sqlite/{query.deno.js => deno.js} (78%) delete mode 100644 bench/sqlite/download-northwind.sh rename bench/sqlite/{query.better-sqlite3.mjs => node.mjs} (71%) create mode 100644 bench/sqlite/src/download.sh 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 66c00c17cf98c0caf1c2128b2c8208e23b498801..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16759 zcmeI3O-NKx6vxlJ(LQJ@7s4oN4hU8vGeaL@ZF)$?48~~aVrcWE#-Smb$(%_?1ch=T zEs|&zL923+Nyva1gc8&uiV(EPKocsgAfoMHALrcnMqUyLLA(Ef|GoEo+%xa~bbDUr zzWi_zIf!i&YX@sYBO0P22~jEQBg-(_8pCZ8S!ep6{X!0lxRo-)NOtrlEr+-D{W3?) zT!B?0e*Ufs70{rSQk!9<;ytl=#E8YC368Aq_rU5Gur7)JTR(dly0-TyVkS82s0z08x`$Q5vd80z#CdNd-5EQj%IE;mpdzdj`8l-T^8M^f zT)tI$1lX58Vcxg!zKzwwvYX`Xzh%#DbS~op`JJ+7-uZ>+x|OmP=kQ{C)JxtjB?ibV8|7~|Jq}jQx8AtaI+bo1 zUe+!b-(0BwcKzKMU+Cb{+(@pp|JdE { - 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 a2a1039eeca180f97a1188374ef7f1708029cb6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396768 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 R@v;7q|5EdoXV-AE`hSnw@#X*k 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 7b5ec3962dd9d2f80ed7c872b53d22f7f786e74b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16810 zcmeI3O-Phc6o&82s6}ZRNtk9$n|{o6`XQv>kI+zzG86hXaiKcx!*T7S`@Tt^B#Ebz31HT9`Aj|?fYVE zo!gu} z+{J|C@w29oq*|RFXVkhOd?FMM>QJ~kg3|PU_uPIZ?jgyi^h<1pwY*cl)p}>?uCn5y z()e2~6eTP(PR=(CF$bKxG#{j4TmfZ5iS@dghUl6=AV1ht6FPvs^-8rG!j@72#J(>w@*UAcgrB@ zQ*J3W6Z1+pmv>9#K(ZgRl*&p3iW-9iNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPqZn|I@H`)@aHwIA;pI-|xPWfWdIJyKh{`A*;BgA+A7mTs_8iq5Srx2`?> gTx?Agb{u}b{QhOVscLjqZt(V(tNX&I`mS930au2!fB*mh 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 0000000000000000000000000000000000000000..184cb439cf493510a91647a6348fce0e56512fd3 GIT binary patch literal 1643 zcmY#Z)GsYA(of3F(@)JSQ%EY!;{sycoc!eMw9K4T-L(9o+{6;yG6OC~1_p-vnhU?L zKFjpqb7F>yVL;3$^Q)XYj1Ik0)toTrB-=b5-^;8(ML@s;p%^%zG&_`TfYK9~p$vwk z)V$;jAcqHt`571*q=B>mkOop9v4%eNa}2XydB%P_>2%Zn_@QvM1J-s|O(#F%dbp~B zV^Z@SkgGrdsE0uos9qOHD*&I7l!>;Ai&NnANtz$ov;{Lp+ z!RB*9ZQ9OTjXgKJgbaFs_QK2s`3DAAV!3`lWb3Xtv8q+urDf;Wu6!4ZlTS{~sy3Xw z!AWrQs=3pu-o-ggducDav0ElJQD~aY%g(-&Rx8_Y$lug@Tr=l3&>)z($nnhLc3ivJ z!S4anD$&|yn)jJrA65wN=UX#A8Ka zBbHXr3xdC*>VCo;2&5YrOhb%-$sRd83gnEKKzt4R)A=x^$YLNr<|P(ng5A=X^b8I34B;gXtYiVoK#BwgSQ!K_D?l=a zdIk&(sZg6?G?$HQMM-K=USdvgNl|8Ax}Aa{!X*}PmrQ_aI}LX@$kB$_-0T2K5V}Rh w`pG$&4te=0sUUVnYED6F5nKvrRY6W_ad9$`E-BW}%u7kF(90?YhR~n}0DDnErT_o{ literal 0 HcmV?d00001 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