diff --git a/.changepacks/changepack_log_constant_read_work.json b/.changepacks/changepack_log_constant_read_work.json new file mode 100644 index 000000000..24c2563f4 --- /dev/null +++ b/.changepacks/changepack_log_constant_read_work.json @@ -0,0 +1,7 @@ +{ + "changes": { + "bindings/devup-ui-wasm/package.json": "Patch" + }, + "note": "Avoid cloning unreferenced constant initializers and defer initialization analysis until constant reads need it. Extraction output and build errors are unchanged.", + "date": "2026-10-24T00:00:00.000Z" +} diff --git a/.changepacks/changepack_log_extraction_coverage.json b/.changepacks/changepack_log_extraction_coverage.json new file mode 100644 index 000000000..3f18b0e84 --- /dev/null +++ b/.changepacks/changepack_log_extraction_coverage.json @@ -0,0 +1,7 @@ +{ + "changes": { + "bindings/devup-ui-wasm/package.json": "Patch" + }, + "note": "Add regression coverage for extraction safety, property pruning and source-order behavior; remove unreachable post-flatten spread handling and consolidate unknown property-shape rejection. Extraction output and build errors are unchanged.", + "date": "2026-10-24T00:00:00.000Z" +} diff --git a/.changepacks/changepack_log_js_semantics.json b/.changepacks/changepack_log_js_semantics.json new file mode 100644 index 000000000..3da0812be --- /dev/null +++ b/.changepacks/changepack_log_js_semantics.json @@ -0,0 +1,9 @@ +{ + "changes": { + "bindings/devup-ui-wasm/package.json": "Patch", + "packages/components/package.json": "Patch", + "packages/reset-css/package.json": "Patch" + }, + "note": "Keep unknown element-prop spreads wholly as native pass-through data: their keys never select, replace or remove separately authored styles, regardless of order. Preserve fully known ordinary spread composition, canonical aliases, source-ordered once-only values and native className/style merging without spread-key styling variables, fallbacks or conversion code. Preserve exact imported enum and Math values including negative zero, lexical constants, binding-aware CommonJS require, React createElement calls, type-only imports, and compiled reset CSS tests. Retain located errors for intrinsically unreadable explicit styles, runtime styleOrder, unmovable lazy logical suspension, whole Devup UI namespaces escaping to runtime, and immediate lexical temporal-dead-zone reads. Native Emotion css spread restrictions and separate styled css overlap restrictions remain unchanged. Inline eager styled render stages, attrs merges and destructuring carriers into their existing render scope, and reuse scoped captures for CSS composition and StyleX units. Preserve per-instance dynamic component targets, parameter environments, getter and iterator effects, function names and call receivers while removing unnecessary generated arrow functions.", + "date": "2026-10-01T00:00:00.000Z" +} diff --git a/.changepacks/changepack_log_jsx_call_spread.json b/.changepacks/changepack_log_jsx_call_spread.json new file mode 100644 index 000000000..f52c04b82 --- /dev/null +++ b/.changepacks/changepack_log_jsx_call_spread.json @@ -0,0 +1,7 @@ +{ + "changes": { + "bindings/devup-ui-wasm/package.json": "Patch" + }, + "note": "Attach extracted classes and authored CSS variables to jsx, jsxs and jsxDEV props wrapped in parentheses, as const or satisfies. Preserve source evaluation order, responsive and conditional styleOrder output, native className/style merging and whole unknown-spread pass-through. Syntax wrappers do not introduce spread replacement diagnostics or a styling runtime.", + "date": "2026-10-12T00:00:00.000Z" +} diff --git a/.changepacks/changepack_log_refresh_dependencies_20261102.json b/.changepacks/changepack_log_refresh_dependencies_20261102.json new file mode 100644 index 000000000..27c19c63a --- /dev/null +++ b/.changepacks/changepack_log_refresh_dependencies_20261102.json @@ -0,0 +1,12 @@ +{ + "changes": { + "bindings/devup-ui-wasm/package.json": "Patch", + "packages/components/package.json": "Patch", + "packages/eslint-plugin/package.json": "Patch", + "packages/react/package.json": "Patch", + "packages/rsbuild-plugin/package.json": "Patch", + "packages/vite-plugin/package.json": "Patch" + }, + "note": "Refresh dependencies, including Oxc 0.156, wasm-bindgen 0.2.130, parse5 8.1 and Rsbuild 2.3. Preserve the React 18 compatibility fixture while updating its build tooling.", + "date": "2026-11-02T00:00:00.000Z" +} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1ed2f8f8e..d5dcbd513 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -189,7 +189,7 @@ jobs: const file = join(process.env.SIZE_ROOT, 'metadata.json') const metadata = side === 'base' ? { jobId: `${process.env.GITHUB_RUN_ID}/${process.env.GITHUB_RUN_ATTEMPT}/${process.env.GITHUB_JOB}`, - buildCommand: 'cargo metadata --locked --format-version 1 > /dev/null && wasm-pack build --mode no-install --release --target nodejs --out-dir ./pkg --out-name index --locked && node script.js', + buildCommand: '(cd ../.. && bun install --frozen-lockfile --ignore-scripts) && cargo metadata --locked --format-version 1 > /dev/null && wasm-pack build --mode no-install --release --target nodejs --out-dir ./pkg --out-name index --locked && node script.js', } : JSON.parse(readFileSync(file, 'utf8')) const sha = side === 'base' ? process.env.BASE_SHA : process.env.CANDIDATE_SHA metadata[side] = { @@ -204,6 +204,10 @@ jobs: for side in base candidate; do stage="$side" ( + ( + cd "$SIZE_ROOT/$side" + bun install --frozen-lockfile --ignore-scripts + ) WASM_BINDGEN_VERSION="$(bun resolve-wasm-bindgen.js "$SIZE_ROOT/$side/Cargo.lock")" export WASM_BINDGEN_VERSION bindgen_root="$SIZE_ROOT/abi-tools/$WASM_BINDGEN_VERSION" diff --git a/Cargo.lock b/Cargo.lock index 44830b571..814d855b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,17 +71,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-trait" -version = "0.1.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.9", -] - [[package]] name = "autocfg" version = "1.5.1" @@ -327,9 +316,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0" +checksum = "375989decec1a0fa424442bed520fa12ede43a48475ce8c7417d2c69b32b5f6b" dependencies = [ "find-msvc-tools", "shlex", @@ -921,9 +910,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hmac-sha1-compact" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ed9b23855291da44e7e84616e19dc0d969c3580e14ffa6b759f28775e26afc1" +checksum = "5286b48a73829e3541cd9f533359c01150f7879e2716796eda0631ad5fe7e668" [[package]] name = "icu_calendar" @@ -1137,9 +1126,9 @@ checksum = "4754a1731458af0443709c9667302793d3f63cc90ec4ba4c8259f2b9515478e5" [[package]] name = "js-sys" -version = "0.3.106" +version = "0.3.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5" +checksum = "8dc09d2154098bbf4ef54eab6b117a3c24cbbffe94046b16ee6d6d4510584d3a" dependencies = [ "cfg-if", "futures-util", @@ -1190,9 +1179,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.34" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" +checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c" [[package]] name = "memchr" @@ -1342,9 +1331,9 @@ dependencies = [ [[package]] name = "oxc_allocator" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c8f46c8923b4afb4dd588d4684d5dd32332f1341225c066cc6af31094e7e3d" +checksum = "11eaca3827c60c9da743111a49dff9a8e274e558e0e725e9a717f31ea173da0f" dependencies = [ "allocator-api2", "hashbrown 0.17.1", @@ -1354,9 +1343,9 @@ dependencies = [ [[package]] name = "oxc_ast" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35465751cfc99739fee42d8345b57d5b5087b462bea7bc5bb17d1f248e1efa22" +checksum = "5f68bed0e97be9c9450a85f7fe0b1d62f85bf23f0a2d4f5c665bf4b848be1632" dependencies = [ "bitflags", "oxc_allocator", @@ -1372,9 +1361,9 @@ dependencies = [ [[package]] name = "oxc_ast_macros" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78e5d50ecf9fbf6c00afb29dbd670784b2ac407fd676f625d1f3515a1a2d577" +checksum = "94f8bdc02323a201e5a3b29bb87bac855ea642ee26a630c5b05e5f463fa71b77" dependencies = [ "phf", "proc-macro2", @@ -1384,9 +1373,9 @@ dependencies = [ [[package]] name = "oxc_ast_visit" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6836d2fde033c44eae57ab1be3fcc7bd6a57465783bdfce654ca28064a334dbe" +checksum = "db583366340d5221fe2129e0240e0413cb58e6c6e926740a493d6e82f5c5e40f" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1396,9 +1385,9 @@ dependencies = [ [[package]] name = "oxc_codegen" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75db0d260bb5493e31be0ab17651d428da5cd8c49ec2cf78d857e605d66385dd" +checksum = "88c1b6d7d9f1f5386534d88294903dadf00e72536e9fea6198e43450a52c41a5" dependencies = [ "bitflags", "cow-utils", @@ -1418,9 +1407,9 @@ dependencies = [ [[package]] name = "oxc_compat" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90809c31d39f49d2023b090ffcfd13b5f2e07b156abde430f1b1454ceef51bb1" +checksum = "8d913fd9474d53400cc5584ca4b476fee577acf44606a251107f1d98cc2ff4ae" dependencies = [ "cow-utils", "oxc-browserslist", @@ -1431,18 +1420,18 @@ dependencies = [ [[package]] name = "oxc_data_structures" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a46b759a8cb13a1111649370f1d769322b082edabd625466254f238818bdc9e9" +checksum = "1d8e8e829b37d1654ed3fb4b4d554eac80da790a2dcea333b5f4ca3209bca795" dependencies = [ "ropey", ] [[package]] name = "oxc_diagnostics" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b80f4b05a80879518ebe85a8df9368758ebc1e176327b659e1e97389f8561c7" +checksum = "433f690c5235d132aebde47e385d3e21ef244b28b1f0d1ad3d479b9679bc7be2" dependencies = [ "bytecount", "cow-utils", @@ -1458,12 +1447,13 @@ dependencies = [ [[package]] name = "oxc_ecmascript" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c634665e0be5dde95549146734ab4939b8d1b5d2e7cc006d38b9f5d17a58a2" +checksum = "a3e6e129f51055adb903e0fd5d0d412e1adf2244c7f592596850fc1a3ae33c2b" dependencies = [ "dragonbox_ecma", "itoa", + "memchr", "num-bigint", "num-traits", "oxc_ast", @@ -1475,9 +1465,9 @@ dependencies = [ [[package]] name = "oxc_estree" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcdd8235762cc9305d619842b73c1e89a0ebec8ccf2f27142ef597521443c1f" +checksum = "d20e8ab103436f676b4f2e67838de0f658fe06409804d8f5741ac6ec09b3d539" [[package]] name = "oxc_index" @@ -1491,9 +1481,9 @@ dependencies = [ [[package]] name = "oxc_parser" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "635c4e1bb876a9d4ee0e338fa68547a1d75add58637e5c3921fb81ae10a60439" +checksum = "b33d6f23016689c207ecf7ccf62656bbb4b453808e3915dbe562b330f7bf53a0" dependencies = [ "bitflags", "cow-utils", @@ -1515,9 +1505,9 @@ dependencies = [ [[package]] name = "oxc_regular_expression" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae3f2c42773d16336a75d5c61dae45a34aea399f0b5399a7a25c8509d79662f" +checksum = "d105b439894681c19d35b9b42e4daac6425f0753ce1a289232502f2d55347468" dependencies = [ "bitflags", "oxc_allocator", @@ -1532,9 +1522,9 @@ dependencies = [ [[package]] name = "oxc_semantic" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b24ee2095e2ddac60c2063b59693bbf2b80936c8a9e036463b153a203857831b" +checksum = "7a6aad2cce0be6fe0967e003927128eff196ba1baec0a8fdf9bafe8908543875" dependencies = [ "itertools 0.15.0", "memchr", @@ -1568,9 +1558,9 @@ dependencies = [ [[package]] name = "oxc_span" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb5bee6f7a9829ddc4d8c05102fe1aa7e2ca31c7ff0bcfbb7069ca977334840" +checksum = "982988d6278f598e8a38ea4ab03b4883b673ac2cb5d96f588a42d8e868eed002" dependencies = [ "compact_str", "oxc_allocator", @@ -1581,9 +1571,9 @@ dependencies = [ [[package]] name = "oxc_str" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c04d966af690d3b780ee4c47436174e558750eed6ca40b07d695fa4910ad8e33" +checksum = "3c0b6c6915f8fc8a395db7065b5b764067a9694c1e88320d095c9e88ce30d28f" dependencies = [ "compact_str", "hashbrown 0.17.1", @@ -1594,9 +1584,9 @@ dependencies = [ [[package]] name = "oxc_syntax" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684d5f6db25b6e3d026582b3926166c80eeda9aac8a879782292c6a33b7d13a0" +checksum = "f0e64bb2b43d48a43636ceaafaed251e98ee79daca32558bfe99664064ff1923" dependencies = [ "bitflags", "cow-utils", @@ -1614,9 +1604,9 @@ dependencies = [ [[package]] name = "oxc_transformer" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec592c64f6455678cbdb76635144f76825fcaf85f9509d814bd6a9e2bfde160" +checksum = "e30a2ba7cc85c085aff8464456f9da27d9d0418018a5c9a09bfd4647801c624f" dependencies = [ "base64", "compact_str", @@ -1644,9 +1634,9 @@ dependencies = [ [[package]] name = "oxc_traverse" -version = "0.155.0" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ba98ff0dc34cb2e45bcbe3cee395e792298fad77ca63c574766571f859cc56" +checksum = "91916516441681a16b0f66aa8e32e1cca5a945f305450c9ef064489b6f5997e9" dependencies = [ "itoa", "oxc_allocator", @@ -2029,9 +2019,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +checksum = "e5e76742e5294153d4dde1207dbec5bdd81eef6fabdc0d2118babadabfd858aa" dependencies = [ "bitflags", "errno", @@ -2504,21 +2494,33 @@ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" [[package]] name = "unicode-width" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" +checksum = "ca718471876992059f251e33aafc334346ada08042b7661dd1fe313a9bced557" [[package]] name = "utf16_iter" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" +checksum = "1c7de35d9d8757dbc1f5125dc8b51438c68b4430546a735c3a9b91aaaaf9a18a" +dependencies = [ + "utf_types", +] [[package]] name = "utf8_iter" -version = "1.0.4" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0" +dependencies = [ + "utf_types", +] + +[[package]] +name = "utf_types" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6" [[package]] name = "vsimd" @@ -2538,12 +2540,11 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409" +checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c" dependencies = [ "cfg-if", - "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", @@ -2551,9 +2552,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.79" +version = "0.4.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e" +checksum = "5e14e0327cb5368ad60ccb22d04a9827a693c95a926d8d125e9fa39e0baec501" dependencies = [ "js-sys", "tokio", @@ -2562,9 +2563,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535" +checksum = "6e931a02a39abdbf66966fc35902b5ed58344750a70885bed4ebb3d8eaf28ed9" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2572,9 +2573,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7" +checksum = "2ca4b54280e455bd831e33a6b8e734baf432fe63fbc35c42ac14ce67a043a53a" dependencies = [ "bumpalo", "proc-macro2", @@ -2585,20 +2586,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6" +checksum = "3b1f9c3798725016c6ee5f2f57869ec0831e8bbc0ab0310a86e787e97f41389e" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.79" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae7499dfd45780a0a91d7ee6bb9ac51970a4479a41a89da443fdda5a39547d42" +checksum = "5b4913c0ade07e01ab574b20d2741538f070efa12cb7a1a1e2d5df6ea41cf522" dependencies = [ - "async-trait", "cast", "js-sys", "libm", @@ -2616,9 +2616,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.79" +version = "0.3.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b84b5ac638bfb168196a1a461fcc8f46a294a18b1b6be52133b4e0db122cc9f" +checksum = "238071aa4c5b268e57d21018621a2e2403c29dd11c55dbdf790ed47fdb9241c0" dependencies = [ "proc-macro2", "quote", @@ -2627,15 +2627,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-shared" -version = "0.2.129" +version = "0.2.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f692aa943ccd88363733b77063f32cfed5bc6cbea8e6e8b251b302f881606fe" +checksum = "9ab365ce29ba0232367502b2894556ae77a9c214d33dbf453fdba7f586905918" [[package]] name = "web-sys" -version = "0.3.106" +version = "0.3.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4" +checksum = "d7d179596ff5ec0f6de4db64d54011bde6289cc49603d3a6e4ce3f329207ab88" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/apps/landing/package.json b/apps/landing/package.json index ea70bef19..9d990a9ae 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -28,7 +28,7 @@ "react-markdown": "^10.1.0", "react-server-dom-webpack": "^19.3.1", "react-syntax-highlighter": "^16.1.2", - "vinext": "^1.3.1" + "vinext": "^1.4.1" }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", @@ -36,11 +36,11 @@ "@mdx-js/rollup": "^3.1.1", "@types/body-scroll-lock": "^3.1.2", "@types/mdx": "^2.0.14", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@types/react-syntax-highlighter": "^15.5.13", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "@vitejs/plugin-rsc": "^0.5.38", "babel-plugin-react-compiler": "^1.0.0", "typescript": "^7.0.2", diff --git a/apps/next/package.json b/apps/next/package.json index 88e20911f..aeb1a1922 100644 --- a/apps/next/package.json +++ b/apps/next/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@devup-ui/next-plugin": "workspace:^", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/apps/react-18/package.json b/apps/react-18/package.json index 7dc136ef9..c15c33190 100644 --- a/apps/react-18/package.json +++ b/apps/react-18/package.json @@ -21,7 +21,7 @@ "@playwright/test": "^1.64.1", "@types/react": "^18.3.31", "@types/react-dom": "^18.3.7", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "typescript": "^7.0.2", "vite": "^8.3.5" } diff --git a/apps/rsbuild/package.json b/apps/rsbuild/package.json index dd316fe23..97f99e2c5 100644 --- a/apps/rsbuild/package.json +++ b/apps/rsbuild/package.json @@ -16,7 +16,7 @@ "@devup-ui/react": "workspace:^" }, "devDependencies": { - "@rsbuild/core": "^2.2.14", + "@rsbuild/core": "^2.3.0", "@rsbuild/plugin-react": "^2.1.1", "@devup-ui/rsbuild-plugin": "workspace:^" } diff --git a/apps/vinext-rsc-css-repro/package.json b/apps/vinext-rsc-css-repro/package.json index d0d87f5f5..d90927961 100644 --- a/apps/vinext-rsc-css-repro/package.json +++ b/apps/vinext-rsc-css-repro/package.json @@ -12,13 +12,13 @@ "react": "^19.3.1", "react-dom": "^19.3.1", "react-server-dom-webpack": "^19.3.1", - "vinext": "^1.3.1" + "vinext": "^1.4.1" }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "@vitejs/plugin-rsc": "^0.5.38", "typescript": "^7.0.2", "vite": "^8.3.5" diff --git a/apps/vite-lib/package.json b/apps/vite-lib/package.json index 23e63616b..9f0abfdcb 100644 --- a/apps/vite-lib/package.json +++ b/apps/vite-lib/package.json @@ -18,10 +18,10 @@ "devDependencies": { "vite-plugin-dts": "^5.1.2", "@devup-ui/vite-plugin": "workspace:^", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "vite": "^8.3.5", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0" } } diff --git a/apps/vite/package.json b/apps/vite/package.json index 6802aa027..b50ec40b2 100644 --- a/apps/vite/package.json +++ b/apps/vite/package.json @@ -18,9 +18,9 @@ "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", "vite": "^8.3.5", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/benchmark/next-chakra-ui/package.json b/benchmark/next-chakra-ui/package.json index ae0050a59..4c6e8b741 100644 --- a/benchmark/next-chakra-ui/package.json +++ b/benchmark/next-chakra-ui/package.json @@ -19,7 +19,7 @@ "react-icons": "^5.7.0" }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2" diff --git a/benchmark/next-devup-ui-collapse/package.json b/benchmark/next-devup-ui-collapse/package.json index ce18a189f..94623e78d 100644 --- a/benchmark/next-devup-ui-collapse/package.json +++ b/benchmark/next-devup-ui-collapse/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@devup-ui/next-plugin": "workspace:^", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/benchmark/next-devup-ui-single-turbo/package.json b/benchmark/next-devup-ui-single-turbo/package.json index c7a18b7e3..1dffc47ad 100644 --- a/benchmark/next-devup-ui-single-turbo/package.json +++ b/benchmark/next-devup-ui-single-turbo/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@devup-ui/next-plugin": "workspace:^", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/benchmark/next-devup-ui-single/package.json b/benchmark/next-devup-ui-single/package.json index 454a62b24..8ceae4faf 100644 --- a/benchmark/next-devup-ui-single/package.json +++ b/benchmark/next-devup-ui-single/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@devup-ui/next-plugin": "workspace:^", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/benchmark/next-devup-ui-turbo/package.json b/benchmark/next-devup-ui-turbo/package.json index ef058ac35..7abc26a2d 100644 --- a/benchmark/next-devup-ui-turbo/package.json +++ b/benchmark/next-devup-ui-turbo/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@devup-ui/next-plugin": "workspace:^", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/benchmark/next-devup-ui/package.json b/benchmark/next-devup-ui/package.json index 8b20c4e2b..4d1b00101 100644 --- a/benchmark/next-devup-ui/package.json +++ b/benchmark/next-devup-ui/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@devup-ui/next-plugin": "workspace:^", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/benchmark/next-kuma-ui/package.json b/benchmark/next-kuma-ui/package.json index 8aec9bc1d..b09d35b76 100644 --- a/benchmark/next-kuma-ui/package.json +++ b/benchmark/next-kuma-ui/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@kuma-ui/next-plugin": "^1.4.2", "typescript": "^7.0.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0" } diff --git a/benchmark/next-mui/package.json b/benchmark/next-mui/package.json index a52fc372e..352c9a5ca 100644 --- a/benchmark/next-mui/package.json +++ b/benchmark/next-mui/package.json @@ -19,7 +19,7 @@ "react-icons": "^5.7.0" }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2" diff --git a/benchmark/next-panda-css/package.json b/benchmark/next-panda-css/package.json index 1604287ec..0dd75a23a 100644 --- a/benchmark/next-panda-css/package.json +++ b/benchmark/next-panda-css/package.json @@ -19,7 +19,7 @@ "@pandacss/dev": "^2.4.0", "@pandacss/preset-base": "^2.4.0", "@pandacss/preset-panda": "^2.4.0", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2" diff --git a/benchmark/next-stylex-turbo-devup-ui/package.json b/benchmark/next-stylex-turbo-devup-ui/package.json index d1b4dee6f..3e4913eff 100644 --- a/benchmark/next-stylex-turbo-devup-ui/package.json +++ b/benchmark/next-stylex-turbo-devup-ui/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "rimraf": "^6.1.3", diff --git a/benchmark/next-stylex-turbo/package.json b/benchmark/next-stylex-turbo/package.json index 2d63f67f7..9534c941f 100644 --- a/benchmark/next-stylex-turbo/package.json +++ b/benchmark/next-stylex-turbo/package.json @@ -18,10 +18,10 @@ "devDependencies": { "@stylexjs/babel-plugin": "^0.19.1", "@stylexjs/postcss-plugin": "^0.19.1", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "postcss": "^8.5.31", + "postcss": "^8.5.32", "rimraf": "^6.1.3", "typescript": "^7.0.2" } diff --git a/benchmark/next-stylex/package.json b/benchmark/next-stylex/package.json index a4055afcd..c4ccf75a2 100644 --- a/benchmark/next-stylex/package.json +++ b/benchmark/next-stylex/package.json @@ -19,13 +19,13 @@ "react-dom": "~19.3.1" }, "devDependencies": { - "@babel/core": "^8.0.9", + "@babel/core": "^8.0.10", "@babel/plugin-syntax-flow": "^8.0.1", "@babel/plugin-syntax-jsx": "^8.0.1", "@babel/plugin-syntax-typescript": "^8.0.3", "@stylexjs/babel-plugin": "^0.19.1", "@stylexjs/nextjs-plugin": "^0.11.1", - "@types/node": "~26.6.5", + "@types/node": "~26.6.6", "@types/react": "~19.3.0", "@types/react-dom": "~19.3.0", "@types/react-test-renderer": "^19.3.0", diff --git a/benchmark/next-tailwind-turbo-devup-ui/package.json b/benchmark/next-tailwind-turbo-devup-ui/package.json index ec2188e60..ecc74ed6a 100644 --- a/benchmark/next-tailwind-turbo-devup-ui/package.json +++ b/benchmark/next-tailwind-turbo-devup-ui/package.json @@ -18,8 +18,8 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", - "postcss": "^8.5.31", - "@types/node": "^26.6.5", + "postcss": "^8.5.32", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", diff --git a/benchmark/next-tailwind-turbo/package.json b/benchmark/next-tailwind-turbo/package.json index 38617824f..c9974af55 100644 --- a/benchmark/next-tailwind-turbo/package.json +++ b/benchmark/next-tailwind-turbo/package.json @@ -17,8 +17,8 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", - "postcss": "^8.5.31", - "@types/node": "^26.6.5", + "postcss": "^8.5.32", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", diff --git a/benchmark/next-tailwind/package.json b/benchmark/next-tailwind/package.json index 3d8d6625b..aa05c79b2 100644 --- a/benchmark/next-tailwind/package.json +++ b/benchmark/next-tailwind/package.json @@ -17,8 +17,8 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", - "postcss": "^8.5.31", - "@types/node": "^26.6.5", + "postcss": "^8.5.32", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", diff --git a/benchmark/next-vanilla-extract-devup-ui/package.json b/benchmark/next-vanilla-extract-devup-ui/package.json index 2dd43b9ea..3c6e9ed6a 100644 --- a/benchmark/next-vanilla-extract-devup-ui/package.json +++ b/benchmark/next-vanilla-extract-devup-ui/package.json @@ -17,7 +17,7 @@ "react-icons": "^5.7.0" }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", diff --git a/benchmark/next-vanilla-extract/package.json b/benchmark/next-vanilla-extract/package.json index 8676d8408..6de7fa2ff 100644 --- a/benchmark/next-vanilla-extract/package.json +++ b/benchmark/next-vanilla-extract/package.json @@ -17,7 +17,7 @@ "react-icons": "^5.7.0" }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", diff --git a/benchmark/vinext-devup-ui/package.json b/benchmark/vinext-devup-ui/package.json index a29123c51..cf3b92042 100644 --- a/benchmark/vinext-devup-ui/package.json +++ b/benchmark/vinext-devup-ui/package.json @@ -11,12 +11,12 @@ "dependencies": { "react": "^19.3.1", "react-dom": "^19.3.1", - "vinext": "^1.3.1", + "vinext": "^1.4.1", "@devup-ui/react": "workspace:^" }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vitejs/plugin-rsc": "^0.5.38", diff --git a/bindings/devup-ui-wasm/Cargo.toml b/bindings/devup-ui-wasm/Cargo.toml index 849fc850e..67e4b88f5 100644 --- a/bindings/devup-ui-wasm/Cargo.toml +++ b/bindings/devup-ui-wasm/Cargo.toml @@ -14,7 +14,7 @@ categories = ["development-tools", "wasm", "web-programming"] crate-type = ["cdylib"] [dependencies] -wasm-bindgen = "0.2.129" +wasm-bindgen = "0.2.130" extractor = { path = "../../libs/extractor" } sheet = { path = "../../libs/sheet" } css = { path = "../../libs/css" } @@ -26,7 +26,7 @@ rustc-hash = "2.1.3" # code size when deploying. console_error_panic_hook = { version = "0.1.7", optional = true } bimap = { version = "0.6.3", features = ["serde"] } -js-sys = "0.3.106" +js-sys = "0.3.107" serde_json = "1.0.154" serde-wasm-bindgen = "0.6.5" # Not used directly. Declared only to enable the `wasm_js` feature on the @@ -42,7 +42,7 @@ getrandom = { version = "0.4.3", features = ["wasm_js"] } boa_engine = { version = "0.22.0", features = ["js"] } [dev-dependencies] -wasm-bindgen-test = "0.3.79" +wasm-bindgen-test = "0.3.80" serial_test = "4.0.1" insta = "1.49.0" rstest = "0.28.0" @@ -56,7 +56,24 @@ workspace = true # only the features listed here, so it has to be allowed explicitly. It is part # of the WebAssembly 2.0 baseline (Chrome 74, Firefox 62, Safari 14.1, Node 12). wasm-opt = [ + # Simplify the Rust output before expanding its control-flow expressions. "-Oz", + "--converge", + # Flattening gives the relooper the simple IR it needs to compact control flow. + "--flatten", + "--rereloop", + "-Oz", + "--converge", + # Share similar generated AST constructors after local size optimization. + "--merge-similar-functions", + # Simplify the merged bodies before judging the resulting module size. + "-Oz", + "--converge", + # Normalize the emitted control flow before whole-program value analysis. + "--roundtrip", + "--gufa", + "-Oz", + "--converge", "--enable-bulk-memory", "--enable-nontrapping-float-to-int", "--enable-sign-ext", diff --git a/bindings/devup-ui-wasm/script.js b/bindings/devup-ui-wasm/script.js index 27b3139cc..5d2a73c35 100644 --- a/bindings/devup-ui-wasm/script.js +++ b/bindings/devup-ui-wasm/script.js @@ -1,4 +1,51 @@ -import { writeFileSync } from 'node:fs' +import fs from 'node:fs' +import path from 'node:path' + +import ts from '@typescript/typescript6' + +const fileName = path.resolve('pkg/index.js'), + text = fs.readFileSync(fileName, 'utf8') +const source = ts.createSourceFile( + fileName, + text, + ts.ScriptTarget.Latest, + true, + ts.ScriptKind.JS, +) +const options = { + allowJs: true, + checkJs: false, + noLib: true, + noResolve: true, + target: ts.ScriptTarget.ESNext, + module: ts.ModuleKind.CommonJS, +} +const host = { + getSourceFile: (name) => + path.resolve(name) === fileName ? source : undefined, + getDefaultLibFileName: () => '', + writeFile: () => { + throw Error('program emit forbidden') + }, + getCurrentDirectory: () => path.dirname(fileName), + getDirectories: () => [], + fileExists: (name) => path.resolve(name) === fileName, + readFile: (name) => (path.resolve(name) === fileName ? text : undefined), + useCaseSensitiveFileNames: () => true, + getCanonicalFileName: (name) => name, + getNewLine: () => '\n', +} +const program = ts.createProgram([fileName], options, host) +const diagnostics = program.getSyntacticDiagnostics(source) +if (diagnostics.length) throw Error(ts.formatDiagnostics(diagnostics, host)) +const printed = ts + .createPrinter({ + removeComments: true, + newLine: ts.NewLineKind.LineFeed, + noEmitHelpers: true, + }) + .printFile(source) +fs.writeFileSync(fileName, printed) // support mjs config -writeFileSync('pkg/package.json', JSON.stringify({}), 'utf8') +fs.writeFileSync('pkg/package.json', JSON.stringify({}), 'utf8') diff --git a/bindings/devup-ui-wasm/src/resolver_state_tests.rs b/bindings/devup-ui-wasm/src/resolver_state_tests.rs index 0e0d1cfb0..f2252dc70 100644 --- a/bindings/devup-ui-wasm/src/resolver_state_tests.rs +++ b/bindings/devup-ui-wasm/src/resolver_state_tests.rs @@ -152,10 +152,19 @@ fn clean_extraction_state_when_another_extraction_failed() -> Result<(), String> Ok(()) } -#[test] +#[rstest::rstest] +#[case::global("const {color} = require('./missing'); exports.color = color;", true)] +#[case::shadowed( + "const require = () => ({color: 'red'}); const {color} = require('./shadowed'); exports.color = color;", + false +)] #[serial_test::serial] -fn diagnostic_when_imported_constant_exploration_uses_shadowed_require_retains_ingress() --> Result<(), String> { +fn require_exploration_keeps_real_site_and_shadowed_value( + #[case] helper: &'static str, + #[case] global: bool, +) -> Result<(), String> { + let _scope = crate::TestStateGuard::new(); + crate::state::reset_state_internal(); // Given let source = "import { Box } from '@devup-ui/react';\nimport { color } from './helper';\nconst x = ;"; let state = Rc::new(RefCell::new(ResolverState::new("entry.tsx", source))); @@ -166,15 +175,16 @@ fn diagnostic_when_imported_constant_exploration_uses_shadowed_require_retains_i ("entry.tsx", "./helper") => { let module = ResolvedModule { path: "helper.ts".to_string(), - code: "const require = () => ({color: 'red'}); const {color} = require('./shadowed'); exports.color = color;".to_string(), + code: helper.to_string(), }; recorded.borrow_mut().cache(&module, &request); Some(module) } - ("helper.ts", "./shadowed") => { + ("helper.ts", "./shadowed") => panic!("a shadowed require must never request a module"), + ("helper.ts", "./missing") => { recorded .borrow_mut() - .record(&request, "shadowed resolver failure"); + .record(&request, "missing resolver failure"); None } other => panic!("unexpected module reference: {other:?}"), @@ -196,8 +206,41 @@ fn diagnostic_when_imported_constant_exploration_uses_shadowed_require_retains_i Some(&state), ); // Then - let error = result.err().unwrap_or_default(); - assert!(error.starts_with("entry.tsx:2:23: module resolver failed for `./shadowed` from `helper.ts`: shadowed resolver failure")); - assert_eq!(export_sheet_internal()?, before); + if global { + let error = result + .err() + .ok_or("global require must preserve the resolver failure")?; + assert!(error.starts_with("helper.ts:1:25: module resolver failed for `./missing` from `helper.ts`: missing resolver failure"), "{error}"); + assert_eq!(export_sheet_internal()?, before); + } else { + assert_eq!( + result?.code(), + "import \"df/devup-ui.css\";\nimport { color } from \"./helper\";\nconst x =
;\n" + ); + } + Ok(()) +} + +#[test] +fn cached_request_when_no_semantic_site_retains_ingress() -> Result<(), String> { + // Given + let source = "import { Box } from '@devup-ui/react';\nimport { color } from './helper';\nconst x = ;"; + let mut state = ResolverState::new("entry.tsx", source); + let ingress = state.request("./helper", "entry.tsx").ok_or("no ingress")?; + state.cache( + &ResolvedModule { + path: "helper.ts".to_string(), + code: "const target = './missing'; require(target);".to_string(), + }, + &ingress, + ); + let request = state + .request("./missing", "helper.ts") + .ok_or("no request")?; + // When + state.record(&request, "cached resolver failure"); + // Then + let error = state.check().err().ok_or("no resolver diagnostic")?; + assert!(error.starts_with("entry.tsx:2:23: module resolver failed for `./missing` from `helper.ts`: cached resolver failure"), "{error}"); Ok(()) } diff --git a/bun.lock b/bun.lock index 54f209162..202e18015 100644 --- a/bun.lock +++ b/bun.lock @@ -8,16 +8,16 @@ "@devup-ui/eslint-plugin": "workspace:^", "@playwright/test": "^1.64.1", "@types/bun": "^1.4.4", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@typescript/native": "npm:typescript@^7.0.2", "@typescript/typescript6": "^6.0.2", "bun-test-env-dom": "^1.1.0", - "eslint": "^10.13.0", + "eslint": "^10.14.0", "eslint-plugin-devup": "^2.1.0", "eslint-plugin-eslint-plugin": "^7.6.2", "eslint-plugin-jsonc": "^3.4.2", - "eslint-plugin-mdx": "^3.8.2", - "globals": "^17.13.0", + "eslint-plugin-mdx": "^3.9.1", + "globals": "^17.14.0", "husky": "^9.1.7", "typescript": "^7.0.2", }, @@ -42,7 +42,7 @@ "react-markdown": "^10.1.0", "react-server-dom-webpack": "^19.3.1", "react-syntax-highlighter": "^16.1.2", - "vinext": "^1.3.1", + "vinext": "^1.4.1", }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", @@ -50,11 +50,11 @@ "@mdx-js/rollup": "^3.1.1", "@types/body-scroll-lock": "^3.1.2", "@types/mdx": "^2.0.14", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@types/react-syntax-highlighter": "^15.5.13", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "@vitejs/plugin-rsc": "^0.5.38", "babel-plugin-react-compiler": "^1.0.0", "typescript": "^7.0.2", @@ -73,7 +73,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -93,7 +93,7 @@ "@playwright/test": "^1.64.1", "@types/react": "^18.3.31", "@types/react-dom": "^18.3.7", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "typescript": "^7.0.2", "vite": "^8.3.5", }, @@ -108,7 +108,7 @@ }, "devDependencies": { "@devup-ui/rsbuild-plugin": "workspace:^", - "@rsbuild/core": "^2.2.14", + "@rsbuild/core": "^2.3.0", "@rsbuild/plugin-react": "^2.1.1", }, }, @@ -120,13 +120,13 @@ "react": "^19.3.1", "react-dom": "^19.3.1", "react-server-dom-webpack": "^19.3.1", - "vinext": "^1.3.1", + "vinext": "^1.4.1", }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "@vitejs/plugin-rsc": "^0.5.38", "typescript": "^7.0.2", "vite": "^8.3.5", @@ -143,10 +143,10 @@ }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "typescript": "^7.0.2", "vite": "^8.3.5", }, @@ -160,9 +160,9 @@ }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", - "@vitejs/plugin-react": "^6.1.2", + "@vitejs/plugin-react": "^6.2.1", "typescript": "^7.0.2", "vite": "^8.3.5", "vite-plugin-dts": "^5.1.2", @@ -181,7 +181,7 @@ "react-icons": "^5.7.0", }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -198,7 +198,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -215,7 +215,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -232,7 +232,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -249,7 +249,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -266,7 +266,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -283,7 +283,7 @@ }, "devDependencies": { "@kuma-ui/next-plugin": "^1.4.2", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -302,7 +302,7 @@ "react-icons": "^5.7.0", }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -320,7 +320,7 @@ "@pandacss/dev": "^2.4.0", "@pandacss/preset-base": "^2.4.0", "@pandacss/preset-panda": "^2.4.0", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -338,13 +338,13 @@ "react-dom": "~19.3.1", }, "devDependencies": { - "@babel/core": "^8.0.9", + "@babel/core": "^8.0.10", "@babel/plugin-syntax-flow": "^8.0.1", "@babel/plugin-syntax-jsx": "^8.0.1", "@babel/plugin-syntax-typescript": "^8.0.3", "@stylexjs/babel-plugin": "^0.19.1", "@stylexjs/nextjs-plugin": "^0.11.1", - "@types/node": "~26.6.5", + "@types/node": "~26.6.6", "@types/react": "~19.3.0", "@types/react-dom": "~19.3.0", "@types/react-test-renderer": "^19.3.0", @@ -367,10 +367,10 @@ "devDependencies": { "@stylexjs/babel-plugin": "^0.19.1", "@stylexjs/postcss-plugin": "^0.19.1", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "postcss": "^8.5.31", + "postcss": "^8.5.32", "rimraf": "^6.1.3", "typescript": "^7.0.2", }, @@ -387,7 +387,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "rimraf": "^6.1.3", @@ -405,10 +405,10 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "postcss": "^8.5.31", + "postcss": "^8.5.32", "tailwindcss": "^4.3.3", "typescript": "^7.0.2", }, @@ -424,10 +424,10 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "postcss": "^8.5.31", + "postcss": "^8.5.32", "tailwindcss": "^4.3.3", "typescript": "^7.0.2", }, @@ -445,10 +445,10 @@ "devDependencies": { "@devup-ui/next-plugin": "workspace:^", "@tailwindcss/postcss": "^4.3.3", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", - "postcss": "^8.5.31", + "postcss": "^8.5.32", "tailwindcss": "^4.3.3", "typescript": "^7.0.2", }, @@ -464,7 +464,7 @@ "react-icons": "^5.7.0", }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vanilla-extract/next-plugin": "^2.5.2", @@ -483,7 +483,7 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "typescript": "^7.0.2", @@ -496,11 +496,11 @@ "@devup-ui/react": "workspace:^", "react": "^19.3.1", "react-dom": "^19.3.1", - "vinext": "^1.3.1", + "vinext": "^1.4.1", }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vitejs/plugin-rsc": "^0.5.38", @@ -537,15 +537,15 @@ }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", - "@storybook/addon-docs": "^10.6.3", - "@storybook/addon-onboarding": "^10.6.3", - "@storybook/react-vite": "^10.6.3", + "@storybook/addon-docs": "^10.6.5", + "@storybook/addon-onboarding": "^10.6.5", + "@storybook/react-vite": "^10.6.5", "@types/react": "^19.3.0", "@typescript/typescript6": "^6.0.2", - "eslint-plugin-storybook": "^10.6.3", + "eslint-plugin-storybook": "^10.6.5", "react": "^19.3.1", "rollup-plugin-preserve-directives": "^0.4.0", - "storybook": "^10.6.3", + "storybook": "^10.6.5", "typescript": "^7.0.2", "vite": "^8.3.5", "vite-plugin-dts": "^5.1.2", @@ -559,11 +559,11 @@ "name": "@devup-ui/eslint-plugin", "version": "1.0.22", "dependencies": { - "@typescript-eslint/utils": "^8.72.0", - "typescript-eslint": "^8.72.0", + "@typescript-eslint/utils": "^8.72.1", + "typescript-eslint": "^8.72.1", }, "devDependencies": { - "@typescript-eslint/rule-tester": "^8.72.0", + "@typescript-eslint/rule-tester": "^8.72.1", "@typescript/native": "npm:typescript@^7.0.2", "typescript": "npm:@typescript/typescript6@^6.0.2", }, @@ -604,7 +604,7 @@ "csstype-extra": "latest", }, "devDependencies": { - "@types/node": "^26.6.5", + "@types/node": "^26.6.6", "@types/react": "^19.3.0", "@typescript/typescript6": "^6.0.2", "react": "^19.3.1", @@ -639,7 +639,7 @@ "@devup-ui/wasm": "workspace:^", }, "devDependencies": { - "@rsbuild/core": "^2.2.14", + "@rsbuild/core": "^2.3.0", "typescript": "^7.0.2", }, "peerDependencies": { @@ -653,7 +653,7 @@ "dependencies": { "@devup-ui/plugin-utils": "workspace:^", "@devup-ui/wasm": "workspace:^", - "parse5": "^8.0.1", + "parse5": "^8.1.0", }, "devDependencies": { "typescript": "^7.0.2", @@ -691,15 +691,15 @@ "@babel/compat-data": ["@babel/compat-data@7.29.7", "", {}, "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg=="], - "@babel/core": ["@babel/core@8.0.9", "", { "dependencies": { "@babel/code-frame": "^8.0.6", "@babel/generator": "^8.0.6", "@babel/helper-compilation-targets": "^8.0.7", "@babel/helpers": "^8.0.8", "@babel/parser": "^8.0.8", "@babel/template": "^8.0.0", "@babel/traverse": "^8.0.7", "@babel/types": "^8.0.8", "@types/gensync": "^1.0.5", "convert-source-map": "^2.0.0", "empathic": "^2.0.1", "gensync": "^1.0.0-beta.2", "import-meta-resolve": "^4.2.0", "json5": "^2.2.3", "obug": "^3.0.0", "verkit": "^0.5.0" } }, "sha512-wXtyKlpR/pXf/u0vmib+OBakQaIzLglLcRoKpWxCHW/whqq7YfQYPD0IAAl9H/evi40MyLIjYYdvb6N+9DI2yA=="], + "@babel/core": ["@babel/core@8.0.10", "", { "dependencies": { "@babel/code-frame": "^8.0.6", "@babel/generator": "^8.0.10", "@babel/helper-compilation-targets": "^8.0.7", "@babel/helpers": "^8.0.10", "@babel/parser": "^8.0.10", "@babel/template": "^8.0.0", "@babel/traverse": "^8.0.10", "@babel/types": "^8.0.10", "@types/gensync": "^1.0.5", "convert-source-map": "^2.0.0", "empathic": "^2.0.1", "gensync": "^1.0.0-beta.2", "import-meta-resolve": "^4.2.0", "json5": "^2.2.3", "obug": "^3.0.0", "verkit": "^0.5.0" } }, "sha512-T6dEcoMJ3L1hyLuNfRXcVlqQrN79kU/SB5bDygVgQNIOUgStdyEGzigtRA9K+9Coh7SZUSt543oWRBxvqYdyuQ=="], - "@babel/generator": ["@babel/generator@8.0.6", "", { "dependencies": { "@babel/parser": "^8.0.6", "@babel/types": "^8.0.6", "@jridgewell/gen-mapping": "0.4.0-beta.0", "@jridgewell/trace-mapping": "^0.3.31", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-/pcanjdRsonCexCuxgGD8fKnBLLzk2i9uM4kmcmGyyev2R5YDs+rafMYZ89RvaGY1mW8T7C5au0TyYaEeHBGng=="], + "@babel/generator": ["@babel/generator@8.0.10", "", { "dependencies": { "@babel/parser": "^8.0.10", "@babel/types": "^8.0.10", "@jridgewell/gen-mapping": "0.4.0-beta.0", "@jridgewell/trace-mapping": "^0.3.31", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-iC9p3U4Y3vp0qKjRcfFeNzpj+kkK8BVYZTbQepBWVD7vOBLH6ji0drNzKPTPtumFd2w2r/hbEKYjG4pscKa4bg=="], "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" } }, "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw=="], "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@8.0.7", "", { "dependencies": { "@babel/compat-data": "^8.0.5", "@babel/helper-validator-option": "^8.0.0", "browserslist": "^4.24.0", "flru": "1.0.2", "verkit": "^0.5.0" } }, "sha512-ilAZCdOOlOVA7dQbaFNw2f/59p6GW33NxTopc3DvEE3efp3ZXTrGX/yZScaKw8/vd9bq31Ag0EcXiLw32bAgJg=="], - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.29.7", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg=="], + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.29.12", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/traverse": "^7.29.12", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-ACxGoWMV866q/QlZHeCOaQZAR5QclKsIvkAmlDemqjm6+6Bynijs1mH068BzH2N2e+wSuDmBWY87fqKfvhi1Lw=="], "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.29.10", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "regexpu-core": "^6.5.3", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-/YY9soQuWa8TURtHXHT+GbklpbAA+dZErxFGHIr6qgDg96xuGWrTAs1+MfjgVJPF0YLQsOVsOYs8lhgsPbOinQ=="], @@ -731,9 +731,9 @@ "@babel/helper-wrap-function": ["@babel/helper-wrap-function@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw=="], - "@babel/helpers": ["@babel/helpers@8.0.8", "", { "dependencies": { "@babel/template": "^8.0.0", "@babel/types": "^8.0.8" } }, "sha512-FBmhiDWs625wHg03OKiLQDeT6LOc2lWBbW97Yqs2iI1tZcucjpmYnO29NHsQ83XxKvredcvUymW/AAn2UtnakA=="], + "@babel/helpers": ["@babel/helpers@8.0.10", "", { "dependencies": { "@babel/template": "^8.0.0", "@babel/types": "^8.0.10" } }, "sha512-tBG9yuaR26JJWFafcl/Dk4eib6bkRJ9H5e6lENcwZqFudA9ImNCuMXLjB3/t+Ub7/DOZv2Rmi5LCOi8q2DCekQ=="], - "@babel/parser": ["@babel/parser@8.0.8", "", { "dependencies": { "@babel/types": "^8.0.8" }, "bin": "./bin/babel-parser.js" }, "sha512-Gq65JogAr0S2p0BzvfSJboyuiRnxDQApyOqHkKmkrvm+VlLK4gC3pKsiOKEdnhFBemrFbSnOu90mZZWDpiJnmQ=="], + "@babel/parser": ["@babel/parser@8.0.10", "", { "dependencies": { "@babel/types": "^8.0.10" }, "bin": "./bin/babel-parser.js" }, "sha512-h+ah2Kg0ne1Vii892dShj9gky9I5jPzkd8x4s/3xgN/P2bMWmHS3qq59tum3mCVjCBXI8uqfYyYtrfp1Mz6+1w=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w=="], @@ -769,7 +769,7 @@ "@babel/plugin-transform-block-scoped-functions": ["@babel/plugin-transform-block-scoped-functions@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA=="], - "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.29.11", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iARF4jjHSM0v8DImCACPXrwEltBP3DgqDpXTvjAMBAVpyEY0LiGss78wvI+KtmW+IJNEvZ5sOhPDCsOsXsIybA=="], + "@babel/plugin-transform-block-scoping": ["@babel/plugin-transform-block-scoping@7.29.12", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-nEreZBofjfd6FG621xe9Rk3+tMGBXf1nAuFrR6NUGF67fkQbSQf3NrbRuhgWRn+zb0qcy9XVok1GVFI/t9wWVQ=="], "@babel/plugin-transform-class-properties": ["@babel/plugin-transform-class-properties@7.29.7", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA=="], @@ -885,7 +885,7 @@ "@babel/template": ["@babel/template@8.0.0", "", { "dependencies": { "@babel/code-frame": "^8.0.0", "@babel/parser": "^8.0.0", "@babel/types": "^8.0.0" } }, "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ=="], - "@babel/traverse": ["@babel/traverse@8.0.7", "", { "dependencies": { "@babel/code-frame": "^8.0.6", "@babel/generator": "^8.0.6", "@babel/helper-globals": "^8.0.6", "@babel/parser": "^8.0.7", "@babel/template": "^8.0.0", "@babel/types": "^8.0.6", "obug": "^3.0.0" } }, "sha512-bVV0brinsTWgc6ptSIoQo3GbITtl0VZAqEUJbHHcyfDPEu+q/fEvlYEa+6H85HoK8IdksKBFtKJbJFZ6Kff+zg=="], + "@babel/traverse": ["@babel/traverse@8.0.10", "", { "dependencies": { "@babel/code-frame": "^8.0.6", "@babel/generator": "^8.0.10", "@babel/helper-globals": "^8.0.6", "@babel/parser": "^8.0.10", "@babel/template": "^8.0.0", "@babel/types": "^8.0.10", "obug": "^3.0.0" } }, "sha512-t5DaGzMi9WlhMSFT2YavI8gl8yGihoQymSQUkIq9+MUh5tO3Vx9KHwr5gMCzeBdYkvs00xNvr18PxtQTRayucA=="], "@babel/types": ["@babel/types@7.29.11", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.11", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-WCsemW40Cpc6gouC1SrY6PBaZ+oLRlEVY9XBvZBI7il/HyUrb2nJ505wE1MHEFyDZNnrWDEuy4jL50WVHfTTSQ=="], @@ -925,6 +925,12 @@ "@dual-bundle/import-meta-resolve": ["@dual-bundle/import-meta-resolve@4.2.1", "", {}, "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg=="], + "@eloqnt/config": ["@eloqnt/config@0.1.1", "", {}, "sha512-YRDigSaiJEzKDfzTth5kG+L/PKfB3mo8h7yNzpXExPfvQmcD05WoZT57PdhJE0jI+Vva6eb0OCU8hnHHgdME3g=="], + + "@eloqnt/format-json": ["@eloqnt/format-json@0.1.0", "", { "dependencies": { "@eloqnt/config": "^0.1.0" } }, "sha512-4Pkb+HyzgWNJXoU48aJhUyNZSjZvMGooPCNG1ZFmBm55xTiNNPQCNXH66Ob6sXS6RvbWZrRpCf+Uo/Jz9K9g+A=="], + + "@eloqnt/format-po": ["@eloqnt/format-po@0.1.1", "", { "dependencies": { "@eloqnt/config": "^0.1.1", "po-parser": "^2.2.0" } }, "sha512-aLtmIoqXGEaeTT0RcsLN8sZ3aIrsT/c/dVs28zrLhDjO3+vA3KNP+r98N0xq8w/k36+/GIUt4uZNbqcA71GVWw=="], + "@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="], "@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="], @@ -957,57 +963,49 @@ "@emotion/weak-memoize": ["@emotion/weak-memoize@0.4.0", "", {}, "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], - - "@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.18.20", "", { "os": "android", "cpu": "x64" }, "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.18.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.18.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.18.20", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.18.20", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.18.20", "", { "os": "linux", "cpu": "arm" }, "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.18.20", "", { "os": "linux", "cpu": "arm64" }, "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.18.20", "", { "os": "linux", "cpu": "ia32" }, "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.18.20", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.18.20", "", { "os": "linux", "cpu": "s390x" }, "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.18.20", "", { "os": "linux", "cpu": "x64" }, "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.18.20", "", { "os": "none", "cpu": "x64" }, "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.18.20", "", { "os": "openbsd", "cpu": "x64" }, "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.18.20", "", { "os": "sunos", "cpu": "x64" }, "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.18.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.18.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], - - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], - - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], - - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.10.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg=="], @@ -1045,6 +1043,14 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.12", "", {}, "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww=="], + "@formatjs/fast-memoize": ["@formatjs/fast-memoize@3.1.7", "", {}, "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA=="], + + "@formatjs/icu-messageformat-parser": ["@formatjs/icu-messageformat-parser@3.5.18", "", { "dependencies": { "@formatjs/icu-skeleton-parser": "2.1.11" } }, "sha512-wX1efcL8d7K5QapOTRsP/OLTA/kpwe4LwqWyNxDNg5iRs8i9jJbCyxB5P8jc4KOW5oiLzz2DJr+BRY5xMV9+bA=="], + + "@formatjs/icu-skeleton-parser": ["@formatjs/icu-skeleton-parser@2.1.11", "", {}, "sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA=="], + + "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.8.14", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.7" } }, "sha512-8O7V38QmbB11+ryJ3KM/znrzXtiqgpXzqNoqDsndHZZ5/zDKTTL+cf5F0mzXkQEwhx8IlWnqYvEovf2S5EwLTw=="], + "@happy-dom/global-registrator": ["@happy-dom/global-registrator@21.0.4", "", { "dependencies": { "@types/node": ">=20.0.0", "happy-dom": "^21.0.4" } }, "sha512-Bbr0hW9hhDhBf3Jp0EyDlkCbFgbr0z2jd3BMKYOYW+fOkPM4Nx195GMXyCtRCGEgoNn6i09FabXrSkNFm2ONzg=="], "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], @@ -1069,37 +1075,37 @@ "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.3.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ=="], - "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.4", "", { "os": "linux", "cpu": "arm" }, "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw=="], + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.3.4", "", { "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw=="], - "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A=="], + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A=="], - "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ=="], + "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.3.4", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ=="], - "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.4", "", { "os": "linux", "cpu": "none" }, "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q=="], + "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.3.4", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q=="], - "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ=="], + "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.3.4", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ=="], - "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw=="], + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.3.4", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw=="], - "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA=="], + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.3.4", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA=="], - "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg=="], + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.3.4", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg=="], - "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.4" }, "os": "linux", "cpu": "arm" }, "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ=="], + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.3.4" }, "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ=="], - "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64" }, "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ=="], + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ=="], - "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA=="], + "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.3.4" }, "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA=="], - "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.4" }, "os": "linux", "cpu": "none" }, "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ=="], + "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.3.4" }, "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ=="], - "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.4" }, "os": "linux", "cpu": "s390x" }, "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA=="], + "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.3.4" }, "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA=="], - "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.4" }, "os": "linux", "cpu": "x64" }, "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog=="], + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.3.4" }, "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog=="], - "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64" }, "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg=="], + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.3.4" }, "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg=="], - "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.4" }, "os": "linux", "cpu": "x64" }, "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A=="], + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.35.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.3.4" }, "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A=="], "@img/sharp-wasm32": ["@img/sharp-wasm32@0.35.5", "", { "dependencies": { "@emnapi/runtime": "^1.11.3" } }, "sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ=="], @@ -1231,21 +1237,21 @@ "@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.127.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g=="], - "@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.127.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ=="], + "@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.127.0", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ=="], - "@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.127.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA=="], + "@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.127.0", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA=="], - "@oxc-parser/binding-linux-ppc64-gnu": ["@oxc-parser/binding-linux-ppc64-gnu@0.127.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ=="], + "@oxc-parser/binding-linux-ppc64-gnu": ["@oxc-parser/binding-linux-ppc64-gnu@0.127.0", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ=="], - "@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.127.0", "", { "os": "linux", "cpu": "none" }, "sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ=="], + "@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.127.0", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ=="], - "@oxc-parser/binding-linux-riscv64-musl": ["@oxc-parser/binding-linux-riscv64-musl@0.127.0", "", { "os": "linux", "cpu": "none" }, "sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g=="], + "@oxc-parser/binding-linux-riscv64-musl": ["@oxc-parser/binding-linux-riscv64-musl@0.127.0", "", { "os": "linux", "cpu": "none", "libc": "musl" }, "sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g=="], - "@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.127.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q=="], + "@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.127.0", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q=="], - "@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.127.0", "", { "os": "linux", "cpu": "x64" }, "sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ=="], + "@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.127.0", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ=="], - "@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.127.0", "", { "os": "linux", "cpu": "x64" }, "sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg=="], + "@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.127.0", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg=="], "@oxc-parser/binding-openharmony-arm64": ["@oxc-parser/binding-openharmony-arm64@0.127.0", "", { "os": "none", "cpu": "arm64" }, "sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ=="], @@ -1273,21 +1279,21 @@ "@oxc-resolver/binding-linux-arm-musleabihf": ["@oxc-resolver/binding-linux-arm-musleabihf@11.21.2", "", { "os": "linux", "cpu": "arm" }, "sha512-L/Rgas7SrOKy/z7IH+HxSFRqVO4PuLDKLEGKvnhoCBBq3UJ0YzGBou3qMzaAGgkJwsIvX2pBF+7ojzfUhLiZxQ=="], - "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.21.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-CUEYvlX1Fk7E9kUMzuswru1J9HLxMwnpDeQGjQuI4ZH+iNCoa2X9T+pvyzrbsgl7WnIeTFTlNlHsRfVdf5g9/g=="], + "@oxc-resolver/binding-linux-arm64-gnu": ["@oxc-resolver/binding-linux-arm64-gnu@11.21.2", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-CUEYvlX1Fk7E9kUMzuswru1J9HLxMwnpDeQGjQuI4ZH+iNCoa2X9T+pvyzrbsgl7WnIeTFTlNlHsRfVdf5g9/g=="], - "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.21.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-ViN1ZibQyxwC67GpoP33oo+S9UyUnkog13vzQb9+v9bCNvrVzJuk0MRdacjtv/9xfRMVF/eqHFyl8YOeykI10Q=="], + "@oxc-resolver/binding-linux-arm64-musl": ["@oxc-resolver/binding-linux-arm64-musl@11.21.2", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-ViN1ZibQyxwC67GpoP33oo+S9UyUnkog13vzQb9+v9bCNvrVzJuk0MRdacjtv/9xfRMVF/eqHFyl8YOeykI10Q=="], - "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.21.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CU1sCqWnhGqYD5I1HedHk5pujrn7ssDkNB/AEQd/pd3D/EojVSgJUlpbafwIbyhia3PgIfkvdFpRPWSALzVumA=="], + "@oxc-resolver/binding-linux-ppc64-gnu": ["@oxc-resolver/binding-linux-ppc64-gnu@11.21.2", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-CU1sCqWnhGqYD5I1HedHk5pujrn7ssDkNB/AEQd/pd3D/EojVSgJUlpbafwIbyhia3PgIfkvdFpRPWSALzVumA=="], - "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.21.2", "", { "os": "linux", "cpu": "none" }, "sha512-jWVyZtIHca4Gb96x7dag+y69vlei7ffjrsveLkmf2ZhqEAz6ZSBnY1GWvgZUaZlwZP62A3xD092BW97Q5VGc+g=="], + "@oxc-resolver/binding-linux-riscv64-gnu": ["@oxc-resolver/binding-linux-riscv64-gnu@11.21.2", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-jWVyZtIHca4Gb96x7dag+y69vlei7ffjrsveLkmf2ZhqEAz6ZSBnY1GWvgZUaZlwZP62A3xD092BW97Q5VGc+g=="], - "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.21.2", "", { "os": "linux", "cpu": "none" }, "sha512-LF29obFqNgBUgDX7rmUK7M4D0JQG5LxhYzn3xXmECcHU9aQAdWG7NiY052qybtesEdwHQXKNTWYQ7mTsybNvWg=="], + "@oxc-resolver/binding-linux-riscv64-musl": ["@oxc-resolver/binding-linux-riscv64-musl@11.21.2", "", { "os": "linux", "cpu": "none", "libc": "musl" }, "sha512-LF29obFqNgBUgDX7rmUK7M4D0JQG5LxhYzn3xXmECcHU9aQAdWG7NiY052qybtesEdwHQXKNTWYQ7mTsybNvWg=="], - "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.21.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-+NYcm+cCHBbtdQQ3A4phQTSuVRYnNHz7wrl9XRAPEovcdoqi0mb1K5ZOl+jN54ZD+q1zz3V0vltbFJmzecJKmw=="], + "@oxc-resolver/binding-linux-s390x-gnu": ["@oxc-resolver/binding-linux-s390x-gnu@11.21.2", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-+NYcm+cCHBbtdQQ3A4phQTSuVRYnNHz7wrl9XRAPEovcdoqi0mb1K5ZOl+jN54ZD+q1zz3V0vltbFJmzecJKmw=="], - "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.21.2", "", { "os": "linux", "cpu": "x64" }, "sha512-UQqZDdG2r2HhAOsZEgufkIWHPQ886IUyuJQkoZByvzhW8j51R4UNzGBJFkTiTnLhQnggwJRdJgFWK4uY6ZVIMw=="], + "@oxc-resolver/binding-linux-x64-gnu": ["@oxc-resolver/binding-linux-x64-gnu@11.21.2", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-UQqZDdG2r2HhAOsZEgufkIWHPQ886IUyuJQkoZByvzhW8j51R4UNzGBJFkTiTnLhQnggwJRdJgFWK4uY6ZVIMw=="], - "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.21.2", "", { "os": "linux", "cpu": "x64" }, "sha512-3Q9PMRjalWkT6NZ4jfujuqTCFwoWErg3y3BnOgb544B8IMw4PktiwWOigMfOHNRLMghZeJ7hpfpZf4CP7rV7Og=="], + "@oxc-resolver/binding-linux-x64-musl": ["@oxc-resolver/binding-linux-x64-musl@11.21.2", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-3Q9PMRjalWkT6NZ4jfujuqTCFwoWErg3y3BnOgb544B8IMw4PktiwWOigMfOHNRLMghZeJ7hpfpZf4CP7rV7Og=="], "@oxc-resolver/binding-openharmony-arm64": ["@oxc-resolver/binding-openharmony-arm64@11.21.2", "", { "os": "none", "cpu": "arm64" }, "sha512-Eljeq3ndtyKhM+Es8LITi4Zl2htzuRZcrPMF3kMCsrILztvU6AjZ3FuEhHHKobPUB9rMpzLpJP5bDqXI7r+iog=="], @@ -1333,7 +1339,7 @@ "@pandacss/types": ["@pandacss/types@2.4.0", "", {}, "sha512-W2ELCg6MjSyHXOa5/Z9pQ+S39jKcYWRQIC0bu3Ycg6NPDh/qOz8cc9Kr5LMO9Iskd3F8a2MdBl3BuUR+PvR6oQ=="], - "@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" } }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="], + "@parcel/watcher": ["@parcel/watcher@2.5.6", "", { "dependencies": { "detect-libc": "^2.0.3", "is-glob": "^4.0.3", "node-addon-api": "^7.0.0", "picomatch": "^4.0.3" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.6", "@parcel/watcher-darwin-arm64": "2.5.6", "@parcel/watcher-darwin-x64": "2.5.6", "@parcel/watcher-freebsd-x64": "2.5.6", "@parcel/watcher-linux-arm-glibc": "2.5.6", "@parcel/watcher-linux-arm-musl": "2.5.6", "@parcel/watcher-linux-arm64-glibc": "2.5.6", "@parcel/watcher-linux-arm64-musl": "2.5.6", "@parcel/watcher-linux-x64-glibc": "2.5.6", "@parcel/watcher-linux-x64-musl": "2.5.6", "@parcel/watcher-win32-arm64": "2.5.6", "@parcel/watcher-win32-ia32": "2.5.6", "@parcel/watcher-win32-x64": "2.5.6" }, "hasInstallScript": true }, "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ=="], "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.6", "", { "os": "android", "cpu": "arm64" }, "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A=="], @@ -1343,17 +1349,17 @@ "@parcel/watcher-freebsd-x64": ["@parcel/watcher-freebsd-x64@2.5.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng=="], - "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ=="], + "@parcel/watcher-linux-arm-glibc": ["@parcel/watcher-linux-arm-glibc@2.5.6", "", { "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ=="], - "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.6", "", { "os": "linux", "cpu": "arm" }, "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg=="], + "@parcel/watcher-linux-arm-musl": ["@parcel/watcher-linux-arm-musl@2.5.6", "", { "os": "linux", "cpu": "arm", "libc": "musl" }, "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg=="], - "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA=="], + "@parcel/watcher-linux-arm64-glibc": ["@parcel/watcher-linux-arm64-glibc@2.5.6", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA=="], - "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA=="], + "@parcel/watcher-linux-arm64-musl": ["@parcel/watcher-linux-arm64-musl@2.5.6", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA=="], - "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ=="], + "@parcel/watcher-linux-x64-glibc": ["@parcel/watcher-linux-x64-glibc@2.5.6", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ=="], - "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg=="], + "@parcel/watcher-linux-x64-musl": ["@parcel/watcher-linux-x64-musl@2.5.6", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg=="], "@parcel/watcher-win32-arm64": ["@parcel/watcher-win32-arm64@2.5.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q=="], @@ -1371,145 +1377,149 @@ "@resvg/resvg-wasm": ["@resvg/resvg-wasm@2.4.1", "", {}, "sha512-yi6R0HyHtsoWTRA06Col4WoDs7SvlXU3DLMNP2bdAgs7HK18dTEVl1weXgxRzi8gwLteGUbIg29zulxIB3GSdg=="], - "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.15", "", { "os": "android", "cpu": "arm" }, "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw=="], + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.16", "", { "os": "android", "cpu": "arm" }, "sha512-ia3DwAs0OsMGS7+IConptSiyk9pEXkOx/AbJ2n/lAGxH3QkWQus1t8d7gnAT38FCU2sQu8lUbeR6AiZFv4JxaA=="], - "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.15", "", { "os": "android", "cpu": "arm64" }, "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.16", "", { "os": "android", "cpu": "arm64" }, "sha512-kx5wBiMB6E7TEvpl2B9gjLU004BkvEm2Dr941BFjx/SontPwSzNuQUIoVKxHHoSjpFIfHMmcguyLOtyn0hObRg=="], - "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.16", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qslZrXnKJU4cUpjoAmtAo/KQM9e2IRMlmpig6Zpwj+8KWxW8v+nkAf9216Bsek9lOC1jvg2yCjygCFo2f83msQ=="], - "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.16", "", { "os": "darwin", "cpu": "x64" }, "sha512-FdF+y48ND13eAyM2mQn+85kvAqNlvRWROy2rhgA463X/0Gv4vGtazZtfaF1mRBLscYvtOlh4QnLjOWiFzX69OQ=="], - "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.15", "", { "os": "freebsd", "cpu": "x64" }, "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.16", "", { "os": "freebsd", "cpu": "x64" }, "sha512-ddjqFM5e95AgLbUPtKIS7V1KTVlA0RUgCVr5mn+/IEhsdy3pr+Vuj/HZ7nlMN2FyxIwUktOH1LEPIQXO1v9y1Q=="], - "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.15", "", { "os": "linux", "cpu": "arm" }, "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.16", "", { "os": "linux", "cpu": "arm" }, "sha512-tHdKWbFkFBI687iim3LIyIvyL7j66VvQYkDPss5Stn/qyE2tWkR1YD0dXmXPFKKqT/o5ZEJVsaRsWS2meQwGOA=="], - "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.15", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.16", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-FJiLGAblPBMlBEdbOqw6kW6QcXDWAf/oJu7gYs9ZJZwmg+K+/zjFLxPTIY9izJUzxzc24FHvmseyA0IvJSl17w=="], - "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.15", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.16", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-hrJpblMsrQ58U9veWpbXzkhV5zStunds6HWLprqq1qauvgBr1E6P+24kLj6lSLI9vjRn/RYpjprhkHQPKGWpNg=="], - "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.15", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.16", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-qJd/dC6j6CwLG9/s/RP2nb1RZ0GIgj7Ioj7x/SYa3RzjVrlzrmH0fhIOpfvqQDeIsdP0loi+kHaMhJzY1PBIaA=="], - "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.15", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.16", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-Vx7Xg5uUJuNcujJjI70OICaH0EYj80BtOLZTSN7uOYg8QOLlyKnaG0IW7Fn/J0IpJsaKzmDKMhOQv1JBM9m9vg=="], - "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.15", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.16", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-TNKhgE3uJTsTzatUSSYt0Kgo+Oa2uSlSjz4r1aEIea7HX6ULBym4fAlYUhG1i6pjNf2njfCUAfKwr6C3E9Xg1w=="], - "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.15", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.16", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-7chXdpjXZ8qG0+mIxECN3cT9kvhZ3/oZhMX6Pp876P7CDrIy8nJswva6Mq357JR7eYXfuskwZxMeV1SzoZdHrA=="], - "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.15", "", { "os": "none", "cpu": "arm64" }, "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.16", "", { "os": "none", "cpu": "arm64" }, "sha512-Kwjt+7uNTJK5/MDkGWGVO2KQPnj8yAV75dMpfwyHZrJSXWHrniOB0aUEWlVYf3H1hOqFLIStLdM5QXq6bnKmOQ=="], - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg=="], + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.16", "", { "os": "win32", "cpu": "arm64" }, "sha512-/LH6WfjDRXXJz/p5xl4TmU+jpcnwcxbKEQBW/GZE0JHfN0lGIyTtsUEGaQ/q/GikkGJ2yLKe6pwm7AnEWO8pdw=="], - "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.15", "", { "os": "win32", "cpu": "x64" }, "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ=="], + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.16", "", { "os": "win32", "cpu": "x64" }, "sha512-1lv1KvX0Z871zfk7vw+dnXMMnHNyDwMzWG8Kv3HxDXMOhzCX4SHc7HK319fInP0i+0p9D8brkfzL7pJOaGl+tw=="], "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], "@rollup/pluginutils": ["@rollup/pluginutils@5.5.1", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-P9ZvnfouRu4MSC+ilERaw6FmZs8zqKhpHxEs4aGDGWQAMzQGXnhvCSvoNwokfNvdt7t3Y5Y4p6gStQgezeIqug=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.65.0", "", { "os": "android", "cpu": "arm" }, "sha512-t2AnVba25baFdq7gczzS13JyVcdubLVbFX1X04mxrggDrTQPUXNv3XM0k9H1hr5tqvg7AVvtQ720QHAj0iYqhg=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.67.4", "", { "os": "android", "cpu": "arm" }, "sha512-/v/pUAPOcwp+r1Hjjdg0cBV1TE89CzGKrKh2FgkIQw2QBcIMmVPOCSfuOZStCn4Xh/98HXfo/ht6ztcssctPNg=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.65.0", "", { "os": "android", "cpu": "arm64" }, "sha512-dNONUaEwPGhl/nuO2KV8VABWlcjYyU6KtZGN8dQv5OS5JU7JSCxPijVNKXbRJd0iuTzTiJ4TjPt/4bbvDRNiMQ=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.67.4", "", { "os": "android", "cpu": "arm64" }, "sha512-6tmmB/P52Vt167FXXEw5auiEUgTtZz7aqUgWHqYXToIUE0HFDY6fTdAyeekjjsNk6O/8dtpSKtClxSj1mMneKQ=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.65.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zWQqUH+9zavr2Bxuzfpuv2SIF3X31cr58TvSQC9o1GhpOvkqRwr60GkZdQcudyT/BEgdpdSafjgd2I13MbTL7g=="], + "@rollup/rollup-android-x64": ["@rollup/rollup-android-x64@4.67.4", "", { "os": "android", "cpu": "x64" }, "sha512-8Z9Q4RmotVmuL4llOvqX814JNiOK1oqoBv+glG5KbpRfUiypqzz2/fxIzK4Pq129l4dT5a8Gszmpc0/XPYoFuQ=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.65.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-RQYreBFWtO4//hIuOaZkYUnF/lPU4lz35dveDimDshWCJvVisVtJ/shmT9bkXK8wFJY+FJF89X6F3Cq1qI3LCw=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.67.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-pnq6hssxTtwuRAl6Kdi/+IDY+b1IhkUetjhUkdLAAJCssjfqtL2Oqy/FXJVJFtAWOu1oRlArIvf0Yk1O92x2HQ=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.65.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-A0NfMj6Cuh/9BE5k3awJKv6HoxFVXIcLAb6SZqAMoxUHPA1ZNNK4RsGuUPD/vL7nEAm9LG+ZzXWWTrnC0XtkpA=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.67.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-BeIrGZvHMVdJg/N+ohZfFywG/gF41684YhDj2wBvouj7m9ziP1tZDUNwzXRiDY+3WIKngaC4hiUBqVtBPGP5og=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.65.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BI6/H7q3aP0I7S7GOrjyxTjgEJlSnovXE38+bdxBpuKN6z+d//uF+T+VQ3Q7ltJL/71p17ufartARX9Ja5gOGQ=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.67.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-fRFX/oqNg/g780DKoS8RIfYcZD59Ru5O/bSeK1N7gQljBFrTxJY/q5EX4eMs5SrJf32VgVBVVYCdfPpzAwPPnQ=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.65.0", "", { "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-W1vUprf09RWaVWnsFP1vlUkEWJzTZlpObOEAYZXt9Fq0UVAOYEkeGr7wBX7McKqqIQskXdBnpiOMgwPujordgA=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.67.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-bSrBRopG1q+0RuOsW0NtYTtIODlvNA3T3ebx5WnQVdSxWIoXFmj+rZdHUHdSLgFdZ5M6VGmekYE7r4RMGQXjfg=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.65.0", "", { "os": "linux", "cpu": "arm", "libc": "musl" }, "sha512-s8QTcZWgrl9haFzEGIqyE5BWyo89pFDGLMBFZ752WYxk8DJwNU/O1X6pZgPw829d9/sm6CCHyrMP3aurt76p1Q=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.67.4", "", { "os": "linux", "cpu": "arm", "libc": "glibc" }, "sha512-L8IvdrJVtl65g1ozwDSyjGPG+FmibhCdFUwmqTItJLw0S3+Oj4QzFs7rfgTUiK7rsPjkCLdG1/GApFxoynXFJQ=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.65.0", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-ke1f6dLRzkqveyjjF2fkEwQYZvxHtNNwjegY8nJrwcO0Bdqr8CzFO/pKE0Bns13cx0qz2Ba2Y0Hs3dSwMdnHxA=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.67.4", "", { "os": "linux", "cpu": "arm", "libc": "musl" }, "sha512-h7PcoQOzC31jshNpQ48J0akB9tsghjkSjSl5AZ6XsVGTxVsln7t7C4SQyw62tNVSaz2SeHgk4VT2ELbL17BSHQ=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.65.0", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-926SMeUcy4y18Rz/w2aJiUKOnyAnm6czg72bXkQEaeemsll+Wr0hnsjb2BGRpHvWgwAMYy5ACJCotbvfLCfj0A=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.67.4", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-KSPuOBNHoOl7AsVjeY1KZci8+0up0U4TFAHU5IzBYN8P+Z6cB9DZq28+JQycZW7f6WLLa/tSzhV7Rdy95bVi+g=="], - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.65.0", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-6T7JNRP1hc4hqF2dUsEoVLOt9K8tmODoCLldtQRYnrddGGQY8Gqe2pM/qMMUo7EMowpP7oa2N95k0/8sYK/ipw=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.67.4", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-0E/mKmVk1PlQeQYygIwQm0jlwjANTzGSiNBMPrFx+rdFGFj/2Axh4p6XwcrystQIqXZVudTaGsdbDpzYgJ4wSA=="], - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.65.0", "", { "os": "linux", "cpu": "none", "libc": "musl" }, "sha512-SImGFl1Je5kpyAgOCPONVT7h6ASV8mAUwGRjY7eZvVjPg//PfHOXgI+P241RF/+HqsA4PP3qD527ysWFKNQyhQ=="], + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.67.4", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-Fvw7dOSc2Sa9UOipRZVI0zOgdLCzsjVyD/6JuHXzUHTXFu7mMgmeX/0/bCVBIut1dz+nWz3pV4WpS/Qg0XVnxw=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.65.0", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-XeDTbmPF1Yu5asfXGPrMkWoxTDhgryQbmw5Q1+R582O51VNCk23J6f2pDrsAp5YkneBVBwtExx6ZGOb9D2aQ6A=="], + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.67.4", "", { "os": "linux", "cpu": "none", "libc": "musl" }, "sha512-jzxbVHaE7V3F+P0wEK7UydQtvv7Twfdtx58jI5/3VRx1jJxyrn+qFwfXmqjVFxPhBl+zjaRs+ZJMFJw7vdHaQA=="], - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.65.0", "", { "os": "linux", "cpu": "ppc64", "libc": "musl" }, "sha512-VS55JUI/1nsljmV/jfqNkLZXFw8uMO8nNlfoHmSevNf6fO3neuhyDvx9dv3c/Ytt8r/431SL8Qax1dpYvOMZTg=="], + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.67.4", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-fhtrzp9p4GjEJVaigaap9g6X9nP6xgJtKiLLXSDgpE18HXufA5aqfltGn+KAqMtVZReJZfOrXm//y5YSA9BWbA=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.65.0", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-Vblw84TbX7RS4la1Y4+yQ7aore/oSyaNtFbppuBr5Vs/4LfBeXKq9dIfoExw6zOvRERqd2rRAjnZRaMhH/0x5w=="], + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.67.4", "", { "os": "linux", "cpu": "ppc64", "libc": "musl" }, "sha512-uynaF7IUHwAckV0S+yC1f5esy9gB+aqCBsPH5BOck32TYdCuAn2lVG5tvUcFnEsrviGEmRZxE1NHSOieUPYJEg=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.65.0", "", { "os": "linux", "cpu": "none", "libc": "musl" }, "sha512-7+gHjtONvKgwR9InTKFaLq53f6YzBJkgeMRBENdWTsQr+spahGqQm8HF5aXpq8i4JaRrOqYyv6Zn1WltDTxaZQ=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.67.4", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-uaqRFdfb8eIa2bVHN/FE3ndCvR0zV2xv0AwjCfxrqSu6l6fp/54VhjfhslKlf2RIik9L1jwlt4E56PeVX6tQtQ=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.65.0", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-KvNDC0J6s4vVHhtJ6KrDXU0Er0au/hmRIBq/+1maCV8TseGupeKizq0bWcrbp2HE1T8xoknvN0Q/KZ/YF0qX3w=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.67.4", "", { "os": "linux", "cpu": "none", "libc": "musl" }, "sha512-JZRow7kmxUDEASnxHuVG5itTm+nTXi9BQUABcVUnUEngC+OPwMrpx1uJ9hIA/v+IcAEBL52ktCSPXk5OJn9Jqg=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.65.0", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-GExdD15WPvu/x/drELjVam7vX8EsPgvTMOa/iJL/p/4m/oOqzbb7JXZg8fXR4hlXtg/sF2zyTZ3bR0AEtEMlhQ=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.67.4", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-rdrh4e+Lq9fCNKoDPaCqeHXbQCe7yl77Ukl45tlSClwYdZ1gpFGZz1XLJdYtY++FRlfL5aHvb6/0n3GDW/Nxsw=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.65.0", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-8sT9PemIZfIMED4Vd4KGoOXVDj5CMSWNcGdbheRUx9TYS03yOWdT2Q0lXPyEyNBB9YTilwewIQKNIBk6Nxi0Kg=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.67.4", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-wL7MS4r0fYcxluF3ne2plofHZiB/LsqNCnyaUlyiKpAJLb6agPSFz7DEFCfkonWAZXMrLwCmC08b2ZEnEdJkog=="], - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.65.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-pO6Ehi0jo5yE0R6PltKhJhv9mlIiyzBJk5N5NUF2OF6xtVKI+1bdXxj/rb0jGXy3hck1ELVT0QPY3tzkAm360w=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.67.4", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-4H0XHfd2VufGjX7NjUyeue78sD0bRIoKSGjGqO+F5nSvL6jN48NAU7esdmtFEYxZXwObLtt3MJ/kHS0jASMW3g=="], - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.65.0", "", { "os": "none", "cpu": "arm64" }, "sha512-vo7N3/+cjjPDYr8vtxC+qSNgWa9sDvJ7g8N8R5SWqFY4WiNH1ULcAU70SKVyHeiIZOYYwNP9pTipmhN5sl1NPw=="], + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.67.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-osRHQbE55pZpCLetpMsFmhkapyZnAUH73qRKMh+npi3boUom6u6hdaTTPSxlInXxwJHsn9r2uDhdz0V7Yoxx2A=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.65.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-ArwvgFAbjKcDM7qqotZ4OVYf+UMT9xH2YzkCzK4+AuZSDihMlz1Ekoe4INwBVXzn2mnJzuIYOcSx07iTBijGRQ=="], + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.67.4", "", { "os": "none", "cpu": "arm64" }, "sha512-95+exYEyOwrZePsE0czi4q7X5lxKPa21+lmyAZlwbYENITQ0Unk4HAQAFp/p+KhXBHBx9mUABXRYjOC5A1wY3Q=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.65.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-QGMmK4/cxKE/36FoLMSHQBCyymv/eFTnsCvvsBF0rgmOvVbvX78VWZRerL3dHa77f4pM6Xcc2iGDhJ10w/svKQ=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.67.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-FOXOcKhNQpO4Po+Ynan6IbtM67SrXZbgpRJWVYwz53CT5veI7sVzDwVBmWS65N5Imv+wK3SVhIPAl+C5DXXNCg=="], - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.65.0", "", { "os": "win32", "cpu": "x64" }, "sha512-XfKYFWHIPs4HPODIMsGF1IKlS3H1e3WokUZIgpmn4+uNnZBlnRDDHEylNyazbQXwhMKZre68OjtRYbKqb5+j8w=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.67.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-cklKh0gJOkAZQcWziQa3hrjxZKN+PCHZ7SPTyGJDAiBVr05ZXlEjGFCG7zFJMaVibxsmzAe1FimN4u/HBns9+Q=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.65.0", "", { "os": "win32", "cpu": "x64" }, "sha512-wPWi++K4Bs1VR4XihOhfGi4IGX6Cub7FlerTf8X2v+2BtDHddgSqWCXwGD+h2yAe4/niIhNDwAltioOC+wEogQ=="], + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.67.4", "", { "os": "win32", "cpu": "x64" }, "sha512-AegwxJPc9bvUp8fQtlsUHkFMOMkGylWU7glyL+YD4vwG+QaYoGXYLSsQoeTD7kvoLZrVlMWNVhTg1dedY5C1VQ=="], - "@rsbuild/core": ["@rsbuild/core@2.2.14", "", { "dependencies": { "@rspack/core": "~2.2.9", "@swc/helpers": "^0.5.23" }, "peerDependencies": { "core-js": ">= 3.0.0" }, "optionalPeers": ["core-js"], "bin": { "rsbuild": "./bin/rsbuild.js" } }, "sha512-HNzuviBQuaPn24ltmlW0BwwB9YclY9sFz847Qyh8CeTtLLkfznmkSMeXeUHSTcZC22gveRKkut7iLjI1HPzCjw=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.67.4", "", { "os": "win32", "cpu": "x64" }, "sha512-RJZnrwTWj7Iq2ooBwoGbDdC65tDwYawneGcAfFMJqVUrRZMcskka6nTkBpXR/47G7kzn3EW2qupExnaBy11vwg=="], + + "@rsbuild/core": ["@rsbuild/core@2.3.0", "", { "dependencies": { "@rspack/core": "~2.3.0", "@swc/helpers": "^0.5.23" }, "peerDependencies": { "core-js": ">= 3.0.0" }, "optionalPeers": ["core-js"], "bin": { "rsbuild": "./bin/rsbuild.js" } }, "sha512-fT7GWVOV3Rk0P/1/XpZIEg4wv/9GRggQRXpEZkGAcQsTiljjgtxYmN4KOWMVXTb/0wtukKBGc/iKf/HV86n/Zg=="], "@rsbuild/plugin-react": ["@rsbuild/plugin-react@2.1.1", "", { "dependencies": { "@rspack/plugin-react-refresh": "^2.0.2", "react-refresh": "^0.19.0" }, "peerDependencies": { "@rsbuild/core": "^2.0.0" }, "optionalPeers": ["@rsbuild/core"] }, "sha512-tLtUedsRtTLS6M4VtwzI6aakFLOFdgl9Sh1ZNBWvxb0Te3EnHrppaE7UiYEmDUXQDJ50gfr6yyirtxY5N6moyg=="], - "@rspack/binding": ["@rspack/binding@2.2.9", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "2.2.9", "@rspack/binding-darwin-x64": "2.2.9", "@rspack/binding-linux-arm64-gnu": "2.2.9", "@rspack/binding-linux-arm64-musl": "2.2.9", "@rspack/binding-linux-ppc64-gnu": "2.2.9", "@rspack/binding-linux-riscv64-gnu": "2.2.9", "@rspack/binding-linux-riscv64-musl": "2.2.9", "@rspack/binding-linux-s390x-gnu": "2.2.9", "@rspack/binding-linux-x64-gnu": "2.2.9", "@rspack/binding-linux-x64-musl": "2.2.9", "@rspack/binding-wasm32-wasi": "2.2.9", "@rspack/binding-win32-arm64-msvc": "2.2.9", "@rspack/binding-win32-ia32-msvc": "2.2.9", "@rspack/binding-win32-x64-msvc": "2.2.9" } }, "sha512-Y8wDJoRo8n0KXDGq6J3KGVekkUQcOcUHSppMHoJv8JLbNBEsyaaKiDx4ljNTGEDtTON0CRbMEWbSiLRe+bJxOQ=="], + "@rspack/binding": ["@rspack/binding@2.3.0", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "2.3.0", "@rspack/binding-darwin-x64": "2.3.0", "@rspack/binding-linux-arm64-gnu": "2.3.0", "@rspack/binding-linux-arm64-musl": "2.3.0", "@rspack/binding-linux-ppc64-gnu": "2.3.0", "@rspack/binding-linux-riscv64-gnu": "2.3.0", "@rspack/binding-linux-riscv64-musl": "2.3.0", "@rspack/binding-linux-s390x-gnu": "2.3.0", "@rspack/binding-linux-x64-gnu": "2.3.0", "@rspack/binding-linux-x64-musl": "2.3.0", "@rspack/binding-wasm32-wasi": "2.3.0", "@rspack/binding-win32-arm64-msvc": "2.3.0", "@rspack/binding-win32-ia32-msvc": "2.3.0", "@rspack/binding-win32-x64-msvc": "2.3.0" } }, "sha512-rh9S5xvGVs73gdqMDMYXi3SHUfCWIChlL7a8zaYF8+1HLtIgdMyxa100f1ifAKlr8VoyFUv3xrfGLBaoxwjU5g=="], - "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@2.2.9", "", { "os": "darwin", "cpu": "arm64" }, "sha512-aIHkk/wngpwgWkwVQFz2AIkmG9WpWtWlkqy4BlYhs5a7l9z0BrB0kXnUb6VSbqZ7Tc3cRepKw7ipkGjKa8KKXw=="], + "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@2.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-raUm1V29xRm1fPaS2R2qK4Yw5PGo3xooK6Fz2rt74pjJ+UhEUT4ED/8A9Qyf/YW16aMUl58eS5prtth8+UaJSQ=="], - "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@2.2.9", "", { "os": "darwin", "cpu": "x64" }, "sha512-QtUS7lyOE5oxdMm7RH/Fw176jqwdHiTW2qEsmbdCYzPw3t7QkmI5ohoyiuxOp3czJfaayXP6bVyvm2FqqnWPAw=="], + "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@2.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Mi7WUDMvYL14607lzOMkFYiu/NmXIeazVKJd/HmCsPu9H8aUpyf71RcbIY0otCfmpvjX2ZFJ5GrXM1VbYCAxKg=="], - "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@2.2.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-GMKxtBJAMoqBPqXZVi0QanDkneWwgiKRpTgHW/pbKPY/2XMfZJ98thm4YlATO18XZJ2KET+GfsNfaf1o5Y+aaA=="], + "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@2.3.0", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-4qHSxhLkjz6Y2r8nW72IyW0sVC1TglNz5198YFEvokQ/O356mwVk3bCS/yz3IdwPu6v4sXylLDB8cEudRoeKwg=="], - "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@2.2.9", "", { "os": "linux", "cpu": "arm64" }, "sha512-aW3fcM64R5mY2+ym6Q8okAo/pcVIjAliqxFOc9lf9hCyS7hHaabWo30smeMX3neEjsqw+iyNbzWMuH0G5AugTw=="], + "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@2.3.0", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-YKbmMCK7RS9YOUKYx2j6hretwv0mPHOQnD2UStDITMAnhsidn63teEyUt5404U53u+tEvyK8toQqqHFbtA/aZQ=="], - "@rspack/binding-linux-ppc64-gnu": ["@rspack/binding-linux-ppc64-gnu@2.2.9", "", { "os": "linux", "cpu": "ppc64" }, "sha512-dVEiyZdANq+g/qugI64vKnxO+PCVicidu/GQ6sO0QEWGVzdSUbxHztHviSnMwdvRs6OLrN7Lwhaw536hJ/cU8w=="], + "@rspack/binding-linux-ppc64-gnu": ["@rspack/binding-linux-ppc64-gnu@2.3.0", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-8hI1CiQTQiBxfFevf1jsFoP2PL4jv9Vc4oUG9Q4ryF+xBwqmKSOLgb0MTgiHz0lQ0jg4hbVcb5fR3ZgK0f3lDg=="], - "@rspack/binding-linux-riscv64-gnu": ["@rspack/binding-linux-riscv64-gnu@2.2.9", "", { "os": "linux", "cpu": "none" }, "sha512-uBHWmfMm502145le0EUOsBoV6bJ9XA5s3NQLL4smSMoSEuMbNrRhqDJ2+B1u8aXVfjfhxCPyNlMDmgbsdVaO0Q=="], + "@rspack/binding-linux-riscv64-gnu": ["@rspack/binding-linux-riscv64-gnu@2.3.0", "", { "os": "linux", "cpu": "none", "libc": "glibc" }, "sha512-kzXFRjvfQkFd14/zyVG+xNnEurVZPQA1aKL/OcKeIW4niqU13RdIGMbGQ2M8SBfPBbL92ze//CZIiBlz8kZIbg=="], - "@rspack/binding-linux-riscv64-musl": ["@rspack/binding-linux-riscv64-musl@2.2.9", "", { "os": "linux", "cpu": "none" }, "sha512-MR7e6PP7KcG3jHYWznk17npBBvjUXQg7qQbS+yrAu0R3p/27wLp+aP5m/zk4ev1Iq93ccIBIAGVRGA3v1fSKew=="], + "@rspack/binding-linux-riscv64-musl": ["@rspack/binding-linux-riscv64-musl@2.3.0", "", { "os": "linux", "cpu": "none", "libc": "musl" }, "sha512-ATJC0MwQmkC+wFyoUtpklemROUaW1IRpf7M6depLaiZXuVN8bx0IMFr/iCL1YBLf5+38NBAXsGwO3/bqYxmdQQ=="], - "@rspack/binding-linux-s390x-gnu": ["@rspack/binding-linux-s390x-gnu@2.2.9", "", { "os": "linux", "cpu": "s390x" }, "sha512-Tc9Nuv7XvkrAG79Ps/6F7vT4bxZqiaiQ3Rd3BidKUjVYiwTPJogk1W3gPXp7Lw+AMoN/dY63W22bMJ7Oh0FeZw=="], + "@rspack/binding-linux-s390x-gnu": ["@rspack/binding-linux-s390x-gnu@2.3.0", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-MWGDa/JKwXNwJiZM/A7Iy4Js7IrEmWExjPefGDFhWmozGJ5BsKdnvD4q3Kb/YfQ+X++LJR5q1o9MkACpdOu/Bw=="], - "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@2.2.9", "", { "os": "linux", "cpu": "x64" }, "sha512-xQYhQwC8q3mSCzHV+yi76Gt2Lt9BhnmeJnQgXGjuhyvjZWBB9jFNp9Uj6umun7tlMliMRhoqTesqvK4Vo/kkcQ=="], + "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@2.3.0", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-XxyrjQXvIjxWIct9ceKUBZdeBbNfZ6OkyAKU62xKuyLCyKiwg7M9LhXvKKfvVyFkK7n10a6t/KeIV8+k+kREoQ=="], - "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@2.2.9", "", { "os": "linux", "cpu": "x64" }, "sha512-FfEYdFhOd1nZL+U/up8nlbcRTTyWX4ohXUQcApQMYKIZoR1EJ0g/oBhS915+TSray0DchA+NT6yVL1sqWJOFaQ=="], + "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@2.3.0", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-XFY3Ayqpb/j9J9npTtOOa8woswCBDZxWfVUkirxxkvHTEk9eAP3/ABd4wxwRuGQuBFf91Emew/g0K/KpFbyH3Q=="], - "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@2.2.9", "", { "dependencies": { "@emnapi/core": "1.11.3", "@emnapi/runtime": "1.11.3", "@napi-rs/wasm-runtime": "1.1.6" }, "cpu": "none" }, "sha512-+29JEBiUi2TMDOGYmT3Tm3JGk3f19+CbjxNEt1bVreR8axuZZj+wOSwB/sx85lKQkL5fuNPh0BhOZ7cdkDxQpA=="], + "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@2.3.0", "", { "dependencies": { "@emnapi/core": "1.11.3", "@emnapi/runtime": "1.11.3", "@napi-rs/wasm-runtime": "1.1.6" }, "cpu": "none" }, "sha512-d24u2ShgaRE2DipdiuVvZMZKjSse1LpLeHqs5wqm1q8S9MW6sjE2GwlIErXSKuNymSqf0YlaN/11jjxLb2x2qA=="], - "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@2.2.9", "", { "os": "win32", "cpu": "arm64" }, "sha512-x/BDAwQCkR+ANWAAWV+15PFWuae2z9DzL+QcVeb+5taOri+tHa/iQdG8e3GJ60d0amsR+u9BJ2CBtJLK1fQkxw=="], + "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@2.3.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-foalqSBgpsAPCOLd4zxALB7s06uu1YEa7p74rknv2OciF/kd9bGN4tPIpkTTgYPd2Q6KFpae/Vq8zxPSQFDHRA=="], - "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@2.2.9", "", { "os": "win32", "cpu": "ia32" }, "sha512-i622t0Mom3STiDi8VHLaX62LKwhbT2kg37fKjzv3wQT+9bJvQ/+St6QQzFZg9C7fV53LXqAw8jFi5yIPIjg0Qw=="], + "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@2.3.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-RVoGgdW0GsWa0fsrqRYQ4JkCLViS/RGqd8gzqgMDmtdyrhHV/bvGiTPYIRYMJPWk9zBhaxA6RAAip3fjKdga8g=="], - "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@2.2.9", "", { "os": "win32", "cpu": "x64" }, "sha512-K98FPCAv0VpDPAz5ZqZ0XI1CmdJu9Kw1FmUDl4rN/zQIt9iqYn+Hgxq6Nk6Zx7g938jiG7ABLwITXSIKGbs6aw=="], + "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@2.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-gZyb4zPz8WfGbPLMscY7TX8Y1SDBvQdhHF/Gq1nzt3JEHqYFeZJrQHl0C8atH+PrDK5l7d+lY/qRwfuE+qeJ5A=="], - "@rspack/core": ["@rspack/core@2.2.9", "", { "dependencies": { "@rspack/binding": "2.2.9" }, "peerDependencies": { "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0", "@swc/helpers": "^0.5.23" }, "optionalPeers": ["@module-federation/runtime-tools", "@swc/helpers"] }, "sha512-Tp6/ZdM5UrGB3BeLfvh69l1iX03PZ46IgXjKqubVEuJVAhnOjpshooH/YAxcxR0AymcBLKA997Z4v+LV2aXzCw=="], + "@rspack/core": ["@rspack/core@2.3.0", "", { "dependencies": { "@rspack/binding": "2.3.0" }, "peerDependencies": { "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0", "@swc/helpers": "^0.5.23" }, "optionalPeers": ["@module-federation/runtime-tools", "@swc/helpers"] }, "sha512-1zylQSMl3xo1f57ZqJMHAoVddRv1BSvpQQVIgWjP51AGhLyeHTAfEf0mphb0wb0bOUf5EujpvvO592X9GMf2qQ=="], "@rspack/plugin-react-refresh": ["@rspack/plugin-react-refresh@2.0.2", "", { "peerDependencies": { "@rspack/core": "^2.0.0", "react-refresh": ">=0.10.0 <1.0.0" }, "optionalPeers": ["@rspack/core"] }, "sha512-dGNZiCxQxgAUI9sah7gd8u+O7OJZRCmqtEJNDOd8xW5RqcieC86F7p5qcShyw6onH5pKf57evpr2VjGbaFGkZg=="], + "@schummar/icu-type-parser": ["@schummar/icu-type-parser@1.21.5", "", {}, "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw=="], + "@shuding/opentype.js": ["@shuding/opentype.js@1.4.0-beta.0", "", { "dependencies": { "fflate": "^0.7.3", "string.prototype.codepointat": "^0.2.1" }, "bin": { "ot": "bin/ot" } }, "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA=="], - "@storybook/addon-docs": ["@storybook/addon-docs@10.6.3", "", { "dependencies": { "@mdx-js/react": "^3.0.0", "@storybook/icons": "^2.0.2", "@storybook/react-dom-shim": "10.6.3", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0", "unplugin": "^2.3.5" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.3" }, "optionalPeers": ["@types/react"] }, "sha512-365f712au4w/xvFqEKY6TIvTeGGAY7FKRB8zP4CFa3VSv9oyxHaq/ublFg4YDbCeRagppwl1PZ6k4+PoUor3+A=="], + "@storybook/addon-docs": ["@storybook/addon-docs@10.6.5", "", { "dependencies": { "@mdx-js/react": "^3.0.0", "@storybook/icons": "^2.0.2", "@storybook/react-dom-shim": "10.6.5", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0", "unplugin": "^2.3.5" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.5" }, "optionalPeers": ["@types/react"] }, "sha512-Kt0pGLA+nwdu2g80p8jbdoiiKXxwQbhrY6uzMzq/0G1lytxpJUzrOQAM+GDcEbqyvpKr0u5d1q05/LPem/uooQ=="], - "@storybook/addon-onboarding": ["@storybook/addon-onboarding@10.6.3", "", { "peerDependencies": { "storybook": "^10.6.3" } }, "sha512-C/7AspvhzErXFOR4VHGBW/+G3gej9Lwr8dqH1oIaf0oi2qlhQB9ZBDe6Ds/u+EnW0C74aPlMwXFjSXk02ycfrg=="], + "@storybook/addon-onboarding": ["@storybook/addon-onboarding@10.6.5", "", { "peerDependencies": { "storybook": "^10.6.5" } }, "sha512-mKuSyuCnZ4FG9lTeON9//UHBUFzSFezaVsWGFjdpuhM4MDIy0AvJBXTb4dHvr48QEqokFJCU4Tt8SOoyK69bwA=="], - "@storybook/builder-vite": ["@storybook/builder-vite@10.6.3", "", { "dependencies": { "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^10.6.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-1+WCZZg/fPxxyHDB5sFKniFt9/4RFUIzoNqMujv+BLRROM+gQeyUHvdvoyZOZ51+P8ee+/PgnNKHjsTupV+nOA=="], + "@storybook/builder-vite": ["@storybook/builder-vite@10.6.5", "", { "dependencies": { "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^10.6.5", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-udrGjg3yt38pz4FxplypXxw1creIGS7N6QS8xfvTFM8MQNtPyojT/gZdd4fhX0dFrQx5MMuJEYJA5gUBiPsLtg=="], "@storybook/global": ["@storybook/global@5.0.0", "", {}, "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ=="], "@storybook/icons": ["@storybook/icons@2.2.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-FpUB/xizIrV1ILhCIYFo+TtQNN9YEoLjfcnAW0JtOXL+BcM2aisSysI0B54JMWDnljriXySBHgN6ps4s9lb75A=="], - "@storybook/react": ["@storybook/react@10.6.3", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/react-dom-shim": "10.6.3", "react-docgen": "^8.0.2", "react-docgen-typescript": "^2.2.2" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.3", "typescript": ">= 4.9.x" }, "optionalPeers": ["@types/react", "@types/react-dom", "typescript"] }, "sha512-3tfAkZNdUyx3I4IjM8dgbNWg4k0gj89Hi1MPiawfTybRRWhvnX2YqV9Ut4mrud7YzRv0v+U7+ZYEvj+maUPaow=="], + "@storybook/react": ["@storybook/react@10.6.5", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/react-dom-shim": "10.6.5", "react-docgen": "^8.0.2", "react-docgen-typescript": "^2.2.2" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.5", "typescript": ">= 4.9.x" }, "optionalPeers": ["@types/react", "@types/react-dom", "typescript"] }, "sha512-vvRjRe/O8NRiQbGyA7Ne6h2jbD6GjwNZFkMdHl+0kZH8Z/S9ZWWmKmjCySvH/OmgighdCOQ98tcfND7m65WQBg=="], - "@storybook/react-dom-shim": ["@storybook/react-dom-shim@10.6.3", "", { "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.3" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-cJUuPrieiTl06kzlgaU89iG+CtLAgUTt0Xdvm8qFT9yR2qwafSaswhwYWlZCNX4nWuOu7eK7uzWTwzKqyDBOWQ=="], + "@storybook/react-dom-shim": ["@storybook/react-dom-shim@10.6.5", "", { "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.5" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Qbbkp+5Otg32w8Ddav6rH6MGPiYVfEzrgn0HqbqlqS8kY+DRXo+NYXJwZTVSDSwrYPrfH+Ok2tV4uE8Zo0c3cg=="], - "@storybook/react-vite": ["@storybook/react-vite@10.6.3", "", { "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.7.0", "@rollup/pluginutils": "^5.0.2", "@storybook/builder-vite": "10.6.3", "@storybook/react": "10.6.3", "empathic": "^2.0.0", "magic-string": "^1.1.0", "react-docgen": "^8.0.2", "resolve": "^1.22.8", "tsconfig-paths": "^4.2.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.3", "typescript": ">= 4.9.x", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["typescript"] }, "sha512-geWwLi9JnaRG2t9bYBfz+94skARzzXNT1Toaf0lk7Oog13rtNK7ay2pWNm9SP6/L2S7mEjoWu9+zHLpwxXvfIw=="], + "@storybook/react-vite": ["@storybook/react-vite@10.6.5", "", { "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.7.0", "@rollup/pluginutils": "^5.0.2", "@storybook/builder-vite": "10.6.5", "@storybook/react": "10.6.5", "empathic": "^2.0.0", "magic-string": "^1.1.0", "react-docgen": "^8.0.2", "resolve": "^1.22.8", "tsconfig-paths": "^4.2.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.6.5", "typescript": ">= 4.9.x", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["typescript"] }, "sha512-RsRF1drYtCku7+PMdRnuFt3EdG8Rn8I5G8ne0cBjn24xSn5Pbo9W+y9IoyD2llAeaeCpzEEdASY12wpKd3aCQA=="], "@stylexjs/babel-plugin": ["@stylexjs/babel-plugin@0.19.1", "", { "dependencies": { "@babel/core": "^7.26.8", "@babel/helper-module-imports": "^7.25.9", "@babel/traverse": "^7.26.8", "@babel/types": "^7.26.8", "@dual-bundle/import-meta-resolve": "^4.1.0", "@stylexjs/shared": "0.19.1", "@stylexjs/stylex": "0.19.1", "postcss-value-parser": "^4.1.0" } }, "sha512-Ig3crX6MuGWDEAx+f89aLxTQUWVeEc2Aco2moIdcObyvo7hZJgU26rxJN3k7geFjhi+5dfna6TNR8iTRK0PQGA=="], @@ -1525,31 +1535,31 @@ "@stylistic/eslint-plugin": ["@stylistic/eslint-plugin@5.10.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/types": "^8.56.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "estraverse": "^5.3.0", "picomatch": "^4.0.3" }, "peerDependencies": { "eslint": "^9.0.0 || ^10.0.0" } }, "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ=="], - "@swc/core": ["@swc/core@1.16.20", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.28" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.16.20", "@swc/core-darwin-x64": "1.16.20", "@swc/core-linux-arm-gnueabihf": "1.16.20", "@swc/core-linux-arm64-gnu": "1.16.20", "@swc/core-linux-arm64-musl": "1.16.20", "@swc/core-linux-ppc64-gnu": "1.16.20", "@swc/core-linux-s390x-gnu": "1.16.20", "@swc/core-linux-x64-gnu": "1.16.20", "@swc/core-linux-x64-musl": "1.16.20", "@swc/core-win32-arm64-msvc": "1.16.20", "@swc/core-win32-ia32-msvc": "1.16.20", "@swc/core-win32-x64-msvc": "1.16.20" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"], "hasInstallScript": true }, "sha512-zcdfS7k28OJIMuLhqRRyGja9PxrC2GXhFXkbQ1X15y6uZEMsTrqyej55V1DiJtlXaDOmwSLn5222YPT9ZoFxPA=="], + "@swc/core": ["@swc/core@1.16.21", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.28" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.16.21", "@swc/core-darwin-x64": "1.16.21", "@swc/core-linux-arm-gnueabihf": "1.16.21", "@swc/core-linux-arm64-gnu": "1.16.21", "@swc/core-linux-arm64-musl": "1.16.21", "@swc/core-linux-ppc64-gnu": "1.16.21", "@swc/core-linux-s390x-gnu": "1.16.21", "@swc/core-linux-x64-gnu": "1.16.21", "@swc/core-linux-x64-musl": "1.16.21", "@swc/core-win32-arm64-msvc": "1.16.21", "@swc/core-win32-ia32-msvc": "1.16.21", "@swc/core-win32-x64-msvc": "1.16.21" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"], "hasInstallScript": true }, "sha512-sE2asan0US6gcp11oBDFJb5+s+ltaAPBcagVQGub1+qo+8TsQET2TmXfJCw/Oy0w1eEPp1rV1wsR/Umx2KXGcw=="], - "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.16.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-i7NFSDnuE6tdBvBgmoVKKmburgcwZt/FZK2IusJaVGrjFrMUC1hrgE3RI+Kt9RhYM7vHvQj0W9j53zSxKEMbWQ=="], + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.16.21", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VRreJpbRygpSD1hj3HBEOIA1xjXYnhB+IfcKsxZRhCIBGRP4UkqxZH4/ipFh/heIRp7EKQ56E8ygwEftLNCWXw=="], - "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.16.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-ho/LkT1Q3beSBeZGNZnm1mVbh5bKZHC0UGHtK3MswqOylbHtZoMXJBL40N8JpDj5SBxwECmdNEyXnU9HJ4F6RA=="], + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.16.21", "", { "os": "darwin", "cpu": "x64" }, "sha512-KqCJ04pMYDBUYpAOFGUFR8TEjqo4h0Vtwe/za9xNRDKsxSDnjgM7HVhfO0uNNpMMlM2ao2E6d0iLpApIRvNGnA=="], - "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.16.20", "", { "os": "linux", "cpu": "arm" }, "sha512-xm3/s3zp9WyNgB1Sl78tpH76MHgobI3TSenTY15bkSHyrdQa9W2MUSESHRPd7CHGFLfpWl/0jwwNp5+hwG0e9A=="], + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.16.21", "", { "os": "linux", "cpu": "arm" }, "sha512-tLkw3uWxQj69qBRX5Xm8vbq+5iX5e/ktoPXhrDeFFa2jNMc+AWcxa0bqwatvVGK40v5mcmz6Ulu5Nk9jF8ciMA=="], - "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.16.20", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-e6Um0U+VcTQyurOXhbratRQlrPITSRwugG00fhICbi2MGTi1vRiE4TMqGCjWpR1zPmZKXDGMw+yNFvh7AAgT2Q=="], + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.16.21", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-lFHVlHB0B5C7FwyprWJQp7b2iF/ohj2RqnMiv8uCnFJc+rYP0Py2I7ftZ+rOX4Zu7Ra9eMk7GnmuxAywCZYUJQ=="], - "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.16.20", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-ekCO2obfK9NFwXGHfAQjjuU5mLDDC7qMaUJH/V/4iyzD0BqNhilr6McZrXLytOQ/xKtTNxLQ71wYrD3M2LW8Kg=="], + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.16.21", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-gXDgrMMDsWT7r5gZsml10snBS9yaoVYwU9vGffa+DAts4ctEMrMHv+G8AH+ZxCV9gr5MfdgtGGQKjXjLay4mXQ=="], - "@swc/core-linux-ppc64-gnu": ["@swc/core-linux-ppc64-gnu@1.16.20", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-6/x2K3l4GNUWyaSmkywnth6ipZISzhVzOLsI66bj12/hSQYaKAyg9MKTwnuFf2B/iYA6GrjDghk36RYghRameQ=="], + "@swc/core-linux-ppc64-gnu": ["@swc/core-linux-ppc64-gnu@1.16.21", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-hZF7J2YzXiADZ4eQxTFOWJcSSy3fbUR8/DcCXqiBHh0bVyLl2Y+O5pVWxk/r/XV5tA9n7DnnLlvkPPsHoajE9w=="], - "@swc/core-linux-s390x-gnu": ["@swc/core-linux-s390x-gnu@1.16.20", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-1GTd8sqS/NpcF+Y3YDSE0bT31V61+hD7ZZWEsVyiyxk/HQt2zpk4zlJJHOASBLc+/CyUuBZ949n6QMszbIXkmQ=="], + "@swc/core-linux-s390x-gnu": ["@swc/core-linux-s390x-gnu@1.16.21", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-rmtGwkAlbl+fQMGrGUMklUmByueOmt1ju9sKsE5YWVA0KfFYM0W87WVx4lFYQXt+E4P3zkLjeqo/AUa5mFbF1A=="], - "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.16.20", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-XtMeYAgQa5UZhAX84TXn0sXPmhf1xHwcv0cl5hHiBXxTVbplY7WiTwIQU9uOtVm3VUqL/quyCm78/umUNZ7FmA=="], + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.16.21", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-EUJsyrFw3aNE64iQzk3bDqjADgl4l0vpxfwVMjMuZIooNg35yKqvkw3bYNEhQyrBDY0+5kKoiirGLpth3Wf3lA=="], - "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.16.20", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-qeF3UILa+MA4zJ29CdQ8KE7YbGFPMQBxWo3Lh0Ed0ETFEJ8pCKISWo7wQG4/SmfM9HX4KT1Odoj6ixyBn6Ji2Q=="], + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.16.21", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-ZXUnLjxTHxvNhVmQmYlb8XNKArfi/MiGoW5DmfuME8ttCLH9OJTqJVFy7g1yYxUCgw3tU6dF1uU59N8P/Yr5Pw=="], - "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.16.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ciMtHXAmE+jnrWWO14rErr6tfK34QZm8jZRSdRLPodqJlzrYDw7TqN60HC8Yim5Ua9a1r/poyfkpNft6GRXvxA=="], + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.16.21", "", { "os": "win32", "cpu": "arm64" }, "sha512-jnnQpAHiWZgEobVfOPvJJzm1Jh4ZEIKh2IqcDqHv6zJcjvaEkHdkt+qdRsJ9AqvK7g18WBRHTnvKm5IxdbkagA=="], - "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.16.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-MTbkgGooWebmjmATx1+QRECVZ+q4ICKNXCutwOrFVD5b5hdxla/yV4e6cRFrfNMowejaNpmMQg31ENWt0Yfzpg=="], + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.16.21", "", { "os": "win32", "cpu": "ia32" }, "sha512-TaVTnNm9c1I+VG3hJUt11uspwbTrTQ9+fUPzODlvx4tj/ChYqUm4cKTIHw3O97hILxpmhBR0hbvLEs9seOV59A=="], - "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.16.20", "", { "os": "win32", "cpu": "x64" }, "sha512-Lf5oMaSdJBImtGhDecasxcIa7Z5LeJ4aGmBOY7TScroO+A/MxxB9PslIpgV0rtG/FcxtipN7hveBg9ZTeboaaw=="], + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.16.21", "", { "os": "win32", "cpu": "x64" }, "sha512-aPv58Clf6SdAQtouzDYKbEtcCETY2hOXlrHgSFnFIJQOlMWINHSGazaM1Iv63/9wOUDPq6+0ZFytMqnPtER9OQ=="], "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], @@ -1571,13 +1581,13 @@ "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3", "", { "os": "linux", "cpu": "arm" }, "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.3", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.3", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.3", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.3", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img=="], "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.3", "", { "dependencies": { "@emnapi/core": "^1.11.1", "@emnapi/runtime": "^1.11.1", "@emnapi/wasi-threads": "^1.2.2", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ=="], @@ -1587,7 +1597,7 @@ "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.3", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.3", "@tailwindcss/oxide": "4.3.3", "postcss": "^8.5.16", "tailwindcss": "4.3.3" } }, "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg=="], - "@tanstack/eslint-plugin-query": ["@tanstack/eslint-plugin-query@5.104.5", "", { "dependencies": { "@typescript-eslint/utils": "^8.71.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": "^5.6.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["typescript"] }, "sha512-rUAV00UdfhUAn5qSzsO6IaE/rMG/K+qvYbQZh8Sm1Uc71H8f3jgYXFYHPL30mz+JadwmvqEBHhG5Q6gm08o1dA=="], + "@tanstack/eslint-plugin-query": ["@tanstack/eslint-plugin-query@5.105.1", "", { "dependencies": { "@typescript-eslint/utils": "^8.71.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": "^5.6.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["typescript"] }, "sha512-p6GxacHDMUVt9zWU5CsY+mY8asEZzV2KyCmjIc1V4+ltb4MpvC9SadJML9lSq2GuwLqsUcuLVDONmQvv4NI9Tg=="], "@testing-library/dom": ["@testing-library/dom@10.4.2", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "picocolors": "1.1.1", "pretty-format": "^27.0.2" } }, "sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q=="], @@ -1627,7 +1637,7 @@ "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], - "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + "@types/estree": ["@types/estree@1.0.10", "", {}, "sha512-lTyOMnOcmRBzdCv6/4zUZCrEhV0xrqQiUZBZtVcbmLHBXKLnN8q89v/wKRF/Q0HbwVsqbIG3o5HDoFl9sduM+g=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -1647,7 +1657,7 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@26.6.5", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg=="], + "@types/node": ["@types/node@26.6.6", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog=="], "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], @@ -1679,25 +1689,25 @@ "@types/ws": ["@types/ws@8.18.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-67MQl+fpWKVTT1NYdnmo3U4sc/xPo/zQBncVnI74qmQa0z/b+1g6iYqNmGCPbxO+zz2aklb08a0oHfegiVd0/w=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.72.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.72.0", "@typescript-eslint/type-utils": "8.72.0", "@typescript-eslint/utils": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.72.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.72.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/type-utils": "8.72.1", "@typescript-eslint/utils": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.72.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.72.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.72.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.0", "@typescript-eslint/types": "^8.72.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.1", "@typescript-eslint/types": "^8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.72.0", "", { "dependencies": { "@typescript-eslint/types": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0" } }, "sha512-JewPyJOYcXBSAS7PIgufscHOwZqhTGyBRiQJhhuDln66tMchxvvt7nJ90JKKIoOelmdHA3kAQbm9cEUHc4JSEA=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.72.1", "", { "dependencies": { "@typescript-eslint/types": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1" } }, "sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.72.0", "", { "dependencies": { "@typescript-eslint/types": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/utils": "8.72.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw=="], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.72.1", "", { "dependencies": { "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/utils": "8.72.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.72.0", "", {}, "sha512-Adfoy59kxNEjT5E5fnyrp7GpHYuWs8ONbdohu4ez6IU46qDq8LltG90tLmkucZB2uhYL8mqBjtXqGd8yhfjXqQ=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.72.1", "", {}, "sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.0", "@typescript-eslint/tsconfig-utils": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.1", "@typescript-eslint/tsconfig-utils": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.72.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg=="], + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.72.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.72.0", "", { "dependencies": { "@typescript-eslint/types": "8.72.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-E2mroviasaWecDzTGiGMtuEguuLVOeRggnrIn93CJuxYJzQBHbyymlT08aVQydbBal5538o+JkBKXh2sRuCyIA=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.72.1", "", { "dependencies": { "@typescript-eslint/types": "8.72.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ=="], "@typescript/native": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], @@ -1771,7 +1781,7 @@ "@vinext/types": ["@vinext/types@1.0.2", "", {}, "sha512-ORcuy4DNiT2EFsLsCh2FtZz1I7Q3HGf1PSu80ALqwlq+en7UJeLKQE7FmKgvW0cJL79GvZuZe4jddzGpqDMw/Q=="], - "@vitejs/plugin-react": ["@vitejs/plugin-react@6.1.2", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "oxc-transform-react": "^0.152.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler", "oxc-transform-react"] }, "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw=="], + "@vitejs/plugin-react": ["@vitejs/plugin-react@6.2.1", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0 || ^0.3.0", "babel-plugin-react-compiler": "^1.0.0", "oxc-transform-react": ">=0.152.0 <0.157.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler", "oxc-transform-react"] }, "sha512-9KyWCij3r0+qLG3Q62vBmv0VyevmYibAtxaCIVK9o0k6CXgaajZRIe8tpfchQcdZArJ5b/7OrIz4W3b2uxVRDA=="], "@vitejs/plugin-rsc": ["@vitejs/plugin-rsc@0.5.38", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1", "es-module-lexer": "^3.0.3", "estree-walker": "^3.0.3", "magic-string": "^1.4.3", "obug": "^3.0.0", "srvx": "^1.0.5", "strip-literal": "^4.0.0", "turbo-stream": "^3.2.1", "vitefu": "^1.1.3" }, "peerDependencies": { "react": "*", "react-dom": "*", "react-server-dom-webpack": "*", "vite": "*" }, "optionalPeers": ["react-server-dom-webpack"] }, "sha512-SoiRBJBVd3Qg6Frnvdk6LwugJYlQKgee+uqySxKz5T/KsCZUgdw529Klzg4IDJuP/EOfsIJ2YiOKAFY8tnr1kg=="], @@ -2027,7 +2037,7 @@ "base64-js": ["base64-js@0.0.8", "", {}, "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.11.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.34", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-Aqr8mA1kIvyJ3UY5YAY7ib8LSo1DmDMbMnVqGPtsKW1LxaFQFwn9Eb3yvq2fUKJsRvaXjnAV7R5osqETapzNiA=="], "big.js": ["big.js@5.2.2", "", {}, "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="], @@ -2061,7 +2071,7 @@ "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], - "caniuse-lite": ["caniuse-lite@1.0.30001819", "", {}, "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg=="], + "caniuse-lite": ["caniuse-lite@1.0.30001820", "", {}, "sha512-gfWD6MxqVCqAOwmODfZf7DchWvlrA+SRdNX7ceLfg3xRqe5ssjjpF7EgslC/0tiLiNTajdaNN/q8c/5u/7Gz8w=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -2109,7 +2119,9 @@ "concat-stream": ["concat-stream@2.0.0", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="], - "confbox": ["confbox@0.3.1", "", {}, "sha512-cKUSoKa8YxFZZSmraVi7onONx3amu77ngK3kGpsYHDH7drPwCRkQE1RYMPlLRrMtnciRj274XNRxcHxnKmDSnA=="], + "confbox": ["confbox@0.3.2", "", {}, "sha512-ZUAKhKlkCOrIGKc8cj7zek9s9z1mveHif/25nUshI2BzCRzF7KH7KHa+Lnh2ubq+e1tIlaFuP763mzW4qVoehg=="], + + "content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], @@ -2177,7 +2189,7 @@ "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - "electron-to-chromium": ["electron-to-chromium@1.5.464", "", {}, "sha512-nRa65aFge40viPAKxMKULIY8tcXKwKboJWNn4RoKwyWXJ6SP7BnrDGKUTzc64818jIciH0PK7LSF8QzZes19GA=="], + "electron-to-chromium": ["electron-to-chromium@1.5.472", "", {}, "sha512-s4+nfT29b0FKpVKoaIxl2pWsoNcn7A/nMPSrxayw4T3BsmPeV2lF9Y06BsAQeMGhCTQ4nYJ5XST7jkqe4ZEqFw=="], "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], @@ -2189,7 +2201,7 @@ "enhanced-resolve": ["enhanced-resolve@5.26.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw=="], - "entities": ["entities@8.1.0", "", {}, "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA=="], + "entities": ["entities@9.0.0", "", {}, "sha512-oJFNDJg3kTPwAD1cNn2+WmUq4wFoo09npc3Ydf1D7ED4smRiWrsKnaLxykrTWgyGEcusc87P5dxlAleol9kpkg=="], "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], @@ -2203,7 +2215,7 @@ "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], + "esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -2211,13 +2223,13 @@ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "eslint": ["eslint@10.13.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.7.0", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "11.1.5 || >11.1.6 <12", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg=="], + "eslint": ["eslint@10.14.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.7.0", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.3", "@humanfs/node": "^0.16.8", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "11.1.5 || >11.1.6 <12", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.6", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-T0pNsxkb9IKmtQjhpK3d7nWOpFv+YHuMbTJnSVMoQblF0onvXfErrtp4V1jHtsQPan7dKaGVD0q1WCXnzMF31A=="], "eslint-config-prettier": ["eslint-config-prettier@10.1.8", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w=="], "eslint-json-compat-utils": ["eslint-json-compat-utils@0.2.3", "", { "dependencies": { "esquery": "^1.6.0" }, "peerDependencies": { "@eslint/json": "*", "eslint": "*", "jsonc-eslint-parser": "^2.4.0 || ^3.0.0" }, "optionalPeers": ["@eslint/json"] }, "sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ=="], - "eslint-mdx": ["eslint-mdx@3.8.2", "", { "dependencies": { "acorn": "^8.19.0", "acorn-jsx": "^5.3.2", "espree": "^9.6.1 || ^10.4.0 || ^11.2.0", "estree-util-visit": "^2.0.0", "remark-mdx": "^3.1.1", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "synckit": "^0.12.3", "unified": "^11.0.5", "unified-engine": "^11.2.2", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3" }, "peerDependencies": { "eslint": ">=8.0.0", "remark-lint-file-extension": "*" }, "optionalPeers": ["remark-lint-file-extension"] }, "sha512-mgHCDubLWobY6hMbBTSOTCn6YBw3BcnCt5Qp8OaoE9UdJHm5+d7Ai+5rY1tpsziCo+VVUrAGCfcTtapPVApkIg=="], + "eslint-mdx": ["eslint-mdx@3.9.1", "", { "dependencies": { "acorn": "^8.19.0", "acorn-jsx": "^5.3.2", "devlop": "^1.1.0", "eslint-scope": "^8.4.0 || ^9.1.2", "eslint-visitor-keys": "^4.2.0 || ^5.0.1", "espree": "^9.6.1 || ^10.4.0 || ^11.2.0", "estree-util-visit": "^2.0.0", "mdast-util-from-markdown": "^2.1.0", "remark-mdx": "^3.1.1", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "synckit": "^0.12.3", "unified": "^11.0.5", "unified-engine": "^11.2.2", "unist-util-visit": "^5.1.0", "unist-util-visit-parents": "^6.0.0", "vfile": "^6.0.3" }, "peerDependencies": { "@types/estree": "^1.0.10", "eslint": ">=8.0.0", "remark-lint-file-extension": "*" }, "optionalPeers": ["@types/estree", "remark-lint-file-extension"] }, "sha512-PNO+iBG9s0ERe53glwh987Ab96gY94xX9i3hpE04fto16na1n6ilZA+3UzNTRy6LkmxYX4yObpihJbQAlEpjBQ=="], "eslint-plugin-devup": ["eslint-plugin-devup@2.1.0", "", { "dependencies": { "@devup-ui/eslint-plugin": ">=1.0.16", "@eslint-react/eslint-plugin": ">=5.18.6", "@eslint/js": ">=10.0", "@stylistic/eslint-plugin": ">=5.10.0", "@tanstack/eslint-plugin-query": ">=5.101.4", "eslint": ">=10.8", "eslint-config-prettier": ">=10", "eslint-plugin-mdx": ">=3.8.1", "eslint-plugin-perfectionist": ">=5.10.1", "eslint-plugin-prettier": ">=5.5.6", "eslint-plugin-react-hooks": ">=7.1", "eslint-plugin-simple-import-sort": ">=14.0.0", "eslint-plugin-unused-imports": ">=4.4.1", "prettier": ">=3", "typescript-eslint": ">=8.67" } }, "sha512-irEgoDkISHG4I8zFPFgRDO/kAn+MzJ/mCxAWaLt700/w0H0ncyfOYsBivw1KDpOxYZXknvT+1S6PNGG0ubBotg=="], @@ -2225,7 +2237,7 @@ "eslint-plugin-jsonc": ["eslint-plugin-jsonc@3.4.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.5.1", "@eslint/core": "^1.0.1", "@eslint/plugin-kit": "^0.7.0", "@ota-meshi/ast-token-store": "^0.3.0", "diff-sequences": "^29.6.3", "eslint-json-compat-utils": "^0.2.3", "jsonc-eslint-parser": "^3.1.0", "natural-compare": "^1.4.0", "synckit": "^0.11.12" }, "peerDependencies": { "eslint": ">=9.38.0" } }, "sha512-q5xzjCYFQuhFomTbctXzd3STfDJ8XduvaigjQmMEbP2gzSKrc58y3Fv6D775/cIK1/sRUn+4kpljiU2iW8k0zw=="], - "eslint-plugin-mdx": ["eslint-plugin-mdx@3.8.2", "", { "dependencies": { "eslint-mdx": "^3.8.2", "mdast-util-from-markdown": "^2.1.0", "mdast-util-mdx": "^3.0.0", "micromark-extension-mdxjs": "^3.0.0", "remark-mdx": "^3.1.1", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "synckit": "^0.12.3", "unified": "^11.0.5", "vfile": "^6.0.3" }, "peerDependencies": { "eslint": ">=8.0.0" } }, "sha512-A0rcLaVZTwDovNrPBCDWzcNe4Mzu9rW+C/uLeF/j7/aDOlviRlqOowCe6ntjVnlIyUGAjnKv5EW5UoQY4UlbYg=="], + "eslint-plugin-mdx": ["eslint-plugin-mdx@3.9.1", "", { "dependencies": { "eslint-mdx": "^3.9.1", "mdast-util-mdx": "^3.0.0", "prettier-linter-helpers": "^1.0.1", "remark-mdx": "^3.1.1", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "unified": "^11.0.5", "vfile": "^6.0.3" }, "peerDependencies": { "eslint": ">=8.0.0" } }, "sha512-rekc3S2KkRna/W2gwjXtLvNo7qgbSY/7l+EnuhLzmO9iBCR9aD2mu3/8FmWh/zI9ku0bUpqP3CIlet5BWHhF6w=="], "eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.13.0", "", { "dependencies": { "@typescript-eslint/types": "^8.71.2", "@typescript-eslint/utils": "^8.71.2", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" }, "optionalPeers": ["eslint"] }, "sha512-kPlqE2Kdh0njsad9S9xL/xnq+NNVUsga/uS3yf6axE0RddACM3Q+idJyethC7R+C9b73+NRhAWvKyXPrkl0nFA=="], @@ -2247,7 +2259,7 @@ "eslint-plugin-simple-import-sort": ["eslint-plugin-simple-import-sort@14.0.0", "", { "peerDependencies": { "eslint": ">=5.0.0" } }, "sha512-NUJO0+XFCkk+o5EsAJruTgnfMEpeWrPWeJS15UVF60GgXmqz1BJ9/3hzlvG7lkL8Bubzos5cCLptThbFfPnSMQ=="], - "eslint-plugin-storybook": ["eslint-plugin-storybook@10.6.3", "", { "dependencies": { "@typescript-eslint/types": "^8.60.0", "@typescript-eslint/utils": "^8.60.0" }, "peerDependencies": { "eslint": ">=8" } }, "sha512-AmM0vKC6iaw6geKS3gAwLMnjIsfXxddYcm+zPSRX98TbFm1gAHHeYZtOCm4iEu5fcLIdeUlmDmHihqMVjSw+lw=="], + "eslint-plugin-storybook": ["eslint-plugin-storybook@10.6.5", "", { "dependencies": { "@typescript-eslint/types": "^8.60.0", "@typescript-eslint/utils": "^8.60.0" }, "peerDependencies": { "eslint": ">=8" } }, "sha512-sQSRwmbqcyGVtjVGUSOPTM5TFjopoit3blQxMcsHeqmmR1PJsciLH/WjgG7CT+u2/F0HMJFsQa+TqJSFDxXwWQ=="], "eslint-plugin-unused-imports": ["eslint-plugin-unused-imports@4.4.1", "", { "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "eslint": "^10.0.0 || ^9.0.0 || ^8.0.0" }, "optionalPeers": ["@typescript-eslint/eslint-plugin"] }, "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ=="], @@ -2285,7 +2297,7 @@ "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], - "exsolve": ["exsolve@1.1.3", "", {}, "sha512-kuzL9zherLQoqDeQaS55AiiIg1kb4KYXaSusTtgZTPlvKP2gGCI82LNmBNh5RjDVUXIcmgx+/Mx7vPwRzBbhJA=="], + "exsolve": ["exsolve@1.2.0", "", {}, "sha512-h1pQPR9XoeSMdntRNCjyTznaume4UpfXrULBnlkZ2CUM/G5eSa+pBByGldO5uR8dxbPC+OuJXsPPNf+JZ81ADg=="], "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], @@ -2337,7 +2349,7 @@ "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], - "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin", "hasInstallScript": true }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], @@ -2353,7 +2365,7 @@ "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - "globals": ["globals@17.13.0", "", {}, "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg=="], + "globals": ["globals@17.14.0", "", {}, "sha512-UtdkTVyAJePQv0J2M9Xe4L0ruNSDV314XiIJsADI2Zf40bcdAonE/D/OhAU8AT99oij9mhLByb+NvA3QWZYgCg=="], "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], @@ -2371,11 +2383,11 @@ "hast-util-to-estree": ["hast-util-to-estree@3.1.3", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-attach-comments": "^3.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w=="], - "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.6", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg=="], + "hast-util-to-jsx-runtime": ["hast-util-to-jsx-runtime@2.3.7", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "comma-separated-tokens": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "hast-util-whitespace": "^3.0.0", "mdast-util-mdx-expression": "^2.0.0", "mdast-util-mdx-jsx": "^3.0.0", "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "style-to-object": "^2.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" } }, "sha512-F7DNV2NMcTxA4GqPVHnXzX+mpoPHAIY9rJAVH3CZ1FdBZOcBUEjUuvMkMpHVs/sicEtznh9tMGj5WUR9S4E2rg=="], "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], - "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + "hastscript": ["hastscript@9.0.3", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-1ALZXSmCGmW3h8AMz4R4+QKSKFi7sNgXLVwmwB8FYVtl1CwQ3WDkSAEY/d5tp1g/vbQgq2s1WlHgfO3jbw1TsA=="], "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="], @@ -2397,6 +2409,8 @@ "husky": ["husky@9.1.7", "", { "bin": { "husky": "bin.js" } }, "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA=="], + "icu-minify": ["icu-minify@4.14.9", "", { "dependencies": { "@formatjs/icu-messageformat-parser": "^3.4.0" } }, "sha512-PmO+fNnC3K3mfPKTnm3RrPERrhQZnjm1AlpyZQ0ShbXi8Y/kYZ3YOde8TEjCLz9k3P2DmzkBn8lykGrCAi1Ajw=="], + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], @@ -2413,7 +2427,9 @@ "ini": ["ini@4.1.3", "", {}, "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg=="], - "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "inline-style-parser": ["inline-style-parser@0.2.9", "", {}, "sha512-IttN8BqKLxzUrnTqHI+/hwAJQItBAUjdoHERCDv+oOuX48VP6bzW8+QjOXSfoevzq3YrYAwX1uLHp8TqO9yIeg=="], + + "intl-messageformat": ["intl-messageformat@11.2.15", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.7", "@formatjs/icu-messageformat-parser": "3.5.18" } }, "sha512-W4VNytsXyWgW5lvVchmsb9xgA5rSKqoflu3/IQ9UCtB0z4R+Bx9MoEkwFT/+30RCl/KzUoH0QGGe9lppF5SuvQ=="], "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], @@ -2497,13 +2513,13 @@ "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="], @@ -2537,7 +2553,7 @@ "lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="], - "magic-string": ["magic-string@1.4.3", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.6.0" } }, "sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ=="], + "magic-string": ["magic-string@1.4.5", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.6.0" } }, "sha512-oLLC2+YvQUfAa+vxoufE/yc1icb87M9iXIRqAoR/2EhE/8cb3SF/+Gi0c2By1B+5Vz2e2vQtUvHiu1+63Znh+w=="], "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], @@ -2555,7 +2571,7 @@ "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], - "mdast-util-to-markdown": ["mdast-util-to-markdown@2.2.0", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-character": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA=="], + "mdast-util-to-markdown": ["mdast-util-to-markdown@2.2.1", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", "mdast-util-phrasing": "^4.0.0", "mdast-util-to-string": "^4.0.0", "micromark-util-character": "^2.0.0", "micromark-util-classify-character": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-html-tag-name": "^2.0.0", "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" } }, "sha512-ThatlCBxG2GE+mljhNSfZPv56d3QrGiRh97jjYgIk80IzS4uU6d7cHAaexCYSAmUCCcOs3grJ07kX3oTGsFUOw=="], "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "^4.0.0" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], @@ -2635,7 +2651,7 @@ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], - "minimizer-webpack-plugin": ["minimizer-webpack-plugin@5.13.1", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "jest-worker": "^27.4.5", "schema-utils": "^4.6.0", "terser": "^5.51.0" }, "peerDependencies": { "@minify-html/node": "*", "@napi-rs/image": "*", "@swc/core": "*", "@swc/css": "*", "@swc/html": "*", "clean-css": "*", "cssnano": "*", "csso": "*", "esbuild": "*", "html-minifier-terser": "*", "imagemin": "*", "lightningcss": "*", "postcss": "*", "sharp": "*", "svgo": "*", "uglify-js": "*", "webpack": "^5.1.0" }, "optionalPeers": ["@minify-html/node", "@napi-rs/image", "@swc/core", "@swc/css", "@swc/html", "clean-css", "cssnano", "csso", "esbuild", "html-minifier-terser", "imagemin", "lightningcss", "postcss", "sharp", "svgo", "uglify-js"] }, "sha512-1mhAfvachWYYOm8tpmany5NLuvP+F2wxZWBSX8DC0uFS2wJpM9q3rWgN9wBooAH9d5V12wX0BjyJe4fMjHMarQ=="], + "minimizer-webpack-plugin": ["minimizer-webpack-plugin@5.14.0", "", { "dependencies": { "jest-worker": "^27.4.5", "schema-utils": "^4.6.0", "terser": "^5.51.0" }, "peerDependencies": { "@minify-html/node": "*", "@napi-rs/image": "*", "@swc/core": "*", "@swc/css": "*", "@swc/html": "*", "clean-css": "*", "cssnano": "*", "csso": "*", "esbuild": "*", "html-minifier-terser": "*", "imagemin": "*", "lightningcss": "*", "postcss": "*", "sharp": "*", "svgo": "*", "uglify-js": "*", "webpack": "^5.1.0" }, "optionalPeers": ["@minify-html/node", "@napi-rs/image", "@swc/core", "@swc/css", "@swc/html", "clean-css", "cssnano", "csso", "esbuild", "html-minifier-terser", "imagemin", "lightningcss", "postcss", "sharp", "svgo", "uglify-js"] }, "sha512-PnvQXCJxhgH2ZVVO7Lj0sM6q8L1XGxnUvd8wVQIRwi8khMCLq5wg0Ngxe44bcuZL2FSN81RdVE7YHEVzTKsQDQ=="], "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], @@ -2653,6 +2669,8 @@ "natural-orderby": ["natural-orderby@5.0.0", "", {}, "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg=="], + "negotiator": ["negotiator@1.1.0", "", { "dependencies": { "content-type": "^2.1.0" } }, "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg=="], + "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], "next": ["next@16.4.3", "", { "dependencies": { "@next/env": "16.4.3", "@swc/helpers": "0.5.23", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.5.23", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.4.3", "@next/swc-darwin-x64": "16.4.3", "@next/swc-linux-arm64-gnu": "16.4.3", "@next/swc-linux-arm64-musl": "16.4.3", "@next/swc-linux-x64-gnu": "16.4.3", "@next/swc-linux-x64-musl": "16.4.3", "@next/swc-win32-arm64-msvc": "16.4.3", "@next/swc-win32-x64-msvc": "16.4.3", "sharp": "^0.35.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-OqxKTGi9u80FydydsMNYNjnuje9Au+kvHlt2GZ//ftdpDHm1dxKqAaENoOOTX5wKzn+9vaKUNIfZeyZUuLhCnA=="], @@ -2671,6 +2689,10 @@ "next-example": ["next-example@workspace:apps/next"], + "next-intl": ["next-intl@4.14.9", "", { "dependencies": { "@eloqnt/config": "^0.1.1", "@eloqnt/format-json": "^0.1.0", "@eloqnt/format-po": "^0.1.1", "@formatjs/intl-localematcher": "^0.8.1", "@parcel/watcher": "^2.4.1", "@swc/core": "~1.16.0", "icu-minify": "^4.14.9", "negotiator": "^1.0.0", "next-intl-swc-plugin-extractor": "4.14.9", "use-intl": "^4.14.9" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-uauRtUC+TrYNA1OL/QcwL9irndLrI9jK3Wdaa9W0B5AeKh9cqVdNeT0IWgLnhBqBRrVwppVdI0M+C1+JdGPQ3w=="], + + "next-intl-swc-plugin-extractor": ["next-intl-swc-plugin-extractor@4.14.9", "", {}, "sha512-8jAkmDwQJo6RDavBHm9QRl1YTn2WXf+rI4SVhMaZxZcxopnwZic6fKTXOoNIo3kzC+a6vJySkOkXmHTVFLAYtg=="], + "next-kuma-ui-benchmark": ["next-kuma-ui-benchmark@workspace:benchmark/next-kuma-ui"], "next-mui-benchmark": ["next-mui-benchmark@workspace:benchmark/next-mui"], @@ -2697,7 +2719,7 @@ "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], - "node-releases": ["node-releases@2.0.60", "", {}, "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ=="], + "node-releases": ["node-releases@2.0.63", "", {}, "sha512-6li2QanLsAXpIH2R6j77MzRyvOyrvdTqlKtO4CgBdHGNvN99ZZfyxszHc5o5+IZBWD5u6Hzwg83JoGXmqZNG9Q=="], "nopt": ["nopt@7.2.1", "", { "dependencies": { "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w=="], @@ -2743,7 +2765,7 @@ "parse-json": ["parse-json@7.1.1", "", { "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", "json-parse-even-better-errors": "^3.0.0", "lines-and-columns": "^2.0.3", "type-fest": "^3.8.0" } }, "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw=="], - "parse5": ["parse5@8.0.1", "", { "dependencies": { "entities": "^8.0.0" } }, "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw=="], + "parse5": ["parse5@8.1.0", "", { "dependencies": { "entities": "^9.0.0" } }, "sha512-sq3qBFpee5jeocbFbO48VHlGr8sT7mbXS0vxlKN6sottBtJzrOG3998sr0llSZcQAGgfpdmEYAIZE0P9z0dE8w=="], "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], @@ -2777,7 +2799,9 @@ "playwright-core": ["playwright-core@1.64.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ=="], - "postcss": ["postcss@8.5.31", "", { "dependencies": { "nanoid": "^3.3.20", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" } }, "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg=="], + "po-parser": ["po-parser@2.2.0", "", {}, "sha512-NdTrKgh0oO7+y+RFX8KKhOB438x/j94UGXEFzl/7pHH0JjWSn42iJ9tgmPksIO6n1JKDHmNDcejPJfKspljB9g=="], + + "postcss": ["postcss@8.5.32", "", { "dependencies": { "nanoid": "^3.3.20", "picocolors": "^1.1.1", "source-map-js": "^1.2.2" } }, "sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g=="], "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], @@ -2895,9 +2919,9 @@ "rimraf": ["rimraf@6.1.3", "", { "dependencies": { "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA=="], - "rolldown": ["rolldown@1.2.15", "", { "dependencies": { "@oxc-project/types": "=0.155.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.15", "@rolldown/binding-android-arm64": "1.2.15", "@rolldown/binding-darwin-arm64": "1.2.15", "@rolldown/binding-darwin-x64": "1.2.15", "@rolldown/binding-freebsd-x64": "1.2.15", "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", "@rolldown/binding-linux-arm64-gnu": "1.2.15", "@rolldown/binding-linux-arm64-musl": "1.2.15", "@rolldown/binding-linux-ppc64-gnu": "1.2.15", "@rolldown/binding-linux-s390x-gnu": "1.2.15", "@rolldown/binding-linux-x64-gnu": "1.2.15", "@rolldown/binding-linux-x64-musl": "1.2.15", "@rolldown/binding-openharmony-arm64": "1.2.15", "@rolldown/binding-win32-arm64-msvc": "1.2.15", "@rolldown/binding-win32-x64-msvc": "1.2.15" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g=="], + "rolldown": ["rolldown@1.2.16", "", { "dependencies": { "@oxc-project/types": "=0.156.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.16", "@rolldown/binding-android-arm64": "1.2.16", "@rolldown/binding-darwin-arm64": "1.2.16", "@rolldown/binding-darwin-x64": "1.2.16", "@rolldown/binding-freebsd-x64": "1.2.16", "@rolldown/binding-linux-arm-gnueabihf": "1.2.16", "@rolldown/binding-linux-arm64-gnu": "1.2.16", "@rolldown/binding-linux-arm64-musl": "1.2.16", "@rolldown/binding-linux-ppc64-gnu": "1.2.16", "@rolldown/binding-linux-s390x-gnu": "1.2.16", "@rolldown/binding-linux-x64-gnu": "1.2.16", "@rolldown/binding-linux-x64-musl": "1.2.16", "@rolldown/binding-openharmony-arm64": "1.2.16", "@rolldown/binding-win32-arm64-msvc": "1.2.16", "@rolldown/binding-win32-x64-msvc": "1.2.16" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-bWvlMpFKiTfDKfnK7FC2MPgPeWCf/Kpwsq49ApdW+FQaBZb6O6dZ4MAPbPUjp7hYQrw/RobqCzn64BRrQecGHw=="], - "rollup": ["rollup@4.65.0", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", "@rollup/rollup-android-arm-eabi": "4.65.0", "@rollup/rollup-android-arm64": "4.65.0", "@rollup/rollup-darwin-arm64": "4.65.0", "@rollup/rollup-darwin-x64": "4.65.0", "@rollup/rollup-freebsd-arm64": "4.65.0", "@rollup/rollup-freebsd-x64": "4.65.0", "@rollup/rollup-linux-arm-gnueabihf": "4.65.0", "@rollup/rollup-linux-arm-musleabihf": "4.65.0", "@rollup/rollup-linux-arm64-gnu": "4.65.0", "@rollup/rollup-linux-arm64-musl": "4.65.0", "@rollup/rollup-linux-loong64-gnu": "4.65.0", "@rollup/rollup-linux-loong64-musl": "4.65.0", "@rollup/rollup-linux-ppc64-gnu": "4.65.0", "@rollup/rollup-linux-ppc64-musl": "4.65.0", "@rollup/rollup-linux-riscv64-gnu": "4.65.0", "@rollup/rollup-linux-riscv64-musl": "4.65.0", "@rollup/rollup-linux-s390x-gnu": "4.65.0", "@rollup/rollup-linux-x64-gnu": "4.65.0", "@rollup/rollup-linux-x64-musl": "4.65.0", "@rollup/rollup-openbsd-x64": "4.65.0", "@rollup/rollup-openharmony-arm64": "4.65.0", "@rollup/rollup-win32-arm64-msvc": "4.65.0", "@rollup/rollup-win32-ia32-msvc": "4.65.0", "@rollup/rollup-win32-x64-gnu": "4.65.0", "@rollup/rollup-win32-x64-msvc": "4.65.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-QVCvQUTGDN6JRwi3jVGCY3H4aTHvi9rX0LyoBMkGUvdh/Z6O51CzcLz85BWZaTCDGhl6ySGqYZs+xI1jmPqGcw=="], + "rollup": ["rollup@4.67.4", "", { "dependencies": { "@types/estree": "^1.0.10" }, "optionalDependencies": { "@napi-rs/lzma-linux-x64-gnu": "1.5.1", "@rollup/rollup-android-arm-eabi": "4.67.4", "@rollup/rollup-android-arm64": "4.67.4", "@rollup/rollup-android-x64": "4.67.4", "@rollup/rollup-darwin-arm64": "4.67.4", "@rollup/rollup-darwin-x64": "4.67.4", "@rollup/rollup-freebsd-arm64": "4.67.4", "@rollup/rollup-freebsd-x64": "4.67.4", "@rollup/rollup-linux-arm-gnueabihf": "4.67.4", "@rollup/rollup-linux-arm-musleabihf": "4.67.4", "@rollup/rollup-linux-arm64-gnu": "4.67.4", "@rollup/rollup-linux-arm64-musl": "4.67.4", "@rollup/rollup-linux-loong64-gnu": "4.67.4", "@rollup/rollup-linux-loong64-musl": "4.67.4", "@rollup/rollup-linux-ppc64-gnu": "4.67.4", "@rollup/rollup-linux-ppc64-musl": "4.67.4", "@rollup/rollup-linux-riscv64-gnu": "4.67.4", "@rollup/rollup-linux-riscv64-musl": "4.67.4", "@rollup/rollup-linux-s390x-gnu": "4.67.4", "@rollup/rollup-linux-x64-gnu": "4.67.4", "@rollup/rollup-linux-x64-musl": "4.67.4", "@rollup/rollup-openbsd-x64": "4.67.4", "@rollup/rollup-openharmony-arm64": "4.67.4", "@rollup/rollup-win32-arm64-msvc": "4.67.4", "@rollup/rollup-win32-ia32-msvc": "4.67.4", "@rollup/rollup-win32-x64-gnu": "4.67.4", "@rollup/rollup-win32-x64-msvc": "4.67.4", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-Lsv3oKcz5jgOQJej/p7nfwbVEdAbDT+z6OPf/SCdI+nF+q2ENp0pTKT35ZwXAmH8g45mfrIiJeEyAqKYSYoL9Q=="], "rollup-plugin-preserve-directives": ["rollup-plugin-preserve-directives@0.4.0", "", { "dependencies": { "@rollup/pluginutils": "^5.1.0", "magic-string": "^0.30.5" }, "peerDependencies": { "rollup": "2.x || 3.x || 4.x" } }, "sha512-gx4nBxYm5BysmEQS+e2tAMrtFxrGvk+Pe5ppafRibQi0zlW7VYAbEGk6IKDw9sJGPdFWgVTE0o4BU4cdG0Fylg=="], @@ -2913,7 +2937,7 @@ "scheduler": ["scheduler@0.28.0", "", {}, "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw=="], - "schema-utils": ["schema-utils@4.8.1", "", { "dependencies": { "@types/json-schema": "^7.0.15", "ajv": "^8.20.0", "ajv-formats": "^3.0.1", "ajv-keywords": "^5.1.0" }, "peerDependencies": { "webpack": "^5.112.0" }, "optionalPeers": ["webpack"], "bin": { "schema-utils": "bin/schema-utils.js" } }, "sha512-x39pYlJPyH7Uge5QO64B9XGP9zLDc9WNmiQZc+CE3IzZPvMu3lHOuAMGpYNoPixEL7MSWlGhYTg5UlLSL8G6iw=="], + "schema-utils": ["schema-utils@4.8.2", "", { "dependencies": { "@types/json-schema": "^7.0.15", "ajv": "^8.20.0", "ajv-formats": "^3.0.1", "ajv-keywords": "^5.1.0" }, "peerDependencies": { "webpack": "^5.112.0" }, "optionalPeers": ["webpack"], "bin": { "schema-utils": "bin/schema-utils.js" } }, "sha512-iKlak3OFHF0dgD1nZRvgWQzG+P1TiEcMnLSBtIVBg937z5Jd6WE1c3SyZkXIyCfPHowL35yMsVvIjotm1c1qiw=="], "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], @@ -2947,11 +2971,11 @@ "spdx-license-ids": ["spdx-license-ids@3.0.24", "", {}, "sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ=="], - "srvx": ["srvx@1.0.7", "", { "bin": { "srvx": "./bin/srvx.mjs" } }, "sha512-8h30Qy2cpYkcXgByHNpV4+jp609bU3ic7MqnfyLQ2Fpa8BgjIaI2zfsDKAIbwm8DcYDrCLqm5izF5KeL2nxdvg=="], + "srvx": ["srvx@1.0.8", "", { "bin": { "srvx": "./bin/srvx.mjs" } }, "sha512-ngFS/J6St4PJfHRHGjr78xkPPtbyXtdMOLNE4x/XZunEK3OhV7aGUWMHf9WTUEy6wm1U0W4okkd82ZFFWRVQTw=="], - "storybook": ["storybook@10.6.3", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.2", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "6.9.1", "@testing-library/user-event": "^14.6.3", "@vitest/expect": "3.2.4", "@vitest/spy": "3.2.4", "@webcontainer/env": "^1.1.1", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0 || ^0.28.0", "jsonc-parser": "^3.3.1", "open": "^10.2.0", "oxc-parser": "^0.127.0", "oxc-resolver": "11.21.2", "recast": "^0.23.5", "semver": "^7.7.3", "use-sync-external-store": "^1.5.0", "ws": "^8.21.1" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "prettier": "^2 || ^3", "vite-plus": "^0.1.15 || ^0.2.0" }, "optionalPeers": ["@types/react", "prettier", "vite-plus"], "bin": "./dist/bin/dispatcher.js" }, "sha512-lNBvcZFG44C98KvQHYzfq1O46m+sl94zY1+na5/9E3ihtNMbvpOgYyMFMIcWYUvOMo3OM4q9jzvB73KU20bU8w=="], + "storybook": ["storybook@10.6.5", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.2", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "6.9.1", "@testing-library/user-event": "^14.6.3", "@vitest/expect": "3.2.4", "@vitest/spy": "3.2.4", "@webcontainer/env": "^1.1.1", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0 || ^0.28.0", "jsonc-parser": "^3.3.1", "open": "^10.2.0", "oxc-parser": "^0.127.0", "oxc-resolver": "11.21.2", "recast": "^0.23.5", "semver": "^7.7.3", "use-sync-external-store": "^1.5.0", "ws": "^8.21.1" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "prettier": "^2 || ^3", "vite-plus": "^0.1.15 || ^0.2.0" }, "optionalPeers": ["@types/react", "prettier", "vite-plus"], "bin": "./dist/bin/dispatcher.js" }, "sha512-qurC38Nx4PDF9YIq6GO95dpUx8a3B9AZwlcHBo4cOI9At09ifjQRsqcwcdOf2YX0cpVhFKmHkI20SWCrxqYQrg=="], - "string-ts": ["string-ts@2.3.1", "", {}, "sha512-xSJq+BS52SaFFAVxuStmx6n5aYZU571uYUnUrPXkPFCfdHyZMMlbP2v2Wx5sNBnAVzq/2+0+mcBLBa3Xa5ubYw=="], + "string-ts": ["string-ts@2.4.0", "", {}, "sha512-JOrTlmqL2wGvXZI+4RLzSAAqvhQL3rXOmSCLoacd9MC5hIj20xoa7CfYBEApBDncf+hhvbGi6atCy7LyweWRKQ=="], "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], @@ -2975,13 +2999,13 @@ "style-to-js": ["style-to-js@1.1.21", "", { "dependencies": { "style-to-object": "1.0.14" } }, "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ=="], - "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], + "style-to-object": ["style-to-object@2.0.2", "", { "dependencies": { "inline-style-parser": "0.2.9" } }, "sha512-QmbXPUylqU80HAgTOJeEOdbA40W9KtxmjMhQy+tq+b8F2aoh3aQLuy82hh2jm2qsC9hR9eI0+eQidTMydKcqRA=="], "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "@babel/core": "*", "babel-plugin-macros": "*", "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" }, "optionalPeers": ["@babel/core", "babel-plugin-macros"] }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], "styleq": ["styleq@0.2.1", "", {}, "sha512-L0TR0NQb+X4/ktDEKmjWyp27gla+LUYi/by5k5SjKXf6/pvZP7wbwEB5J+tqxdFVPgzbsuz+d4RTScO/QZquBw=="], - "stylis": ["stylis@4.4.0", "", {}, "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA=="], + "stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], "supports-color": ["supports-color@9.4.0", "", {}, "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw=="], @@ -3025,7 +3049,7 @@ "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "tslib": ["tslib@2.9.1", "", {}, "sha512-a4Ux9VKuIMHsOS7ENbEq6hK2ZGYIT27Rtl0E4eD9KqwxhKiQeMZE/9xb3IdYwWaSOyIBQLExhQgXDTYoiCxnWA=="], "turbo-stream": ["turbo-stream@3.2.1", "", {}, "sha512-BaX0eWz3IrypOVDFqPv3VGD6uZZW8y3oFAOJqZQ+oopmOyQ8/xNm7IMwAJFvxax2DBa8zSk+/AeqA6D6b1PXGg=="], @@ -3037,7 +3061,7 @@ "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], - "typescript-eslint": ["typescript-eslint@8.72.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.72.0", "@typescript-eslint/parser": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/utils": "8.72.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A=="], + "typescript-eslint": ["typescript-eslint@8.72.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.72.1", "@typescript-eslint/parser": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/utils": "8.72.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw=="], "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], @@ -3083,6 +3107,8 @@ "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + "use-intl": ["use-intl@4.14.9", "", { "dependencies": { "@formatjs/fast-memoize": "^3.1.0", "@schummar/icu-type-parser": "1.21.5", "icu-minify": "^4.14.9", "intl-messageformat": "^11.1.0" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-37ktvdCCz+6JY2VFPl/GV69Ds4ahiUT2c2xEZZRZYxdgGLxFsUbdxzjQVRm3YMIOUU0VPs6zvlifb4Yjk4IxIg=="], + "use-sync-external-store": ["use-sync-external-store@1.7.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A=="], "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], @@ -3103,7 +3129,7 @@ "vfile-statistics": ["vfile-statistics@3.0.0", "", { "dependencies": { "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w=="], - "vinext": ["vinext@1.3.1", "", { "dependencies": { "@unpic/react": "^1.0.2", "@vercel/og": "1.0.3", "@vinext/types": "^1.0.2", "ipaddr.js": "^2.1.0", "magic-string": "^0.30.21", "vite-plugin-commonjs": "^0.10.4", "web-vitals": "^4.2.4" }, "peerDependencies": { "@mdx-js/rollup": "^3.0.0", "@vitejs/plugin-react": "^5.1.4 || ^6.0.0", "@vitejs/plugin-rsc": "^0.5.37", "react": "^19.3.1", "react-dom": "^19.3.1", "react-server-dom-webpack": "^19.3.1", "vite": "^8.0.0" }, "optionalPeers": ["@mdx-js/rollup", "@vitejs/plugin-rsc", "react-server-dom-webpack"], "bin": { "vinext": "dist/cli.js" } }, "sha512-BOkd2c3LUDG9BrqFKubhZWxxYtUEUJAzV3gL6wZC1y3MSf4w9hW4QEHjZRKst9Gjj0WYchkwPSpT9+EeXPOgSA=="], + "vinext": ["vinext@1.4.1", "", { "dependencies": { "@unpic/react": "^1.0.2", "@vercel/og": "1.0.3", "@vinext/types": "^1.0.2", "ipaddr.js": "^2.1.0", "magic-string": "^0.30.21", "vite-plugin-commonjs": "^0.10.4", "web-vitals": "^4.2.4" }, "peerDependencies": { "@mdx-js/rollup": "^3.0.0", "@vitejs/plugin-react": "^5.1.4 || ^6.0.0", "@vitejs/plugin-rsc": "^0.5.37", "react": "^19.3.1", "react-dom": "^19.3.1", "react-server-dom-webpack": "^19.3.1", "vite": "^8.0.0" }, "optionalPeers": ["@mdx-js/rollup", "@vitejs/plugin-rsc", "react-server-dom-webpack"], "bin": { "vinext": "dist/cli.js" } }, "sha512-nSyA9Et9JDg+c63dKxEf92fDcVL1OkjCZPXYUfZvqj5HnctauA64y6UVzFvGJ6Vyih3kb0Yvt5D7n4W/5a827w=="], "vinext-devup-ui-benchmark": ["vinext-devup-ui-benchmark@workspace:benchmark/vinext-devup-ui"], @@ -3143,7 +3169,7 @@ "webpack": ["webpack@5.112.2", "", { "dependencies": { "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.26.0", "es-module-lexer": "^2.1.0", "events": "^3.2.0", "graceful-fs": "^4.2.11", "mime-db": "^1.54.0", "minimizer-webpack-plugin": "^5.13.0", "schema-utils": "^4.8.1", "tapable": "^2.3.0", "watchpack": "^2.6.3", "webpack-sources": "^3.6.0" }, "peerDependencies": { "webpack-cli": "*" }, "optionalPeers": ["webpack-cli"], "bin": { "webpack": "bin/webpack.js" } }, "sha512-B2tp1LI9D8GVpPDqprdt12ukTkXXahj9MzqSWJq4faSPgOUM7CdZaGAB6HrL/8E6UwbBpdj4vzWDbKoFnVoU6g=="], - "webpack-sources": ["webpack-sources@3.6.0", "", {}, "sha512-EIMmPVvNI0CYXyRPp34F2Qk7W37/BZVZIofS6LAUnrNjCVahS+hO4mxwFJDjQjODTGZDtVzLYoN2+1dYkhk9qA=="], + "webpack-sources": ["webpack-sources@3.7.0", "", {}, "sha512-PdUhbCycwEgiS1hB/FBDksWKg/ashAIuJKqwdbPn8/dFVgU5LxQiBvG0js6VRRIzPujMrStYCczywp82P0KWng=="], "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], @@ -3161,7 +3187,7 @@ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "ws": ["ws@8.22.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg=="], + "ws": ["ws@8.22.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-oyL6OPYme/CmiFvNuGzeoxCJ4nOrZE2O1FwM9MWM1AsGri6nLXB2pg+lNA8aLeXMSav0J6eIVS1j6vUPzUtK9g=="], "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], @@ -3187,19 +3213,19 @@ "@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@8.0.6", "", {}, "sha512-HYx0YmuchRxRSpnjvcNffnPS8DCauKNmnumIuHG3jnQAVewRA7kfJGwF13ayEpSZs7s4R/oBH4eppuXcAQd5JQ=="], - "@babel/core/@babel/types": ["@babel/types@8.0.8", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg=="], + "@babel/core/@babel/types": ["@babel/types@8.0.10", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-KV8Y+teoRsmXeEPS4sCJY1kwV+hcPzHP1qQqgCxrjKOehLdBaxpsFBfoJ8MXWFV80y6Jw56+TM95wR0Per8dYw=="], - "@babel/generator/@babel/types": ["@babel/types@8.0.8", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg=="], + "@babel/generator/@babel/types": ["@babel/types@8.0.10", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-KV8Y+teoRsmXeEPS4sCJY1kwV+hcPzHP1qQqgCxrjKOehLdBaxpsFBfoJ8MXWFV80y6Jw56+TM95wR0Per8dYw=="], "@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@8.0.5", "", {}, "sha512-YLsYoQMvL8l8WrGpN3Zj7O1wK5LEBN+cQtux7BcuHyxIXve724XG+zuJ1n3U1cUweRtTzQOA4IHbuQw3N34SZw=="], "@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@8.0.0", "", {}, "sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q=="], - "@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/helper-create-class-features-plugin/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@babel/helper-create-class-features-plugin/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-create-class-features-plugin/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -3213,37 +3239,37 @@ "@babel/helper-define-polyfill-provider/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/helper-member-expression-to-functions/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-member-expression-to-functions/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], - "@babel/helper-module-imports/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-module-imports/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/helper-module-transforms/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@babel/helper-module-transforms/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-module-transforms/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/helper-remap-async-to-generator/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@babel/helper-remap-async-to-generator/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-remap-async-to-generator/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/helper-replace-supers/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@babel/helper-replace-supers/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-replace-supers/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], - "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/helper-wrap-function/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/helper-wrap-function/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-wrap-function/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], - "@babel/helpers/@babel/types": ["@babel/types@8.0.8", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg=="], + "@babel/helpers/@babel/types": ["@babel/types@8.0.10", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-KV8Y+teoRsmXeEPS4sCJY1kwV+hcPzHP1qQqgCxrjKOehLdBaxpsFBfoJ8MXWFV80y6Jw56+TM95wR0Per8dYw=="], - "@babel/parser/@babel/types": ["@babel/types@8.0.8", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg=="], + "@babel/parser/@babel/types": ["@babel/types@8.0.10", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-KV8Y+teoRsmXeEPS4sCJY1kwV+hcPzHP1qQqgCxrjKOehLdBaxpsFBfoJ8MXWFV80y6Jw56+TM95wR0Per8dYw=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3265,7 +3291,7 @@ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-proposal-private-property-in-object/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3289,7 +3315,7 @@ "@babel/plugin-transform-async-generator-functions/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-transform-async-generator-functions/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-async-generator-functions/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-async-to-generator/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3319,7 +3345,7 @@ "@babel/plugin-transform-classes/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-transform-classes/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-classes/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-computed-properties/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3331,7 +3357,7 @@ "@babel/plugin-transform-destructuring/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-transform-destructuring/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-destructuring/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-dotall-regex/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3371,7 +3397,7 @@ "@babel/plugin-transform-function-name/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-transform-function-name/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-function-name/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-json-strings/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3401,7 +3427,7 @@ "@babel/plugin-transform-modules-systemjs/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-transform-modules-systemjs/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-modules-systemjs/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-modules-umd/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3429,7 +3455,7 @@ "@babel/plugin-transform-object-rest-spread/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@babel/plugin-transform-object-rest-spread/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-object-rest-spread/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-object-super/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3551,26 +3577,22 @@ "@babel/preset-typescript/@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A=="], - "@babel/template/@babel/types": ["@babel/types@8.0.8", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg=="], + "@babel/template/@babel/types": ["@babel/types@8.0.10", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-KV8Y+teoRsmXeEPS4sCJY1kwV+hcPzHP1qQqgCxrjKOehLdBaxpsFBfoJ8MXWFV80y6Jw56+TM95wR0Per8dYw=="], - "@babel/traverse/@babel/types": ["@babel/types@8.0.8", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-iXSSZAKQWmaeAwGtFw10v9fg5hUiUs0L+w+Z2K11kym3pDNK+SF0VcAQPsEFvWcTSZ7LMgClMXDBvTbH0IlICg=="], + "@babel/traverse/@babel/types": ["@babel/types@8.0.10", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.8", "@babel/helper-validator-identifier": "^8.0.6" } }, "sha512-KV8Y+teoRsmXeEPS4sCJY1kwV+hcPzHP1qQqgCxrjKOehLdBaxpsFBfoJ8MXWFV80y6Jw56+TM95wR0Per8dYw=="], - "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester": ["@typescript-eslint/rule-tester@8.72.0", "", { "dependencies": { "@typescript-eslint/parser": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/utils": "8.72.0", "ajv": "^6.12.6", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "4.6.2", "semver": "^7.7.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3DkhIwJJ1EgssS9r613P8mqraY/c0uSg9e5rQdYPKf71poFqIrN/6agYEtTzI9SvVLgFqfbCwpKLr0zRBij0UQ=="], + "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester": ["@typescript-eslint/rule-tester@8.72.1", "", { "dependencies": { "@typescript-eslint/parser": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/utils": "8.72.1", "ajv": "^6.12.6", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "4.6.2", "semver": "^7.7.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fRI+xtZ8ae43H3fq5TGzJMKvjqHUJIO5FDrFNdQzeTqbaNH+srWJQmAHBCY4zZdenpew8kXzTGhKq8fJJat6lA=="], - "@devup-ui/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@8.72.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0up3oArJZBYnzOaEXKo8DmI43QvMZyPoFEt9LWzRJcyl/RcJjfKKPebknN1VbTgXBf3M/KggUh5uUMdURLnseg=="], + "@devup-ui/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@8.72.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA=="], "@devup-ui/eslint-plugin/typescript": ["@typescript/typescript6@6.0.2", "", { "dependencies": { "@typescript/old": "npm:typescript@^6" }, "bin": { "tsc6": "bin/tsc6" } }, "sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w=="], - "@devup-ui/eslint-plugin/typescript-eslint": ["typescript-eslint@8.72.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.72.0", "@typescript-eslint/parser": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/utils": "8.72.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-r26Fkc8As+mZvqp7SLsMmNFyYUup/6CjK7/eHBHmhOw6GH6n6YFxHVFrG0jN1c5CMpDzelLPxvgeCOzx7BjN+A=="], + "@devup-ui/eslint-plugin/typescript-eslint": ["typescript-eslint@8.72.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.72.1", "@typescript-eslint/parser": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/utils": "8.72.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw=="], "@emotion/babel-plugin/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], "@emotion/babel-plugin/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], - "@emotion/babel-plugin/stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], - - "@emotion/cache/stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], - "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.11.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA=="], @@ -3587,8 +3609,6 @@ "@kuma-ui/compiler/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@kuma-ui/webpack-plugin/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], - "@npmcli/git/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], "@npmcli/map-workspaces/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -3617,7 +3637,7 @@ "@stylexjs/babel-plugin/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@stylexjs/babel-plugin/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@stylexjs/babel-plugin/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@stylexjs/nextjs-plugin/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], @@ -3647,23 +3667,21 @@ "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.5", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" }, "bundled": true }, "sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || 2.0.0-beta.2", "@emnapi/runtime": "^1.7.1 || 2.0.0-beta.2" }, "bundled": true }, "sha512-mRyDmEw9/fCDXCGfL1sbgIw/GUK0PVxRW4YwgPN61F3LQ+fSyoBFarJVzgGyhF6kRzEQZ0FejDqm4WLXSeqQmw=="], "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.4", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A=="], - "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.9.1", "", { "bundled": true }, "sha512-a4Ux9VKuIMHsOS7ENbEq6hK2ZGYIT27Rtl0E4eD9KqwxhKiQeMZE/9xb3IdYwWaSOyIBQLExhQgXDTYoiCxnWA=="], "@testing-library/dom/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@testing-library/jest-dom/aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], - "@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], "@ts-morph/common/minimatch": ["minimatch@7.4.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw=="], - "@types/babel__core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@types/babel__core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], - "@types/babel__template/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@types/babel__template/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.14", "", {}, "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ=="], @@ -3689,7 +3707,7 @@ "cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "core-js-compat/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "core-js-compat/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], @@ -3697,13 +3715,11 @@ "eslint-mdx/synckit": ["synckit@0.12.3", "", { "dependencies": { "@dual-bundle/import-meta-resolve": "^4.2.1", "@pkgr/core": "^0.3.6" } }, "sha512-U+/AXT6LWsxnj2vz9HeUuPWBNgdWxjyIEjEPdbJARC9txmgPzo2VEdqnFo4hHaNyMPtycyVJrSaQYeQv/PoyyA=="], - "eslint-plugin-mdx/synckit": ["synckit@0.12.3", "", { "dependencies": { "@dual-bundle/import-meta-resolve": "^4.2.1", "@pkgr/core": "^0.3.6" } }, "sha512-U+/AXT6LWsxnj2vz9HeUuPWBNgdWxjyIEjEPdbJARC9txmgPzo2VEdqnFo4hHaNyMPtycyVJrSaQYeQv/PoyyA=="], - "eslint-plugin-prettier/synckit": ["synckit@0.12.3", "", { "dependencies": { "@dual-bundle/import-meta-resolve": "^4.2.1", "@pkgr/core": "^0.3.6" } }, "sha512-U+/AXT6LWsxnj2vz9HeUuPWBNgdWxjyIEjEPdbJARC9txmgPzo2VEdqnFo4hHaNyMPtycyVJrSaQYeQv/PoyyA=="], "eslint-plugin-react-hooks/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "eslint-plugin-react-hooks/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "eslint-plugin-react-hooks/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -3747,13 +3763,13 @@ "react-docgen/@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "react-docgen/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "react-docgen/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "recast/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "redent/strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], - "rolldown/@oxc-project/types": ["@oxc-project/types@0.155.0", "", {}, "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q=="], + "rolldown/@oxc-project/types": ["@oxc-project/types@0.156.0", "", {}, "sha512-1Duyg48TdJNdyhEB8Xn1L36bT9Pv6GUtlKjHxOys8xkaF/rQq3XJE+bAurSK/AgIz5mGFsb77cn9Pb20+WCScw=="], "rollup-plugin-preserve-directives/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], @@ -3769,7 +3785,9 @@ "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "strip-ansi/ansi-regex": ["ansi-regex@6.4.0", "", {}, "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw=="], + "strip-ansi/ansi-regex": ["ansi-regex@6.5.0", "", {}, "sha512-zhvbbbdt1kbw7EJ9OQoxmQcuaNR9P5kTj7e/YdmOSU10aHWbycofJxA6jKfoEy3vlLdctOF9ZHaxLtmSm998wQ=="], + + "style-to-js/style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="], "ts_dependency_graph/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], @@ -3797,7 +3815,7 @@ "vite-plugin-dynamic-import/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "webpack/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "webpack/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "webpack/es-module-lexer": ["es-module-lexer@2.3.2", "", {}, "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw=="], @@ -3827,7 +3845,7 @@ "@babel/helper-create-class-features-plugin/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-create-class-features-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-create-class-features-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-create-class-features-plugin/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -3835,23 +3853,23 @@ "@babel/helper-create-class-features-plugin/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/helper-create-class-features-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-create-class-features-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-create-class-features-plugin/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -3859,29 +3877,29 @@ "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/helper-define-polyfill-provider/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-define-polyfill-provider/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-define-polyfill-provider/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-define-polyfill-provider/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], "@babel/helper-define-polyfill-provider/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/helper-define-polyfill-provider/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-define-polyfill-provider/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-define-polyfill-provider/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/helper-define-polyfill-provider/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/helper-define-polyfill-provider/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/helper-define-polyfill-provider/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/helper-define-polyfill-provider/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/helper-define-polyfill-provider/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/helper-define-polyfill-provider/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -3889,27 +3907,27 @@ "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-module-imports/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-module-imports/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-module-imports/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-module-imports/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-module-imports/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-module-imports/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-module-imports/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-module-transforms/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-module-transforms/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-module-transforms/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-module-transforms/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -3917,7 +3935,7 @@ "@babel/helper-module-transforms/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/helper-module-transforms/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-module-transforms/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-module-transforms/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -3925,17 +3943,17 @@ "@babel/helper-module-transforms/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-module-transforms/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-module-transforms/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-module-transforms/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-module-transforms/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-module-transforms/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-module-transforms/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-remap-async-to-generator/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-remap-async-to-generator/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-remap-async-to-generator/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-remap-async-to-generator/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -3943,7 +3961,7 @@ "@babel/helper-remap-async-to-generator/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/helper-remap-async-to-generator/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-remap-async-to-generator/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-remap-async-to-generator/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -3951,17 +3969,17 @@ "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-replace-supers/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-replace-supers/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-replace-supers/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-replace-supers/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -3969,7 +3987,7 @@ "@babel/helper-replace-supers/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/helper-replace-supers/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-replace-supers/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-replace-supers/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -3977,35 +3995,35 @@ "@babel/helper-replace-supers/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-replace-supers/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-replace-supers/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-replace-supers/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-replace-supers/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-replace-supers/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-replace-supers/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/helper-wrap-function/@babel/template/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-wrap-function/@babel/template/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-wrap-function/@babel/template/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helper-wrap-function/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/helper-wrap-function/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/helper-wrap-function/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/helper-wrap-function/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-wrap-function/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/helper-wrap-function/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/helpers/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@8.0.8", "", {}, "sha512-fVM+gSuKbdv9cpmyRNh5EvsDHUZCdxQH3FdnFKSkNYHpbsn95bbrxm+ES3MVeQjcqwi2O5ur/DjLfmTQaO60ng=="], @@ -4017,7 +4035,7 @@ "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4025,7 +4043,7 @@ "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -4033,17 +4051,17 @@ "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4051,17 +4069,17 @@ "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4069,17 +4087,17 @@ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4087,17 +4105,17 @@ "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4105,17 +4123,17 @@ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4123,7 +4141,7 @@ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -4131,17 +4149,17 @@ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4149,17 +4167,17 @@ "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-proposal-private-property-in-object/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-syntax-import-assertions/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-syntax-import-assertions/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-syntax-import-assertions/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-syntax-import-assertions/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4167,17 +4185,17 @@ "@babel/plugin-syntax-import-assertions/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-syntax-import-assertions/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-syntax-import-assertions/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-syntax-import-assertions/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-syntax-import-assertions/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-syntax-import-assertions/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-syntax-import-assertions/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-syntax-import-attributes/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-syntax-import-attributes/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-syntax-import-attributes/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-syntax-import-attributes/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4185,17 +4203,17 @@ "@babel/plugin-syntax-import-attributes/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-syntax-import-attributes/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-syntax-import-attributes/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-syntax-import-attributes/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-syntax-import-attributes/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-syntax-import-attributes/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-syntax-import-attributes/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4203,17 +4221,17 @@ "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-syntax-unicode-sets-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-arrow-functions/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-arrow-functions/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-arrow-functions/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-arrow-functions/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4221,17 +4239,17 @@ "@babel/plugin-transform-arrow-functions/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-arrow-functions/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-arrow-functions/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-arrow-functions/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-arrow-functions/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-arrow-functions/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-arrow-functions/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4239,7 +4257,7 @@ "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -4247,17 +4265,17 @@ "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-async-to-generator/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-async-to-generator/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-async-to-generator/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-async-to-generator/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4265,17 +4283,17 @@ "@babel/plugin-transform-async-to-generator/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-async-to-generator/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-async-to-generator/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-async-to-generator/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-async-to-generator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-async-to-generator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-async-to-generator/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4283,17 +4301,17 @@ "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-block-scoped-functions/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-block-scoping/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-block-scoping/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-block-scoping/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-block-scoping/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4301,17 +4319,17 @@ "@babel/plugin-transform-block-scoping/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-block-scoping/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-block-scoping/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-block-scoping/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-block-scoping/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-block-scoping/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-block-scoping/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-class-properties/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-class-properties/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-class-properties/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-class-properties/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4319,17 +4337,17 @@ "@babel/plugin-transform-class-properties/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-class-properties/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-class-properties/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-class-properties/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-class-properties/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-class-properties/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-class-properties/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-class-static-block/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-class-static-block/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-class-static-block/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-class-static-block/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4337,29 +4355,29 @@ "@babel/plugin-transform-class-static-block/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-class-static-block/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-class-static-block/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-class-static-block/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-class-static-block/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-class-static-block/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-class-static-block/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-classes/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-classes/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-classes/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-classes/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], "@babel/plugin-transform-classes/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-classes/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-classes/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-classes/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-classes/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/plugin-transform-classes/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-classes/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-classes/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -4367,15 +4385,15 @@ "@babel/plugin-transform-classes/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-classes/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-classes/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], - "@babel/plugin-transform-classes/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-classes/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-classes/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-computed-properties/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-computed-properties/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-computed-properties/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-computed-properties/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4383,19 +4401,19 @@ "@babel/plugin-transform-computed-properties/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-computed-properties/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-computed-properties/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], - "@babel/plugin-transform-computed-properties/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-computed-properties/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-computed-properties/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-computed-properties/@babel/template/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-computed-properties/@babel/template/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-computed-properties/@babel/template/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-destructuring/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-destructuring/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-destructuring/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-destructuring/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4403,7 +4421,7 @@ "@babel/plugin-transform-destructuring/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-destructuring/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-destructuring/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-destructuring/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -4411,17 +4429,17 @@ "@babel/plugin-transform-destructuring/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-destructuring/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-destructuring/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-destructuring/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/plugin-transform-destructuring/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-destructuring/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-destructuring/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-dotall-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-dotall-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-dotall-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-dotall-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4429,17 +4447,17 @@ "@babel/plugin-transform-dotall-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-dotall-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-dotall-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-dotall-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-dotall-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-dotall-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-dotall-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4447,17 +4465,17 @@ "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-duplicate-keys/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4465,17 +4483,17 @@ "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-dynamic-import/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-dynamic-import/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-dynamic-import/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-dynamic-import/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4483,17 +4501,17 @@ "@babel/plugin-transform-dynamic-import/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-dynamic-import/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-dynamic-import/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-dynamic-import/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-dynamic-import/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-dynamic-import/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-dynamic-import/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4501,17 +4519,17 @@ "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-explicit-resource-management/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4519,17 +4537,17 @@ "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-exponentiation-operator/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4537,17 +4555,17 @@ "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-export-namespace-from/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-for-of/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-for-of/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-for-of/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-for-of/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4555,29 +4573,29 @@ "@babel/plugin-transform-for-of/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-for-of/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-for-of/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-for-of/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-for-of/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-for-of/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-for-of/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-function-name/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-function-name/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-function-name/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-function-name/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], "@babel/plugin-transform-function-name/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-function-name/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-function-name/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-function-name/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-function-name/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/plugin-transform-function-name/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-function-name/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-function-name/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -4585,17 +4603,17 @@ "@babel/plugin-transform-function-name/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-function-name/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-function-name/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-function-name/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/plugin-transform-function-name/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-function-name/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-function-name/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-json-strings/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-json-strings/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-json-strings/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-json-strings/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4603,17 +4621,17 @@ "@babel/plugin-transform-json-strings/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-json-strings/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-json-strings/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-json-strings/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-json-strings/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-json-strings/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-json-strings/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-literals/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-literals/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4621,17 +4639,17 @@ "@babel/plugin-transform-literals/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-literals/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-literals/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4639,17 +4657,17 @@ "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-logical-assignment-operators/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4657,17 +4675,17 @@ "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-member-expression-literals/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-modules-amd/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-modules-amd/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-modules-amd/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-modules-amd/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4675,17 +4693,17 @@ "@babel/plugin-transform-modules-amd/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-modules-amd/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-modules-amd/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-modules-amd/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-modules-amd/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-modules-amd/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-modules-amd/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4693,17 +4711,17 @@ "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-modules-commonjs/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4711,7 +4729,7 @@ "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -4719,17 +4737,17 @@ "@babel/plugin-transform-modules-systemjs/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-modules-systemjs/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-modules-systemjs/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-modules-systemjs/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/plugin-transform-modules-systemjs/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-modules-systemjs/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-modules-systemjs/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-modules-umd/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-modules-umd/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-modules-umd/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-modules-umd/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4737,17 +4755,17 @@ "@babel/plugin-transform-modules-umd/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-modules-umd/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-modules-umd/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-modules-umd/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-modules-umd/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-modules-umd/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-modules-umd/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4755,17 +4773,17 @@ "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-new-target/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-new-target/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-new-target/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-new-target/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4773,17 +4791,17 @@ "@babel/plugin-transform-new-target/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-new-target/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-new-target/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-new-target/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-new-target/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-new-target/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-new-target/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4791,17 +4809,17 @@ "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-numeric-separator/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-numeric-separator/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-numeric-separator/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-numeric-separator/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4809,29 +4827,29 @@ "@babel/plugin-transform-numeric-separator/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-numeric-separator/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-numeric-separator/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-numeric-separator/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-numeric-separator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-numeric-separator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-numeric-separator/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-object-rest-spread/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-object-rest-spread/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/plugin-transform-object-rest-spread/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-object-rest-spread/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-object-rest-spread/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -4839,17 +4857,17 @@ "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@babel/plugin-transform-object-super/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-object-super/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-object-super/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-object-super/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4857,17 +4875,17 @@ "@babel/plugin-transform-object-super/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-object-super/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-object-super/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-object-super/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-object-super/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-object-super/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-object-super/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4875,17 +4893,17 @@ "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-optional-catch-binding/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-optional-chaining/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-optional-chaining/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-optional-chaining/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-optional-chaining/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4893,17 +4911,17 @@ "@babel/plugin-transform-optional-chaining/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-optional-chaining/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-optional-chaining/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-optional-chaining/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-optional-chaining/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-optional-chaining/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-optional-chaining/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-parameters/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-parameters/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-parameters/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-parameters/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4911,17 +4929,17 @@ "@babel/plugin-transform-parameters/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-parameters/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-parameters/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-parameters/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-parameters/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-parameters/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-parameters/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-private-methods/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-private-methods/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-private-methods/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-private-methods/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4929,17 +4947,17 @@ "@babel/plugin-transform-private-methods/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-private-methods/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-private-methods/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-private-methods/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-private-methods/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-private-methods/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-private-methods/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4947,17 +4965,17 @@ "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-private-property-in-object/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-property-literals/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-property-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-property-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-property-literals/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4965,17 +4983,17 @@ "@babel/plugin-transform-property-literals/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-property-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-property-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-property-literals/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-property-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-property-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-property-literals/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-react-display-name/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-react-display-name/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-react-display-name/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-react-display-name/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -4983,17 +5001,17 @@ "@babel/plugin-transform-react-display-name/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-react-display-name/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-react-display-name/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-react-display-name/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-react-display-name/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-react-display-name/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-react-display-name/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5001,17 +5019,17 @@ "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-react-jsx-development/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-react-jsx/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-react-jsx/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-react-jsx/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-react-jsx/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5019,17 +5037,17 @@ "@babel/plugin-transform-react-jsx/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-react-jsx/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-react-jsx/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-react-jsx/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-react-jsx/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-react-jsx/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-react-jsx/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5037,17 +5055,17 @@ "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-react-pure-annotations/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-regenerator/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-regenerator/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-regenerator/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-regenerator/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5055,17 +5073,17 @@ "@babel/plugin-transform-regenerator/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-regenerator/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-regenerator/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-regenerator/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-regenerator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-regenerator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-regenerator/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5073,17 +5091,17 @@ "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-regexp-modifiers/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-reserved-words/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-reserved-words/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-reserved-words/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-reserved-words/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5091,17 +5109,17 @@ "@babel/plugin-transform-reserved-words/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-reserved-words/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-reserved-words/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-reserved-words/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-reserved-words/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-reserved-words/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-reserved-words/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5109,17 +5127,17 @@ "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-shorthand-properties/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-spread/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-spread/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-spread/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-spread/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5127,17 +5145,17 @@ "@babel/plugin-transform-spread/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-spread/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-spread/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-spread/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-spread/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-spread/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-spread/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-sticky-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-sticky-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-sticky-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-sticky-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5145,17 +5163,17 @@ "@babel/plugin-transform-sticky-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-sticky-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-sticky-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-sticky-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-sticky-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-sticky-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-sticky-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-template-literals/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-template-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-template-literals/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-template-literals/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5163,17 +5181,17 @@ "@babel/plugin-transform-template-literals/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-template-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-template-literals/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-template-literals/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-template-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-template-literals/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-template-literals/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5181,17 +5199,17 @@ "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-typeof-symbol/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-typescript/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-typescript/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-typescript/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-typescript/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5199,17 +5217,17 @@ "@babel/plugin-transform-typescript/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-typescript/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-typescript/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-typescript/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-typescript/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-typescript/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-typescript/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5217,17 +5235,17 @@ "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-unicode-escapes/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5235,17 +5253,17 @@ "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-unicode-property-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-unicode-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-unicode-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-unicode-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-unicode-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5253,17 +5271,17 @@ "@babel/plugin-transform-unicode-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-unicode-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-unicode-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-unicode-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-unicode-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-unicode-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-unicode-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5271,35 +5289,35 @@ "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/plugin-transform-unicode-sets-regex/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/preset-env/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/preset-env/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/preset-env/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/preset-env/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], "@babel/preset-env/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/preset-env/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/preset-env/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/preset-env/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/preset-env/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/preset-env/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], - "@babel/preset-env/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/preset-env/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/preset-env/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/preset-modules/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/preset-modules/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/preset-modules/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/preset-modules/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5307,17 +5325,17 @@ "@babel/preset-modules/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/preset-modules/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/preset-modules/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/preset-modules/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/preset-modules/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/preset-modules/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/preset-modules/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/preset-react/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/preset-react/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/preset-react/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/preset-react/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5325,17 +5343,17 @@ "@babel/preset-react/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/preset-react/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/preset-react/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/preset-react/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/preset-react/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/preset-react/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/preset-react/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/preset-typescript/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@babel/preset-typescript/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@babel/preset-typescript/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@babel/preset-typescript/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5343,11 +5361,11 @@ "@babel/preset-typescript/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@babel/preset-typescript/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@babel/preset-typescript/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@babel/preset-typescript/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/preset-typescript/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@babel/preset-typescript/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@babel/preset-typescript/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5359,17 +5377,17 @@ "@babel/traverse/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@8.0.6", "", {}, "sha512-HYx0YmuchRxRSpnjvcNffnPS8DCauKNmnumIuHG3jnQAVewRA7kfJGwF13ayEpSZs7s4R/oBH4eppuXcAQd5JQ=="], - "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/parser": ["@typescript-eslint/parser@8.72.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw=="], + "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/parser": ["@typescript-eslint/parser@8.72.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g=="], - "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.0", "@typescript-eslint/tsconfig-utils": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug=="], + "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.1", "@typescript-eslint/tsconfig-utils": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ=="], - "@devup-ui/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.0", "@typescript-eslint/tsconfig-utils": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug=="], + "@devup-ui/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.1", "@typescript-eslint/tsconfig-utils": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ=="], - "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.72.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.72.0", "@typescript-eslint/type-utils": "8.72.0", "@typescript-eslint/utils": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.72.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aysKgysPX9XOv/dk95UkvUDe++Q3n3dJPG9CEWT3RUccxfkPJ+Qn6nhKPDhZXU6Ofo9kgwGWwKyQCnZIXTgngg=="], + "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.72.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/type-utils": "8.72.1", "@typescript-eslint/utils": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.72.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ=="], - "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.72.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0O+x3ynciD6zuXb1CKSu165haQV6ey53DKhHHUnujP7U+XlltJG+/keT0Xhd1HXCze+IHf7Tvt39ovyepX/LNw=="], + "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.72.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g=="], - "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.0", "@typescript-eslint/tsconfig-utils": "8.72.0", "@typescript-eslint/types": "8.72.0", "@typescript-eslint/visitor-keys": "8.72.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gwLfFgWcw15tN2KXDCJvxEOQjPn+P3j/n3eSqkZ5sX4VpW9Cosodr+tWwBZRvJT3TcKx6HnPRGZMCNAiP1Xhug=="], + "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.72.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.72.1", "@typescript-eslint/tsconfig-utils": "8.72.1", "@typescript-eslint/types": "8.72.1", "@typescript-eslint/visitor-keys": "8.72.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ=="], "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], @@ -5377,7 +5395,7 @@ "@kuma-ui/babel-plugin/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@kuma-ui/babel-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@kuma-ui/babel-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@kuma-ui/babel-plugin/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5385,17 +5403,17 @@ "@kuma-ui/babel-plugin/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@kuma-ui/babel-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@kuma-ui/babel-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@kuma-ui/babel-plugin/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@kuma-ui/babel-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@kuma-ui/babel-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@kuma-ui/babel-plugin/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@kuma-ui/compiler/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@kuma-ui/compiler/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@kuma-ui/compiler/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@kuma-ui/compiler/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5403,58 +5421,14 @@ "@kuma-ui/compiler/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@kuma-ui/compiler/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@kuma-ui/compiler/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@kuma-ui/compiler/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@kuma-ui/compiler/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@kuma-ui/compiler/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@kuma-ui/compiler/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@kuma-ui/webpack-plugin/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.18.20", "", { "os": "android", "cpu": "x64" }, "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.18.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.18.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.18.20", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.18.20", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.18.20", "", { "os": "linux", "cpu": "arm" }, "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.18.20", "", { "os": "linux", "cpu": "arm64" }, "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.18.20", "", { "os": "linux", "cpu": "ia32" }, "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.18.20", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.18.20", "", { "os": "linux", "cpu": "s390x" }, "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.18.20", "", { "os": "linux", "cpu": "x64" }, "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.18.20", "", { "os": "none", "cpu": "x64" }, "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.18.20", "", { "os": "openbsd", "cpu": "x64" }, "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.18.20", "", { "os": "sunos", "cpu": "x64" }, "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.18.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.18.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="], - - "@kuma-ui/webpack-plugin/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], - "@npmcli/git/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], "@npmcli/map-workspaces/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], @@ -5483,17 +5457,17 @@ "@pandacss/config/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.7", "", { "os": "linux", "cpu": "arm" }, "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ=="], - "@pandacss/config/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg=="], + "@pandacss/config/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.7", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg=="], - "@pandacss/config/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q=="], + "@pandacss/config/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.7", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q=="], - "@pandacss/config/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg=="], + "@pandacss/config/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.7", "", { "os": "linux", "cpu": "ppc64", "libc": "glibc" }, "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg=="], - "@pandacss/config/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw=="], + "@pandacss/config/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.7", "", { "os": "linux", "cpu": "s390x", "libc": "glibc" }, "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw=="], - "@pandacss/config/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.7", "", { "os": "linux", "cpu": "x64" }, "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA=="], + "@pandacss/config/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.7", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA=="], - "@pandacss/config/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.7", "", { "os": "linux", "cpu": "x64" }, "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw=="], + "@pandacss/config/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.7", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw=="], "@pandacss/config/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.7", "", { "os": "none", "cpu": "arm64" }, "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w=="], @@ -5505,7 +5479,7 @@ "@stylexjs/babel-plugin/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@stylexjs/babel-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@stylexjs/babel-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@stylexjs/babel-plugin/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5513,7 +5487,7 @@ "@stylexjs/babel-plugin/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@stylexjs/babel-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@stylexjs/babel-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@stylexjs/babel-plugin/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -5521,17 +5495,17 @@ "@stylexjs/babel-plugin/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@stylexjs/babel-plugin/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@stylexjs/babel-plugin/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@stylexjs/babel-plugin/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@stylexjs/babel-plugin/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@stylexjs/babel-plugin/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@stylexjs/babel-plugin/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "@stylexjs/nextjs-plugin/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@stylexjs/nextjs-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@stylexjs/nextjs-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@stylexjs/nextjs-plugin/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5539,11 +5513,11 @@ "@stylexjs/nextjs-plugin/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@stylexjs/nextjs-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@stylexjs/nextjs-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@stylexjs/nextjs-plugin/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@stylexjs/nextjs-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@stylexjs/nextjs-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@stylexjs/nextjs-plugin/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5553,7 +5527,7 @@ "@stylexjs/nextjs-plugin/@babel/plugin-syntax-typescript/@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@stylexjs/shared": ["@stylexjs/shared@0.11.1", "", { "dependencies": { "postcss-value-parser": "^4.1.0" } }, "sha512-siBoO0yg6KbhHbtkwWGhZWu0pH61gEAsdSYYv+vQRkaX3iSADByrqFuhD/KQku8AfKq78u5dWGc3FDA0H90VEw=="], @@ -5561,7 +5535,7 @@ "@stylexjs/postcss-plugin/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@stylexjs/postcss-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@stylexjs/postcss-plugin/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@stylexjs/postcss-plugin/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5569,11 +5543,11 @@ "@stylexjs/postcss-plugin/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@stylexjs/postcss-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@stylexjs/postcss-plugin/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@stylexjs/postcss-plugin/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@stylexjs/postcss-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@stylexjs/postcss-plugin/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@stylexjs/postcss-plugin/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5587,13 +5561,13 @@ "@tailwindcss/node/lightningcss/lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], - "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64", "libc": "glibc" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], - "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64", "libc": "musl" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], - "@tailwindcss/node/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64", "libc": "glibc" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], - "@tailwindcss/node/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64", "libc": "musl" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], "@tailwindcss/node/lightningcss/lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], @@ -5605,7 +5579,7 @@ "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5613,17 +5587,17 @@ "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@vanilla-extract/babel-plugin-debug-ids/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@vanilla-extract/integration/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@vanilla-extract/integration/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@vanilla-extract/integration/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@vanilla-extract/integration/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5631,11 +5605,11 @@ "@vanilla-extract/integration/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "@vanilla-extract/integration/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@vanilla-extract/integration/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@vanilla-extract/integration/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@vanilla-extract/integration/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "@vanilla-extract/integration/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "@vanilla-extract/integration/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5645,7 +5619,7 @@ "babel-loader/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "babel-loader/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "babel-loader/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "babel-loader/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5653,17 +5627,17 @@ "babel-loader/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "babel-loader/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "babel-loader/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "babel-loader/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "babel-loader/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "babel-loader/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "babel-loader/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "babel-plugin-polyfill-corejs2/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "babel-plugin-polyfill-corejs2/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "babel-plugin-polyfill-corejs2/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "babel-plugin-polyfill-corejs2/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5671,15 +5645,15 @@ "babel-plugin-polyfill-corejs2/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "babel-plugin-polyfill-corejs2/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "babel-plugin-polyfill-corejs2/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "babel-plugin-polyfill-corejs2/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "babel-plugin-polyfill-corejs2/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "babel-plugin-polyfill-corejs2/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "babel-plugin-polyfill-corejs3/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "babel-plugin-polyfill-corejs3/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "babel-plugin-polyfill-corejs3/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "babel-plugin-polyfill-corejs3/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5687,17 +5661,17 @@ "babel-plugin-polyfill-corejs3/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "babel-plugin-polyfill-corejs3/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "babel-plugin-polyfill-corejs3/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "babel-plugin-polyfill-corejs3/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "babel-plugin-polyfill-corejs3/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "babel-plugin-polyfill-corejs3/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "babel-plugin-polyfill-corejs3/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "babel-plugin-polyfill-regenerator/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "babel-plugin-polyfill-regenerator/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "babel-plugin-polyfill-regenerator/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "babel-plugin-polyfill-regenerator/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5705,11 +5679,11 @@ "babel-plugin-polyfill-regenerator/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "babel-plugin-polyfill-regenerator/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "babel-plugin-polyfill-regenerator/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "babel-plugin-polyfill-regenerator/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "babel-plugin-polyfill-regenerator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "babel-plugin-polyfill-regenerator/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "babel-plugin-polyfill-regenerator/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5723,7 +5697,7 @@ "eslint-plugin-react-hooks/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "eslint-plugin-react-hooks/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "eslint-plugin-react-hooks/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "eslint-plugin-react-hooks/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5733,7 +5707,7 @@ "eslint-plugin-react-hooks/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "eslint-plugin-react-hooks/@babel/core/@babel/traverse": ["@babel/traverse@7.29.10", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.9", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ=="], + "eslint-plugin-react-hooks/@babel/core/@babel/traverse": ["@babel/traverse@7.29.12", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.12", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.12", "@babel/template": "^7.29.7", "@babel/types": "^7.29.11", "debug": "^4.3.1" } }, "sha512-MscXe/NAZcOkYEsRajHZFt3ynsb22PUi6CTrp5U7+RYycR9By84mn9mFN54YgfITiqK4hFx3Ju3tZSyzfpS5ew=="], "eslint-plugin-react-hooks/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -5749,7 +5723,7 @@ "react-docgen/@babel/core/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "react-docgen/@babel/core/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "react-docgen/@babel/core/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "react-docgen/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], @@ -5757,7 +5731,7 @@ "react-docgen/@babel/core/@babel/helpers": ["@babel/helpers@7.29.10", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.8" } }, "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg=="], - "react-docgen/@babel/core/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "react-docgen/@babel/core/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "react-docgen/@babel/core/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -5765,16 +5739,18 @@ "react-docgen/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "react-docgen/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "react-docgen/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "react-docgen/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "react-docgen/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "react-docgen/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "react-docgen/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], "schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "style-to-js/style-to-object/inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "ts_dependency_graph/glob/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], "unified-engine/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], @@ -5797,7 +5773,7 @@ "@babel/helper-create-class-features-plugin/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/helper-create-class-features-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/helper-create-class-features-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/helper-create-class-features-plugin/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5809,7 +5785,7 @@ "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/helper-create-regexp-features-plugin/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5833,7 +5809,7 @@ "@babel/helper-module-transforms/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/helper-module-transforms/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/helper-module-transforms/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/helper-module-transforms/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5845,7 +5821,7 @@ "@babel/helper-remap-async-to-generator/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/helper-remap-async-to-generator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/helper-remap-async-to-generator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/helper-remap-async-to-generator/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5857,7 +5833,7 @@ "@babel/helper-replace-supers/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/helper-replace-supers/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/helper-replace-supers/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/helper-replace-supers/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5879,7 +5855,7 @@ "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5891,7 +5867,7 @@ "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-bugfix-safari-class-field-initializer-scope/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5901,7 +5877,7 @@ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5911,7 +5887,7 @@ "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5921,7 +5897,7 @@ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5931,7 +5907,7 @@ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5943,7 +5919,7 @@ "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-proposal-private-property-in-object/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5953,7 +5929,7 @@ "@babel/plugin-syntax-import-assertions/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-syntax-import-assertions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-syntax-import-assertions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-syntax-import-assertions/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5963,7 +5939,7 @@ "@babel/plugin-syntax-import-attributes/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-syntax-import-attributes/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-syntax-import-attributes/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-syntax-import-attributes/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5973,7 +5949,7 @@ "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-syntax-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5983,7 +5959,7 @@ "@babel/plugin-transform-arrow-functions/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-arrow-functions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-arrow-functions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-arrow-functions/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -5993,7 +5969,7 @@ "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-async-generator-functions/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6005,7 +5981,7 @@ "@babel/plugin-transform-async-to-generator/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-async-to-generator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-async-to-generator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-async-to-generator/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6015,7 +5991,7 @@ "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-block-scoped-functions/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6025,7 +6001,7 @@ "@babel/plugin-transform-block-scoping/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-block-scoping/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-block-scoping/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-block-scoping/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6035,7 +6011,7 @@ "@babel/plugin-transform-class-properties/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-class-properties/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-class-properties/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-class-properties/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6045,7 +6021,7 @@ "@babel/plugin-transform-class-static-block/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-class-static-block/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-class-static-block/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-class-static-block/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6063,7 +6039,7 @@ "@babel/plugin-transform-computed-properties/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-computed-properties/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-computed-properties/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-computed-properties/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6075,7 +6051,7 @@ "@babel/plugin-transform-destructuring/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-destructuring/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-destructuring/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-destructuring/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6087,7 +6063,7 @@ "@babel/plugin-transform-dotall-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-dotall-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-dotall-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-dotall-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6097,7 +6073,7 @@ "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-duplicate-keys/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6107,7 +6083,7 @@ "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-duplicate-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6117,7 +6093,7 @@ "@babel/plugin-transform-dynamic-import/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-dynamic-import/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-dynamic-import/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-dynamic-import/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6127,7 +6103,7 @@ "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-explicit-resource-management/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6137,7 +6113,7 @@ "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-exponentiation-operator/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6147,7 +6123,7 @@ "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-export-namespace-from/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6157,7 +6133,7 @@ "@babel/plugin-transform-for-of/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-for-of/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-for-of/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-for-of/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6175,7 +6151,7 @@ "@babel/plugin-transform-json-strings/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-json-strings/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-json-strings/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-json-strings/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6185,7 +6161,7 @@ "@babel/plugin-transform-literals/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-literals/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6195,7 +6171,7 @@ "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-logical-assignment-operators/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6205,7 +6181,7 @@ "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-member-expression-literals/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6215,7 +6191,7 @@ "@babel/plugin-transform-modules-amd/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-modules-amd/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-modules-amd/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-modules-amd/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6225,7 +6201,7 @@ "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-modules-commonjs/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6235,7 +6211,7 @@ "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-modules-systemjs/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6247,7 +6223,7 @@ "@babel/plugin-transform-modules-umd/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-modules-umd/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-modules-umd/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-modules-umd/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6257,7 +6233,7 @@ "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-named-capturing-groups-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6267,7 +6243,7 @@ "@babel/plugin-transform-new-target/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-new-target/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-new-target/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-new-target/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6277,7 +6253,7 @@ "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-nullish-coalescing-operator/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6287,7 +6263,7 @@ "@babel/plugin-transform-numeric-separator/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-numeric-separator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-numeric-separator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-numeric-separator/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6305,7 +6281,7 @@ "@babel/plugin-transform-object-super/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-object-super/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-object-super/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-object-super/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6315,7 +6291,7 @@ "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-optional-catch-binding/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6325,7 +6301,7 @@ "@babel/plugin-transform-optional-chaining/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-optional-chaining/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-optional-chaining/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-optional-chaining/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6335,7 +6311,7 @@ "@babel/plugin-transform-parameters/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-parameters/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-parameters/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-parameters/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6345,7 +6321,7 @@ "@babel/plugin-transform-private-methods/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-private-methods/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-private-methods/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-private-methods/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6355,7 +6331,7 @@ "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-private-property-in-object/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6365,7 +6341,7 @@ "@babel/plugin-transform-property-literals/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-property-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-property-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-property-literals/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6375,7 +6351,7 @@ "@babel/plugin-transform-react-display-name/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-react-display-name/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-react-display-name/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-react-display-name/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6385,7 +6361,7 @@ "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-react-jsx-development/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6395,7 +6371,7 @@ "@babel/plugin-transform-react-jsx/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-react-jsx/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-react-jsx/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-react-jsx/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6405,7 +6381,7 @@ "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-react-pure-annotations/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6415,7 +6391,7 @@ "@babel/plugin-transform-regenerator/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-regenerator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-regenerator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-regenerator/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6425,7 +6401,7 @@ "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-regexp-modifiers/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6435,7 +6411,7 @@ "@babel/plugin-transform-reserved-words/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-reserved-words/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-reserved-words/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-reserved-words/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6445,7 +6421,7 @@ "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-shorthand-properties/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6455,7 +6431,7 @@ "@babel/plugin-transform-spread/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-spread/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-spread/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-spread/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6465,7 +6441,7 @@ "@babel/plugin-transform-sticky-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-sticky-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-sticky-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-sticky-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6475,7 +6451,7 @@ "@babel/plugin-transform-template-literals/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-template-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-template-literals/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-template-literals/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6485,7 +6461,7 @@ "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-typeof-symbol/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6495,7 +6471,7 @@ "@babel/plugin-transform-typescript/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-typescript/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-typescript/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-typescript/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6505,7 +6481,7 @@ "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-unicode-escapes/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6515,7 +6491,7 @@ "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-unicode-property-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6525,7 +6501,7 @@ "@babel/plugin-transform-unicode-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-unicode-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-unicode-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-unicode-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6535,7 +6511,7 @@ "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/plugin-transform-unicode-sets-regex/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6551,7 +6527,7 @@ "@babel/preset-modules/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/preset-modules/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/preset-modules/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/preset-modules/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6561,7 +6537,7 @@ "@babel/preset-react/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/preset-react/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/preset-react/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/preset-react/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6571,33 +6547,33 @@ "@babel/preset-typescript/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@babel/preset-typescript/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@babel/preset-typescript/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@babel/preset-typescript/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/preset-typescript/@babel/core/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.0", "@typescript-eslint/types": "^8.72.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ=="], + "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.1", "@typescript-eslint/types": "^8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg=="], - "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA=="], + "@devup-ui/eslint-plugin/@typescript-eslint/rule-tester/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg=="], - "@devup-ui/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.0", "@typescript-eslint/types": "^8.72.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ=="], + "@devup-ui/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.1", "@typescript-eslint/types": "^8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg=="], - "@devup-ui/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA=="], + "@devup-ui/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg=="], - "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.72.0", "", { "dependencies": { "@typescript-eslint/types": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/utils": "8.72.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gEXxmmbSTSOVTC37IYYvremOM31v+UN2W772bJxmVYPhAOPSUxtacyb7wkm1EhkYKU6KzFJsdU44DCV4to0LWw=="], + "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.72.1", "", { "dependencies": { "@typescript-eslint/types": "8.72.1", "@typescript-eslint/typescript-estree": "8.72.1", "@typescript-eslint/utils": "8.72.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg=="], "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.14", "", {}, "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ=="], - "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.0", "@typescript-eslint/types": "^8.72.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-bzHngBbmIgzj6TsTjVUCntGx6FFLgE7mPjpO0PzHycOaZHXqS43XnrkFIHRS16LLr/xO6FHSXG3GJFo/F4bSBQ=="], + "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.72.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.72.1", "@typescript-eslint/types": "^8.72.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg=="], - "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-0vbxCf7xLVPSjcOdm6eQbgViH8EDJ8xnl1laLT9yoqSz2YmcSfSg5Vdl0JUvZf6rcuJ0ZivJIuMD4edTg8obaA=="], + "@devup-ui/eslint-plugin/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.72.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg=="], "@kuma-ui/babel-plugin/@babel/core/@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], "@kuma-ui/babel-plugin/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@kuma-ui/babel-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@kuma-ui/babel-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@kuma-ui/babel-plugin/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6607,7 +6583,7 @@ "@kuma-ui/compiler/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@kuma-ui/compiler/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@kuma-ui/compiler/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@kuma-ui/compiler/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6621,7 +6597,7 @@ "@stylexjs/babel-plugin/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@stylexjs/babel-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@stylexjs/babel-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@stylexjs/babel-plugin/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6633,7 +6609,7 @@ "@stylexjs/nextjs-plugin/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@stylexjs/nextjs-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@stylexjs/nextjs-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@stylexjs/nextjs-plugin/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6641,11 +6617,11 @@ "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.29.7", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw=="], - "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse/@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], + "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse/@babel/generator": ["@babel/generator@7.29.12", "", { "dependencies": { "@babel/parser": "^7.29.12", "@babel/types": "^7.29.11", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-2W76mhjrpQFO1lK5e8IvGYB2D0YZ7S2R1Z2BjO2ZUYuW+amcpK/z60U6ZZmzskwoa7sJ6XohP/Wg8H5KxXI/IA=="], "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse/@babel/parser": ["@babel/parser@7.29.11", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag=="], + "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse/@babel/parser": ["@babel/parser@7.29.12", "", { "dependencies": { "@babel/types": "^7.29.11" }, "bin": "./bin/babel-parser.js" }, "sha512-WJ7JBp/Q4+z/ImydtI7jS6NVco5++632ExBemSX+Ysb+G1lCwQ5BVo3SY+jGGOcZXI4ZccbZSUSJLNBW6eEpJg=="], "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@babel/traverse/@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], @@ -6653,7 +6629,7 @@ "@stylexjs/postcss-plugin/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@stylexjs/postcss-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@stylexjs/postcss-plugin/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@stylexjs/postcss-plugin/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6665,7 +6641,7 @@ "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@vanilla-extract/babel-plugin-debug-ids/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6675,7 +6651,7 @@ "@vanilla-extract/integration/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@vanilla-extract/integration/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "@vanilla-extract/integration/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "@vanilla-extract/integration/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6685,7 +6661,7 @@ "babel-loader/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "babel-loader/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "babel-loader/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "babel-loader/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6695,7 +6671,7 @@ "babel-plugin-polyfill-corejs2/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "babel-plugin-polyfill-corejs2/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "babel-plugin-polyfill-corejs2/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "babel-plugin-polyfill-corejs2/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6705,7 +6681,7 @@ "babel-plugin-polyfill-corejs3/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "babel-plugin-polyfill-corejs3/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "babel-plugin-polyfill-corejs3/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "babel-plugin-polyfill-corejs3/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6715,7 +6691,7 @@ "babel-plugin-polyfill-regenerator/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "babel-plugin-polyfill-regenerator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "babel-plugin-polyfill-regenerator/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "babel-plugin-polyfill-regenerator/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6727,7 +6703,7 @@ "eslint-plugin-react-hooks/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "eslint-plugin-react-hooks/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "eslint-plugin-react-hooks/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "eslint-plugin-react-hooks/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6739,7 +6715,7 @@ "react-docgen/@babel/core/@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "react-docgen/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.4", "", { "dependencies": { "baseline-browser-mapping": "^2.11.29", "caniuse-lite": "^1.0.30001816", "electron-to-chromium": "^1.5.459", "node-releases": "^2.0.59", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA=="], + "react-docgen/@babel/core/@babel/helper-compilation-targets/browserslist": ["browserslist@4.29.5", "", { "dependencies": { "baseline-browser-mapping": "^2.11.33", "caniuse-lite": "^1.0.30001819", "electron-to-chromium": "^1.5.464", "node-releases": "^2.0.60", "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-khTmKu5NGYTotqcYo8Bew2k4RAE9PuXRSFRXG2lQBrCEQHyeQ/vX6gKMxfokwywBsLiXZMnHsmWMG1pnO8J7uQ=="], "react-docgen/@babel/core/@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -6768,49 +6744,5 @@ "yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], "pkg-dir/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], - - "@eloqnt/config": ["@eloqnt/config@0.1.1", "", {}, "sha512-YRDigSaiJEzKDfzTth5kG+L/PKfB3mo8h7yNzpXExPfvQmcD05WoZT57PdhJE0jI+Vva6eb0OCU8hnHHgdME3g=="], - - "@eloqnt/format-json": ["@eloqnt/format-json@0.1.0", "", { "dependencies": { "@eloqnt/config": "^0.1.0" } }, "sha512-4Pkb+HyzgWNJXoU48aJhUyNZSjZvMGooPCNG1ZFmBm55xTiNNPQCNXH66Ob6sXS6RvbWZrRpCf+Uo/Jz9K9g+A=="], - - "@eloqnt/format-po": ["@eloqnt/format-po@0.1.1", "", { "dependencies": { "@eloqnt/config": "^0.1.1", "po-parser": "^2.2.0" } }, "sha512-aLtmIoqXGEaeTT0RcsLN8sZ3aIrsT/c/dVs28zrLhDjO3+vA3KNP+r98N0xq8w/k36+/GIUt4uZNbqcA71GVWw=="], - - "@formatjs/fast-memoize": ["@formatjs/fast-memoize@3.1.7", "", {}, "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA=="], - - "@formatjs/icu-messageformat-parser": ["@formatjs/icu-messageformat-parser@3.5.22", "", { "dependencies": { "@formatjs/icu-skeleton-parser": "2.1.12" } }, "sha512-YuwN+dDKgssfuYwtOyGQD0CSn7K46g9cv1Fp0VgKpjZDDFvv8b8crzP990IcJhRPWHhKzCGsbUSJVIguyyFA5A=="], - - "@formatjs/icu-skeleton-parser": ["@formatjs/icu-skeleton-parser@2.1.12", "", {}, "sha512-ca7tZMLpfHX3sUD7hP6gE/qr6Iq89EDd3ZLeRhbsB7r0UD55DGJq+tmFLzrGrnx5StahUevQmQQVtbDRHsfDHA=="], - - "@formatjs/intl-localematcher": ["@formatjs/intl-localematcher@0.8.14", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.7" } }, "sha512-8O7V38QmbB11+ryJ3KM/znrzXtiqgpXzqNoqDsndHZZ5/zDKTTL+cf5F0mzXkQEwhx8IlWnqYvEovf2S5EwLTw=="], - - "@schummar/icu-type-parser": ["@schummar/icu-type-parser@1.21.5", "", {}, "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw=="], - - "@typescript-eslint/rule-tester": ["@typescript-eslint/rule-tester@8.72.0", "", { "dependencies": { "@typescript-eslint/parser": "8.72.0", "@typescript-eslint/typescript-estree": "8.72.0", "@typescript-eslint/utils": "8.72.0", "ajv": "^6.12.6", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "4.6.2", "semver": "^7.7.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3DkhIwJJ1EgssS9r613P8mqraY/c0uSg9e5rQdYPKf71poFqIrN/6agYEtTzI9SvVLgFqfbCwpKLr0zRBij0UQ=="], - - "ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - - "ajv-keywords/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], - - "ajv-keywords/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], - - "icu-minify": ["icu-minify@4.14.9", "", { "dependencies": { "@formatjs/icu-messageformat-parser": "^3.4.0" } }, "sha512-PmO+fNnC3K3mfPKTnm3RrPERrhQZnjm1AlpyZQ0ShbXi8Y/kYZ3YOde8TEjCLz9k3P2DmzkBn8lykGrCAi1Ajw=="], - - "intl-messageformat": ["intl-messageformat@11.2.15", "", { "dependencies": { "@formatjs/fast-memoize": "3.1.7", "@formatjs/icu-messageformat-parser": "3.5.18" } }, "sha512-W4VNytsXyWgW5lvVchmsb9xgA5rSKqoflu3/IQ9UCtB0z4R+Bx9MoEkwFT/+30RCl/KzUoH0QGGe9lppF5SuvQ=="], - - "intl-messageformat/@formatjs/icu-messageformat-parser": ["@formatjs/icu-messageformat-parser@3.5.18", "", { "dependencies": { "@formatjs/icu-skeleton-parser": "2.1.11" } }, "sha512-wX1efcL8d7K5QapOTRsP/OLTA/kpwe4LwqWyNxDNg5iRs8i9jJbCyxB5P8jc4KOW5oiLzz2DJr+BRY5xMV9+bA=="], - - "intl-messageformat/@formatjs/icu-messageformat-parser/@formatjs/icu-skeleton-parser": ["@formatjs/icu-skeleton-parser@2.1.11", "", {}, "sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA=="], - - "negotiator": ["negotiator@1.1.0", "", { "dependencies": { "content-type": "^2.1.0" } }, "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg=="], - - "next-intl": ["next-intl@4.14.9", "", { "dependencies": { "@eloqnt/config": "^0.1.1", "@eloqnt/format-json": "^0.1.0", "@eloqnt/format-po": "^0.1.1", "@formatjs/intl-localematcher": "^0.8.1", "@parcel/watcher": "^2.4.1", "@swc/core": "~1.16.0", "icu-minify": "^4.14.9", "negotiator": "^1.0.0", "next-intl-swc-plugin-extractor": "4.14.9", "use-intl": "^4.14.9" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-uauRtUC+TrYNA1OL/QcwL9irndLrI9jK3Wdaa9W0B5AeKh9cqVdNeT0IWgLnhBqBRrVwppVdI0M+C1+JdGPQ3w=="], - - "next-intl-swc-plugin-extractor": ["next-intl-swc-plugin-extractor@4.14.9", "", {}, "sha512-8jAkmDwQJo6RDavBHm9QRl1YTn2WXf+rI4SVhMaZxZcxopnwZic6fKTXOoNIo3kzC+a6vJySkOkXmHTVFLAYtg=="], - - "po-parser": ["po-parser@2.2.0", "", {}, "sha512-NdTrKgh0oO7+y+RFX8KKhOB438x/j94UGXEFzl/7pHH0JjWSn42iJ9tgmPksIO6n1JKDHmNDcejPJfKspljB9g=="], - - "use-intl": ["use-intl@4.14.9", "", { "dependencies": { "@formatjs/fast-memoize": "^3.1.0", "@schummar/icu-type-parser": "1.21.5", "icu-minify": "^4.14.9", "intl-messageformat": "^11.1.0" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-37ktvdCCz+6JY2VFPl/GV69Ds4ahiUT2c2xEZZRZYxdgGLxFsUbdxzjQVRm3YMIOUU0VPs6zvlifb4Yjk4IxIg=="], } } diff --git a/libs/extractor/Cargo.toml b/libs/extractor/Cargo.toml index d00535d4a..31772fcf8 100644 --- a/libs/extractor/Cargo.toml +++ b/libs/extractor/Cargo.toml @@ -12,15 +12,15 @@ categories = ["development-tools", "wasm", "web-programming"] workspace = true [dependencies] -oxc_parser = "0.155.0" -oxc_syntax = "0.155.0" -oxc_span = "0.155.0" -oxc_allocator = "0.155.0" -oxc_ast = "0.155.0" -oxc_ast_visit = "0.155.0" -oxc_codegen = "0.155.0" -oxc_transformer = "0.155.0" -oxc_semantic = "0.155.0" +oxc_parser = "0.156.0" +oxc_syntax = "0.156.0" +oxc_span = "0.156.0" +oxc_allocator = "0.156.0" +oxc_ast = "0.156.0" +oxc_ast_visit = "0.156.0" +oxc_codegen = "0.156.0" +oxc_transformer = "0.156.0" +oxc_semantic = "0.156.0" oxc_sourcemap = "9.0.0" css = { path = "../css" } phf = "0.14.0" diff --git a/libs/extractor/src/barrel.rs b/libs/extractor/src/barrel.rs index f2af93fa0..d5400d0c4 100644 --- a/libs/extractor/src/barrel.rs +++ b/libs/extractor/src/barrel.rs @@ -506,6 +506,7 @@ impl Generated { mod aliases; mod gate; +mod namespace_aliases; use aliases::{Reach, declarator_removal, export_edits, is_assigned_from}; fn unreadable(local: &str, code: &str) -> String { @@ -795,7 +796,17 @@ impl Rewriter<'_, '_, '_, '_> { self.replace(namespace, appended, member_span, &name, origin); } (None, AstKind::VariableDeclarator(declarator)) - if matches!(declarator.id, BindingPattern::BindingIdentifier(_)) => {} + if matches!(declarator.id, BindingPattern::BindingIdentifier(_)) + && declarator + .init + .as_ref() + .is_some_and(|init| init.span() == span) + && nodes + .parent_kind(nodes.parent_id(node)) + .as_variable_declaration() + .is_some_and(|declaration| { + declaration.kind == VariableDeclarationKind::Const + }) => {} (None, AstKind::VariableDeclarator(declarator)) if declarator .init @@ -807,7 +818,11 @@ impl Rewriter<'_, '_, '_, '_> { (None, AstKind::ComputedMemberExpression(member)) if member.object.span() == span => { self.whole_error(local, member.span.start, member.span.end); } - (None, _) => {} + (None, AstKind::ExportSpecifier(_)) + if self.edits.iter().any(|(start, end, _)| { + *start <= span.start as usize && *end >= span.end as usize + }) => {} + (None, _) => self.whole_error(local, span.start, span.end), } } @@ -1031,6 +1046,7 @@ pub(crate) fn rewrite( } } let wants_semantic = !found.namespaces.is_empty() + || found.bound.iter().any(|bound| bound.devup.1.is_none()) || !found.opaque.is_empty() || (found .bound @@ -1051,7 +1067,7 @@ pub(crate) fn rewrite( let locals: FxHashMap = found .bound .iter() - .filter(|bound| bound.devup.1.as_deref().is_some_and(compiled_export)) + .filter(|bound| bound.devup.1.as_deref().is_none_or(compiled_export)) .filter_map(|bound| { Some(( bound.binding.symbol_id.get()?, @@ -1094,6 +1110,19 @@ pub(crate) fn rewrite( module: declared.module.clone(), source: declared.source.clone(), }) + .chain( + found + .bound + .iter() + .filter(|bound| bound.devup.1.is_none()) + .map(|bound| Namespace { + local: bound.binding.name.to_string(), + symbol: bound.binding.symbol_id.get(), + after: bound.after, + module: None, + source: bound.devup.0.clone(), + }), + ) .collect(); for namespace in &spaces { rewriter.read_namespace(namespace); diff --git a/libs/extractor/src/barrel/aliases.rs b/libs/extractor/src/barrel/aliases.rs index 1771f9e1b..f9d9cf97d 100644 --- a/libs/extractor/src/barrel/aliases.rs +++ b/libs/extractor/src/barrel/aliases.rs @@ -223,12 +223,13 @@ impl Rewriter<'_, '_, '_, '_> { Some((bound.binding.symbol_id.get()?, (bound, bound.devup.clone()))) }) .collect(); - let mut spaces: FxHashMap = namespaces + let first_new = namespaces.len(); + self.namespace_aliases(namespaces); + let spaces: FxHashMap = namespaces .iter() .enumerate() .filter_map(|(index, namespace)| Some((namespace.symbol?, index))) .collect(); - let first_new = namespaces.len(); for node in nodes.iter() { let AstKind::VariableDeclarator(declarator) = node.kind() else { continue; @@ -249,18 +250,10 @@ impl Rewriter<'_, '_, '_, '_> { if declaration.kind != VariableDeclarationKind::Const { continue; } - if let Some(&index) = spaces.get(&origin) { - let origin = &namespaces[index]; - let namespace = Namespace { - local: id.name.to_string(), - symbol: Some(alias), - after: origin.after, - module: origin.module.clone(), - source: origin.source.clone(), - }; - spaces.insert(alias, namespaces.len()); - namespaces.push(namespace); - } else if let Some((origin, reach)) = named.get(&origin).cloned() { + if spaces.contains_key(&origin) { + continue; + } + if let Some((origin, reach)) = named.get(&origin).cloned() { named.insert(alias, (origin, reach.clone())); let exported = matches!( nodes.parent_kind(declaration_id), diff --git a/libs/extractor/src/barrel/namespace_aliases.rs b/libs/extractor/src/barrel/namespace_aliases.rs new file mode 100644 index 000000000..26a9e3905 --- /dev/null +++ b/libs/extractor/src/barrel/namespace_aliases.rs @@ -0,0 +1,58 @@ +//! Whole namespace aliases, followed by semantic identity regardless of declaration order. + +use oxc_ast::AstKind; +use oxc_ast::ast::{BindingPattern, Expression, VariableDeclarationKind}; +use rustc_hash::FxHashMap; + +use super::{Namespace, Rewriter, reference_symbol}; + +impl Rewriter<'_, '_, '_, '_> { + /// Collects every immutable namespace alias before checking its runtime reads. + pub(super) fn namespace_aliases(&self, namespaces: &mut Vec) { + let mut spaces: FxHashMap<_, _> = namespaces + .iter() + .enumerate() + .filter_map(|(index, namespace)| Some((namespace.symbol?, index))) + .collect(); + let nodes = self.semantic.nodes(); + loop { + let before = spaces.len(); + for node in nodes.iter() { + let AstKind::VariableDeclarator(declarator) = node.kind() else { + continue; + }; + let (BindingPattern::BindingIdentifier(id), Some(Expression::Identifier(init))) = + (&declarator.id, &declarator.init) + else { + continue; + }; + let (Some(alias), Some(origin), AstKind::VariableDeclaration(declaration)) = ( + id.symbol_id.get(), + reference_symbol(init, self.semantic), + nodes.parent_kind(node.id()), + ) else { + continue; + }; + if declaration.kind != VariableDeclarationKind::Const || spaces.contains_key(&alias) + { + continue; + } + if let Some(&index) = spaces.get(&origin) { + let origin = &namespaces[index]; + let namespace = Namespace { + local: id.name.to_string(), + symbol: Some(alias), + after: origin.after, + module: origin.module.clone(), + source: origin.source.clone(), + }; + spaces.insert(alias, namespaces.len()); + namespaces.push(namespace); + } + } + if spaces.len() == before { + break; + } + } + } +} diff --git a/libs/extractor/src/barrel/namespace_escape_tests.rs b/libs/extractor/src/barrel/namespace_escape_tests.rs new file mode 100644 index 000000000..d55d29419 --- /dev/null +++ b/libs/extractor/src/barrel/namespace_escape_tests.rs @@ -0,0 +1,133 @@ +use super::{NS, Project, namespace_code, namespace_error}; +use crate::barrel::{Barreled, rewrite}; +use serial_test::serial; + +#[test] +#[serial] +fn runtime_namespace_escapes_are_rejected_when_used_whole() { + for usage in [ + "consume(Devup)", + "Object.keys(Devup)", + "function f() { return Devup }", + "const value = { ns: Devup }", + "const value = { Devup }", + "const value = [Devup]", + "export default Devup", + "export default { Devup }", + "const value = typeof Devup", + "let D = Devup; consume(D)", + "var D = Devup; consume(D)", + "const D = Devup; spyOn(D, 'css')", + "const D = Devup; const E = D; consume(E)", + "const D = Devup; export default D", + "function f() { const D = Devup; return D }", + "const E = D; const D = Devup; consume(E)", + "export { D }; const D = Devup", + "consume((Devup))", + "consume(Devup as object)", + ] { + let source = format!("{NS}{usage}\n"); + + let error = namespace_error(&source); + + assert!(error.contains("test.tsx:2:"), "{usage}: {error}"); + assert!( + error.contains("cannot use") && error.contains("read its members by name"), + "{usage}: {error}" + ); + } +} + +#[test] +#[serial] +fn safe_namespace_reads_preserve_semantic_identity() { + let source = format!( + "{NS}const D = Devup; const E = D;\nconst {{ css: c }} = E;\nexport const a = c({{ color: 'red' }});\nexport const b = D.css({{ color: 'blue' }});\nexport type N = typeof Devup;\nexport type A = typeof D;\nexport function f(Devup) {{ return spyOn(Devup, 'css') }}\nexport function g(D) {{ return D }}\nexport {{ Devup as UI }};\n" + ); + + let code = namespace_code(&source); + + assert!(!code.contains("c({") && !code.contains("D.css("), "{code}"); + assert!(code.contains("spyOn(Devup, \"css\")"), "{code}"); + assert!(code.contains("return D"), "{code}"); + assert!( + code.contains("typeof Devup") && code.contains("typeof D"), + "{code}" + ); + assert!(code.contains("export * as UI"), "{code}"); +} + +#[test] +#[serial] +fn type_only_and_unrelated_namespaces_remain_unchanged() { + for source in [ + "import type * as Devup from '@devup-ui/react'; export type N = typeof Devup;", + "import * as Devup from 'other'; spyOn(Devup, 'css');", + "import * as Devup from '@devup-ui/react'; function f() { const Devup = {}; return Devup }", + ] { + let result = rewrite(source, "test.tsx", "@devup-ui/react", None); + + assert!(matches!(result, Barreled::Unchanged)); + } +} + +#[test] +#[serial] +fn reexported_namespaces_are_rejected_when_their_runtime_value_escapes() { + for (index, (barrel, import)) in [ + ( + "export { css } from '@devup-ui/react'", + "import * as Devup from './ui'", + ), + ( + "export * as Devup from '@devup-ui/react'", + "import { Devup } from './ui'", + ), + ( + "import * as D from '@devup-ui/react'; export default D", + "import Devup from './ui'", + ), + ( + "import * as D from '@devup-ui/react'; export const Devup = D", + "import { Devup } from './ui'", + ), + ( + "export * as Devup from './inner'", + "import { Devup } from './ui'", + ), + ] + .into_iter() + .enumerate() + { + let source = format!("{import}\nspyOn(Devup, 'css')\n"); + let project = Project::new( + &format!("escape-{index}"), + &[ + ("ui.ts", barrel), + ("inner.ts", "export { css } from '@devup-ui/react'"), + ("app.tsx", &source), + ], + ); + + let error = project.error("app.tsx"); + + assert!(error.contains("app.tsx:2:7:"), "{error}"); + assert!( + error.contains("cannot use") && error.contains("import"), + "{error}" + ); + } +} + +#[test] +#[serial] +fn default_namespace_import_is_rejected_when_passed_to_runtime() { + let source = "import Devup from '@devup-ui/react'\nspyOn(Devup, 'css')\n"; + + let error = namespace_error(source); + + assert!( + error.contains("test.tsx:2:7: `Devup` cannot use `Devup`"), + "{error}" + ); +} diff --git a/libs/extractor/src/barrel/tests.rs b/libs/extractor/src/barrel/tests.rs index d509e81d8..76fb93e80 100644 --- a/libs/extractor/src/barrel/tests.rs +++ b/libs/extractor/src/barrel/tests.rs @@ -11,6 +11,9 @@ use crate::{ has_devup_ui_with, }; +#[path = "namespace_escape_tests.rs"] +mod namespace_escape_tests; + /// A project of real files on disk, removed when dropped struct Project { root: PathBuf, @@ -838,12 +841,13 @@ fn long_code_in_an_error_is_shortened() { #[test] #[serial] -fn namespace_passed_whole_is_left_to_the_runtime() { - let code = namespace_code(&format!( - "{NS}export const a = Object.keys(Devup)\nexport const b = ((fn) => fn)(Devup)\nexport default Devup\nexport const c = typeof Devup\n" - )); - assert!(code.contains("Object.keys(Devup)"), "{code}"); - assert!(code.contains("export default Devup"), "{code}"); +fn namespace_passed_whole_is_a_located_build_error() { + let error = namespace_error(&format!("{NS}spyOn(Devup, 'css')\n")); + assert!( + error.contains("test.tsx:2:7: `Devup` cannot use `Devup` at build time"), + "{error}" + ); + assert!(error.contains("read its members by name"), "{error}"); } #[test] @@ -983,11 +987,10 @@ fn barrel_module_exports_what_it_aliases_as_re_exports() { #[serial] fn namespace_aliases_read_members() { let code = namespace_code(&format!( - "{NS}const D = Devup\nexport const a = \nexport const b = D.css({{ color: 'blue' }})\nlet L = Devup\nexport const c = L\n" + "{NS}const D = Devup\nexport const a = \nexport const b = D.css({{ color: 'blue' }})\n" )); assert!(code.contains("
{ sites: Vec<(Span, Address)>, } -impl<'a> VisitMut<'a> for Rewrite<'_, 'a> { - fn visit_expression(&mut self, expression: &mut Expression<'a>) { - if let Expression::Identifier(identifier) = expression - && let Some(callback) = identifier - .reference_id - .get() - .and_then(|id| self.replacements.get(&id)) - { - let span = identifier.span; - *expression = callback.clone_in_with_semantic_ids(self.builder.allocator()); - self.sites.push((span, expression.address())); - return; - } - walk_mut::walk_expression(self, expression); +impl<'a> Rewrite<'_, 'a> { + fn visit_program(&mut self, program: &mut Program<'a>) { + crate::utils::rewrite_program(program, &mut |expression| { + if let Expression::Identifier(identifier) = expression + && let Some(callback) = identifier + .reference_id + .get() + .and_then(|id| self.replacements.get(&id)) + { + let span = identifier.span; + *expression = callback.clone_in_with_semantic_ids(self.builder.allocator()); + self.sites.push((span, expression.address())); + return true; + } + false + }); } } diff --git a/libs/extractor/src/build_time_values.rs b/libs/extractor/src/build_time_values.rs index ee799c8c6..6907de70b 100644 --- a/libs/extractor/src/build_time_values.rs +++ b/libs/extractor/src/build_time_values.rs @@ -122,10 +122,10 @@ const GLOBALS: [&str; 18] = [ /// The members of `Math` every engine gives exactly; the others are /// approximations that may differ in their last digits -const EXACT_MATH: [&str; 20] = [ - "abs", "ceil", "floor", "round", "trunc", "sign", "max", "min", "sqrt", "fround", "imul", - "clz32", "PI", "E", "LN2", "LN10", "LOG2E", "LOG10E", "SQRT2", "SQRT1_2", -]; +pub(crate) mod exact_math; +#[cfg(test)] +mod w22_tests; +use exact_math::EXACT_MATH; /// Members giving what the locale, the Unicode data of the engine or chance /// make them, and `toString`, which engines only approximate with a radix: diff --git a/libs/extractor/src/build_time_values/exact_math.rs b/libs/extractor/src/build_time_values/exact_math.rs new file mode 100644 index 000000000..7605d8409 --- /dev/null +++ b/libs/extractor/src/build_time_values/exact_math.rs @@ -0,0 +1,50 @@ +use boa_engine::{Context, Source}; + +/// Math members whose results the local safety gate permits across engines. +pub(crate) const EXACT_MATH: [&str; 20] = [ + "abs", "ceil", "floor", "round", "trunc", "sign", "max", "min", "sqrt", "fround", "imul", + "clz32", "PI", "E", "LN2", "LN10", "LOG2E", "LOG10E", "SQRT2", "SQRT1_2", +]; + +pub(crate) enum Operand<'a> { + Number(f64), + String(&'a str), + Bool(bool), + Null, + Undefined, +} + +impl Operand<'_> { + fn literal(&self) -> Option { + match self { + Self::Number(number) if *number == 0.0 && number.is_sign_negative() => { + Some("-0".to_string()) + } + Self::Number(number) => Some(crate::utils::js_number_string(*number)), + Self::String(text) => serde_json::to_string(text).ok(), + Self::Bool(value) => Some(value.to_string()), + Self::Null => Some("null".to_string()), + Self::Undefined => Some("undefined".to_string()), + } + } +} + +/// Evaluate only a trusted exact member over already resolved primitive operands. +/// No source expressions, user functions or module code reach Boa here. +pub(crate) fn evaluate(name: &str, arguments: Option<&[Operand<'_>]>) -> Option { + if !EXACT_MATH.contains(&name) { + return None; + } + let expression = match arguments { + None => format!("Math.{name}"), + Some(arguments) => { + let arguments: Option> = arguments.iter().map(Operand::literal).collect(); + format!("Math.{name}({})", arguments?.join(",")) + } + }; + let value = Context::default() + .eval(Source::from_bytes(expression.as_bytes())) + .ok()? + .as_number()?; + value.is_finite().then_some(value) +} diff --git a/libs/extractor/src/build_time_values/scope_tests.rs b/libs/extractor/src/build_time_values/scope_tests.rs index 5529f9c8c..f924d804c 100644 --- a/libs/extractor/src/build_time_values/scope_tests.rs +++ b/libs/extractor/src/build_time_values/scope_tests.rs @@ -1,6 +1,20 @@ use super::has_build_time_values; use crate::ExtractOption; +#[rstest::rstest] +#[case("await 'red'", false)] +#[case("'red'.toUpperCase()", true)] +fn build_time_candidate_when_evaluation_can_suspend_is_rejected( + #[case] value: &str, + #[case] expected: bool, +) { + let source = format!("import {{css}} from '@devup-ui/react'; css({{color: {value}}});"); + + let actual = has_build_time_values("await.tsx", &source, &ExtractOption::default(), None); + + assert_eq!(actual, expected); +} + #[test] fn erased_bindings_are_runtime_only_inputs() { let option = ExtractOption::default(); diff --git a/libs/extractor/src/build_time_values/w22_tests.rs b/libs/extractor/src/build_time_values/w22_tests.rs new file mode 100644 index 000000000..9bdf87ac3 --- /dev/null +++ b/libs/extractor/src/build_time_values/w22_tests.rs @@ -0,0 +1,44 @@ +use super::*; +use rstest::rstest; + +#[rstest] +#[case( + "import {css} from '@devup-ui/react';function make(n){return n+'px';}export const a=css({w:make(2)});", + "\"2px\"" +)] +#[case( + "import {css} from '@devup-ui/react';const n=2;export const a=css({w:(n+3)+'px'});", + "\"5px\"" +)] +#[case( + "import {css} from '@devup-ui/react';const theme={color:'red'};export const a=css({color:theme.color});", + "\"red\"" +)] +fn original_build_time_evaluation_when_the_dependency_closure_is_exact_replaces_values( + #[case] source: &str, + #[case] expected: &str, +) { + let actual = evaluate_located( + source, + "a.tsx", + &crate::ExtractOption::default(), + None, + &crate::imported_constants::Unknown::default(), + ) + .unwrap_or_else(|errors| panic!("{source}: {errors:?}")) + .unwrap_or_else(|| panic!("{source}")); + assert!(actual.0.contains(expected), "{}", actual.0); + assert_ne!(actual.1.len(), 0); +} + +#[test] +fn exact_math_when_resolved_numeric_operands_are_used_preserves_the_result() { + let result = exact_math::evaluate( + "imul", + Some(&[ + exact_math::Operand::Number(2.0), + exact_math::Operand::Number(3.0), + ]), + ); + assert_eq!(result, Some(6.0)); +} diff --git a/libs/extractor/src/composition.rs b/libs/extractor/src/composition.rs index 59a6cbdf0..e6ab8bd59 100644 --- a/libs/extractor/src/composition.rs +++ b/libs/extractor/src/composition.rs @@ -198,6 +198,7 @@ impl<'a> Composition<'a> { /// Styles a part of `css(...)` gives pub enum KnownStyles<'a> { + Cached(usize), /// The styles of a `css()` class the file binds Known(Vec), /// A rule object diff --git a/libs/extractor/src/css_boundary.rs b/libs/extractor/src/css_boundary.rs index f203a7683..83d3c2bb5 100644 --- a/libs/extractor/src/css_boundary.rs +++ b/libs/extractor/src/css_boundary.rs @@ -1,4 +1,6 @@ use super::{CssValue, DevupVisitor, JsxCss}; +use super::{branch_capture::BranchReads, jsx_order::AttributeOrder}; +use crate::extractor::styled_record_evaluation::visit_style_expressions; use crate::extractor::{ extract_style_from_styled::{StyledDefinition, forwarding}, styled_css_slot::CssPropLowering, @@ -6,19 +8,268 @@ use crate::extractor::{ use crate::prop_modify_utils::{ add_class_and_style, add_class_and_style_to_object, written_class_name, }; -use oxc_allocator::{FromIn, GetAllocator}; +use crate::{ExtractStyleProp, ExtractStyleValue}; +use oxc_allocator::{CloneIn, FromIn, GetAllocator, TakeIn}; use oxc_ast::ast::{ - Argument, CallExpression, Expression, JSXAttributeItem, JSXAttributeName, JSXElement, + Argument, CallExpression, Expression, JSXAttributeItem, JSXAttributeName, JSXChild, JSXElement, JSXElementName, ObjectPropertyKind, Str, }; -use oxc_span::SPAN; +use oxc_ast_visit::{Visit, VisitMut}; +use oxc_span::{GetSpan, SPAN}; use oxc_syntax::symbol::SymbolId; +use rustc_hash::{FxHashMap, FxHashSet}; #[path = "css_forwarded_props.rs"] mod props; use props::{filter_jsx, filter_object}; +// Only references to the collision-free bindings created for this exact site. +fn owned_reads(value: &Expression<'_>, names: &FxHashSet) -> Vec { + struct Reads<'b> { + names: &'b FxHashSet, + found: Vec, + } + impl<'a> Visit<'a> for Reads<'_> { + fn visit_identifier_reference(&mut self, value: &oxc_ast::ast::IdentifierReference<'a>) { + if self.names.contains(value.name.as_str()) { + self.found.push(value.name.to_string()); + } + } + } + let mut reads = Reads { + names, + found: Vec::new(), + }; + reads.visit_expression(value); + reads.found +} + +// Match gen_styles' reversal of nested StaticArray property lists without +// generating classes/variables or touching their global allocation order. +fn style_slots<'b>( + style: &'b ExtractStyleProp<'_>, + reversed: bool, + slots: &mut Vec<&'b str>, +) -> bool { + match style { + ExtractStyleProp::Static(ExtractStyleValue::Dynamic(value)) => { + slots.push(value.identifier()); + true + } + ExtractStyleProp::Static(ExtractStyleValue::Static(_)) => true, + ExtractStyleProp::StaticArray(styles) if reversed => { + styles.iter().all(|style| style_slots(style, false, slots)) + } + ExtractStyleProp::StaticArray(styles) => styles + .iter() + .rev() + .all(|style| style_slots(style, true, slots)), + _ => false, + } +} + +// Runtime as aliases start with a capital; they remain on the capture fallback. +fn is_intrinsic_tag(element: &JSXElement<'_>) -> bool { + matches!(&element.opening_element.name, JSXElementName::Identifier(name) + if name.name.as_str().starts_with(|c: char| c.is_ascii_lowercase())) +} + impl<'a> DevupVisitor<'a> { + /// Put each owned read back in its original unconditional JSX attribute. + /// Local metadata is rewritten before `gen_class_names/gen_styles/register`. + fn inline_css_reads( + &self, + element: &mut JSXElement<'a>, + props: &mut [ExtractStyleProp<'a>], + raw: &mut [ExtractStyleProp<'a>], + order: &mut AttributeOrder<'a>, + offset: u32, + ) -> Option>> { + if order.values.is_empty() + || order.values.iter().any(|(_, value)| value.is_none()) + || !is_intrinsic_tag(element) + || element.opening_element.type_arguments.is_some() + || element + .children + .iter() + .any(|child| !matches!(child, JSXChild::Text(_))) + { + return None; + } + let names: FxHashSet<_> = order.values.iter().map(|(name, _)| name.clone()).collect(); + if order + .values + .iter() + .filter_map(|(_, value)| value.as_ref()) + .any(|value| !owned_reads(value, &names).is_empty() || super::order::suspends(value)) + { + return None; + } + let mut slots = Vec::new(); + for attribute in &element.opening_element.attributes { + let JSXAttributeItem::Attribute(attribute) = attribute else { + return None; + }; + let JSXAttributeName::Identifier(name) = &attribute.name else { + return None; + }; + if matches!( + name.name.as_str(), + "key" | "ref" | "as" | "forwardedAs" | "style" + ) { + return None; + } + if let Some(oxc_ast::ast::JSXAttributeValue::ExpressionContainer(container)) = + &attribute.value + { + if name.name == "className" { + return None; + } + if let Some(value) = container.expression.as_expression() { + slots.push((attribute.span.start, owned_reads(value, &names))); + } + } + } + let mut dynamic = Vec::new(); + if !props + .iter() + .all(|style| style_slots(style, true, &mut dynamic)) + { + return None; + } + let mut style_reads = Vec::new(); + let mut emitted = Vec::new(); + for identifier in dynamic { + let source = self.ast.allocator().alloc_str(identifier); + let Ok(value) = + oxc_parser::Parser::new(self.ast.allocator(), source, oxc_span::SourceType::tsx()) + .parse_expression() + else { + return None; + }; + style_reads.extend(owned_reads(&value, &names)); + emitted.push(value); + } + slots.push((offset, style_reads)); + slots.sort_by_key(|(offset, _)| *offset); + let actual: Vec<_> = slots.into_iter().flat_map(|(_, reads)| reads).collect(); + if actual + != order + .values + .iter() + .map(|(name, _)| name.clone()) + .collect::>() + { + return None; + } + let reads = order + .values + .iter() + .filter_map(|(name, value)| { + value + .as_ref() + .map(|value| (name.clone(), value.clone_in(self.ast.allocator()))) + }) + .collect::>(); + let mut replace = BranchReads { + ast: &self.ast, + reads, + }; + for value in &mut emitted { + replace.visit_expression(value); + } + for style in props.iter_mut().chain(raw.iter_mut()) { + visit_style_expressions(&self.ast, style, &mut |value| { + replace.visit_expression(value); + }); + } + for attribute in &mut element.opening_element.attributes { + replace.visit_jsx_attribute_item(attribute); + } + order.values.clear(); + Some(emitted) + } + + /// Keep a necessary shared read inside the original style object. The + /// outer JSX retains the downstream factory/type lookup before that read. + pub(super) fn capture_in_style( + &mut self, + element: &mut JSXElement<'a>, + values: &mut Vec>, + ) { + if values.is_empty() + || self.pending_replacement.is_some() + || !is_intrinsic_tag(element) + || element.opening_element.type_arguments.is_some() + || element + .children + .iter() + .any(|child| !matches!(child, JSXChild::Text(_))) + { + return; + } + let names: FxHashSet<_> = values.iter().map(|(name, _)| name.clone()).collect(); + let mut slot = None; + for (index, attribute) in element.opening_element.attributes.iter().enumerate() { + let JSXAttributeItem::Attribute(attribute) = attribute else { + return; + }; + let JSXAttributeName::Identifier(name) = &attribute.name else { + return; + }; + if matches!(name.name.as_str(), "key" | "ref" | "as" | "forwardedAs") { + return; + } + match &attribute.value { + None | Some(oxc_ast::ast::JSXAttributeValue::StringLiteral(_)) => {} + Some(oxc_ast::ast::JSXAttributeValue::ExpressionContainer(container)) + if name.name == "style" && slot.is_none() => + { + let Some(value @ Expression::ObjectExpression(object)) = + container.expression.as_expression() + else { + return; + }; + if !object.properties.iter().all(|property| { + let ObjectPropertyKind::ObjectProperty(property) = property else { + return false; + }; + !property.computed + && !property.method + && property.kind == oxc_ast::ast::PropertyKind::Init + && matches!( + property.value, + Expression::Identifier(_) + | Expression::StringLiteral(_) + | Expression::NumericLiteral(_) + | Expression::BooleanLiteral(_) + | Expression::NullLiteral(_) + ) + }) { + return; + } + let reads = owned_reads(value, &names); + if reads.len() <= names.len() || !names.iter().all(|name| reads.contains(name)) + { + return; + } + slot = Some(index); + } + _ => return, + } + } + if let Some(index) = slot + && let JSXAttributeItem::Attribute(attribute) = + &mut element.opening_element.attributes[index] + && let Some(oxc_ast::ast::JSXAttributeValue::ExpressionContainer(container)) = + &mut attribute.value + && let Some(value) = container.expression.as_expression_mut() + { + let object = value.take_in(&self.ast); + *value = self.scoped_values(std::mem::take(values), object); + } + } + pub(super) fn css_definition( &self, symbol: Option, @@ -36,7 +287,13 @@ impl<'a> DevupVisitor<'a> { }) } - pub(super) fn lower_css_prop(&mut self, element: &mut JSXElement<'a>, css: CssValue<'a>) { + pub(super) fn lower_css_prop( + &mut self, + element: &mut JSXElement<'a>, + css: CssValue<'a>, + order: &mut AttributeOrder<'a>, + ) { + let offset = css.offset; let name = element.opening_element.name.to_string(); let attributes = &element.opening_element.attributes; let class_name = written_class_name(&self.ast, attributes); @@ -45,12 +302,40 @@ impl<'a> DevupVisitor<'a> { JSXAttributeItem::SpreadAttribute(_) => false, }); let symbol = self.style_values.jsx_symbol(&element.opening_element.name); - let Some((lowering, props)) = - self.css_prop_styles((&name, &name), css, symbol, renders, class_name.as_ref()) - else { + let mut raw = Vec::new(); + let Some((lowering, mut props)) = self.css_prop_styles( + (&name, &name), + css, + symbol, + renders, + class_name.as_ref(), + Some(&mut raw), + ) else { + self.styles + .extend(raw.into_iter().flat_map(ExtractStyleProp::into_extract)); return; }; - let (class_name, style) = self.css_class_and_style(props); + let inline_reads = if matches!(&lowering, CssPropLowering::Retained) { + self.inline_css_reads(element, &mut props, &mut raw, order, offset) + } else { + None + }; + self.styles + .extend(raw.into_iter().flat_map(ExtractStyleProp::into_extract)); + let (class_name, mut style) = self.css_class_and_style(props); + // Metadata above has identical expression code; keep the original + // captured expression AST/spans in emitted slots, including guards. + if let (Some(expressions), Some(Expression::ObjectExpression(object))) = + (&inline_reads, &mut style) + { + // Accepted leaves generate exactly one slot each; never truncate the rewrite. + assert_eq!(object.properties.len(), expressions.len()); + for (property, value) in object.properties.iter_mut().zip(expressions) { + if let ObjectPropertyKind::ObjectProperty(property) = property { + property.value = value.clone_in(self.ast.allocator()); + } + } + } let local = matches!( element.opening_element.name, JSXElementName::IdentifierReference(_) @@ -109,6 +394,22 @@ impl<'a> DevupVisitor<'a> { class_name, style, ); + if inline_reads.is_some() { + let attributes = &mut element.opening_element.attributes; + if let Some(index) = attributes.iter().position(|attribute| { + attribute + .as_attribute() + .and_then(|attribute| attribute.name.as_identifier()) + .is_some_and(|name| name.name == "style") + }) { + let style = attributes.remove(index); + let position = attributes + .iter() + .position(|attribute| attribute.span().start > offset) + .unwrap_or(attributes.len()); + attributes.insert(position, style); + } + } } pub(super) fn lower_jsx_css_prop(&mut self, call: &mut CallExpression<'a>, jsx: JsxCss<'a>) { @@ -119,6 +420,7 @@ impl<'a> DevupVisitor<'a> { symbol, class_name, renders, + spread_error, } = jsx; let Some((lowering, props)) = self.css_prop_styles( (&element, &lookup), @@ -126,9 +428,13 @@ impl<'a> DevupVisitor<'a> { symbol, renders, class_name.as_ref(), + None, ) else { return; }; + if let Some((index, offset, error)) = spread_error { + self.errors.insert(index, (offset, error)); + } let (class_name, style) = self.css_class_and_style(props); let inline = match &lowering { CssPropLowering::Inline(_) => true, @@ -146,13 +452,23 @@ impl<'a> DevupVisitor<'a> { class_name } CssPropLowering::Slot(slot) => { - if let Some(Argument::ObjectExpression(props)) = call.arguments.get_mut(1) { + if let Some(Expression::ObjectExpression(props)) = call + .arguments + .get_mut(1) + .and_then(Argument::as_expression_mut) + .map(crate::utils::unwrap_syntax_only_mut) + { props.properties.push(slot.property(&self.ast, class_name)); } None } }; - if let Some(Argument::ObjectExpression(props)) = call.arguments.get_mut(1) { + if let Some(Expression::ObjectExpression(props)) = call + .arguments + .get_mut(1) + .and_then(Argument::as_expression_mut) + .map(crate::utils::unwrap_syntax_only_mut) + { add_class_and_style_to_object(&self.ast, &mut props.properties, class_name, style); if inline && let Some(definition) = self.css_definition(symbol, &lookup) { let names = props @@ -171,3 +487,7 @@ impl<'a> DevupVisitor<'a> { } } } + +#[cfg(test)] +#[path = "css_boundary_contract_tests.rs"] +mod contract_tests; diff --git a/libs/extractor/src/css_boundary_contract_tests.rs b/libs/extractor/src/css_boundary_contract_tests.rs new file mode 100644 index 000000000..1fbddfc4c --- /dev/null +++ b/libs/extractor/src/css_boundary_contract_tests.rs @@ -0,0 +1,111 @@ +use super::*; +use crate::extract_style::extract_dynamic_style::ExtractDynamicStyle; +use oxc_allocator::Allocator; +use oxc_parser::Parser; +use oxc_span::SourceType; +use rstest::rstest; + +fn dynamic(name: &str) -> ExtractStyleProp<'_> { + ExtractStyleProp::Static(ExtractStyleValue::Dynamic(ExtractDynamicStyle::new( + "color", 0, name, None, + ))) +} + +#[rstest] +#[case(true, vec!["a", "c", "b"])] +#[case(false, vec!["b", "c", "a"])] +fn nested_style_slots_follow_the_same_alternating_order_as_emission( + #[case] reversed: bool, + #[case] expected: Vec<&str>, +) { + let styles = ExtractStyleProp::StaticArray(vec![ + dynamic("a"), + ExtractStyleProp::StaticArray(vec![dynamic("b"), dynamic("c")]), + ]); + let mut slots = Vec::new(); + assert!(style_slots(&styles, reversed, &mut slots)); + assert_eq!(slots, expected); +} + +#[rstest] +#[case("
", "owned", false)] +#[case("
", "read()", false)] +#[case("
", "read()", false)] +#[case("
", "read()", true)] +fn inline_refusals_preserve_the_element_and_owned_evaluation( + #[case] source: &str, + #[case] capture: &str, + #[case] malformed: bool, +) { + let arena = Allocator::default(); + let visitor = DevupVisitor::new(&arena, "boundary.tsx", "@devup-ui/react", vec![], None); + let mut element = Parser::new(&arena, source, SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let before = crate::utils::readable_code(&element); + let value = Parser::new(&arena, capture, SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let mut order = AttributeOrder { + values: vec![("owned".into(), Some(value))], + ..AttributeOrder::default() + }; + let mut props = if malformed { + vec![dynamic(")")] + } else { + Vec::new() + }; + let mut raw = Vec::new(); + let Expression::JSXElement(jsx) = &mut element else { + panic!("expected element") + }; + assert!( + visitor + .inline_css_reads(jsx, &mut props, &mut raw, &mut order, 0) + .is_none() + ); + assert_eq!(crate::utils::readable_code(&element), before); + assert_eq!(order.values.len(), 1); + assert_eq!(order.values[0].0, "owned"); + assert_eq!( + crate::utils::readable_code( + order.values[0] + .1 + .as_ref() + .unwrap_or_else(|| panic!("captured value disappeared")) + ), + capture + ); + assert!(raw.is_empty()); + assert_eq!(visitor.errors, [] as [(u32, String); 0]); + if malformed { + assert!( + matches!(&props[0], ExtractStyleProp::Static(ExtractStyleValue::Dynamic(value)) if value.identifier() == ")") + ); + } +} + +#[rstest] +#[case("
")] +#[case("
")] +fn style_object_capture_refuses_unowned_attribute_shapes(#[case] source: &str) { + let arena = Allocator::default(); + let mut visitor = DevupVisitor::new(&arena, "boundary.tsx", "@devup-ui/react", vec![], None); + let mut element = Parser::new(&arena, source, SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let before = crate::utils::readable_code(&element); + let value = Parser::new(&arena, "read()", SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let mut values = vec![("owned".into(), value)]; + let Expression::JSXElement(jsx) = &mut element else { + panic!("expected element") + }; + visitor.capture_in_style(jsx, &mut values); + assert_eq!(crate::utils::readable_code(&element), before); + assert_eq!(values.len(), 1); + assert_eq!(values[0].0, "owned"); + assert_eq!(crate::utils::readable_code(&values[0].1), "read()"); + assert_eq!(visitor.errors, [] as [(u32, String); 0]); +} diff --git a/libs/extractor/src/css_prop.rs b/libs/extractor/src/css_prop.rs index 694526205..d03b24203 100644 --- a/libs/extractor/src/css_prop.rs +++ b/libs/extractor/src/css_prop.rs @@ -6,7 +6,7 @@ use std::collections::HashMap; use oxc_allocator::{CloneIn, FromIn, GetAllocator}; use oxc_ast::ast::{ - Argument, ArrowFunctionBody, BinaryOperator, BindingPattern, CallExpression, Expression, + ArrowFunctionBody, BinaryOperator, BindingPattern, CallExpression, Expression, FormalParameters, FunctionBody, IdentifierReference, ImportDeclarationSpecifier, JSXAttributeItem, JSXChild, JSXElement, JSXElementName, ObjectPropertyKind, Program, Statement, Str, TemplateElement, TemplateElementValue, TemplateLiteral, @@ -19,7 +19,7 @@ use oxc_syntax::symbol::SymbolId; use rustc_hash::FxHashSet; use crate::ImportAlias; -use crate::css_utils::{Place, interpolation_place}; +use crate::css_utils::{Place, template_interpolation_places}; use crate::utils::{ binding_root, get_key_by_literal_expression, get_string_by_literal_expression, unwrap_syntax_only, @@ -157,6 +157,9 @@ impl<'s> CssTakers<'s> { let mut class_names = FxHashSet::default(); for statement in &program.body { if let Statement::ImportDeclaration(import) = statement { + if import.import_kind.is_type() { + continue; + } let Some(source) = import.source.value.as_str() else { continue; }; @@ -164,6 +167,9 @@ impl<'s> CssTakers<'s> { let ImportDeclarationSpecifier::ImportSpecifier(specifier) = specifier else { continue; }; + if specifier.import_kind.is_type() { + continue; + } let imported = specifier.imported.name(); if is_jsx_function(source, &imported, compat) { jsx.extend(specifier.local.symbol_id.get()); @@ -239,7 +245,10 @@ impl<'s> CssTakers<'s> { let Expression::Identifier(callee) = &call.callee else { return None; }; - let [element, Argument::ObjectExpression(props), ..] = call.arguments.as_slice() else { + let [element, props, ..] = call.arguments.as_slice() else { + return None; + }; + let Expression::ObjectExpression(props) = unwrap_syntax_only(props.as_expression()?) else { return None; }; let element = element.as_expression()?; @@ -742,21 +751,13 @@ pub(crate) fn template_parts<'a>( mixins: bool, ) -> Result>, (Expression<'a>, &'static str)> { let mut parts = Vec::new(); - let mut text = String::new(); - let mut depth = 0usize; - let mut quotes = css::quoted::QuoteState::default(); let mut from = 0; - for (index, expression) in template.expressions.iter().enumerate() { - let quasi = template.quasis[index].value.raw.as_str(); - text.push_str(quasi); - for byte in quasi.bytes().filter(|&byte| quotes.is_syntax(byte)) { - match byte { - b'{' => depth += 1, - b'}' => depth = depth.saturating_sub(1), - _ => {} - } - } - let place = interpolation_place(&text, &template.quasis[index + 1..]); + for (index, (expression, (place, depth))) in template + .expressions + .iter() + .zip(template_interpolation_places(template)) + .enumerate() + { if matches!(place, Place::Value) || get_string_by_literal_expression(expression).is_some() { continue; } diff --git a/libs/extractor/src/css_prop_composition.rs b/libs/extractor/src/css_prop_composition.rs index e9e2f20cf..23612f691 100644 --- a/libs/extractor/src/css_prop_composition.rs +++ b/libs/extractor/src/css_prop_composition.rs @@ -21,6 +21,7 @@ impl<'a> DevupVisitor<'a> { symbol: Option, renders: bool, class_name: Option<&Expression<'a>>, + raw: Option<&mut Vec>>, ) -> Option<(CssPropLowering, Vec>)> { let (element, lookup) = names; let allocator = self.ast.allocator(); @@ -55,7 +56,7 @@ impl<'a> DevupVisitor<'a> { CssPropLowering::Inline(_) => markers, CssPropLowering::Retained | CssPropLowering::Slot(_) => None, }; - let mut props = self.compose_css_prop(element, css, styles, class_name); + let mut props = self.compose_css_prop(element, css, styles, class_name, raw); props.extend(markers.map(|expression| ExtractStyleProp::Expression { expression, styles: vec![], @@ -69,7 +70,7 @@ impl<'a> DevupVisitor<'a> { ) }); let offset = css.offset; - let props = self.compose_css_prop(element, css, vec![], class_name); + let props = self.compose_css_prop(element, css, vec![], class_name, raw); if own.is_some_and(|own| match own { OwnStyles::Replay(styles) => overlaps(&styles, &props), OwnStyles::Residual(coverage) => coverage.overlaps(&props), diff --git a/libs/extractor/src/css_utils.rs b/libs/extractor/src/css_utils.rs index de59cb905..af6c97485 100644 --- a/libs/extractor/src/css_utils.rs +++ b/libs/extractor/src/css_utils.rs @@ -304,6 +304,7 @@ pub struct TemplateStyles { pub unplaced: Vec, } +#[derive(Clone, Copy)] pub(crate) enum Place { Value, Statement, @@ -312,43 +313,98 @@ pub(crate) enum Place { /// Where an interpolation stands, from the CSS written before and after it pub(crate) fn interpolation_place(before: &str, after: &[TemplateElement<'_>]) -> Place { - let mut quotes = QuoteState::default(); - let mut head_start = 0; - let mut has_colon = false; - for (index, byte) in before.bytes().enumerate() { - if !quotes.is_syntax(byte) { - continue; - } - match byte { - b';' | b'{' | b'}' => { - head_start = index + 1; - has_colon = false; + let mut scan = Placement::default(); + scan.feed(before); + let head = (scan.colon, !scan.text_in_head); + let end = after + .iter() + .find_map(|quasi| scan.feed(quasi.value.raw.as_str())); + placement( + head, + end, + after + .iter() + .find_map(|quasi| quasi.value.raw.chars().next()), + ) +} + +#[derive(Default)] +struct Placement { + quotes: QuoteState, + colon: bool, + text_in_head: bool, + depth: usize, +} +impl Placement { + fn feed(&mut self, text: &str) -> Option { + let mut first = None; + let mut head = None; + for (index, byte) in text.bytes().enumerate() { + if !self.quotes.is_syntax(byte) { + continue; + } + match byte { + b';' | b'{' | b'}' => { + if first.is_none() { + first = Some(byte); + } + head = Some(index + 1); + self.colon = false; + if byte == b'{' { + self.depth += 1; + } + if byte == b'}' { + self.depth = self.depth.saturating_sub(1); + } + } + b':' => self.colon = true, + _ => {} } - b':' => has_colon = true, - _ => {} } + self.text_in_head = head.map_or_else( + || self.text_in_head || !text.trim().is_empty(), + |head| !text[head..].trim().is_empty(), + ); + first } - let end = after - .iter() - .flat_map(|quasi| quasi.value.raw.bytes()) - .find(|&byte| quotes.is_syntax(byte) && matches!(byte, b';' | b'{' | b'}')); +} + +fn placement((colon, blank): (bool, bool), end: Option, next: Option) -> Place { if end == Some(b'{') { - return Place::Other; - } - if has_colon { + Place::Other + } else if colon { Place::Value - } else if before[head_start..].trim().is_empty() - && after - .iter() - .find_map(|quasi| quasi.value.raw.chars().next()) - .is_none_or(|c| c.is_whitespace() || c == ';') - { + } else if blank && next.is_none_or(|character| character.is_whitespace() || character == ';') { Place::Statement } else { Place::Other } } +/// One linear scan shared by template admission and source-order capture. +pub(crate) fn template_interpolation_places(template: &TemplateLiteral<'_>) -> Vec<(Place, usize)> { + let mut scan = Placement::default(); + let states: Vec<_> = template + .quasis + .iter() + .map(|quasi| { + let first = scan.feed(quasi.value.raw.as_str()); + ((scan.colon, !scan.text_in_head), scan.depth, first) + }) + .collect(); + let mut result = vec![(Place::Other, 0); template.expressions.len()]; + let (mut end, mut next) = (None, None); + for index in (0..states.len()).rev() { + let (head, depth, first) = states[index]; + if let Some(result) = result.get_mut(index) { + *result = (placement(head, end, next), depth); + } + end = first.or(end); + next = template.quasis[index].value.raw.chars().next().or(next); + } + result +} + /// The CSS text of a template whose interpolations must all be known at build /// time, as `api` has no element to set a runtime value on; the error is at /// the offset of the first that is not diff --git a/libs/extractor/src/extract_style/dynamic_style_tests.rs b/libs/extractor/src/extract_style/dynamic_style_tests.rs new file mode 100644 index 000000000..8771f6a0d --- /dev/null +++ b/libs/extractor/src/extract_style/dynamic_style_tests.rs @@ -0,0 +1,54 @@ +use super::*; + +#[test] +fn test_extract_dynamic_style() { + let style = ExtractDynamicStyle::new("color", 0, "primary", None); + assert_eq!(style.property(), "color"); + assert_eq!(style.level(), 0); + assert_eq!(style.selector(), None); + assert_eq!(style.identifier(), "primary"); + assert_eq!(style.style_order(), None); + assert!(!style.important()); +} + +#[test] +fn test_debug_dynamic_style() { + let style = ExtractDynamicStyle::new("color", 2, "value", None); + assert_eq!( + format!("{style:?}"), + "ExtractDynamicStyle { property: \"color\", level: 2, identifier: \"value\", selector: None, style_order: None }" + ); +} + +#[rstest::rstest] +#[case("color", "color", false)] +#[case("color !important fallback", "color !important fallback", false)] +#[case("`${color} !important`", "`${color}`", true)] +#[case("\"red !important\"", "\"red\"", true)] +#[case("'red !important'", "'red'", true)] +#[case("something !important", "something", true)] +fn important_suffix_when_present_is_stripped( + #[case] input: &str, + #[case] expected: &str, + #[case] important: bool, +) { + assert_eq!( + strip_important(input.to_string()), + (expected.to_string(), important) + ); +} + +#[test] +fn test_dynamic_style_with_important() { + let style = ExtractDynamicStyle::new("background", 0, "`${color} !important`", None); + assert_eq!(style.property(), "background"); + assert_eq!(style.identifier(), "`${color}`"); + assert!(style.important()); +} + +#[test] +fn runtime_template_when_css_ends_in_a_semicolon_keeps_valid_javascript() { + let style = ExtractDynamicStyle::new("color", 0, " `${color};`; ", None); + assert_eq!(style.identifier(), "`${color}`"); + assert!(!style.important()); +} diff --git a/libs/extractor/src/extract_style/extract_dynamic_style.rs b/libs/extractor/src/extract_style/extract_dynamic_style.rs index c0aefa18c..6ec784469 100644 --- a/libs/extractor/src/extract_style/extract_dynamic_style.rs +++ b/libs/extractor/src/extract_style/extract_dynamic_style.rs @@ -169,10 +169,12 @@ impl ExtractStyleProperty for ExtractDynamicStyle { }); let variable_name = sheet_to_variable_name(self.property.as_str(), self.level, selector.as_deref()); - let declaration = format!( - "var({variable_name}){}", - if self.important { " !important" } else { "" } - ); + let declaration = { + format!( + "var({variable_name}){}", + if self.important { " !important" } else { "" } + ) + }; StyleProperty::Variable { class_name: ordinary_class.unwrap_or_else(|| { sheet_to_classname( @@ -191,79 +193,5 @@ impl ExtractStyleProperty for ExtractDynamicStyle { } #[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_extract_dynamic_style() { - let style = ExtractDynamicStyle::new("color", 0, "primary", None); - assert_eq!(style.property(), "color"); - assert_eq!(style.level(), 0); - assert_eq!(style.selector(), None); - assert_eq!(style.identifier(), "primary"); - assert_eq!(style.style_order(), None); - assert!(!style.important()); - } - - #[test] - fn test_strip_important_plain() { - let (id, important) = strip_important("color".to_string()); - assert_eq!(id, "color"); - assert!(!important); - } - - #[test] - fn test_debug_dynamic_style() { - let style = ExtractDynamicStyle::new("color", 2, "value", None); - - assert_eq!( - format!("{style:?}"), - "ExtractDynamicStyle { property: \"color\", level: 2, identifier: \"value\", selector: None, style_order: None }" - ); - } - - #[test] - fn test_strip_important_when_not_a_suffix() { - let (id, important) = strip_important("color !important fallback".to_string()); - - assert_eq!(id, "color !important fallback"); - assert!(!important); - } - - #[test] - fn test_strip_important_template_literal() { - // Template literal: `${color} !important` - let (id, important) = strip_important("`${color} !important`".to_string()); - assert_eq!(id, "`${color}`"); - assert!(important); - } - - #[test] - fn test_strip_important_double_quote() { - let (id, important) = strip_important("\"red !important\"".to_string()); - assert_eq!(id, "\"red\""); - assert!(important); - } - - #[test] - fn test_strip_important_single_quote() { - let (id, important) = strip_important("'red !important'".to_string()); - assert_eq!(id, "'red'"); - assert!(important); - } - - #[test] - fn test_strip_important_bare() { - let (id, important) = strip_important("something !important".to_string()); - assert_eq!(id, "something"); - assert!(important); - } - - #[test] - fn test_dynamic_style_with_important() { - let style = ExtractDynamicStyle::new("background", 0, "`${color} !important`", None); - assert_eq!(style.property(), "background"); - assert_eq!(style.identifier(), "`${color}`"); - assert!(style.important()); - } -} +#[path = "dynamic_style_tests.rs"] +mod tests; diff --git a/libs/extractor/src/extractor/extract_style_from_expression.rs b/libs/extractor/src/extractor/extract_style_from_expression.rs index 698a1f92f..5c56751df 100644 --- a/libs/extractor/src/extractor/extract_style_from_expression.rs +++ b/libs/extractor/src/extractor/extract_style_from_expression.rs @@ -38,6 +38,9 @@ use std::collections::BTreeMap; const IGNORED_IDENTIFIERS: [&str; 3] = ["undefined", "NaN", "Infinity"]; +#[cfg(test)] +mod direct_tests; + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum LiteralHandling { ExpandResponsiveThemeToken, @@ -247,27 +250,45 @@ pub(crate) fn extract_with_policy<'a, const LOCATE: bool>( level: u8, selector: &Option, literal_handling: LiteralHandling, - prepare: &mut impl FnMut(&mut Expression<'a>), + prepare: &mut dyn FnMut(&mut Expression<'a>), +) -> ExtractResult<'a> { + extract_with_location( + inputs, + name, + expression, + (level, selector, LOCATE), + literal_handling, + prepare, + ) +} + +pub(super) fn extract_with_location<'a>( + inputs: StyleInputs<'_, 'a>, + name: Option<&str>, + expression: &mut Expression<'a>, + (level, selector, locate): (u8, &Option, bool), + literal_handling: LiteralHandling, + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> ExtractResult<'a> { - extract_projected::( + extract_projected( inputs, name, expression, - (level, selector), + (level, selector, locate), literal_handling, &mut super::style_order_projection::Projection::default(), prepare, ) } -pub(super) fn extract_projected<'a, const LOCATE: bool>( +pub(super) fn extract_projected<'a>( inputs: StyleInputs<'_, 'a>, name: Option<&str>, expression: &mut Expression<'a>, - (level, selector): (u8, &Option), + (level, selector, locate): (u8, &Option, bool), literal_handling: LiteralHandling, projection: &mut super::style_order_projection::Projection<'a>, - prepare: &mut impl FnMut(&mut Expression<'a>), + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> ExtractResult<'a> { let ast_builder = inputs.ast; let mut typo = false; @@ -352,11 +373,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( }); let ExtractResult { styles, tag: _tag, .. - } = projection.extract::( + } = projection.extract( inputs, Some(disassembled), sibling.as_mut().unwrap_or(&mut prop.value), - (0, &None), + (0, &None, locate), LiteralHandling::ExpandResponsiveThemeToken, prepare, ); @@ -372,11 +393,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( ObjectPropertyKind::SpreadProperty(prop) => { let ExtractResult { styles, tag: _tag, .. - } = projection.extract::( + } = projection.extract( inputs, None, &mut prop.argument, - (0, &None), + (0, &None, locate), LiteralHandling::ExpandResponsiveThemeToken, prepare, ); @@ -405,11 +426,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( condition: conditional.test.clone_in(ast_builder.allocator()), consequent: Some(Box::new(ExtractStyleProp::StaticArray( projection - .extract::( + .extract( inputs, None, &mut conditional.consequent, - (level, &None), + (level, &None, locate), literal_handling, prepare, ) @@ -417,11 +438,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( ))), alternate: Some(Box::new(ExtractStyleProp::StaticArray( projection - .extract::( + .extract( inputs, None, &mut conditional.alternate, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -461,11 +482,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( let offset = expression.span().start; let mut styles = vec![]; for part in split_selector_list(name) { - styles.extend(extract_under_key::( + styles.extend(extract_under_key( inputs, (part, offset), &mut expression.clone_in_with_semantic_ids(ast_builder.allocator()), - (level, selector), + (level, selector, locate), literal_handling, projection, prepare, @@ -508,11 +529,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( }; let offset = o.key.span().start; for part in split_selector_list(key_name.trim()) { - props.extend(extract_under_key::( + props.extend(extract_under_key( inputs, (part, offset), &mut o.value.clone_in_with_semantic_ids(ast_builder.allocator()), - (level, selector), + (level, selector, locate), literal_handling, projection, prepare, @@ -536,11 +557,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( && let Some(layer) = get_string_by_property_key(&o.key) { let mut styles = projection - .extract::( + .extract( inputs, None, &mut o.value, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -569,11 +590,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( { props.extend( projection - .extract::( + .extract( inputs, None, &mut o.value, - (level, &Some(at_selector)), + (level, &Some(at_selector), locate), literal_handling, prepare, ) @@ -590,11 +611,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( if name.starts_with('_') || split_at_rule_key(name).is_some() { let offset = expression.span().start; return ExtractResult { - styles: extract_under_key::( + styles: extract_under_key( inputs, (name, offset), expression, - (level, selector), + (level, selector, locate), literal_handling, projection, prepare, @@ -719,7 +740,7 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( None => unreadable(expression), }, Expression::ComputedMemberExpression(mem) => { - extract_member::(inputs, name, mem, level, selector, prepare) + extract_member(inputs, name, mem, (level, selector, locate), prepare) } Expression::TemplateLiteral(_) => { let Some(name) = name else { @@ -871,7 +892,7 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( LogicalOperator::Or => literal_truthiness(&logical.left) == Some(false), LogicalOperator::Coalesce => nullish, }; - projection.extract::( + projection.extract( inputs, name, if takes_right { @@ -879,7 +900,7 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( } else { &mut logical.left }, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -888,7 +909,7 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( if literal_truthiness(&conditional.test).is_some() => { let consequent = literal_truthiness(&conditional.test) == Some(true); - projection.extract::( + projection.extract( inputs, name, if consequent { @@ -896,7 +917,7 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( } else { &mut conditional.alternate }, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -905,11 +926,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( projection.conditional(logical.operator == LogicalOperator::Coalesce); let res = Some(Box::new(ExtractStyleProp::StaticArray( projection - .extract::( + .extract( inputs, name, &mut logical.right, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -955,11 +976,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( ), consequent: Some(Box::new(ExtractStyleProp::StaticArray( projection - .extract::( + .extract( inputs, name, &mut logical.left, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -988,11 +1009,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( if let Some(element) = element.as_expression_mut() { props.extend( projection - .extract::( + .extract( inputs, name, element, - (idx as u8, selector), + (idx as u8, selector, locate), LiteralHandling::KeepSingleClass, prepare, ) @@ -1010,11 +1031,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( } Expression::ConditionalExpression(conditional) => { if is_same_expression(&conditional.consequent, &conditional.alternate) { - projection.extract::( + projection.extract( inputs, name, &mut conditional.consequent, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -1025,11 +1046,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( condition: conditional.test.clone_in(ast_builder.allocator()), consequent: Some(Box::new(ExtractStyleProp::StaticArray( projection - .extract::( + .extract( inputs, name, &mut conditional.consequent, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -1037,11 +1058,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( ))), alternate: Some(Box::new(ExtractStyleProp::StaticArray( projection - .extract::( + .extract( inputs, name, &mut conditional.alternate, - (level, selector), + (level, selector, locate), literal_handling, prepare, ) @@ -1071,11 +1092,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( ObjectPropertyKind::SpreadProperty(spread) => { props.extend( projection - .extract::( + .extract( inputs, None, &mut spread.argument, - (level, &selector), + (level, &selector, locate), literal_handling, prepare, ) @@ -1112,11 +1133,11 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( .then(|| o.value.clone_in_with_semantic_ids(ast_builder.allocator())); props.extend( projection - .extract::( + .extract( inputs, Some(name), sibling.as_mut().unwrap_or(&mut o.value), - (level, &selector), + (level, &selector, locate), literal_handling, prepare, ) @@ -1170,7 +1191,7 @@ pub(super) fn extract_projected<'a, const LOCATE: bool>( }, } }; - if LOCATE { + if locate { for style in &mut result.styles { locate_dynamic(style, offset); } @@ -1376,23 +1397,23 @@ impl From> for Nested { } } -fn extract_under_key<'a, const LOCATE: bool>( +fn extract_under_key<'a>( inputs: StyleInputs<'_, 'a>, (key, offset): (&str, u32), expression: &mut Expression<'a>, - (level, selector): (u8, &Option), + (level, selector, locate): (u8, &Option, bool), literal_handling: LiteralHandling, projection: &mut super::style_order_projection::Projection<'a>, - prepare: &mut impl FnMut(&mut Expression<'a>), + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> Vec> { match nest_selectors_key(selector.as_ref(), key) { Nested::Under(nested) => { projection - .extract::( + .extract( inputs, None, expression, - (level, &Some(nested)), + (level, &Some(nested), locate), literal_handling, prepare, ) @@ -1512,7 +1533,7 @@ pub fn dynamic_style<'a>( expression: &mut Expression<'a>, level: u8, selector: &Option, - prepare: &mut impl FnMut(&mut Expression<'a>), + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> ExtractStyleProp<'a> { if let Some(map) = get_enum_property_map(name) { ExtractStyleProp::Enum { diff --git a/libs/extractor/src/extractor/extract_style_from_expression/direct_tests.rs b/libs/extractor/src/extractor/extract_style_from_expression/direct_tests.rs new file mode 100644 index 000000000..8a015aa82 --- /dev/null +++ b/libs/extractor/src/extractor/extract_style_from_expression/direct_tests.rs @@ -0,0 +1,170 @@ +use super::*; +use oxc_allocator::Allocator; +use oxc_ast::ast::Statement; +use oxc_parser::Parser; +use oxc_span::SourceType; +use rstest::rstest; + +#[test] +fn root_styles_when_dom_props_are_present_extract_only_styles_and_keep_dom_values() { + let allocator = Allocator::default(); + let ast = AstBuilder::new(&allocator); + let mut expression = Parser::new( + &allocator, + "({color:'red', id:readId(), 'data-label':'kept'})", + SourceType::tsx(), + ) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + + let result = extract_style_from_expression( + (&ast).into(), + None, + &mut expression, + 0, + &None, + LiteralHandling::ExpandResponsiveThemeToken, + ); + + let values: Vec<_> = result + .styles + .iter() + .flat_map(ExtractStyleProp::extract) + .collect(); + assert!( + matches!(values.as_slice(), [ExtractStyleValue::Static(value)] + if value.property() == "color" && value.value() == "red") + ); + let remaining = expression_to_code(&expression); + assert_eq!( + evaluate( + &format!("JSON.stringify({})", remaining.trim_end_matches(';')), + "let calls=0; const readId=()=>{if(++calls!==1)throw Error('repeated'); return 'identity';};" + ), + r#"{"id":"identity","data-label":"kept"}"# + ); +} + +fn styles(source: &str, name: Option<&str>) -> (Vec, Vec) { + let allocator = Allocator::default(); + let ast = AstBuilder::new(&allocator); + let mut parsed = Parser::new(&allocator, source, SourceType::tsx()).parse(); + assert_eq!(parsed.diagnostics.len(), 0, "{source}"); + let Statement::ExpressionStatement(statement) = &mut parsed.program.body[0] else { + panic!("expression required") + }; + let result = extract_style_from_expression( + (&ast).into(), + name, + &mut statement.expression, + 0, + &name.is_none().then(|| StyleSelector::from("hover")), + LiteralHandling::ExpandResponsiveThemeToken, + ); + let errors = result + .styles + .iter() + .filter_map(|style| match style { + ExtractStyleProp::Unreadable { code, .. } => Some(code.clone()), + _ => None, + }) + .collect(); + ( + result + .styles + .into_iter() + .flat_map(ExtractStyleProp::into_extract) + .collect(), + errors, + ) +} + +#[rstest] +#[case("['red','blue'][-1]", &[])] +#[case("['red','blue'][1]", &["blue"])] +#[case("['red','blue'][0.5]", &[])] +#[case("['red',,'blue'][1]", &[])] +#[case("({a:'red',a:'blue'})['a']", &["blue"])] +#[case("({a:'red'})['missing']", &[])] +#[case("({a:'red',...rest,a:'green'})['a']", &["green"])] +#[case("null ?? 'red'", &["red"])] +fn literal_selection_when_the_selected_entry_is_known( + #[case] source: &str, + #[case] expected: &[&str], +) { + let (actual, errors) = styles(source, Some("color")); + let values: Vec<_> = actual + .iter() + .filter_map(|style| match style { + ExtractStyleValue::Static(style) => Some(style.value()), + _ => None, + }) + .collect(); + assert_eq!(values, expected, "{source}"); + assert_eq!(errors, Vec::::new()); +} + +#[rstest] +#[case("['red',...rest][1]", "const rest = ['blue'];")] +#[case("({a:'red',...rest})['a']", "const rest = {a:'blue'};")] +fn literal_selection_when_a_spread_can_replace_the_entry_is_dynamic( + #[case] source: &str, + #[case] setup: &str, +) { + let (actual, errors) = styles(source, Some("color")); + let [ExtractStyleValue::Dynamic(style)] = actual.as_slice() else { + panic!("dynamic style required: {actual:?}") + }; + assert_eq!(evaluate(style.identifier(), setup), "blue"); + assert_eq!(errors, Vec::::new()); +} + +#[test] +fn array_selection_when_the_key_is_runtime_keeps_known_prefix_and_spread() { + let (actual, errors) = styles("['red',...rest][key]", Some("color")); + assert_eq!(actual.len(), 2); + assert!(actual.iter().any(|style| matches!(style, + ExtractStyleValue::Static(style) if style.value() == "red"))); + assert!(actual.iter().any(|style| matches!(style, + ExtractStyleValue::Dynamic(style) if style.identifier().contains("...rest") && style.identifier().contains("key")))); + assert_eq!(errors, Vec::::new()); +} + +#[rstest] +#[case("`${runtime}`")] +#[case("source[key]")] +fn selector_selection_when_the_whole_shape_is_opaque_is_unreadable(#[case] source: &str) { + let (actual, errors) = styles(source, None); + assert_eq!(actual, vec![]); + assert_eq!(errors.len(), 1); + assert!(errors[0].contains(source)); +} + +#[test] +fn sequence_when_written_into_a_dynamic_style_keeps_its_parentheses() { + let (actual, errors) = styles("(first(), second())", Some("color")); + let [ExtractStyleValue::Dynamic(style)] = actual.as_slice() else { + panic!("dynamic style required: {actual:?}") + }; + assert_eq!( + evaluate( + style.identifier(), + "let trace=''; const first=()=>{trace+='1';}; const second=()=>{trace+='2';return trace;};" + ), + "12" + ); + assert_eq!(errors, Vec::::new()); +} + +fn evaluate(expression: &str, setup: &str) -> String { + let script = + format!("(()=>{{{setup} const style={{value:{expression}}}; return style.value;}})()"); + let mut context = boa_engine::Context::default(); + let value = context + .eval(boa_engine::Source::from_bytes(script.as_bytes())) + .unwrap_or_else(|error| panic!("{error}: {script}")); + value + .to_string(&mut context) + .unwrap_or_else(|error| panic!("{error}")) + .to_std_string_escaped() +} diff --git a/libs/extractor/src/extractor/extract_style_from_member_expression.rs b/libs/extractor/src/extractor/extract_style_from_member_expression.rs index 4d71f4128..0674efde0 100644 --- a/libs/extractor/src/extractor/extract_style_from_member_expression.rs +++ b/libs/extractor/src/extractor/extract_style_from_member_expression.rs @@ -4,7 +4,7 @@ use crate::{ extractor::{ ExtractResult, extract_style_from_expression::{ - LiteralHandling, dynamic_style, extract_with_policy, locate_dynamic, + LiteralHandling, dynamic_style, extract_with_location, locate_dynamic, }, }, utils::{ @@ -21,13 +21,12 @@ use oxc_ast::{ use oxc_span::SPAN; use std::collections::BTreeMap; -pub(super) fn extract_member<'a, const LOCATE: bool>( +pub(super) fn extract_member<'a>( inputs: StyleInputs<'_, 'a>, name: Option<&str>, mem: &mut ComputedMemberExpression<'a>, - level: u8, - selector: &Option, - prepare: &mut impl FnMut(&mut Expression<'a>), + (level, selector, locate): (u8, &Option, bool), + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> ExtractResult<'a> { let ast_builder = inputs.ast; let mem_expression = &mem @@ -68,24 +67,24 @@ pub(super) fn extract_member<'a, const LOCATE: bool>( mem.object .clone_in_with_semantic_ids(ast_builder.allocator()) }); - let runtime = |whole: &Expression<'a>, offset: u32, prepare: &mut _| { - let mut member = Expression::ComputedMemberExpression(ComputedMemberExpression::boxed( - SPAN, - whole.clone_in_with_semantic_ids(ast_builder.allocator()), - mem_expression.clone_in_with_semantic_ids(ast_builder.allocator()), - false, - ast_builder, - )); - runtime_member::( - ast_builder, - name, - &mut member, - offset, - level, - selector, - prepare, - ) - }; + let runtime = + |whole: &Expression<'a>, offset: u32, prepare: &mut dyn FnMut(&mut Expression<'a>)| { + let mut member = Expression::ComputedMemberExpression(ComputedMemberExpression::boxed( + SPAN, + whole.clone_in_with_semantic_ids(ast_builder.allocator()), + mem_expression.clone_in_with_semantic_ids(ast_builder.allocator()), + false, + ast_builder, + )); + runtime_member( + ast_builder, + name, + &mut member, + offset, + (level, selector, locate), + prepare, + ) + }; if let Expression::ArrayExpression(array) = &mut mem.object && !array.elements.is_empty() @@ -103,12 +102,11 @@ pub(super) fn extract_member<'a, const LOCATE: bool>( if Some(idx) == selected_index && let Some(p) = p.as_expression_mut() { - return extract_with_policy::( + return extract_with_location( inputs, name, p, - level, - selector, + (level, selector, locate), LiteralHandling::ExpandResponsiveThemeToken, prepare, ); @@ -136,12 +134,11 @@ pub(super) fn extract_member<'a, const LOCATE: bool>( map.insert( idx.to_string(), Box::new(ExtractStyleProp::StaticArray( - extract_with_policy::( + extract_with_location( inputs, name, p, - level, - selector, + (level, selector, locate), LiteralHandling::ExpandResponsiveThemeToken, prepare, ) @@ -180,12 +177,11 @@ pub(super) fn extract_member<'a, const LOCATE: bool>( && get_str_by_property_key(&o.key).as_deref() == Some(k.as_ref()) { return ExtractResult { - styles: extract_with_policy::( + styles: extract_with_location( inputs, name, &mut o.value, - level, - selector, + (level, selector, locate), LiteralHandling::ExpandResponsiveThemeToken, prepare, ) @@ -204,12 +200,11 @@ pub(super) fn extract_member<'a, const LOCATE: bool>( map.insert( property_name, Box::new(ExtractStyleProp::StaticArray( - extract_with_policy::( + extract_with_location( inputs, name, &mut o.value, - level, - selector, + (level, selector, locate), LiteralHandling::ExpandResponsiveThemeToken, prepare, ) @@ -237,14 +232,13 @@ pub(super) fn extract_member<'a, const LOCATE: bool>( /// `object[key]` known only at runtime: a CSS variable for a property, and /// under a selector, which takes styles, what the build cannot read -fn runtime_member<'a, const LOCATE: bool>( +fn runtime_member<'a>( ast_builder: &AstBuilder<'a>, name: Option<&str>, member: &mut Expression<'a>, offset: u32, - level: u8, - selector: &Option, - prepare: &mut impl FnMut(&mut Expression<'a>), + (level, selector, locate): (u8, &Option, bool), + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> ExtractStyleProp<'a> { let mut style = match name { Some(name) => dynamic_style(ast_builder, name, member, level, selector, prepare), @@ -255,7 +249,7 @@ fn runtime_member<'a, const LOCATE: bool>( requirement: None, }, }; - if LOCATE { + if locate { locate_dynamic(&mut style, offset); } style diff --git a/libs/extractor/src/extractor/extract_style_from_styled.rs b/libs/extractor/src/extractor/extract_style_from_styled.rs index 2a121ad0e..db5274a63 100644 --- a/libs/extractor/src/extractor/extract_style_from_styled.rs +++ b/libs/extractor/src/extractor/extract_style_from_styled.rs @@ -99,6 +99,7 @@ struct Base<'a> { /// renders in its place: what it renders, its classes and styles, and its /// attrs, as the extension applies them before its own pub struct StyledDefinition<'a> { + pub(crate) takes_styles: bool, name: String, target: Option>, bound: Option>, @@ -238,6 +239,7 @@ impl<'a> StyledDefinition<'a> { } let allocator = builder.allocator(); let mut inherited = Self { + takes_styles: self.takes_styles, name: self.name.clone(), target: self.target.as_ref().map(|value| value.clone_in(allocator)), composition_styles: self @@ -322,13 +324,18 @@ impl<'a> StyledDefinition<'a> { } impl StyledDefinition<'_> { + /// Whether the styles and attrs of this component read the prop `name` + #[must_use] + pub fn reads_prop(&self, name: &str) -> bool { + self.reads.whole || self.reads.names.iter().any(|read| read == name) + } + /// Whether an element using this component keeps passing the prop `name`: /// what its styles read, what it passes on, and what React or the /// component itself takes #[must_use] pub fn takes(&self, name: &str) -> bool { - self.reads.whole - || self.reads.names.iter().any(|read| read == name) + self.reads_prop(name) || matches!( name, "className" | "style" | "as" | "forwardedAs" | "key" | "ref" | "children" @@ -399,6 +406,7 @@ impl<'a> StyledDefinition<'a> { #[must_use] pub fn clone_in<'b>(&self, allocator: &'b oxc_allocator::Allocator) -> StyledDefinition<'b> { StyledDefinition { + takes_styles: self.takes_styles, name: self.name.clone(), composition_styles: self .composition_styles @@ -637,6 +645,7 @@ impl<'a> Base<'a> { let allocator = ast_builder.allocator(); let (reads, forward) = props; StyledDefinition { + takes_styles: false, name: self.name.clone(), target: self .target @@ -1704,11 +1713,7 @@ pub fn forward_ref<'a>(ast_builder: &AstBuilder<'a>, component: Expression<'a>) "ref", identifier(ast_builder, "__devupRef"), ); - let body = wrap_direct_call( - ast_builder, - &Expression::new_parenthesized_expression(SPAN, component, ast_builder), - &[props], - ); + let body = super::styled_inline::body(ast_builder, component, props); let render = Expression::new_arrow_function_expression( SPAN, false, @@ -1724,7 +1729,7 @@ pub fn forward_ref<'a>(ast_builder: &AstBuilder<'a>, component: Expression<'a>) ast_builder, ), None::>>, - body.into(), + body, ast_builder, ); wrap_direct_call( diff --git a/libs/extractor/src/extractor/mod.rs b/libs/extractor/src/extractor/mod.rs index d34752a21..60e9cf3ce 100644 --- a/libs/extractor/src/extractor/mod.rs +++ b/libs/extractor/src/extractor/mod.rs @@ -16,6 +16,7 @@ pub(crate) mod style_inputs; pub(crate) mod style_order_projection; pub(super) mod styled_capability; pub(super) mod styled_css_slot; +mod styled_inline; pub(super) mod styled_jsx; mod styled_record; pub(super) mod styled_record_evaluation; diff --git a/libs/extractor/src/extractor/props_rule_choice_tests.rs b/libs/extractor/src/extractor/props_rule_choice_tests.rs index d59c4bad6..923690613 100644 --- a/libs/extractor/src/extractor/props_rule_choice_tests.rs +++ b/libs/extractor/src/extractor/props_rule_choice_tests.rs @@ -76,7 +76,7 @@ fn base_atom_survives_when_logical_branch_is_missing() { let rules = "const Base = styled('div')({ color: 'red' }); const Choice = styled(Base)(p => p.on && { color: 'blue' });"; let output = compile(rules); assert_eq!(values(&output, "color"), ["blue", "red"]); - assert!(output.code.contains("p.on")); + assert!(output.code.contains(".on")); assert!(!output.code.contains("styled(")); for (on, color) in [(true, "blue"), (false, "red")] { assert_eq!( @@ -135,8 +135,8 @@ fn dynamic_leaf_uses_variable_when_rule_branch_is_selected() { assert!(output.styles.iter().any( |style| matches!(style, ExtractStyleValue::Dynamic(style) if style.property() == "width") )); - assert!(output.code.contains("p.width")); - assert!(output.code.contains("p.on")); + assert!(output.code.contains(".width")); + assert!(output.code.contains(".on")); assert!(output.code.contains("--")); assert!(!output.code.contains("styled(")); assert_eq!( @@ -202,7 +202,7 @@ fn pure_comparison_is_supported_when_rule_choice_reads_props() { let rules = "const Choice = styled('div')(({ on, count }) => on && count > 2 ? { color: 'blue' } : { color: 'red' });"; let output = compile(rules); assert_eq!(values(&output, "color"), ["blue", "red"]); - assert!(output.code.contains("count > 2")); + assert!(output.code.contains("> 2")); } #[test] @@ -231,12 +231,12 @@ fn invalid_condition_prop_is_withheld_when_rules_are_lowered() { let rules = "const Choice = styled('div')(p => p.on && { color: p.title });"; let output = compile(rules); assert!( - output.code.contains("\"on\": __devupOmit"), + output.code.contains("\"on\": __devupRecord"), "{}", output.code ); - assert!(!output.code.contains("\"title\": __devupOmit")); - assert!(output.code.contains("p.title")); + assert!(!output.code.contains("\"title\": __devupRecord")); + assert!(output.code.contains(".title")); } #[test] @@ -244,10 +244,10 @@ fn invalid_condition_prop_is_withheld_when_rules_are_lowered() { fn invalid_value_prop_is_withheld_when_whole_rule_function_is_lowered() { let rules = "const Choice = styled('div')(p => ({ color: p.tone, opacity: p.tabIndex, cursor: p.onClick }));"; let output = compile(rules); - assert!(output.code.contains("\"tone\": __devupOmit")); - assert!(!output.code.contains("\"tabIndex\": __devupOmit")); - assert!(!output.code.contains("\"onClick\": __devupOmit")); - assert!(output.code.contains("p.tone")); + assert!(output.code.contains("\"tone\": __devupRecord")); + assert!(!output.code.contains("\"tabIndex\": __devupRecord")); + assert!(!output.code.contains("\"onClick\": __devupRecord")); + assert!(output.code.contains(".tone")); } #[test] @@ -256,13 +256,13 @@ fn inherited_reads_keep_condition_prop_when_extension_is_used() { let rules = "const Base = styled('div')(p => p.on ? { color: 'blue' } : { color: 'red' }); const Choice = styled(Base)({ opacity: 0.5 }); export const Example = ;"; let output = compile(rules); assert_eq!( - output.code.matches("\"on\": __devupOmit").count(), + output.code.matches("\"on\": __devupRecord").count(), 2, "{}", output.code ); assert!(output.code.contains("on={enabled}")); - assert!(!output.code.contains("\"title\": __devupOmit")); + assert!(!output.code.contains("\"title\": __devupRecord")); } #[test] @@ -270,7 +270,7 @@ fn inherited_reads_keep_condition_prop_when_extension_is_used() { fn condition_flag_is_forwarded_when_explicit_policy_allows_it() { let rules = "const Choice = styled('div').withConfig({ shouldForwardProp: name => name === 'on' })(p => p.on && { color: 'blue' });"; let output = compile(rules); - assert!(!output.code.contains("\"on\": __devupOmit")); + assert!(!output.code.contains("\"on\": __devupRecord")); } #[test] @@ -278,6 +278,6 @@ fn condition_flag_is_forwarded_when_explicit_policy_allows_it() { fn condition_flag_is_forwarded_when_styled_base_is_custom_component() { let rules = "const Custom = props =>
; const Choice = styled(Custom)(p => p.on && { color: 'blue' });"; let output = compile(rules); - assert!(!output.code.contains("\"on\": __devupOmit")); + assert!(!output.code.contains("\"on\": __devupRecord")); assert!(output.code.contains("DevupAs = Custom")); } diff --git a/libs/extractor/src/extractor/style_order_projection.rs b/libs/extractor/src/extractor/style_order_projection.rs index 3b13d4954..55a7af08d 100644 --- a/libs/extractor/src/extractor/style_order_projection.rs +++ b/libs/extractor/src/extractor/style_order_projection.rs @@ -82,21 +82,21 @@ impl<'a> Projection<'a> { } } - pub(super) fn extract( + pub(super) fn extract( &mut self, inputs: StyleInputs<'_, 'a>, name: Option<&str>, expression: &mut Expression<'a>, - coordinates: (u8, &Option), + coordinates: (u8, &Option, bool), handling: LiteralHandling, - prepare: &mut impl FnMut(&mut Expression<'a>), + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> ExtractResult<'a> { let mut child = if self.children.is_some() { Self::enabled() } else { Self::default() }; - let result = extract_style_from_expression::extract_projected::( + let result = extract_style_from_expression::extract_projected( inputs, name, expression, @@ -221,14 +221,14 @@ pub(crate) fn extract_with_order_policy<'a, const LOCATE: bool>( level: u8, selector: &Option, handling: LiteralHandling, - prepare: &mut impl FnMut(&mut Expression<'a>), + prepare: &mut dyn FnMut(&mut Expression<'a>), ) -> (ExtractResult<'a>, AuthoredStyles<'a>) { let mut projection = Projection::enabled(); - let result = extract_style_from_expression::extract_projected::( + let result = extract_style_from_expression::extract_projected( inputs, name, expression, - (level, selector), + (level, selector, LOCATE), handling, &mut projection, prepare, diff --git a/libs/extractor/src/extractor/styled_capture_statements.rs b/libs/extractor/src/extractor/styled_capture_statements.rs index 7db429794..9a6e06448 100644 --- a/libs/extractor/src/extractor/styled_capture_statements.rs +++ b/libs/extractor/src/extractor/styled_capture_statements.rs @@ -16,23 +16,7 @@ pub(crate) fn capture_statements<'a>( let mut statements = Vec::with_capacity_in(bindings.len() + 1, builder); for (name, value) in bindings { let name = Ident::from_in(name.as_str(), builder.allocator()); - let value = Expression::new_sequence_expression( - SPAN, - Vec::from_array_in( - [ - Expression::new_numeric_literal( - SPAN, - 0.0, - None, - oxc_syntax::number::NumberBase::Decimal, - builder, - ), - value, - ], - builder, - ), - builder, - ); + let value = crate::utils::unbound_value(builder, value); let declaration = VariableDeclarator::new( SPAN, BindingPattern::new_binding_identifier(SPAN, name, builder), diff --git a/libs/extractor/src/extractor/styled_css_slot.rs b/libs/extractor/src/extractor/styled_css_slot.rs index d6aa7c827..058130cca 100644 --- a/libs/extractor/src/extractor/styled_css_slot.rs +++ b/libs/extractor/src/extractor/styled_css_slot.rs @@ -1,23 +1,17 @@ use oxc_allocator::{CloneIn, FromIn, GetAllocator}; use oxc_ast::{ ast::{ - BindingIdentifier, ComputedMemberExpression, Expression, IdentifierName, - IdentifierReference, JSXAttributeItem, JSXAttributeName, JSXAttributeValue, JSXIdentifier, + Expression, IdentifierName, JSXAttributeItem, JSXAttributeName, JSXAttributeValue, ObjectPropertyKind, Program, PropertyKey, PropertyKind, Str, }, builder::AstBuilder, }; -use oxc_ast_visit::{ - Visit, - walk::{walk_computed_member_expression, walk_property_key}, -}; use oxc_span::SPAN; use oxc_syntax::operator::LogicalOperator; use rustc_hash::FxHashSet; use super::styled_capability::StyledCapability; use super::styled_jsx::StyledJsx; -use crate::utils::unwrap_syntax_only; pub(crate) struct StyledContext<'s> { pub filename: &'s str, @@ -34,61 +28,6 @@ pub(crate) enum CssPropLowering { #[derive(Clone)] pub(crate) struct StyledCssSlot(String); -#[derive(Default)] -struct Names(FxHashSet); - -fn static_key_name<'a>(expression: &Expression<'a>) -> Option<&'a str> { - match unwrap_syntax_only(expression) { - Expression::StringLiteral(literal) => literal.value.as_str(), - Expression::TemplateLiteral(template) => template.single_quasi()?.as_str(), - Expression::TSTypeAssertion(assertion) => static_key_name(&assertion.expression), - _ => None, - } -} - -impl<'a> Visit<'a> for Names { - fn visit_binding_identifier(&mut self, it: &BindingIdentifier<'a>) { - self.0.insert(it.name.to_string()); - } - - fn visit_identifier_reference(&mut self, it: &IdentifierReference<'a>) { - self.0.insert(it.name.to_string()); - } - - fn visit_identifier_name(&mut self, it: &IdentifierName<'a>) { - self.0.insert(it.name.to_string()); - } - - fn visit_jsx_identifier(&mut self, it: &JSXIdentifier<'a>) { - self.0.insert(it.name.to_string()); - } - - fn visit_property_key(&mut self, it: &PropertyKey<'a>) { - if let Some(name) = it - .as_expression() - .and_then(static_key_name) - .map(str::to_string) - .or_else(|| { - it.static_name() - .and_then(oxc_ast::StaticPropertyName::into_cow_str) - .map(std::borrow::Cow::into_owned) - }) - { - self.0.insert(name); - } - walk_property_key(self, it); - } - - fn visit_computed_member_expression(&mut self, it: &ComputedMemberExpression<'a>) { - if let Some(name) = - static_key_name(&it.expression).or_else(|| it.static_property_name()?.as_str()) - { - self.0.insert(name.to_string()); - } - walk_computed_member_expression(self, it); - } -} - impl StyledCssSlot { /// Reserve a private prop before extraction can remove authored names or keys. pub(crate) fn reserve(program: &Program<'_>) -> Self { @@ -96,12 +35,12 @@ impl StyledCssSlot { } pub(crate) fn reserve_named(program: &Program<'_>, prefix: &str) -> Self { - let mut names = Names::default(); - names.visit_program(program); + let mut names = FxHashSet::default(); + crate::utils::ReservedNames::CssSlot(&mut names).reserve(program); let mut suffix = 0; loop { let name = format!("{prefix}{suffix}"); - if !names.0.contains(&name) { + if !names.contains(&name) { return Self(name); } suffix += 1; diff --git a/libs/extractor/src/extractor/styled_direct_rules.rs b/libs/extractor/src/extractor/styled_direct_rules.rs index 53505845b..cc6ed2586 100644 --- a/libs/extractor/src/extractor/styled_direct_rules.rs +++ b/libs/extractor/src/extractor/styled_direct_rules.rs @@ -1,6 +1,6 @@ use oxc_allocator::{CloneIn, GetAllocator}; use oxc_ast::{ - ast::{Expression, ObjectExpression}, + ast::{Expression, FormalParameters, ObjectExpression}, builder::AstBuilder, }; use oxc_ast_visit::{VisitMut, walk_mut}; @@ -13,6 +13,7 @@ pub(super) struct Direct<'b, 'p, 'a> { pub name: &'p str, pub scope: Expression<'a>, pub next: usize, + pub whole: Option<&'p FormalParameters<'a>>, } impl<'a> Captures<'a> for Direct<'_, '_, 'a> { @@ -26,9 +27,20 @@ impl<'a> Captures<'a> for Direct<'_, '_, 'a> { source.clone_in_with_semantic_ids(builder.allocator()), builder, )); - let Some(mut prepared) = - crate::extractor::styled_record::prepare(builder, &source, &self.scope) - else { + let source = if let Some(params) = self.whole { + super::discarded::mapped_rules(builder, params, &source)? + } else { + source + }; + let prepare = if self.whole.is_some() { + crate::extractor::styled_record::prepare_whole + } else { + crate::extractor::styled_record::prepare + }; + let Some(mut prepared) = prepare(builder, &source, &self.scope) else { + if self.whole.is_some() { + return Err(PropsRulesError::Rules); + } let evaluated = source.clone_in_with_semantic_ids(builder.allocator()); return Ok((source, vec![evaluated])); }; @@ -47,6 +59,7 @@ impl<'a> Captures<'a> for Direct<'_, '_, 'a> { names, }; slots.visit_expression(&mut prepared.rules); + slots.vector = local; let values = prepared .bindings .into_iter() diff --git a/libs/extractor/src/extractor/styled_direct_rules_tests.rs b/libs/extractor/src/extractor/styled_direct_rules_tests.rs index 38e12e83e..c3e6cabfb 100644 --- a/libs/extractor/src/extractor/styled_direct_rules_tests.rs +++ b/libs/extractor/src/extractor/styled_direct_rules_tests.rs @@ -30,6 +30,7 @@ fn discarded_rules_when_cloned_preserve_the_original_semantic_reference() { name: "captures", scope: statement.expression.clone_in_with_semantic_ids(&arena), next: 1, + whole: None, }; // When: the direct-capture contract retains an object for evaluation only. let Ok(cloned) = direct.discarded_object(&statement.expression) else { diff --git a/libs/extractor/src/extractor/styled_inline.rs b/libs/extractor/src/extractor/styled_inline.rs new file mode 100644 index 000000000..fd3fec665 --- /dev/null +++ b/libs/extractor/src/extractor/styled_inline.rs @@ -0,0 +1,592 @@ +//! Remove intermediate calls from compiler-owned styled renderers. Assignments +//! stay in their original expressions; tail calls retain their lexical blocks. + +use super::styled_record_evaluation::Evaluations; +use crate::utils::{readable_code, rewrite_expression, unwrap_syntax_only, unwrap_syntax_only_mut}; +use oxc_allocator::{CloneIn, FromIn, GetAllocator, TakeIn, Vec}; +use oxc_ast::{ + ast::{ + Argument, ArrayExpressionElement, ArrowFunctionBody, AssignmentTarget, + AssignmentTargetMaybeDefault, AssignmentTargetProperty, AssignmentTargetRest, + BindingPattern, Expression, Ident, JSXElement, JSXElementName, ObjectPropertyKind, Program, + Statement, Str, VariableDeclarationKind, VariableDeclarator, + }, + builder::AstBuilder, +}; +use oxc_span::{SPAN, SourceType}; +use oxc_syntax::operator::AssignmentOperator; + +#[cfg(test)] +#[path = "styled_inline_tests.rs"] +mod tests; + +struct Render<'b, 'a> { + ast: &'b AstBuilder<'a>, + names: Evaluations<'b, 'a>, + slots: std::vec::Vec, +} + +fn binding<'a>(ast: &AstBuilder<'a>, name: &str) -> BindingPattern<'a> { + BindingPattern::new_binding_identifier(SPAN, Ident::from_in(name, ast.allocator()), ast) +} + +fn read<'a>(ast: &AstBuilder<'a>, name: &str) -> Expression<'a> { + Expression::new_identifier(SPAN, Ident::from_in(name, ast.allocator()), ast) +} + +fn target<'a>(ast: &AstBuilder<'a>, name: &str) -> AssignmentTarget<'a> { + AssignmentTarget::new_assignment_target_identifier( + SPAN, + Ident::from_in(name, ast.allocator()), + ast, + ) +} + +fn declaration<'a>( + ast: &AstBuilder<'a>, + pattern: BindingPattern<'a>, + value: Option>, +) -> Statement<'a> { + Statement::new_variable_declaration( + SPAN, + VariableDeclarationKind::Let, + Vec::from_array_in( + [VariableDeclarator::new( + SPAN, pattern, None, value, false, ast, + )], + ast, + ), + false, + ast, + ) +} + +fn assignment<'a>( + ast: &AstBuilder<'a>, + left: AssignmentTarget<'a>, + value: Expression<'a>, +) -> Expression<'a> { + // An argument or a returned anonymous definition has no inferred temporary name. + let value = if matches!( + unwrap_syntax_only(&value), + Expression::ArrowFunctionExpression(_) + | Expression::FunctionExpression(_) + | Expression::ClassExpression(_) + ) { + crate::utils::unbound_value(ast, value) + } else { + value + }; + Expression::new_assignment_expression(SPAN, AssignmentOperator::Assign, left, value, ast) +} + +/// The ref adapter is the actual render function. Its intermediate component +/// calls do not need independent function objects or function-local parameters. +pub(super) fn body<'a>( + ast: &AstBuilder<'a>, + component: Expression<'a>, + props: Expression<'a>, +) -> ArrowFunctionBody<'a> { + let mut source = readable_code(&component); + source.push(';'); + source.push_str(&readable_code(&props)); + let mut render = Render { + ast, + slots: std::vec::Vec::new(), + names: Evaluations::new(ast, source), + }; + let mut component = component; + rewrite_expression(&mut component, &mut |value| { + if let Expression::Identifier(id) = value + && !oxc_syntax::identifier::is_identifier_name(id.name.as_str()) + && let Ok(mut parsed) = + oxc_parser::Parser::new(ast.allocator(), id.name.as_str(), SourceType::tsx()) + .parse_expression() + { + crate::utils::clear_generated_spans(&mut parsed); + *value = parsed; + } + false + }); + let mut eval = false; + rewrite_expression(&mut component, &mut |value| { + eval |= matches!(value, Expression::CallExpression(call) if matches!(unwrap_syntax_only(&call.callee), Expression::Identifier(id) if id.name == "eval")); + false + }); + if !eval { + render.frames(&mut component); + } + let mut call = Expression::new_call_expression( + SPAN, + component, + None, + Vec::from_array_in([Argument::from(props)], ast), + false, + ast, + ); + if eval || !Render::tail_call(&call) { + return call.into(); + } + let mut statements = Vec::new_in(ast); + render.complete(&mut statements, call.take_in(ast), None); + ArrowFunctionBody::new_function_body(SPAN, Vec::new_in(ast), statements, ast) +} + +impl<'a> Render<'_, 'a> { + fn frames(&mut self, expression: &mut Expression<'a>) { + rewrite_expression(expression, &mut |value| match value { + Expression::ArrowFunctionExpression(arrow) => { + let mut slots = std::vec::Vec::new(); + let ast = self.ast; + let mut rewrite = |inner: &mut Expression<'a>| { + if matches!(inner, Expression::ArrowFunctionExpression(_)) { + self.frames(inner); + return true; + } + if matches!( + inner, + Expression::FunctionExpression(_) | Expression::ClassExpression(_) + ) { + return true; + } + if let Expression::CallExpression(call) = inner { + self.frames(&mut call.callee); + } + if let Some(replacement) = self.expression(inner, &mut slots) { + *inner = replacement; + } + false + }; + if let Some(body) = arrow.body.as_expression_mut() { + rewrite_expression(body, &mut rewrite); + } else if let ArrowFunctionBody::FunctionBody(body) = &mut arrow.body { + let mut program = Program::new( + SPAN, + SourceType::tsx(), + "", + Vec::new_in(ast), + None, + Vec::new_in(ast), + body.statements.take_in(ast), + ast, + ); + crate::utils::rewrite_program(&mut program, &mut rewrite); + body.statements = program.body; + } + if !slots.is_empty() { + let mut statements = Vec::new_in(self.ast); + for name in slots { + self.slots.push(name.clone()); + statements.push(declaration(self.ast, binding(self.ast, &name), None)); + } + let mut directives = Vec::new_in(self.ast); + match arrow.body.take_in(self.ast) { + ArrowFunctionBody::FunctionBody(mut body) => { + directives = body.directives.take_in(self.ast); + statements.append(&mut body.statements); + } + body => statements.push(Statement::new_return_statement( + SPAN, + Some(body.into_expression()), + self.ast, + )), + } + arrow.body = ArrowFunctionBody::new_function_body( + SPAN, directives, statements, self.ast, + ); + } + true + } + Expression::FunctionExpression(_) | Expression::ClassExpression(_) => true, + _ => false, + }); + } + + fn expression( + &mut self, + value: &mut Expression<'a>, + slots: &mut std::vec::Vec, + ) -> Option> { + let Expression::CallExpression(call) = unwrap_syntax_only_mut(value) else { + return None; + }; + let Expression::ArrowFunctionExpression(arrow) = unwrap_syntax_only(&call.callee) else { + return None; + }; + if arrow.r#async || arrow.params.rest.is_some() || call.optional { + return None; + } + let [argument] = call.arguments.as_slice() else { + return None; + }; + let argument = argument.as_expression()?; + let mut promoted = std::vec::Vec::new(); + let mut records = std::vec::Vec::new(); + let body = match &arrow.body { + ArrowFunctionBody::FunctionBody(body) => { + if !body.directives.is_empty() { + return None; + } + let (Statement::ReturnStatement(returned), declarations) = + body.statements.split_last()? + else { + return None; + }; + for statement in declarations { + let Statement::VariableDeclaration(declaration) = statement else { + return None; + }; + for declaration in &declaration.declarations { + let BindingPattern::BindingIdentifier(id) = &declaration.id else { + return None; + }; + if declaration.init.is_none() + && self.slots.iter().any(|name| name == id.name.as_str()) + { + promoted.push(id.name.to_string()); + } else if let Some(Expression::ArrayExpression(array)) = &declaration.init + && array.elements.iter().all(|element| { + matches!(element, ArrayExpressionElement::StringLiteral(_)) + }) + { + records.push(( + id.name.to_string(), + declaration.init.as_ref()?.clone_in(self.ast.allocator()), + )); + } else { + return None; + } + } + } + returned.argument.as_ref()? + } + body => body.as_expression()?, + }; + let mut body = body.clone_in(self.ast.allocator()); + if !crate::utils::capture_elision::can_transport(&mut body, &records) { + return None; + } + if !records.is_empty() { + let mut prefix = Vec::new_in(self.ast); + for (old, value) in records { + let name = self.names.fresh_name(); + if !self.rename(&mut body, &old, &name) { + return None; + } + prefix.push(assignment(self.ast, target(self.ast, &name), value)); + promoted.push(name); + } + prefix.push(body); + body = Expression::new_sequence_expression(SPAN, prefix, self.ast); + } + if arrow.params.items.is_empty() { + slots.extend(promoted); + return Some(Expression::new_sequence_expression( + SPAN, + Vec::from_array_in([argument.clone_in(self.ast.allocator()), body], self.ast), + self.ast, + )); + } + let [parameter] = arrow.params.items.as_slice() else { + return None; + }; + if parameter.initializer.is_some() { + return None; + } + if let BindingPattern::BindingIdentifier(id) = ¶meter.pattern { + let old = id.name.to_string(); + let mut values = vec![(old.clone(), argument.clone_in(self.ast.allocator()))]; + crate::utils::capture_elision::inline(self.ast, &mut values, &mut body); + if values.is_empty() { + slots.extend(promoted); + // A call produces a value, never the member reference that a + // following call/delete/typeof could otherwise observe. + return Some( + if matches!( + unwrap_syntax_only(&body), + Expression::Identifier(_) + | Expression::StaticMemberExpression(_) + | Expression::ComputedMemberExpression(_) + | Expression::ChainExpression(_) + ) { + crate::utils::unbound_value(self.ast, body) + } else { + body + }, + ); + } + if !crate::utils::capture_elision::can_transport(&mut body, &values) { + return None; + } + let name = self.names.fresh_name(); + if !self.rename(&mut body, &old, &name) { + return None; + } + slots.push(name.clone()); + slots.extend(promoted); + let (_, argument) = values.pop()?; + return Some(Expression::new_sequence_expression( + SPAN, + Vec::from_array_in( + [ + assignment(self.ast, target(self.ast, &name), argument), + body, + ], + self.ast, + ), + self.ast, + )); + } + let mut names = std::vec::Vec::new(); + let pattern = self.pattern(¶meter.pattern, &mut names)?; + if !names + .iter() + .all(|(old, _)| crate::utils::capture_elision::can_transport_name(&mut body, old)) + { + return None; + } + for (old, name) in names { + if !self.rename(&mut body, &old, &name) { + return None; + } + slots.push(name); + } + slots.extend(promoted); + Some(Expression::new_sequence_expression( + SPAN, + Vec::from_array_in( + [ + assignment(self.ast, pattern, argument.clone_in(self.ast.allocator())), + body, + ], + self.ast, + ), + self.ast, + )) + } + + fn rename(&self, body: &mut Expression<'a>, old: &str, name: &str) -> bool { + let mut opaque_tag = false; + rewrite_expression(body, &mut |value| { + opaque_tag |= matches!(value, Expression::JSXElement(element) if !matches!(element.opening_element.name, JSXElementName::Identifier(_) | JSXElementName::IdentifierReference(_))); + false + }); + if opaque_tag { + return false; + } + rewrite_expression(body, &mut |value| { + if matches!(value, Expression::Identifier(id) if id.name == old) { + *value = read(self.ast, name); + } + if let Expression::ObjectExpression(object) = value { + for property in &mut object.properties { + if let ObjectPropertyKind::ObjectProperty(property) = property + && matches!(&property.value, Expression::Identifier(id) if id.name == old) + { + property.shorthand = false; + } + } + } + if let Expression::JSXElement(element) = value { + let JSXElement { + opening_element, + closing_element, + .. + } = &mut **element; + for tag in std::iter::once(&mut opening_element.name) + .chain(closing_element.iter_mut().map(|closing| &mut closing.name)) + { + match tag { + JSXElementName::Identifier(id) + if id.name == old + && !id + .name + .as_str() + .starts_with(|c: char| c.is_ascii_lowercase()) => + { + id.name = Str::from_in(name, self.ast.allocator()); + } + JSXElementName::IdentifierReference(id) if id.name == old => { + id.name = Ident::from_in(name, self.ast.allocator()); + } + _ => {} + } + } + } + false + }); + + true + } + + fn pattern( + &mut self, + pattern: &BindingPattern<'a>, + names: &mut std::vec::Vec<(String, String)>, + ) -> Option> { + Some(match pattern { + BindingPattern::BindingIdentifier(id) => { + let name = self.names.fresh_name(); + let result = target(self.ast, &name); + names.push((id.name.to_string(), name)); + result + } + BindingPattern::ObjectPattern(object) => { + let mut properties = Vec::new_in(self.ast); + for property in &object.properties { + if property.computed { + return None; + } + let value = self.pattern(&property.value, names)?; + properties.push( + AssignmentTargetProperty::new_assignment_target_property_property( + SPAN, + property.key.clone_in(self.ast.allocator()), + AssignmentTargetMaybeDefault::from(value), + false, + self.ast, + ), + ); + } + let rest = match &object.rest { + Some(rest) => Some(AssignmentTargetRest::boxed( + SPAN, + self.pattern(&rest.argument, names)?, + self.ast, + )), + None => None, + }; + AssignmentTarget::new_object_assignment_target(SPAN, properties, rest, self.ast) + } + BindingPattern::ArrayPattern(array) => { + let mut elements = Vec::new_in(self.ast); + for element in &array.elements { + elements.push(match element { + Some(element) => Some(AssignmentTargetMaybeDefault::from( + self.pattern(element, names)?, + )), + None => None, + }); + } + let rest = match &array.rest { + Some(rest) => Some(AssignmentTargetRest::boxed( + SPAN, + self.pattern(&rest.argument, names)?, + self.ast, + )), + None => None, + }; + AssignmentTarget::new_array_assignment_target(SPAN, elements, rest, self.ast) + } + BindingPattern::AssignmentPattern(_) => return None, + }) + } + + fn tail_call(value: &Expression<'a>) -> bool { + let Expression::CallExpression(call) = unwrap_syntax_only(value) else { + return false; + }; + let Expression::ArrowFunctionExpression(arrow) = unwrap_syntax_only(&call.callee) else { + return false; + }; + if call.optional + || arrow.r#async + || arrow.params.rest.is_some() + || arrow.params.items.len() != 1 + || call.arguments.len() != 1 + || !call.arguments[0].is_expression() + || arrow.params.items[0].initializer.is_some() + { + return false; + } + match &arrow.body { + ArrowFunctionBody::FunctionBody(body) => body.directives.is_empty() && matches!(body.statements.last(), Some(Statement::ReturnStatement(_))) + && body.statements.iter().take(body.statements.len().saturating_sub(1)).all(|statement| matches!(statement, Statement::VariableDeclaration(declaration) if declaration.kind != VariableDeclarationKind::Var)) + && match &arrow.params.items[0].pattern { + BindingPattern::ObjectPattern(_) => true, + BindingPattern::BindingIdentifier(id) => id.name.starts_with("__devup"), + _ => false, + }, + _ => true, + } + } + + fn complete( + &mut self, + statements: &mut Vec<'a, Statement<'a>>, + mut value: Expression<'a>, + destination: Option<&str>, + ) { + if Self::tail_call(&value) { + let Expression::CallExpression(mut call) = + unwrap_syntax_only_mut(&mut value).take_in(self.ast) + else { + unreachable!() + }; + let Expression::ArrowFunctionExpression(mut arrow) = + unwrap_syntax_only_mut(&mut call.callee).take_in(self.ast) + else { + unreachable!() + }; + let name = self.names.fresh_name(); + statements.push(declaration(self.ast, binding(self.ast, &name), None)); + self.complete( + statements, + call.arguments.remove(0).into_expression(), + Some(&name), + ); + let mut block = Vec::new_in(self.ast); + let parameter = declaration( + self.ast, + arrow.params.items.remove(0).pattern, + Some(read(self.ast, &name)), + ); + block.push(parameter); + let (mut body_statements, returned, separate_body) = match arrow.body.take_in(self.ast) + { + ArrowFunctionBody::FunctionBody(mut body) => { + let Some(Statement::ReturnStatement(mut returned)) = body.statements.pop() + else { + unreachable!() + }; + let returned = returned.argument.take().unwrap_or_else(|| { + Expression::new_unary_expression( + SPAN, + oxc_syntax::operator::UnaryOperator::Void, + Expression::new_numeric_literal( + SPAN, + 0.0, + None, + oxc_syntax::number::NumberBase::Decimal, + self.ast, + ), + self.ast, + ) + }); + (body.statements.take_in(self.ast), returned, true) + } + body => (Vec::new_in(self.ast), body.into_expression(), false), + }; + if separate_body { + self.complete(&mut body_statements, returned, destination); + block.push(Statement::new_block_statement( + SPAN, + body_statements, + self.ast, + )); + } else { + self.complete(&mut block, returned, destination); + } + statements.push(Statement::new_block_statement(SPAN, block, self.ast)); + } else { + statements.push(match destination { + None => Statement::new_return_statement(SPAN, Some(value), self.ast), + Some(name) => Statement::new_expression_statement( + SPAN, + assignment(self.ast, target(self.ast, name), value), + self.ast, + ), + }); + } + } +} diff --git a/libs/extractor/src/extractor/styled_inline_tests.rs b/libs/extractor/src/extractor/styled_inline_tests.rs new file mode 100644 index 000000000..7057599cb --- /dev/null +++ b/libs/extractor/src/extractor/styled_inline_tests.rs @@ -0,0 +1,222 @@ +use super::*; +use boa_engine::{Context, Source}; +use oxc_allocator::Allocator; +use rstest::rstest; + +fn parse<'a>(ast: &AstBuilder<'a>, code: &str) -> Expression<'a> { + oxc_parser::Parser::new( + ast.allocator(), + ast.allocator().alloc_str(code), + SourceType::tsx(), + ) + .parse_expression() + .unwrap_or_else(|errors| panic!("{code}: {errors:?}")) +} + +fn compiled<'a>(ast: &AstBuilder<'a>, component: Expression<'a>, input: Expression<'a>) -> String { + let mut arrow = parse(ast, "()=>0"); + let Expression::ArrowFunctionExpression(arrow) = &mut arrow else { + panic!("arrow fixture") + }; + arrow.body = body(ast, component, input); + readable_code(&Expression::ArrowFunctionExpression( + arrow.clone_in(ast.allocator()), + )) +} + +fn execute(render: &str) -> String { + let script = format!( + "const trace=[];const Component=()=>null;const h=(type,props,...children)=>({{type:typeof type==='function'?type.name:type,props,children}});const x=17;const __devupRecord0=29;const o={{tag:'bound',method(){{return this===o?'bound':'unbound';}}}};let flag=true;function input(){{trace.push('input');return {{get a(){{trace.push('a');return 3;}},get b(){{trace.push('b');return 5;}},theme:7,keep:11,method:o.method}};}}const render={render};let value;try{{value=render();if(typeof value==='function')value=[value.name,value()];}}catch(error){{value=String(error);}}JSON.stringify([value,trace]);" + ); + let script = crate::jsx_semantics_tests::whole::plain_script(&script); + Context::default() + .eval(Source::from_bytes(script.as_bytes())) + .unwrap_or_else(|error| panic!("{error}: {script}")) + .as_string() + .unwrap_or_else(|| panic!("JSON observation")) + .to_std_string_escaped() +} + +#[rstest] +#[case("__devupProps=>({a:__devupProps.a,b:__devupProps.b})")] +#[case("__devupProps=>((p)=>({a:p.a,b:p.b}))(__devupProps)")] +#[case("__devupProps=>((p)=>p.a)(__devupProps)")] +#[case("__devupProps=>((p)=>p)(__devupProps)")] +#[case("__devupProps=>[ ((p)=>({a:p.a,b:p.b}))(__devupProps), ((p)=>p.a)(__devupProps) ]")] +#[case("__devupProps=>(({theme:omitted,...dom})=>dom)(__devupProps)")] +#[case("__devupProps=>flag?(({a:omitted,...dom})=>dom)(__devupProps):null")] +#[case("__devupProps=>(({a:omitted,...dom})=>[dom,omitted])(__devupProps)")] +#[case("__devupProps=>(({a:omitted=4,...dom})=>dom)(__devupProps)")] +#[case("__devupProps=>(({[key()]:omitted,...dom})=>dom)(__devupProps)")] +#[case("__devupProps=>(({'a':omitted})=>omitted)(__devupProps)")] +#[case("__devupProps=>(([p])=>p)([__devupProps.a])")] +#[case("__devupProps=>((p=2)=>p)(undefined)")] +#[case("__devupProps=>((...p)=>p)(1)")] +#[case("__devupProps=>((p,q)=>[p,q])(__devupProps.a,__devupProps.b)")] +#[case("__devupProps=>((p)=>p)(...[__devupProps.a])")] +#[case("__devupProps=>((p)=>p)?.(__devupProps.a)")] +#[case("__devupProps=>((p)=>({a:p.a,b:p.b,method:p.method()}))(__devupProps)")] +#[case("__devupProps=>((p)=>p)(o.method)()")] +#[case("__devupProps=>delete ((p)=>p)(o.tag)")] +#[case("__devupProps=>typeof ((p)=>p)(missing)")] +#[case("__devupProps=>((p)=>p)(eval)('typeof __devupProps')")] +#[case("__devupProps=>({callback:((p)=>p)(()=>1)}).callback.name")] +#[case("__devupProps=>((p)=>p)(class { static { trace.push('class:'+this.name); } })")] +#[case("__devupProps=>((p)=>p)(function(){return 1;})")] +#[case("__devupProps=>((p)=>()=>p.a)(__devupProps)")] +#[case("__devupProps=>[1,2].map(value=>((p)=>()=>p)(value)).map(callback=>callback())")] +#[case("__devupProps=>[1,2].map(value=>((p)=>[p,p])(value))")] +#[case("__devupProps=>((p)=>p.a++ + p.a)(__devupProps)")] +#[case("__devupProps=>((p)=>({p}))(__devupProps.a)")] +#[case("__devupProps=>((p)=>({p,other:p}))(__devupProps.a)")] +#[case("__devupProps=>((p)=>

)(Component)")] +#[case("__devupProps=>((Tag)=>)(Component)")] +#[case("__devupProps=>((p)=>)({'Inner':Component})")] +#[case("__devupProps=>((p)=>function(){return 1;})(__devupProps.a)")] +#[case("__devupProps=>((p)=>class { static value=p.a; })(__devupProps)")] +#[case("__devupProps=>{const a=__devupProps.a;return ((p)=>[p,p])(a);}")] +#[case( + "__devupProps=>((__devupContext)=>((__devupContext)=>[__devupContext.a,__devupContext.b])(__devupContext))(__devupProps)" +)] +#[case( + "__devupProps=>{const value=__devupProps.a;return ((__devupContext)=>{const second=__devupContext.b;return [value,second];})(__devupProps);}" +)] +#[case("({a=x})=>{const x=2;return a;}")] +#[case("__devupProps=>(({missing=x})=>{const x=2;return missing;})({})")] +#[case("__devupProps=>{var x=2;return x;}")] +#[case("__devupProps=>{'use strict';return __devupProps.a;}")] +#[case("__devupProps=>{const value=__devupProps.a;return;}")] +#[case("__devupProps=>{trace.push('body');return __devupProps.a;}")] +#[case("__devupProps=>{if(flag)return 2;return 3;}")] +#[case("__devupProps=>eval('typeof __devupRecord1')")] +#[case("__devupProps=>((p)=>eval('p.a'))(__devupProps)")] +#[case("__devupProps=>__devupRecord0+__devupProps.a")] +#[case("__devupProps=>(()=>{const v=__devupProps.a;return v;})()")] +#[case("__devupProps=>((p)=>function(){return p.a;})(__devupProps)")] +#[case("__devupProps=>((p)=>p.a)(class {static a=2;})")] +#[case("__devupProps=>(async p=>p.a)(__devupProps)")] +#[case("async __devupProps=>((p)=>[p,p])(__devupProps.a)")] +#[case("__devupProps=>[ ((p)=>[(({a,...rest})=>rest)(p),p.a,p.b])(__devupProps) ]")] +#[case("__devupProps=>[ ((p)=>(({a,...rest})=>[rest,p.b])(p))(__devupProps) ]")] +#[case("__devupProps=>((p)=>{const a=p.a;return ((q)=>[a,q,q])(p.b);})(__devupProps)")] +#[case("__devupProps=>(([a,b])=>[a,b])([__devupProps.a,__devupProps.b])")] +#[case("__devupProps=>(({a,b})=>[a,b])(__devupProps)")] +#[case("__devupProps=>(({theme})=>[])(__devupProps)")] +#[case("__devupProps=>(()=>'red')(__devupProps.a)")] +#[case("__devupProps=>(([a,...rest])=>[a,rest])([__devupProps.a,__devupProps.b])")] +#[case("__devupProps=>(({a,...rest})=>[a,rest])(__devupProps)")] +#[case("__devupProps=>(({a:{b}})=>b)({'a':__devupProps})")] +#[case("__devupProps=>((p)=>{let q;[q]=[p.a];return [p.a,q];})(__devupProps)")] +#[case("__devupProps=>((p)=>{[p]=[2];return p;})(__devupProps)")] +#[case("__devupProps=>((p)=>({'a':p}={'a':2}))(__devupProps)")] +#[case("__devupProps=>((p)=>({a=2}=p))(__devupProps)")] +#[case("__devupProps=>(({a,...rest})=>()=>rest)(__devupProps)")] +#[case( + "__devupProps=>(([p])=>p.a)({[Symbol.iterator]:function*(){try{trace.push('iterator');yield __devupProps;}finally{trace.push('close');}}})" +)] +#[case("__devupProps=>{'use strict';return ((p)=>[p,p])(__devupProps.a);}")] +#[case( + "__devupProps=>[ ((p)=>{const record=['0'];return (record[0]='1',p.a)&&record;})(__devupProps) ]" +)] +#[case("__devupProps=>[ ((p)=>{const record=['0'];return ()=>record;})(__devupProps) ]")] +#[case("__devupProps=>(([,,])=>1)([__devupProps.a,__devupProps.b])")] +#[case("__devupProps=>(([,,...rest])=>rest)([__devupProps.a,__devupProps.b,7])")] +#[case("__devupProps=>((p)=>{trace.push(p.a);})(__devupProps)")] +#[case("__devupProps=>((p)=>{const record=['0'];return ()=>record;})(__devupProps)")] +#[case("__devupProps=>((p)=>([o.tag]=[p.a],[p.b,o.tag]))(__devupProps)")] +#[case("__devupProps=>((p)=>p())(o.method)")] +#[case("__devupProps=>((p)=>p('typeof __devupProps'))(eval)")] +#[case("__devupProps=>((p)=>{'use strict';return p.a;})(__devupProps)")] +#[case("__devupProps=>((p)=>{const {a}=p;return a;})(__devupProps)")] +#[case("__devupProps=>((p)=>{const record=['0'];return [record,p.a,];})(__devupProps)")] +#[case("__devupProps=>(({a})=>[a,])(__devupProps)")] +#[case("__devupProps=>(([p])=>{const value=p.a;return value;})([__devupProps])")] +fn renderer_values_effects_and_exceptions_match_the_original(#[case] source: &str) { + let allocator = Allocator::default(); + let ast = AstBuilder::new(&allocator); + let output = compiled(&ast, parse(&ast, source), parse(&ast, "input()")); + assert_eq!( + execute(&output), + execute(&format!("()=>({source})(input())")), + "{output}" + ); +} + +#[test] +fn compiler_created_component_tags_keep_their_binding_when_captured() { + let allocator = Allocator::default(); + let ast = AstBuilder::new(&allocator); + let mut component = parse( + &ast, + "__devupProps=>((Tag)=>)(Component)", + ); + // Compiler-created tags also use JSXIdentifier for dynamic component names. + rewrite_expression(&mut component, &mut |value| { + if let Expression::JSXElement(element) = value { + let JSXElement { + opening_element, + closing_element, + .. + } = &mut **element; + for tag in std::iter::once(&mut opening_element.name) + .chain(closing_element.iter_mut().map(|closing| &mut closing.name)) + { + if let JSXElementName::IdentifierReference(id) = tag { + *tag = JSXElementName::new_identifier( + SPAN, + Str::from_in(id.name.as_str(), ast.allocator()), + &ast, + ); + } + } + } + false + }); + let original = readable_code(&component); + let output = compiled(&ast, component, parse(&ast, "input()")); + assert_eq!(output.matches("=>").count(), 1, "{output}"); + let observed = execute(&output); + assert!(observed.contains("\"type\":\"Component\""), "{observed}"); + assert_eq!(observed, execute(&format!("()=>({original})(input())"))); +} + +#[test] +fn serialized_renderers_are_decoded_before_removing_their_intermediate_calls() { + let allocator = Allocator::default(); + let ast = AstBuilder::new(&allocator); + let source = "(__devupProps=>(({theme:omit,...dom})=>dom)(__devupProps))"; + let component = Expression::new_identifier(SPAN, Ident::from_in(source, ast.allocator()), &ast); + let output = compiled(&ast, component, parse(&ast, "input()")); + assert_eq!(output.matches("=>").count(), 1, "{output}"); + assert_eq!( + execute(&output), + execute(&format!("()=>({source})(input())")) + ); +} + +#[test] +fn opaque_invalid_fragments_keep_their_original_call() { + let allocator = Allocator::default(); + let ast = AstBuilder::new(&allocator); + let component = Expression::new_identifier(SPAN, "invalid(", &ast); + assert!( + body(&ast, component, parse(&ast, "input()")) + .as_expression() + .is_some() + ); +} + +#[rstest] +#[case("__devupProps=>[ ((p)=>[(({a,...rest})=>rest)(p),p.a,p.b])(__devupProps) ]")] +#[case("__devupProps=>(({theme})=>[])(__devupProps)")] +#[case("__devupProps=>(()=>'red')(__devupProps.a)")] +#[case("__devupProps=>(([a,...rest])=>[a,rest])([__devupProps.a,__devupProps.b])")] +#[case( + "__devupProps=>[ ((p)=>{const record=['0'];return (record[0]='1',p.a)&&record;})(__devupProps) ]" +)] +fn eager_render_intermediates_use_only_the_existing_render_function(#[case] source: &str) { + let allocator = Allocator::default(); + let ast = AstBuilder::new(&allocator); + let output = compiled(&ast, parse(&ast, source), parse(&ast, "input()")); + assert_eq!(output.matches("=>").count(), 1, "{output}"); +} diff --git a/libs/extractor/src/extractor/styled_jsx.rs b/libs/extractor/src/extractor/styled_jsx.rs index 6efaa037d..d2abf8a8e 100644 --- a/libs/extractor/src/extractor/styled_jsx.rs +++ b/libs/extractor/src/extractor/styled_jsx.rs @@ -2,13 +2,12 @@ use oxc_allocator::{FromIn, GetAllocator, Vec}; use oxc_ast::{ ast::{ Argument, BindingIdentifier, BindingPattern, Expression, Ident, IdentifierName, - IdentifierReference, ImportDeclaration, ImportDeclarationSpecifier, ImportOrExportKind, - ModuleExportName, ObjectPropertyKind, Program, PropertyKey, PropertyKind, Statement, - StringLiteral, VariableDeclaration, VariableDeclarationKind, VariableDeclarator, + ImportDeclaration, ImportDeclarationSpecifier, ImportOrExportKind, ModuleExportName, + ObjectPropertyKind, Program, PropertyKey, PropertyKind, Statement, StringLiteral, + VariableDeclaration, VariableDeclarationKind, VariableDeclarator, }, builder::AstBuilder, }; -use oxc_ast_visit::Visit; use oxc_span::{FileExtension, SPAN}; use rustc_hash::FxHashSet; @@ -22,19 +21,6 @@ pub(crate) struct StyledJsx { used: bool, } -#[derive(Default)] -struct Names<'a>(FxHashSet<&'a str>); - -impl<'a> Visit<'a> for Names<'a> { - fn visit_binding_identifier(&mut self, it: &BindingIdentifier<'a>) { - self.0.insert(it.name.as_str()); - } - - fn visit_identifier_reference(&mut self, it: &IdentifierReference<'a>) { - self.0.insert(it.name.as_str()); - } -} - impl StyledJsx { /// Reserve a name across all scopes before extraction removes or rewrites nodes. pub(crate) fn reserve(program: &Program<'_>) -> Option { @@ -46,12 +32,12 @@ impl StyledJsx { { return None; } - let mut names = Names::default(); - names.visit_program(program); + let mut names = FxHashSet::default(); + crate::utils::ReservedNames::Borrowed(&mut names).reserve(program); let mut suffix = 0; let name = loop { let name = format!("__devupJsx{suffix}"); - if !names.0.contains(name.as_str()) { + if !names.contains(name.as_str()) { break name; } suffix += 1; diff --git a/libs/extractor/src/extractor/styled_props.rs b/libs/extractor/src/extractor/styled_props.rs index b50c55e69..b74a6769c 100644 --- a/libs/extractor/src/extractor/styled_props.rs +++ b/libs/extractor/src/extractor/styled_props.rs @@ -108,10 +108,29 @@ pub(super) fn lower<'a>( PropsRulesError::Theme(error) => error, }; let skeleton = if let Expression::ObjectExpression(object) = unwrap_syntax_only(returned) { - if leaves::shape::needs_projection(returned) { + let structured_spread = object.properties.iter().any(|property| { + matches!(property, + oxc_ast::ast::ObjectPropertyKind::SpreadProperty(spread) + if !matches!(unwrap_syntax_only(&spread.argument), Expression::ObjectExpression(_))) + }); + if leaves::shape::needs_projection(returned) || structured_spread { let local = evaluations.fresh_name(); - let (skeleton, assignments) = - branches::Captures::object(&mut leaves, object, &local).map_err(map_error)?; + let (skeleton, assignments) = if structured_spread { + branches::Captures::object( + &mut direct::Direct { + builder, + name: &name, + scope: style.clone_in_with_semantic_ids(builder.allocator()), + next: 0, + whole: Some(params), + }, + object, + &local, + ) + } else { + branches::Captures::object(&mut leaves, object, &local) + } + .map_err(map_error)?; let schedule = if assignments.is_empty() { values::zero(builder) } else { @@ -200,6 +219,7 @@ pub(super) fn lower_direct<'a>( name: &name, scope, next: 1, + whole: None, }, local: &name, bindings, diff --git a/libs/extractor/src/extractor/styled_props_admission_tests.rs b/libs/extractor/src/extractor/styled_props_admission_tests.rs index 0e0dc44ea..cace6f782 100644 --- a/libs/extractor/src/extractor/styled_props_admission_tests.rs +++ b/libs/extractor/src/extractor/styled_props_admission_tests.rs @@ -8,6 +8,10 @@ use oxc_ast::ast::Statement; #[case("p=>p.on?{color:p.color}:{color:'blue'}", true, serde_json::json!([{"color":"red"},["color"]]))] #[case("p=>p.on?{color:p.color}:null", true, serde_json::json!([{"color":"red"},["color"]]))] #[case("p=>!p.on?{color:p.color}:{color:'blue'}", true, serde_json::json!([{"color":"blue"},[]]))] +#[case("p=>({...{color:p.color},m:1})", false, serde_json::json!([{"color":"red","m":1},["color"]]))] +#[case("p=>({...{color:p.color},m:1})", true, serde_json::json!([{"color":"red","m":1},["color"]]))] +#[case("p=>({...({...{color:p.color}})})", true, serde_json::json!([{"color":"red"},["color"]]))] +#[case("p=>({...{color:p.color},color:p.color})", true, serde_json::json!([{"color":"red"},["color","color"]]))] fn props_admission_when_callback_is_supported_preserves_values_and_once_reads( #[case] source: &str, #[case] bound: bool, @@ -60,6 +64,56 @@ fn props_admission_when_callback_is_supported_preserves_values_and_once_reads( ); } +#[rstest::rstest] +#[case( + "p=>({...{_hover:{color:(p.data.color,'discarded')}},_hover:{...{color:p.on?[p.data.color,null,'blue']:null}}})", + 3 +)] +#[case("p=>({_hover:{...{color:p.on?[p.data.color,null,'blue']:null}}})", 1)] +#[serial_test::serial] +fn props_admission_when_literal_spreads_hold_responsive_choices_keeps_selected_levels( + #[case] rules: &str, + #[case] reads: usize, + #[values(false, true)] single_css: bool, +) -> Result<(), Box> { + // Given: literal spreads contain an overwritten selector and a lazy responsive winner. + let _state = crate::test_state::TestStateGuard::new(); + let original = format!( + "const trace=[];const props={{on:true,data:{{get color(){{trace.push('color');return 'red';}}}}}};const read=({rules});read(props);props.on=false;read(props);JSON.stringify(trace);" + ); + let native = boa_engine::Context::default() + .eval(boa_engine::Source::from_bytes(&original)) + .map_err(|error| error.to_string())? + .as_string() + .ok_or("expected native trace")? + .to_std_string_escaped(); + assert_eq!(native, serde_json::to_string(&vec!["color"; reads])?); + let source = + format!("import {{styled}} from '@devup-ui/react';const Card=styled.div({rules});"); + let option = crate::ExtractOption { + single_css, + import_main_css: false, + ..Default::default() + }; + let bucket = crate::css_bucket("spread.tsx", &option); + let output = crate::extract("spread.tsx", &source, option)?; + // When: actual extracted renderers select and omit that branch on consecutive renders. + let actual = crate::styled_source_tests::captured_render::execute( + ("spread.tsx", bucket.as_deref()), + &output, + "const trace=[];const props={on:true,data:{get color(){trace.push('color');return 'red';}}};const first=render({target:Card,props});props.on=false;const second=render({target:Card,props});JSON.stringify([[first,second].map(e=>[0,1,2].map(level=>values(e,'color',level,'&:hover'))),trace]);", + ); + // Then: losing effects survive, and only selected responsive leaves contribute declarations. + assert_eq!( + actual, + serde_json::json!([ + [[["red"], [], ["blue"]], [[], [], []]], + vec!["color"; reads] + ]) + ); + Ok(()) +} + #[rstest::rstest] #[case("p=>p.on?{color:p.color}:null", false, false)] #[case("p=>p.theme.colors[key]", false, false)] @@ -68,6 +122,22 @@ fn props_admission_when_callback_is_supported_preserves_values_and_once_reads( #[case("p=>p.on?{color:p.theme.colors[key]}:null", true, true)] #[case("p=>({color:p.theme.colors[key]})", false, true)] #[case("p=>({color:p.theme.colors[key]})", true, true)] +#[case("p=>({...p.rules})", true, false)] +#[case("p=>({_hover:{...p.rules}})", true, false)] +#[case("p=>({...{get color(){return p.color;}}})", true, false)] +#[case("p=>({...{[p.key]:p.color}})", true, false)] +#[case("p=>({...{__proto__:p.proto,color:p.color}})", true, false)] +#[case("p=>({...{'__proto__':p.proto,color:p.color}})", true, false)] +#[case("p=>({...{__proto__}})", true, false)] +#[case("p=>({...{_hover:p.on?{...p.rules}:null}})", true, false)] +#[case( + "p=>({...{_hover:p.on?{get color(){return p.color;}}:null}})", + true, + false +)] +#[case("p=>({...{color:p.theme.colors[key],[p.key]:p.color}})", true, false)] +#[case("p=>({...{_hover:p.on&&{...p.rules}}})", true, false)] +#[case("p=>({...{_hover:[{...p.rules}]}})", true, false)] fn props_admission_when_callback_is_refused_preserves_rules_before_theme_precedence( #[case] source: &str, #[case] bound: bool, diff --git a/libs/extractor/src/extractor/styled_props_discarded.rs b/libs/extractor/src/extractor/styled_props_discarded.rs index 8f3b837d0..3df294e33 100644 --- a/libs/extractor/src/extractor/styled_props_discarded.rs +++ b/libs/extractor/src/extractor/styled_props_discarded.rs @@ -45,16 +45,37 @@ pub(super) fn mapped<'a>( source: &Expression<'a>, ) -> Result, PropsRulesError> { let mut transformed = source.clone_in_with_semantic_ids(builder.allocator()); - let policy = Theme { builder, params }; + let policy = Theme { + builder, + params, + structured: false, + }; if let Expression::ObjectExpression(object) = unwrap_syntax_only_mut(&mut transformed) { policy.object(object)?; } Ok(transformed) } +/// The admitted finite-record path maps CSS leaves, never branch conditions. +pub(super) fn mapped_rules<'a>( + builder: &AstBuilder<'a>, + params: &FormalParameters<'a>, + source: &Expression<'a>, +) -> Result, PropsRulesError> { + let mut transformed = source.clone_in_with_semantic_ids(builder.allocator()); + Theme { + builder, + params, + structured: true, + } + .record(&mut transformed)?; + Ok(transformed) +} + struct Theme<'b, 'p, 'a> { builder: &'b AstBuilder<'a>, params: &'p FormalParameters<'a>, + structured: bool, } impl<'a> Theme<'_, '_, 'a> { @@ -71,16 +92,58 @@ impl<'a> Theme<'_, '_, 'a> { self.value(&mut property.value)?; } } - ObjectPropertyKind::SpreadProperty(spread) => self.check(&spread.argument)?, + ObjectPropertyKind::SpreadProperty(spread) => { + if self.structured { + self.record(&mut spread.argument)?; + } else { + self.check(&spread.argument)?; + } + } } } Ok(()) } + fn record(&self, source: &mut Expression<'a>) -> Result<(), PropsRulesError> { + match unwrap_syntax_only_mut(source) { + Expression::ObjectExpression(object) => self.object(object), + Expression::ConditionalExpression(branch) => { + self.check(&branch.test)?; + self.record(&mut branch.consequent)?; + self.record(&mut branch.alternate) + } + Expression::LogicalExpression(logical) + if logical.operator == oxc_syntax::operator::LogicalOperator::And => + { + self.check(&logical.left)?; + self.record(&mut logical.right) + } + _ => self.check(source), + } + } + fn value(&self, value: &mut Expression<'a>) -> Result<(), PropsRulesError> { if let Expression::ObjectExpression(inner) = unwrap_syntax_only_mut(value) { return self.object(inner); } + if self.structured { + match unwrap_syntax_only_mut(value) { + Expression::ArrayExpression(array) => { + for element in &mut array.elements { + if let Some(value) = element.as_expression_mut() { + self.value(value)?; + } + } + return Ok(()); + } + Expression::ConditionalExpression(branch) => { + self.check(&branch.test)?; + self.value(&mut branch.consequent)?; + return self.value(&mut branch.alternate); + } + _ => {} + } + } let source = unwrap_syntax_only(value); if let Some(reference) = theme_leaf_reference(self.params, source).or_else(|| theme_var_reference(source)) diff --git a/libs/extractor/src/extractor/styled_props_discarded_tests.rs b/libs/extractor/src/extractor/styled_props_discarded_tests.rs index b63e5f99f..bed3aeb1d 100644 --- a/libs/extractor/src/extractor/styled_props_discarded_tests.rs +++ b/libs/extractor/src/extractor/styled_props_discarded_tests.rs @@ -23,3 +23,77 @@ fn discarded_functions_when_multiple_theme_reads_fail_keep_the_first_error() { assert_eq!(functions.0, Some(expected)); assert_eq!(first.span().start, 1); } + +#[rstest::rstest] +#[case("enabled && {color:p.theme.colors.primary}", "var(--colors-primary)")] +#[case( + "({color:enabled ? p.theme.colors.primary : p.theme.colors.secondary})", + "var(--colors-secondary)" +)] +fn structured_theme_leaves_keep_the_original_controller( + #[case] source: &str, + #[case] expected: &str, +) { + let arena = oxc_allocator::Allocator::default(); + let ast = AstBuilder::new(&arena); + let params = oxc_parser::Parser::new(&arena, "p=>0", oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let Expression::ArrowFunctionExpression(function) = params else { + panic!("expected props callback") + }; + let original = oxc_parser::Parser::new(&arena, source, oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let before = crate::utils::readable_code(&original); + let mapped = mapped_rules(&ast, &function.params, &original) + .unwrap_or_else(|_| panic!("theme leaves must be mapped without mapping the controller")); + let code = crate::utils::readable_code(&mapped); + assert!(code.contains(expected), "{code}"); + assert!(code.contains("enabled"), "{code}"); + assert!(!code.contains("p.theme"), "{code}"); + assert_eq!(crate::utils::readable_code(&original), before); + if source.contains('?') { + assert!(code.contains("var(--colors-primary)"), "{code}"); + assert!(code.contains('?'), "{code}"); + } else { + assert!(code.contains("&&"), "{code}"); + } +} + +#[rstest::rstest] +#[case("p.theme.colors.primary && {color:'red'}")] +#[case("({color:p.theme.colors.primary ? 'red' : 'blue'})")] +fn structured_theme_controllers_remain_located_errors(#[case] source: &str) { + let arena = oxc_allocator::Allocator::default(); + let ast = AstBuilder::new(&arena); + let params = oxc_parser::Parser::new(&arena, "p=>0", oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let Expression::ArrowFunctionExpression(function) = params else { + panic!("expected props callback") + }; + let original = oxc_parser::Parser::new(&arena, source, oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let expected = oxc_parser::Parser::new( + &arena, + "p=>p.theme.colors.primary", + oxc_span::SourceType::tsx(), + ) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let Err(PropsRulesError::Theme((offset, message))) = + mapped_rules(&ast, &function.params, &original) + else { + panic!("a theme-dependent controller must be rejected") + }; + let expected_offset = u32::try_from( + source + .find("p.theme") + .unwrap_or_else(|| panic!("missing condition")), + ) + .unwrap_or_else(|error| panic!("{error}")); + assert_eq!(offset, expected_offset); + assert_eq!(message, unmapped_theme_error("styled", &expected).1); +} diff --git a/libs/extractor/src/extractor/styled_props_leaves.rs b/libs/extractor/src/extractor/styled_props_leaves.rs index 57f9010ac..fc45ba762 100644 --- a/libs/extractor/src/extractor/styled_props_leaves.rs +++ b/libs/extractor/src/extractor/styled_props_leaves.rs @@ -41,8 +41,20 @@ impl<'a> Leaves<'_, '_, 'a> { fn object_inner(&mut self, object: &mut ObjectExpression<'a>) -> Result<(), PropsRulesError> { for property in &mut object.properties { - let ObjectPropertyKind::ObjectProperty(property) = property else { - return Err(PropsRulesError::Rules); + let property = match property { + ObjectPropertyKind::ObjectProperty(property) => property, + ObjectPropertyKind::SpreadProperty(spread) => { + if !shape::spread_data(&spread.argument, true) { + return Err(PropsRulesError::Rules); + } + let Expression::ObjectExpression(inner) = + unwrap_syntax_only_mut(&mut spread.argument) + else { + return Err(PropsRulesError::Rules); + }; + self.object_inner(inner)?; + continue; + } }; if property.computed || property.method || property.kind != PropertyKind::Init { return Err(PropsRulesError::Rules); @@ -111,11 +123,7 @@ impl<'a> Leaves<'_, '_, 'a> { self.values.push(source.into()); *value = if function { // A member call would incorrectly give an ordinary function the vector as `this`. - let direct = Expression::new_sequence_expression( - SPAN, - oxc_allocator::Vec::from_array_in([values::zero(builder), slot], builder), - builder, - ); + let direct = crate::utils::unbound_value(builder, slot); wrap_direct_call(builder, &direct, &[identifier(builder, "rest")]) } else { values::captured(builder, key, slot) diff --git a/libs/extractor/src/extractor/styled_props_shape.rs b/libs/extractor/src/extractor/styled_props_shape.rs index 7d8879133..0e83088e7 100644 --- a/libs/extractor/src/extractor/styled_props_shape.rs +++ b/libs/extractor/src/extractor/styled_props_shape.rs @@ -1,10 +1,49 @@ use super::{Leaves, PropsRulesError}; use crate::utils::{unwrap_syntax_only, unwrap_syntax_only_mut}; use oxc_allocator::{CloneIn, GetAllocator}; -use oxc_ast::ast::Expression; +use oxc_ast::ast::{ArrayExpressionElement, Expression, ObjectPropertyKind, PropertyKind}; use oxc_span::SPAN; use oxc_syntax::operator::UnaryOperator; +pub(super) fn spread_data(value: &Expression<'_>, allow_object: bool) -> bool { + let projected = |value| spread_data(value, false); + match unwrap_syntax_only(value) { + Expression::ObjectExpression(object) => { + allow_object + && object.properties.iter().all(|property| match property { + ObjectPropertyKind::ObjectProperty(property) => { + !property.computed + && !property.method + && property.kind == PropertyKind::Init + && property + .key + .static_name() + .is_some_and(|key| key != "__proto__") + && spread_data(&property.value, true) + } + ObjectPropertyKind::SpreadProperty(spread) => { + matches!( + unwrap_syntax_only(&spread.argument), + Expression::ObjectExpression(_) + ) && spread_data(&spread.argument, true) + } + }) + } + Expression::ArrayExpression(array) => array.elements.iter().all(|element| { + matches!(element, ArrayExpressionElement::Elision(_)) + || element.as_expression().is_some_and(projected) + }), + Expression::ConditionalExpression(branch) => { + projected(&branch.consequent) && projected(&branch.alternate) + } + Expression::LogicalExpression(logical) => { + projected(&logical.left) && projected(&logical.right) + } + Expression::SequenceExpression(sequence) => sequence.expressions.iter().all(projected), + _ => true, + } +} + pub(crate) fn needs_projection(value: &Expression<'_>) -> bool { match unwrap_syntax_only(value) { Expression::ConditionalExpression(branch) => { @@ -19,7 +58,9 @@ pub(crate) fn needs_projection(value: &Expression<'_>) -> bool { oxc_ast::ast::ObjectPropertyKind::ObjectProperty(property) => { needs_projection(&property.value) } - oxc_ast::ast::ObjectPropertyKind::SpreadProperty(_) => false, + oxc_ast::ast::ObjectPropertyKind::SpreadProperty(spread) => { + needs_projection(&spread.argument) + } }) } _ => false, diff --git a/libs/extractor/src/extractor/styled_record.rs b/libs/extractor/src/extractor/styled_record.rs index 8caa55ea2..91e32827c 100644 --- a/libs/extractor/src/extractor/styled_record.rs +++ b/libs/extractor/src/extractor/styled_record.rs @@ -28,6 +28,7 @@ pub(super) struct PreparedRecord<'a> { enum Origin { Values, OrdinaryCallbacks, + WholeRule, } struct Preparation<'r, 'b, 'a> { @@ -40,12 +41,29 @@ pub(super) fn prepare<'a>( builder: &AstBuilder<'a>, rules: &Expression<'a>, scope: &Expression<'a>, +) -> Option> { + prepare_with_origin(builder, rules, scope, Origin::Values) +} + +pub(super) fn prepare_whole<'a>( + builder: &AstBuilder<'a>, + rules: &Expression<'a>, + scope: &Expression<'a>, +) -> Option> { + prepare_with_origin(builder, rules, scope, Origin::WholeRule) +} + +fn prepare_with_origin<'a>( + builder: &AstBuilder<'a>, + rules: &Expression<'a>, + scope: &Expression<'a>, + origin: Origin, ) -> Option> { let mut reads = Evaluations::new(builder, readable_code(scope)); let mut preparation = Preparation { reads: &mut reads, affected: false, - origin: Origin::Values, + origin, }; let entries = preparation.record(rules, &preparation.reads.boolean(true))?; if !preparation.affected && preparation.reads.bindings.is_empty() { diff --git a/libs/extractor/src/extractor/styled_record_evaluation.rs b/libs/extractor/src/extractor/styled_record_evaluation.rs index 5c3c6f2b5..017ca6777 100644 --- a/libs/extractor/src/extractor/styled_record_evaluation.rs +++ b/libs/extractor/src/extractor/styled_record_evaluation.rs @@ -86,16 +86,18 @@ impl<'b, 'a> Evaluations<'b, 'a> { fn visit_style_value_expression<'a>( builder: &AstBuilder<'a>, style: &mut crate::ExtractStyleValue, - visit: &mut impl FnMut(&mut Expression<'a>), + visit: &mut dyn FnMut(&mut Expression<'a>), ) { use crate::ExtractStyleValue; match style { ExtractStyleValue::Dynamic(value) => { - let mut expression = Expression::new_identifier( - SPAN, - oxc_ast::ast::Ident::from_in(value.identifier(), builder.allocator()), - builder, - ); + let source = builder.allocator().alloc_str(value.identifier()); + let mut expression = + oxc_parser::Parser::new(builder.allocator(), source, oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| { + panic!("invalid generated dynamic expression: {error:?}") + }); visit(&mut expression); *value.identifier_mut() = crate::utils::readable_code(&expression); } @@ -111,10 +113,10 @@ fn visit_style_value_expression<'a>( } } -pub(super) fn visit_style_expressions<'a>( +pub(crate) fn visit_style_expressions<'a>( builder: &AstBuilder<'a>, style: &mut crate::ExtractStyleProp<'a>, - visit: &mut impl FnMut(&mut Expression<'a>), + visit: &mut dyn FnMut(&mut Expression<'a>), ) { use crate::ExtractStyleProp; match style { diff --git a/libs/extractor/src/extractor/styled_record_evaluation_visitor_tests.rs b/libs/extractor/src/extractor/styled_record_evaluation_visitor_tests.rs index 4f5e25043..ee325ecc6 100644 --- a/libs/extractor/src/extractor/styled_record_evaluation_visitor_tests.rs +++ b/libs/extractor/src/extractor/styled_record_evaluation_visitor_tests.rs @@ -2,6 +2,7 @@ use std::collections::BTreeMap; use oxc_allocator::{Allocator, FromIn, GetAllocator}; use oxc_ast::{ast::Expression, builder::AstBuilder}; +use oxc_ast_visit::VisitMut; use oxc_span::SPAN; use rstest::rstest; @@ -24,6 +25,14 @@ enum Container { MemberExpression, } +struct RenamePayload<'a>(&'a Allocator); +impl<'a> VisitMut<'a> for RenamePayload<'a> { + fn visit_identifier_reference(&mut self, value: &mut oxc_ast::ast::IdentifierReference<'a>) { + let renamed = value.name.replace("__devupRecord", "__devupInherited"); + value.name = oxc_ast::ast::Ident::from_in(renamed.as_str(), self.0); + } +} + fn identifier<'a>(builder: &AstBuilder<'a>, name: &str) -> Expression<'a> { Expression::new_identifier( SPAN, @@ -186,11 +195,7 @@ fn payloads_are_rewritten_when_style_expressions_are_visited(#[case] container: // When: the callback rewrites actual AST identifier references/code payloads. visit_style_expressions(&builder, &mut style, &mut |expression| { - let Expression::Identifier(value) = expression else { - panic!("fixture visitor receives identifier expressions"); - }; - let renamed = value.name.replace("__devupRecord", "__devupInherited"); - value.name = oxc_ast::ast::Ident::from_in(renamed.as_str(), builder.allocator()); + RenamePayload(&allocator).visit_expression(expression); }); // Then: every branch/map/array entry and AST control was rewritten. diff --git a/libs/extractor/src/extractor/styled_record_value.rs b/libs/extractor/src/extractor/styled_record_value.rs index b745a6a0d..7400c7125 100644 --- a/libs/extractor/src/extractor/styled_record_value.rs +++ b/libs/extractor/src/extractor/styled_record_value.rs @@ -1,4 +1,5 @@ use super::{Origin, Preparation}; +use crate::extractor::extract_style_from_styled::scalar; use crate::utils::{get_string_by_literal_expression, unwrap_syntax_only}; use oxc_allocator::{CloneIn, GetAllocator}; use oxc_ast::ast::{ArrayExpressionElement, Expression, ObjectPropertyKind, PropertyKind}; @@ -9,6 +10,10 @@ use oxc_syntax::operator::{BinaryOperator, LogicalOperator, UnaryOperator}; #[path = "styled_record_selection.rs"] mod selection; +#[cfg(test)] +#[path = "styled_record_value_tests.rs"] +mod tests; + fn lookup_object<'a, 'b>(source: &'b Expression<'a>) -> &'b Expression<'a> { match source { Expression::TSAsExpression(value) => lookup_object(&value.expression), @@ -50,7 +55,7 @@ fn template_free_lookup_index(source: &Expression<'_>) -> bool { } /// Only literal data can be replaced by the extractor's finite class lookup. -fn static_lookup_value(source: &Expression<'_>) -> bool { +fn static_lookup_value(source: &Expression<'_>, rules: bool) -> bool { let source = unwrap_syntax_only(source); if pure_lookup_literal(source) && get_string_by_literal_expression(source).is_some() { return true; @@ -62,11 +67,11 @@ fn static_lookup_value(source: &Expression<'_>) -> bool { && selection::property_key(&property.key).is_some() && (property.computed || selection::property_key(&property.key).as_deref() != Some("__proto__")) - && static_lookup_value(&property.value)) + && if rules { static_lookup_value(&property.value, true) } else { pure_lookup_literal(&property.value) }) }), Expression::ArrayExpression(array) => array.elements.iter().all(|element| match element { ArrayExpressionElement::Elision(_) => true, - _ => element.as_expression().is_some_and(static_lookup_value), + _ => element.as_expression().is_some_and(|value| if rules { static_lookup_value(value, true) } else { pure_lookup_literal(value) }), }), Expression::NullLiteral(_) => true, _ => false, @@ -82,6 +87,9 @@ impl<'a> Preparation<'_, '_, 'a> { ) -> Option> { let source = unwrap_syntax_only(source); let builder = self.reads.builder; + let rules = key.starts_with(['_', '@']) + || key == "selectors" + || super::super::extract_style_from_expression::is_nested_selector_key(key); if get_string_by_literal_expression(source).is_some() || crate::utils::unrepresentable_literal(source) { @@ -92,7 +100,7 @@ impl<'a> Preparation<'_, '_, 'a> { if matches!( lookup_object(&member.object), Expression::ObjectExpression(_) | Expression::ArrayExpression(_) - ) && static_lookup_value(&member.object) + ) && static_lookup_value(&member.object, rules) && template_free_lookup_index(&member.expression) => { let mut member = member.clone_in(builder.allocator()); @@ -182,6 +190,17 @@ impl<'a> Preparation<'_, '_, 'a> { slot, )) } + Expression::FunctionExpression(_) | Expression::ArrowFunctionExpression(_) + if matches!(self.origin, Origin::WholeRule) => + { + let slot = self.reads.capture(source, guard); + let direct = crate::utils::unbound_value(builder, slot); + Some(crate::utils::wrap_direct_call( + builder, + &direct, + &[Expression::new_identifier(oxc_span::SPAN, "rest", builder)], + )) + } Expression::NullLiteral(_) | Expression::BigIntLiteral(_) | Expression::RegExpLiteral(_) @@ -193,7 +212,14 @@ impl<'a> Preparation<'_, '_, 'a> { { Some(source.clone_in(builder.allocator())) } - _ => Some(self.reads.capture(source, guard)), + _ => { + let captured = self.reads.capture(source, guard); + Some(if matches!(self.origin, Origin::WholeRule) { + scalar::captured(builder, scalar::Origin::WholeRule(key), captured) + } else { + captured + }) + } } } } diff --git a/libs/extractor/src/extractor/styled_record_value_tests.rs b/libs/extractor/src/extractor/styled_record_value_tests.rs new file mode 100644 index 000000000..04eee8b0d --- /dev/null +++ b/libs/extractor/src/extractor/styled_record_value_tests.rs @@ -0,0 +1,27 @@ +use super::static_lookup_value; +use oxc_allocator::Allocator; +use oxc_parser::Parser; +use oxc_span::SourceType; +use rstest::rstest; + +#[rstest] +#[case("null", true, true)] +#[case("({color:null, nested:{color:'red'}})", true, true)] +#[case("({color:read()})", true, false)] +#[case("({nested:{color:'red'}})", false, false)] +#[case("({color:'red'})", false, true)] +#[case("read()", false, false)] +fn finite_lookup_when_values_are_literal_data_is_safe_to_select( + #[case] source: &str, + #[case] rules: bool, + #[case] expected: bool, +) { + let allocator = Allocator::default(); + let expression = Parser::new(&allocator, source, SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + + let actual = static_lookup_value(&expression, rules); + + assert_eq!(actual, expected, "{source}"); +} diff --git a/libs/extractor/src/extractor/styled_retained.rs b/libs/extractor/src/extractor/styled_retained.rs index ad2e2e1f9..fc57cf51c 100644 --- a/libs/extractor/src/extractor/styled_retained.rs +++ b/libs/extractor/src/extractor/styled_retained.rs @@ -207,6 +207,7 @@ impl<'a> StyledDefinition<'a> { pub(super) fn with_execution(mut self, ast: &AstBuilder<'a>, inherited: Option<&Self>) -> Self { if let Some(inherited) = inherited { self.execution = inherited.execution.clone_in(ast.allocator()); + self.takes_styles = inherited.takes_styles; } self } diff --git a/libs/extractor/src/extractor/styled_scalar.rs b/libs/extractor/src/extractor/styled_scalar.rs index 6f543c9e2..725114d4e 100644 --- a/libs/extractor/src/extractor/styled_scalar.rs +++ b/libs/extractor/src/extractor/styled_scalar.rs @@ -18,51 +18,6 @@ pub(in crate::extractor) fn zero<'a>(builder: &AstBuilder<'a>) -> Expression<'a> ) } -pub(in crate::extractor) fn length<'a>( - builder: &AstBuilder<'a>, - leaf: Expression<'a>, -) -> Expression<'a> { - let value = || Expression::new_identifier(SPAN, "__devupValue", builder); - let is_number = Expression::new_binary_expression( - SPAN, - Expression::new_unary_expression(SPAN, UnaryOperator::Typeof, value(), builder), - BinaryOperator::StrictEquality, - Expression::new_string_literal(SPAN, "number", None, builder), - builder, - ); - let length = Expression::new_binary_expression( - SPAN, - value(), - BinaryOperator::Addition, - Expression::new_string_literal(SPAN, "px", None, builder), - builder, - ); - let length = Expression::new_conditional_expression( - SPAN, - Expression::new_logical_expression( - SPAN, - is_number, - LogicalOperator::And, - Expression::new_binary_expression( - SPAN, - value(), - BinaryOperator::StrictInequality, - zero(builder), - builder, - ), - builder, - ), - length, - value(), - builder, - ); - crate::utils::wrap_direct_call( - builder, - &super::named_arrow(builder, "__devupValue", length), - &[leaf], - ) -} - /// The producer supplies a stable capture and its styled numeric origin, never an authored read. pub(in crate::extractor) fn captured<'a>( builder: &AstBuilder<'a>, @@ -94,7 +49,7 @@ pub(in crate::extractor) fn captured<'a>( builder, ); let value = if pixels { - length(builder, read()) + crate::imported_constants::local_rule_shapes::number_length_value(builder, read()) } else if !crate::utils::keeps_bare_number(key) || css::disassemble_property(key).all(|property| crate::utils::is_unitless_key(&property)) { diff --git a/libs/extractor/src/factory_dynamic_value_tests.rs b/libs/extractor/src/factory_dynamic_value_tests.rs index 0aa910f9e..e0f086746 100644 --- a/libs/extractor/src/factory_dynamic_value_tests.rs +++ b/libs/extractor/src/factory_dynamic_value_tests.rs @@ -2,6 +2,40 @@ use super::*; const FILE: &str = "/src/factory-dynamic.tsx"; +#[rstest] +#[case::before("...raw, bg:'red', other:OWN")] +#[case::after("bg:'red', other:OWN, ...raw")] +#[case::opaque_literal("bg:'red', other:OWN, ...{bg:'green', ...raw}")] +#[case::computed("bg:'red', other:OWN, ...raw, [key]:'blue'")] +#[serial] +fn compiled_factory_values_when_spreads_are_opaque_keep_explicit_styles_independent( + #[case] props: &str, + #[values(false, true)] namespace: bool, + #[values(false, true)] single_css: bool, +) { + // Given + let _state = crate::test_state::TestStateGuard::new(); + let call = if namespace { "ui.css" } else { "i" }; + let props = props.replace("OWN", &format!("held({call}({{overflow:'hidden'}}))")); + let source = format!( + "{} import {{jsx as o}} from 'react/jsx-runtime'; function render(raw,key,trace){{ const held=x=>(trace.push('held'),x); return o(t, (({{{props}}}) as const)); }}", + imports(namespace) + ); + // When + let output = extract_factory(&source, single_css); + // Then: the opaque keys are DOM data, not styling inputs; the utility runs at build time. + let projection = "(() => {const result=render({bg:'blue',other:'raw',_hover:'opaque'},'bg',trace);trace.push(result.target,result.props.bg,result.props.other,result.props._hover);return result;})()"; + assert_eq!( + held_observation(&output, projection, single_css), + "[[\"held\",\"div\",\"blue\",\"raw\",\"opaque\"],[\"hidden\"]]" + ); + let backgrounds: Vec<_> = output.styles.iter().filter_map(|style| match style { + ExtractStyleValue::Static(value) if value.property() == "background" => Some(value.value()), + _ => None, + }).collect(); + assert_eq!(backgrounds, ["red"]); +} + fn imports(namespace: bool) -> &'static str { if namespace { "import {Box as t} from '@devup-ui/react'; import * as ui from '@devup-ui/react';" @@ -22,6 +56,34 @@ fn extract_factory(source: &str, single_css: bool) -> ExtractOutput { .unwrap_or_else(|error| panic!("{source}\n{error}")) } +fn render_observation(output: &ExtractOutput, invocation: &str, filename: Option<&str>) -> String { + use oxc_allocator::TakeIn; + use oxc_ast_visit::{VisitMut, walk_mut::walk_expression}; + + struct Syntax<'a>(AstBuilder<'a>); + impl<'a> VisitMut<'a> for Syntax<'a> { + fn visit_expression(&mut self, expression: &mut Expression<'a>) { + let inner = crate::utils::unwrap_syntax_only_mut(expression); + let value = inner.take_in(&self.0); + *expression = value; + walk_expression(self, expression); + } + } + + let arena = Allocator::default(); + let mut parsed = Parser::new(&arena, &output.code, SourceType::tsx()).parse(); + assert_eq!(parsed.diagnostics.len(), 0, "{}", output.code); + Syntax(AstBuilder::new(&arena)).visit_program(&mut parsed.program); + let javascript = ExtractOutput { + styles: output.styles.clone(), + code: Codegen::new().build(&parsed.program).code, + map: None, + css_file: output.css_file.clone(), + dependencies: output.dependencies.clone(), + }; + super::render_observation(&javascript, invocation, filename) +} + fn held_observation(output: &ExtractOutput, invocation: &str, single_css: bool) -> String { let filename = (!single_css).then_some(FILE); let variables: Vec<(String, String)> = output @@ -61,7 +123,7 @@ fn held_observation(output: &ExtractOutput, invocation: &str, single_css: bool) #[case::member_array(("other:([OWN,OWN])[0]", "[]", 1))] #[case::member_dynamic_array(("other:([OWN,OWN])[index]", "[]", 1))] #[case::member_spread(("other:({ ...p,a:OWN })[key]", "[]", 1))] -#[case::array_spread(("other:([OWN,...p])[index]", "[]", 2))] +#[case::array_spread(("other:([OWN,...p])[index]", "[]", 1))] #[case::wrapper(("other:(({ ...p,a:OWN }) as const)[key]", "[]", 1))] #[case::static_object(("other:({ a:OWN })['a']", "[]", 1))] #[case::shorthand(("mx:OWN", "[]", 2))] diff --git a/libs/extractor/src/gen_class_name.rs b/libs/extractor/src/gen_class_name.rs index e4114a319..a8929406a 100644 --- a/libs/extractor/src/gen_class_name.rs +++ b/libs/extractor/src/gen_class_name.rs @@ -165,11 +165,7 @@ fn gen_class_name<'a>( false, ast_builder, )); - if let Expression::Identifier(_) = &expression { - Some(convert_class_name(ast_builder, &exp)) - } else { - Some(exp) - } + Some(convert_class_name(ast_builder, &exp)) } } } @@ -181,8 +177,10 @@ pub fn merge_expression_for_class_name<'a>( let mut unknown_expr: Vec> = Vec::new(); let mut class_name = String::new(); for expr in expressions { - if let Expression::StringLiteral(str) = &expr - && let Some(value) = str.value.as_str() + if matches!( + &expr, + Expression::StringLiteral(_) | Expression::TemplateLiteral(_) + ) && let Some(value) = crate::utils::get_string_by_literal_expression(&expr) { let value = value.trim(); if !value.is_empty() { diff --git a/libs/extractor/src/gen_style.rs b/libs/extractor/src/gen_style.rs index 7b592bfc8..a31936346 100644 --- a/libs/extractor/src/gen_style.rs +++ b/libs/extractor/src/gen_style.rs @@ -60,7 +60,18 @@ fn push_one_sided_conditional<'a>( for p in gen_style(ast_builder, styles, filename) { if let ObjectPropertyKind::ObjectProperty(p) = p { let value = p.value.clone_in(ast_builder.allocator()); - let undefined = Expression::new_identifier(SPAN, "undefined", ast_builder); + let undefined = Expression::new_unary_expression( + SPAN, + oxc_ast::ast::UnaryOperator::Void, + Expression::new_numeric_literal( + SPAN, + 0.0, + None, + oxc_ast::ast::NumberBase::Decimal, + ast_builder, + ), + ast_builder, + ); let (consequent, alternate) = if value_when_true { (value, undefined) } else { @@ -362,7 +373,7 @@ mod tests { let generated = gen_styles(&builder, &styles, None).unwrap(); let code = expression_to_code(&generated); - assert!(code.contains("enabled?undefined:fallbackColor")); + assert!(code.contains("enabled?void 0:fallbackColor")); } #[test] diff --git a/libs/extractor/src/imported_constants.rs b/libs/extractor/src/imported_constants.rs index 5b45a1c5d..8ba2e28a0 100644 --- a/libs/extractor/src/imported_constants.rs +++ b/libs/extractor/src/imported_constants.rs @@ -18,7 +18,7 @@ use oxc_parser::Parser; use oxc_semantic::{Scoping, SemanticBuilder}; use oxc_span::{GetSpan, SPAN, SourceType}; use oxc_syntax::number::NumberBase; -use oxc_syntax::operator::BinaryOperator; +use oxc_syntax::operator::{BinaryOperator, LogicalOperator}; use oxc_syntax::symbol::SymbolId; use rustc_hash::{FxHashMap, FxHashSet}; @@ -28,6 +28,8 @@ use crate::extractor::extract_style_from_expression::LiteralHandling; use crate::stylex::StylexFunction; use crate::{ExtractOption, ExtractStyleValue, ModuleResolver}; +mod initialization; +mod lexical; #[cfg(test)] #[path = "local_capture_coverage_tests.rs"] mod local_capture_coverage_tests; @@ -42,6 +44,10 @@ use consumed_references::ConsumedReferences; #[cfg(test)] #[path = "imported_constants_px_tests.rs"] mod px_tests; +#[cfg(test)] +mod require_tests; +#[cfg(test)] +mod safety_tests; #[path = "imported_css_root.rs"] mod imported_css_root; @@ -142,7 +148,11 @@ impl Constant { fn js_literal(&self) -> Option { match self { Self::String(text) => serde_json::to_string(text).ok(), - Self::Number(number) => Some(crate::utils::js_number_string(*number)), + Self::Number(number) => Some(if number.to_bits() == (-0.0_f64).to_bits() { + "-0".to_string() + } else { + crate::utils::js_number_string(*number) + }), Self::Null => Some("null".to_string()), Self::Bool(value) => Some(value.to_string()), Self::Undefined => Some("undefined".to_string()), @@ -222,6 +232,7 @@ pub(crate) enum ChangeSite { /// other modules, by the name the program binds them to #[derive(Default)] pub(crate) struct Inlined { + pub disposition: ErrorDisposition, pub dependencies: BTreeSet, pub stylex_vars: FxHashMap>, pub stylex_themes: FxHashMap, @@ -230,6 +241,8 @@ pub(crate) struct Inlined { pub css_failures: Vec, pub unknown: Unknown, pub changed: Changed, + /// Conditional JSX spreads containing a proven constant rule object, by authored offset. + pub rule_spreads: FxHashSet, /// Style objects declared below the top level that styles read, which /// code elsewhere reads too, so the build cannot tell they are unchanged pub errors: Vec<(u32, String)>, @@ -239,6 +252,13 @@ pub(crate) struct Inlined { pub scoping: Option>, } +#[derive(Default)] +pub(crate) enum ErrorDisposition { + #[default] + Recoverable, + TerminalInitialization, +} + /// A `const` below the top level of the module holding an object or array /// literal that is all written out, which styles read as they read top-level /// constants when nothing else reads it @@ -281,13 +301,13 @@ fn written_out(expression: &Expression<'_>) -> Option { let ObjectPropertyKind::ObjectProperty(property) = property else { return None; }; - if property.computed - || property.method - || property.kind != oxc_ast::ast::PropertyKind::Init - { + if property.method || property.kind != oxc_ast::ast::PropertyKind::Init { return None; } let key = crate::utils::get_str_by_property_key(&property.key)?; + if key == "__proto__" && !property.computed { + return None; + } Some((key.to_string(), written_out(&property.value)?)) }) .collect::>>() @@ -329,6 +349,7 @@ impl<'a> Visit<'a> for ScopedLocals<'_, '_, 'a, '_> { if let oxc_ast::ast::BindingPattern::BindingIdentifier(binding) = &declarator.id && let Some(init) = &declarator.init && let Some(symbol) = binding.symbol_id.get() + && !self.scoping.get_resolved_reference_ids(symbol).is_empty() { let written = self .scoping @@ -617,6 +638,7 @@ fn inline_in<'a>( let mut style = StyleSymbols::new(scoping); for statement in &program.body { if let Statement::ImportDeclaration(import) = statement + && !import.import_kind.is_type() && import .source .value @@ -625,6 +647,11 @@ fn inline_in<'a>( { let stylex = import.source.value == crate::STYLEX_PACKAGE; for specifier in import.specifiers.iter().flatten() { + if matches!(specifier, ImportDeclarationSpecifier::ImportSpecifier(specifier) + if specifier.import_kind.is_type()) + { + continue; + } if matches!(specifier, ImportDeclarationSpecifier::ImportSpecifier(specifier) if specifier.imported.name() == "ClassNames" && import.source.value == compat.as_str()) { @@ -654,14 +681,42 @@ fn inline_in<'a>( style: &style, css_props: &css_props, names: FxHashSet::default(), + symbols: FxHashSet::default(), + references: FxHashSet::default(), + object_references: FxHashSet::default(), locals: FxHashSet::default(), depth: 0, class_names: Vec::new(), }; read.visit_program(program); - if read.names.is_empty() && read.locals.is_empty() && px.is_empty() { + let (declarations, copies) = lexical::declarations(ast_builder, program, scoping); + for reference in &copies { + read.symbols + .extend(scoping.get_reference(*reference).symbol_id()); + } + loop { + let before = read.symbols.len(); + for (symbol, init) in &declarations { + if read.symbols.contains(symbol) { + read.reading(true, |read| read.visit_expression(init)); + } + } + if read.symbols.len() == before { + break; + } + } + if read.names.is_empty() && read.locals.is_empty() && read.symbols.is_empty() && px.is_empty() { return Inlined::default(); } + let mut initialization = initialization::Initialization::new(program, scoping); + let mut inlined = Inlined { + errors: initialization.errors(&read.references, scoping, &declarations), + ..Inlined::default() + }; + if !inlined.errors.is_empty() { + inlined.disposition = ErrorDisposition::TerminalInitialization; + return inlined; + } let names = read.names; let mut locals = LocalConstants::default(); locals.visit_program(program); @@ -675,7 +730,37 @@ fn inline_in<'a>( loading: Vec::new(), }; let mut symbols: FxHashMap = FxHashMap::default(); - let mut inlined = Inlined::default(); + let copy_symbols: FxHashSet<_> = declarations + .keys() + .copied() + .filter(|symbol| { + scoping + .get_resolved_reference_ids(*symbol) + .iter() + .all(|reference| copies.contains(reference)) + }) + .collect(); + let style_object_symbols: FxHashSet<_> = read + .locals + .iter() + .copied() + .filter(|symbol| { + scoping + .get_resolved_reference_ids(*symbol) + .iter() + .all(|reference| read.object_references.contains(reference)) + }) + .collect(); + let deferred = local_capture_reads::deferred_reads(program, scoping); + let local_ends: FxHashMap<_, _> = scoping + .symbol_ids() + .filter_map(|symbol| { + locals + .bindings + .get(&scoping.symbol_span(symbol).start) + .map(|end| (symbol, *end)) + }) + .collect(); let reads_math = { let mut scope = ModuleScope::new(filename, program, None); scope.style_names.extend( @@ -801,7 +886,92 @@ fn inline_in<'a>( symbols.extend(symbol.get().map(|symbol| (symbol, constant.clone()))); } } + let mut pending = declarations; + pending.retain(|symbol, _| { + read.symbols.contains(symbol) + && scoping.symbol_scope_id(*symbol) != scoping.root_scope_id() + }); + loop { + let values = ConstantReads { + scoping, + initialization: &initialization, + symbols: &symbols, + local_ends: &local_ends, + deferred: &deferred, + }; + let resolved: Vec<_> = pending + .iter() + .filter_map(|(symbol, init)| { + let value = if copy_symbols.contains(symbol) { + values.operand(init).or_else(|| { + let Expression::ObjectExpression(object) = + crate::utils::unwrap_syntax_only(init) + else { + return None; + }; + let entries: Option> = object + .properties + .iter() + .map(|property| { + let ObjectPropertyKind::ObjectProperty(property) = property + else { + return None; + }; + if property.kind != oxc_ast::ast::PropertyKind::Init + || property.method + { + return None; + } + let key = crate::utils::get_str_by_property_key(&property.key)? + .into_owned(); + if key == "__proto__" && !property.computed { + return None; + } + let value = values.operand(&property.value)?; + matches!( + value, + Constant::String(_) + | Constant::Number(_) + | Constant::Null + | Constant::Bool(_) + ) + .then_some((key, value)) + }) + .collect(); + Some(Constant::Record(Rc::new(entries?))) + })? + } else { + values.operand(init)? + }; + if matches!(&value, Constant::Number(number) if !number.is_finite()) { + return None; + } + (matches!( + value, + Constant::String(_) + | Constant::Number(_) + | Constant::Null + | Constant::Bool(_) + | Constant::Undefined + ) || (copy_symbols.contains(symbol) && matches!(value, Constant::Record(_)))) + .then_some((*symbol, value)) + }) + .collect(); + if resolved.is_empty() { + break; + } + for (symbol, value) in resolved { + pending.remove(&symbol); + symbols.insert(symbol, value); + } + } scope.scoped = Some(scoping); + scope.exact.extend(symbols.iter().map(|(symbol, value)| { + ( + *symbol, + (local_ends.get(symbol).copied().unwrap_or(0), value.clone()), + ) + })); ScopedLocals { scope: &mut scope, modules: &mut modules, @@ -857,11 +1027,13 @@ fn inline_in<'a>( || has_callbacks { let aliases = local_capture_reads::aliases(program, scoping, &shapes, &captures); - let deferred = local_capture_reads::deferred_reads(program, scoping); let mut inline = Inline { ast_builder, scoping, + initialization: &initialization, symbols: &symbols, + copy_symbols: ©_symbols, + style_object_symbols: &style_object_symbols, shapes: &shapes, aliases: &aliases, deferred: &deferred, @@ -874,6 +1046,7 @@ fn inline_in<'a>( css_props: &css_props, css_failures: &mut inlined.css_failures, unknown: &mut inlined.unknown, + rule_spreads: &mut inlined.rule_spreads, objects: false, styles: false, px: false, @@ -1103,6 +1276,9 @@ struct StyleReads<'s> { style: &'s StyleSymbols<'s>, css_props: &'s CssTakers<'s>, names: FxHashSet, + symbols: FxHashSet, + references: FxHashSet, + object_references: FxHashSet, /// Local bindings demanded by genuine style positions, separate from /// the root names used for module lookup and diagnostics. locals: FxHashSet, @@ -1112,6 +1288,17 @@ struct StyleReads<'s> { class_names: Vec, } +fn component_style_object_attribute(attribute: &JSXAttributeItem<'_>) -> bool { + match attribute { + JSXAttributeItem::Attribute(attribute) => { + matches!(&attribute.name, oxc_ast::ast::JSXAttributeName::Identifier(name) + if !css::is_special_property::is_special_property(&name.name) + && !matches!(name.name.as_str(), "as" | "props" | "styleVars")) + } + JSXAttributeItem::SpreadAttribute(_) => true, + } +} + impl StyleReads<'_> { fn reading(&mut self, style: bool, walk: impl FnOnce(&mut Self) -> T) -> T { self.depth += usize::from(style); @@ -1124,6 +1311,9 @@ impl StyleReads<'_> { impl<'a> Visit<'a> for StyleReads<'_> { fn visit_identifier_reference(&mut self, identifier: &IdentifierReference<'a>) { if self.depth > 0 { + self.references.extend(identifier.reference_id.get()); + self.symbols + .extend(binding_of(self.style.scoping, identifier)); if reads_top_level(self.style.scoping, identifier) { self.names.insert(identifier.name.to_string()); } else if let Some(symbol) = binding_of(self.style.scoping, identifier) { @@ -1151,8 +1341,13 @@ impl<'a> Visit<'a> for StyleReads<'_> { .property(call, |identifier| self.style.has(identifier)); self.reading(style, |reads| { for (index, argument) in call.arguments.iter().enumerate() { - match (css, argument) { - (Some(css), Argument::ObjectExpression(props)) if index == 1 => { + match ( + css, + argument + .as_expression() + .map(crate::utils::unwrap_syntax_only), + ) { + (Some(css), Some(Expression::ObjectExpression(props))) if index == 1 => { for (at, property) in props.properties.iter().enumerate() { reads.reading(at == css, |reads| { reads.visit_object_property_kind(property); @@ -1180,6 +1375,22 @@ impl<'a> Visit<'a> for StyleReads<'_> { fn visit_jsx_opening_element(&mut self, element: &oxc_ast::ast::JSXOpeningElement<'a>) { let style = self.style.is_component(&element.name); for attribute in &element.attributes { + if style && component_style_object_attribute(attribute) { + let expression = match attribute { + JSXAttributeItem::Attribute(attribute) => match &attribute.value { + Some(oxc_ast::ast::JSXAttributeValue::ExpressionContainer(container)) => { + container.expression.as_expression() + } + _ => None, + }, + JSXAttributeItem::SpreadAttribute(spread) => Some(&spread.argument), + }; + if let Some(Expression::Identifier(identifier)) = + expression.map(crate::utils::unwrap_syntax_only) + { + self.object_references.extend(identifier.reference_id.get()); + } + } let style = style || self .css_props @@ -1530,6 +1741,11 @@ struct ModuleScope<'p, 'a> { source: Option<&'p str>, locals: FxHashMap, declarations: FxHashMap>, + enums: FxHashMap>, + enum_members: Option<( + &'p oxc_ast::ast::TSEnumDeclaration<'a>, + FxHashMap, + )>, active: FxHashSet, resolving_css: bool, imports: FxHashMap, @@ -1560,6 +1776,8 @@ impl<'p, 'a> ModuleScope<'p, 'a> { source, locals: FxHashMap::default(), declarations: FxHashMap::default(), + enums: FxHashMap::default(), + enum_members: None, active: FxHashSet::default(), resolving_css: false, imports: FxHashMap::default(), @@ -1765,8 +1983,13 @@ impl<'p, 'a> ModuleScope<'p, 'a> { fn binds(&self, name: &str) -> bool { self.declarations.contains_key(name) + || self.enums.contains_key(name) || self.imports.contains_key(name) || self.locals.contains_key(name) + || self + .semantic_scoping() + .get_root_binding(name.into()) + .is_some() } fn is_global_math(&self, expression: &Expression<'_>) -> bool { @@ -1784,29 +2007,38 @@ impl<'p, 'a> ModuleScope<'p, 'a> { } } - /// Record the members of an enum whose values are literals, up to the - /// first that is computed, returning its name - fn declare_enum(&mut self, declaration: &oxc_ast::ast::TSEnumDeclaration<'_>) -> String { + /// Record an enum for lazy evaluation after module bindings are collected. + fn declare_enum(&mut self, declaration: &'p oxc_ast::ast::TSEnumDeclaration<'a>) -> String { let name = declaration.id.name.to_string(); - if declaration.declare { - return name; + if !declaration.declare { + self.enums.insert(name.clone(), declaration); } + name + } + + fn evaluate_enum( + &mut self, + modules: &mut Modules<'_>, + declaration: &'p oxc_ast::ast::TSEnumDeclaration<'a>, + ) -> Constant { + let name = declaration.id.name.to_string(); let mut members = FxHashMap::default(); let mut next = Some(0.0); + let outer = self.enum_members.take(); for member in &declaration.body.members { + self.locals + .insert(name.clone(), Constant::Object(Rc::new(members.clone()))); + self.enum_members = Some((declaration, members.clone())); let value = match &member.initializer { None => next.map(Constant::Number), - Some(Expression::StringLiteral(literal)) => literal - .value - .as_str() - .map(|text| Constant::String(text.to_string())), - Some(initializer) => { - crate::utils::js_number_literal(initializer).map(Constant::Number) - } + Some(initializer) => self.evaluate(modules, initializer), }; - let Some(value) = value else { + let Some(value @ (Constant::String(_) | Constant::Number(_))) = value else { break; }; + if matches!(&value, Constant::Number(number) if !number.is_finite()) { + break; + } next = match &value { Constant::Number(number) => Some(number + 1.0), _ => None, @@ -1816,16 +2048,23 @@ impl<'p, 'a> ModuleScope<'p, 'a> { }; members.insert(key.to_string(), value); } - self.locals - .insert(name.clone(), Constant::Object(Rc::new(members))); - name + self.enum_members = outer; + Constant::Object(Rc::new(members)) } fn import(&mut self, import: &oxc_ast::ast::ImportDeclaration<'_>) { + if import.import_kind.is_type() { + return; + } let Some(source) = import.source.value.as_str() else { return; }; for specifier in import.specifiers.iter().flatten() { + if matches!(specifier, ImportDeclarationSpecifier::ImportSpecifier(specifier) + if specifier.import_kind.is_type()) + { + continue; + } let imported = match specifier { ImportDeclarationSpecifier::ImportSpecifier(specifier) => { Imported::Named(specifier.imported.name().to_string()) @@ -1852,7 +2091,13 @@ impl<'p, 'a> ModuleScope<'p, 'a> { else { continue; }; - if callee.name != "require" { + let scoping = self.semantic_scoping(); + if callee.name != "require" + || callee + .reference_id + .get() + .is_none_or(|reference| scoping.get_reference(reference).symbol_id().is_some()) + { continue; } let Some(source) = source.value.as_str().map(str::to_string) else { @@ -1916,6 +2161,11 @@ impl<'p, 'a> ModuleScope<'p, 'a> { if let Some(constant) = self.locals.get(name) { return Some(constant.clone()); } + if let Some(declaration) = self.enums.remove(name) { + let value = self.evaluate_enum(modules, declaration); + self.locals.insert(name.to_string(), value.clone()); + return Some(value); + } if self.active.contains(name) { return self .resolving_css @@ -1969,16 +2219,20 @@ impl<'p, 'a> ModuleScope<'p, 'a> { /// Whether `identifier` reads a binding of the module's top level, where /// the imports bind, and not a local of a function or block fn reads_top_level_binding(&self, identifier: &IdentifierReference<'_>) -> bool { - let scoping = self.shared_scoping.unwrap_or_else(|| { + let scoping = self.semantic_scoping(); + binding_of(scoping, identifier) + .is_some_and(|symbol| scoping.symbol_scope_id(symbol) == scoping.root_scope_id()) + } + + fn semantic_scoping(&self) -> &Scoping { + self.shared_scoping.unwrap_or_else(|| { self.scoping.get_or_init(|| { SemanticBuilder::new() .build(self.program) .semantic .into_scoping() }) - }); - binding_of(scoping, identifier) - .is_some_and(|symbol| scoping.symbol_scope_id(symbol) == scoping.root_scope_id()) + }) } /// A value `StyleX` gives when this module's own extraction reads it, with @@ -2128,9 +2382,14 @@ impl<'p, 'a> ModuleScope<'p, 'a> { Expression::NullLiteral(_) => Some(Constant::Null), Expression::BooleanLiteral(literal) => Some(Constant::Bool(literal.value)), Expression::Identifier(identifier) - if identifier.name == "undefined" && self.is_global(identifier) => + if matches!(identifier.name.as_str(), "undefined" | "NaN" | "Infinity") + && self.is_global(identifier) => { - Some(Constant::Undefined) + Some(match identifier.name.as_str() { + "NaN" => Constant::Number(f64::NAN), + "Infinity" => Constant::Number(f64::INFINITY), + _ => Constant::Undefined, + }) } Expression::ObjectExpression(object) => Some(self.object(modules, object)), Expression::ArrayExpression(array) => { @@ -2152,16 +2411,31 @@ impl<'p, 'a> ModuleScope<'p, 'a> { } Expression::ComputedMemberExpression(member) => { let key = js_string(&self.evaluate(modules, &member.expression)?)?; + if self.is_global_math(&member.object) { + return math_constant(&key); + } member_of(&self.evaluate(modules, &member.object)?, &key) } - Expression::Identifier(identifier) => match self.scoped { - Some(scoping) => { - let reference = scoping.get_reference(identifier.reference_id.get()?); - let (end, value) = self.exact.get(&reference.symbol_id()?)?; - (identifier.span.start >= *end).then(|| value.clone()) + Expression::Identifier(identifier) => { + if let Some((declaration, members)) = &self.enum_members + && declaration.span.contains_inclusive(identifier.span) + && declaration + .body + .members + .iter() + .any(|member| member.id.static_name() == identifier.name) + { + return members.get(identifier.name.as_str()).cloned(); } - None => self.lookup(modules, &identifier.name), - }, + match self.scoped { + Some(scoping) => { + let reference = scoping.get_reference(identifier.reference_id.get()?); + let (end, value) = self.exact.get(&reference.symbol_id()?)?; + (identifier.span.start >= *end).then(|| value.clone()) + } + None => self.lookup(modules, &identifier.name), + } + } Expression::StaticMemberExpression(member) if self.is_global_math(&member.object) => { math_constant(member.property.name.as_str()) } @@ -2169,23 +2443,26 @@ impl<'p, 'a> ModuleScope<'p, 'a> { &self.evaluate(modules, &member.object)?, member.property.name.as_str(), ), - Expression::CallExpression(call) => match &call.callee { - Expression::StaticMemberExpression(callee) - if self.is_global_math(&callee.object) => + Expression::CallExpression(call) => { + if let Some(name) = math_member(&call.callee, &|object| self.is_global_math(object)) { let mut arguments = Vec::with_capacity(call.arguments.len()); for argument in &call.arguments { arguments.push(self.evaluate(modules, argument.as_expression()?)?); } - fold_math(callee.property.name.as_str(), &arguments) - } - _ if self.scoped.is_some() => None, - callee if self.is_style_api(modules, callee) => Some( - self.css_styles(modules, call) - .unwrap_or(Constant::Style(None)), - ), - _ => self.evaluate_stylex(modules, call), - }, + return fold_math(&name, &arguments); + } + if self.scoped.is_some() { + return None; + } + if self.is_style_api(modules, &call.callee) { + return Some( + self.css_styles(modules, call) + .unwrap_or(Constant::Style(None)), + ); + } + self.evaluate_stylex(modules, call) + } Expression::TaggedTemplateExpression(tagged) if self.scoped.is_none() && self.is_style_api(modules, &tagged.tag) => { @@ -2209,6 +2486,7 @@ impl<'p, 'a> ModuleScope<'p, 'a> { let mut entries: Vec<(String, Constant)> = Vec::with_capacity(object.properties.len()); let mut complete = true; for property in &object.properties { + let own_proto = matches!(property, ObjectPropertyKind::ObjectProperty(property) if property.computed); let (key, value) = match property { ObjectPropertyKind::ObjectProperty(property) if property.kind == oxc_ast::ast::PropertyKind::Init => @@ -2241,7 +2519,7 @@ impl<'p, 'a> ModuleScope<'p, 'a> { } }; match (key, value) { - (Some(key), Some(value)) if key != "__proto__" => { + (Some(key), Some(value)) if key != "__proto__" || own_proto => { set_entry(&mut entries, key, value); } (Some(key), _) => { @@ -2267,7 +2545,7 @@ impl<'p, 'a> ModuleScope<'p, 'a> { mod local_exact_constants_tests; #[path = "local_rule_shapes.rs"] -mod local_rule_shapes; +pub(crate) mod local_rule_shapes; #[path = "local_capture_reads.rs"] mod local_capture_reads; @@ -2357,61 +2635,50 @@ fn fold_template( } fn math_constant(name: &str) -> Option { - use std::f64::consts; - let value = match name { - "PI" => consts::PI, - "E" => consts::E, - "LN2" => consts::LN_2, - "LN10" => consts::LN_10, - "LOG2E" => consts::LOG2_E, - "LOG10E" => consts::LOG10_E, - "SQRT2" => consts::SQRT_2, - "SQRT1_2" => consts::FRAC_1_SQRT_2, - _ => return None, - }; - Some(Constant::Number(value)) + crate::build_time_values::exact_math::evaluate(name, None).map(Constant::Number) +} + +fn math_member<'a>( + expression: &Expression<'a>, + is_math: &dyn Fn(&Expression<'a>) -> bool, +) -> Option { + match expression { + Expression::StaticMemberExpression(member) if is_math(&member.object) => { + Some(member.property.name.to_string()) + } + Expression::ComputedMemberExpression(member) if is_math(&member.object) => { + crate::utils::get_string_by_literal_expression(&member.expression) + .map(std::borrow::Cow::into_owned) + } + _ => None, + } } /// `Math.{name}(...arguments)`, folded only where every engine computes the /// same result, so the CSS never depends on the platform that builds it fn fold_math(name: &str, arguments: &[Constant]) -> Option { - let mut numbers = Vec::with_capacity(arguments.len()); - for argument in arguments { - let Constant::Number(number) = argument else { + use crate::build_time_values::exact_math::{Operand, evaluate}; + if name == "pow" { + let (Some(Constant::Number(base)), Some(Constant::Number(exponent))) = + (arguments.first(), arguments.get(1)) + else { return None; }; - numbers.push(*number); - } - let first = numbers.first().copied(); - let value = match name { - "abs" => first?.abs(), - "ceil" => first?.ceil(), - "floor" => first?.floor(), - "trunc" => first?.trunc(), - "sqrt" => first?.sqrt(), - "sign" => { - let x = first?; - if x > 0.0 { - 1.0 - } else if x < 0.0 { - -1.0 - } else { - x - } - } - // JavaScript rounds a half up, toward +Infinity, where Rust rounds it - // away from zero; `x - floor(x)` is exact for every double - "round" => { - let x = first?; - let floor = x.floor(); - if x - floor >= 0.5 { floor + 1.0 } else { floor } - } - "max" => numbers.iter().copied().fold(f64::NEG_INFINITY, f64::max), - "min" => numbers.iter().copied().fold(f64::INFINITY, f64::min), - "pow" => exact_power(first?, *numbers.get(1)?)?, - _ => return None, - }; - value.is_finite().then_some(Constant::Number(value)) + return exact_power(*base, *exponent).map(Constant::Number); + } + let mut operands = Vec::with_capacity(arguments.len()); + for argument in arguments { + let operand = match argument { + Constant::Number(number) => Operand::Number(*number), + Constant::String(text) => Operand::String(text), + Constant::Bool(value) => Operand::Bool(*value), + Constant::Null => Operand::Null, + Constant::Undefined => Operand::Undefined, + _ => return None, + }; + operands.push(operand); + } + evaluate(name, Some(&operands)).map(Constant::Number) } /// An integer raised to a whole power, when the result is an exact integer @@ -2464,7 +2731,12 @@ enum InlinePosition { struct Inline<'s, 'a> { ast_builder: &'s AstBuilder<'a>, scoping: &'s Scoping, + initialization: &'s initialization::Initialization, symbols: &'s FxHashMap, + /// Only bindings whose every original read is an object-copy site may be + /// substituted into native pass-through spreads. + copy_symbols: &'s FxHashSet, + style_object_symbols: &'s FxHashSet, shapes: &'s FxHashMap>, aliases: &'s FxHashMap, deferred: &'s FxHashSet, @@ -2474,6 +2746,7 @@ struct Inline<'s, 'a> { css_props: &'s CssTakers<'s>, css_failures: &'s mut Vec, unknown: &'s mut Unknown, + rule_spreads: &'s mut FxHashSet, /// Inside what the build reads as style objects objects: bool, /// Inside the arguments of a style API or a style prop @@ -2495,15 +2768,26 @@ struct Inline<'s, 'a> { class_names: Vec, } -impl<'a> Inline<'_, 'a> { - fn constant(&self, expression: &Expression<'a>) -> Option { +/// Pure constant reads shared by dependency resolution and the mutating visit. +struct ConstantReads<'s> { + scoping: &'s Scoping, + initialization: &'s initialization::Initialization, + symbols: &'s FxHashMap, + local_ends: &'s FxHashMap, + deferred: &'s FxHashSet, +} + +impl ConstantReads<'_> { + fn constant(&self, expression: &Expression<'_>) -> Option { match expression { Expression::Identifier(identifier) => { let reference = identifier.reference_id.get()?; let symbol = self.scoping.get_reference(reference).symbol_id()?; - if self.local_ends.get(&symbol).is_some_and(|end| { - identifier.span.start < *end && !self.deferred.contains(&reference) - }) { + if !self.initialization.allows(identifier) + || self.local_ends.get(&symbol).is_some_and(|end| { + identifier.span.start < *end && !self.deferred.contains(&reference) + }) + { return None; } self.symbols.get(&symbol).cloned() @@ -2516,30 +2800,23 @@ impl<'a> Inline<'_, 'a> { member.property.name.as_str(), ), Expression::CallExpression(call) => { - let Expression::StaticMemberExpression(callee) = &call.callee else { - return None; - }; - if !self.is_global_math(&callee.object) { - return None; - } + let name = math_member(&call.callee, &|object| self.is_global_math(object))?; let arguments: Option> = call .arguments .iter() .map(|argument| self.operand(argument.as_expression()?)) .collect(); - fold_math(callee.property.name.as_str(), &arguments?) + fold_math(&name, &arguments?) } Expression::ComputedMemberExpression(member) => { let key = js_string(&self.operand(&member.expression)?)?; + if self.is_global_math(&member.object) { + return math_constant(&key); + } member_of(&self.constant(&member.object)?, &key) } // Folded only when they read a constant, leaving other code as written - Expression::TemplateLiteral(template) - if template - .expressions - .iter() - .any(|e| self.constant(e).is_some()) => - { + Expression::TemplateLiteral(template) => { let values: Option> = template .expressions .iter() @@ -2547,16 +2824,11 @@ impl<'a> Inline<'_, 'a> { .collect(); fold_template(template, &values?) } - Expression::BinaryExpression(binary) - if self.constant(&binary.left).is_some() - || self.constant(&binary.right).is_some() => - { - fold_binary( - binary.operator, - &self.operand(&binary.left)?, - &self.operand(&binary.right)?, - ) - } + Expression::BinaryExpression(binary) => fold_binary( + binary.operator, + &self.operand(&binary.left)?, + &self.operand(&binary.right)?, + ), Expression::UnaryExpression(unary) if unary.operator == oxc_syntax::operator::UnaryOperator::UnaryNegation => { @@ -2566,12 +2838,14 @@ impl<'a> Inline<'_, 'a> { } } Expression::ParenthesizedExpression(inner) => self.constant(&inner.expression), + Expression::TSAsExpression(inner) => self.operand(&inner.expression), + Expression::TSSatisfiesExpression(inner) => self.operand(&inner.expression), _ => None, } } /// A constant read or a literal - fn operand(&self, expression: &Expression<'a>) -> Option { + fn operand(&self, expression: &Expression<'_>) -> Option { self.constant(expression).or_else(|| match expression { Expression::StringLiteral(literal) => literal .value @@ -2579,10 +2853,128 @@ impl<'a> Inline<'_, 'a> { .map(|text| Constant::String(text.to_string())), Expression::BooleanLiteral(literal) => Some(Constant::Bool(literal.value)), Expression::NullLiteral(_) => Some(Constant::Null), + Expression::Identifier(identifier) + if binding_of(self.scoping, identifier).is_none() => + { + match identifier.name.as_str() { + "undefined" => Some(Constant::Undefined), + "NaN" => Some(Constant::Number(f64::NAN)), + "Infinity" => Some(Constant::Number(f64::INFINITY)), + _ => None, + } + } _ => crate::utils::js_number_literal(expression).map(Constant::Number), }) } + fn is_global_math(&self, expression: &Expression<'_>) -> bool { + matches!(expression, Expression::Identifier(identifier) + if identifier.name == "Math" + && identifier.reference_id.get().is_some_and(|reference| { + self.scoping.get_reference(reference).symbol_id().is_none() + })) + } +} + +impl<'a> Inline<'_, 'a> { + const fn values(&self) -> ConstantReads<'_> { + ConstantReads { + scoping: self.scoping, + initialization: self.initialization, + symbols: self.symbols, + local_ends: &self.local_ends, + deferred: self.deferred, + } + } + + fn constant(&self, expression: &Expression<'a>) -> Option { + // Static templates already have literal readers; retain their authored diagnostics. + if matches!( + crate::utils::unwrap_syntax_only(expression), + Expression::TemplateLiteral(template) if template.expressions.is_empty() + ) { + return None; + } + self.values().constant(expression) + } + + fn proven_copy(&self, expression: &Expression<'a>) -> bool { + matches!(crate::utils::unwrap_syntax_only(expression), Expression::Identifier(identifier) + if binding_of(self.scoping, identifier) + .is_some_and(|symbol| self.copy_symbols.contains(&symbol)) + && self.initialization.allows(identifier)) + } + + fn known_record_spread(&self, expression: &Expression<'a>) -> bool { + let mut own_member = expression.span().start > 0 + && expression.span().end > expression.span().start + && matches!( + crate::utils::unwrap_syntax_only(expression), + Expression::StaticMemberExpression(_) | Expression::ComputedMemberExpression(_) + ); + let mut root = crate::utils::unwrap_syntax_only(expression); + loop { + root = match root { + Expression::StaticMemberExpression(member) => { + own_member &= !member.optional; + crate::utils::unwrap_syntax_only(&member.object) + } + Expression::ComputedMemberExpression(member) => { + own_member &= !member.optional + && matches!( + crate::utils::unwrap_syntax_only(&member.expression), + Expression::StringLiteral(_) + ); + crate::utils::unwrap_syntax_only(&member.object) + } + _ => break, + }; + } + matches!(self.constant(expression), Some(Constant::Record(_))) + && root_reference(root) + .and_then(|identifier| binding_of(self.scoping, identifier)) + .is_some_and(|symbol| { + !self.local_ends.contains_key(&symbol) + || (own_member + && root.span().start > 0 + && matches!(self.constant(root), Some(Constant::Record(_)))) + || (self.style_object_symbols.contains(&symbol) + && matches!(crate::utils::unwrap_syntax_only(expression), Expression::Identifier(identifier) + if self.initialization.allows(identifier))) + }) + } + + /// Inline only original, proven own-data arms; an opaque local stays opaque. + fn spread_branch(&mut self, value: &mut Expression<'a>) -> bool { + match crate::utils::unwrap_syntax_only_mut(value) { + Expression::ConditionalExpression(branch) => { + self.reading_objects(false, |inline| inline.visit_expression(&mut branch.test)); + let consequent = self.spread_branch(&mut branch.consequent); + self.spread_branch(&mut branch.alternate) || consequent + } + Expression::LogicalExpression(branch) => { + let left = self.spread_branch(&mut branch.left); + self.spread_branch(&mut branch.right) + || (branch.operator != LogicalOperator::And && left) + } + value => { + let own = !crate::visit::is_unknown_spread(value) + || self.known_record_spread(value) + || (self.proven_copy(value) + && matches!(self.constant(value), Some(Constant::Record(_)))); + let rules = (self.known_record_spread(value) || self.proven_copy(value)) + && matches!(self.constant(value), Some(Constant::Record(entries)) + if entries.iter().any(|(key, _)| !css::is_special_property::is_special_property(key))); + self.reading_objects(own, |inline| inline.visit_expression(value)); + rules + } + } + } + + fn operand(&self, expression: &Expression<'a>) -> Option { + self.values().operand(expression) + } + /// Whether a condition reading `expression` holds, when it is a constant /// read or a literal fn holds(&self, expression: &Expression<'a>) -> Option { @@ -2639,16 +3031,6 @@ impl<'a> Inline<'_, 'a> { } } - fn is_global_math(&self, expression: &Expression<'a>) -> bool { - matches!(expression, Expression::Identifier(identifier) - if identifier.name == "Math" - && identifier - .reference_id - .get() - .and_then(|reference| self.scoping.get_reference(reference).symbol_id()) - .is_none()) - } - fn literal(&self, constant: &Constant) -> Option> { constant_literal(self.ast_builder, constant, self.objects) } @@ -2766,7 +3148,7 @@ fn constant_literal<'a>( None, builder, )), - Constant::Number(value) => Some(Expression::new_numeric_literal( + Constant::Number(value) if value.is_finite() => Some(Expression::new_numeric_literal( SPAN, *value, None, @@ -2790,7 +3172,7 @@ fn constant_literal<'a>( constant_literal(builder, value, objects)?, false, false, - false, + key == "__proto__", builder, )); } @@ -2808,6 +3190,62 @@ fn constant_literal<'a>( } impl<'a> VisitMut<'a> for Inline<'_, 'a> { + fn visit_jsx_spread_attribute(&mut self, spread: &mut oxc_ast::ast::JSXSpreadAttribute<'a>) { + while self.styles + && self.objects + && let Some(chosen) = + self.chosen(crate::utils::unwrap_syntax_only_mut(&mut spread.argument)) + { + spread.argument = chosen; + } + if self.styles + && self.objects + && matches!( + crate::utils::unwrap_syntax_only(&spread.argument), + Expression::ConditionalExpression(_) + ) + { + let offset = crate::utils::unwrap_syntax_only(&spread.argument) + .span() + .start; + if self.spread_branch(&mut spread.argument) { + self.rule_spreads.insert(offset); + } + return; + } + if self.proven_copy(&spread.argument) + || (self.styles && self.objects && self.known_record_spread(&spread.argument)) + || !crate::visit::is_unknown_spread(&spread.argument) + { + walk_mut::walk_jsx_spread_attribute(self, spread); + } else { + self.reading_styles(false, |inline| { + inline.reading_objects(false, |inline| { + walk_mut::walk_jsx_spread_attribute(inline, spread); + }); + }); + if !crate::visit::is_unknown_spread(&spread.argument) { + self.visit_expression(&mut spread.argument); + } + } + } + + fn visit_object_property_kind(&mut self, property: &mut ObjectPropertyKind<'a>) { + if let ObjectPropertyKind::SpreadProperty(spread) = property + && !self.styles + && let Expression::Identifier(identifier) = + crate::utils::unwrap_syntax_only(&spread.argument) + && binding_of(self.scoping, identifier) + .is_some_and(|symbol| self.copy_symbols.contains(&symbol)) + && let Some(value @ Constant::Record(_)) = self.constant(&spread.argument) + && let Some(literal) = constant_literal(self.ast_builder, &value, true) + { + self.replaced.consume(&spread.argument); + spread.argument = literal; + } else { + walk_mut::walk_object_property_kind(self, property); + } + } fn visit_formal_parameters(&mut self, parameters: &mut oxc_ast::ast::FormalParameters<'a>) { let outer_px = std::mem::replace(&mut self.px, false); let outer_role = std::mem::replace(&mut self.numeric_role, NumericRole::Other); @@ -2860,6 +3298,7 @@ impl<'a> VisitMut<'a> for Inline<'_, 'a> { && self.local_ends.get(&symbol).is_some_and(|end| { identifier.span.start >= *end || self.deferred.contains(&reference) }) + && self.initialization.allows(identifier) && let Some(shape) = self.shapes.get(&symbol) { let root = match self.aliases.get(&symbol) { @@ -3046,11 +3485,15 @@ impl<'a> VisitMut<'a> for Inline<'_, 'a> { self.reading_styles(styles, |inline| { inline.reading_objects(objects, |inline| { for (index, argument) in call.arguments.iter_mut().enumerate() { - match (css, argument) { - (Some(css), Argument::ObjectExpression(props)) if index == 1 => { - inline.compiled_css_props(props, css); - } - (_, argument) => inline.visit_argument(argument), + if let Some(css) = css + && index == 1 + && let Some(Expression::ObjectExpression(props)) = argument + .as_expression_mut() + .map(crate::utils::unwrap_syntax_only_mut) + { + inline.compiled_css_props(props, css); + } else { + inline.visit_argument(argument); } } }); @@ -3084,15 +3527,7 @@ impl<'a> VisitMut<'a> for Inline<'_, 'a> { self.numeric_role = outer; continue; } - let objects = styled - && match attribute { - JSXAttributeItem::Attribute(attribute) => { - matches!(&attribute.name, oxc_ast::ast::JSXAttributeName::Identifier(name) - if !css::is_special_property::is_special_property(&name.name) - && !matches!(name.name.as_str(), "as" | "props" | "styleVars")) - } - JSXAttributeItem::SpreadAttribute(_) => true, - }; + let objects = styled && component_style_object_attribute(attribute); self.reading_styles(objects, |inline| { inline .reading_objects(objects, |inline| inline.visit_jsx_attribute_item(attribute)); @@ -3140,6 +3575,14 @@ impl<'a> VisitMut<'a> for Inline<'_, 'a> { } } +#[cfg(test)] +mod exact_edge_tests; +#[cfg(test)] +mod exact_math_tests; +#[cfg(test)] +mod exact_tests; +#[cfg(test)] +mod numeric_semantics_tests; #[cfg(test)] #[path = "imported_constants_package_boundary_tests.rs"] mod package_boundary_tests; @@ -3147,3 +3590,5 @@ mod package_boundary_tests; mod scope_tests; #[cfg(test)] mod stylex_scope_tests; +#[cfg(test)] +mod tdz_tests; diff --git a/libs/extractor/src/imported_constants/exact_edge_tests.rs b/libs/extractor/src/imported_constants/exact_edge_tests.rs new file mode 100644 index 000000000..c51bd3a84 --- /dev/null +++ b/libs/extractor/src/imported_constants/exact_edge_tests.rs @@ -0,0 +1,57 @@ +use super::exact_tests::{extracted, static_values}; + +#[test] +#[serial_test::serial] +fn math_members_when_computed_names_are_literal() { + for imported in [false, true] { + let declaration = if imported { + "import { N, C } from './values';" + } else { + "const N = Math['imul'](3, 4); const C = Math['PI'];" + }; + let output = extracted(&format!("import {{ Box }} from '@devup-ui/react'; {declaration} export const view = ;"), "export const N = Math['imul'](3, 4); export const C = Math['PI'];").unwrap_or_else(|error| panic!("math_members_when_computed_names_are_literal: {error}")); + let values = static_values(&output); + assert!(values.contains(&"12".to_string()), "{values:?}"); + assert!( + values.contains(&"3.141592653589793".to_string()), + "{values:?}" + ); + } +} + +#[test] +#[serial_test::serial] +fn math_members_when_names_or_callable_values_are_unknown() { + for expression in [ + "Math[key](1)", + "Math.abs", + "Math.PI(1)", + "Math['random']()", + "Math['UNKNOWN']", + ] { + assert!(extracted("import { css } from '@devup-ui/react'; import { N } from './values'; css({ zIndex: N });", &format!("export const N = {expression};")).is_err(), "{expression}"); + } +} + +#[test] +#[serial_test::serial] +fn imported_values_when_nonfinite_numbers_stay_dynamic() { + let output = extracted("import { Box } from '@devup-ui/react'; import { N } from './values'; export const view = ;", "export const N = Infinity;").unwrap_or_else(|error| panic!("imported_values_when_nonfinite_numbers_stay_dynamic: {error}")); + assert!(output.code.contains("--"), "{}", output.code); +} + +#[test] +#[serial_test::serial] +fn nested_constants_when_undefined_and_negative_numbers_select_styles() { + let output = extracted("import { Box } from '@devup-ui/react'; export function f() { const empty = undefined; const n = -3; const alias = -n; const object = { value: 8 }; return ; }", "").unwrap_or_else(|error| panic!("nested_constants_when_undefined_and_negative_numbers_select_styles: {error}")); + let values = static_values(&output); + assert!(values.contains(&"3".to_string()), "{values:?}"); + assert!(values.contains(&"green".to_string()), "{values:?}"); +} + +#[test] +#[serial_test::serial] +fn enums_when_prior_siblings_include_exact_math() { + let output = extracted("import { css } from '@devup-ui/react'; import { E } from './values'; css({ zIndex: E.C });", "enum Other { A = 4, B = A + 1 } export enum E { A = Math.imul(2, 3), B = Other.B + A, C = E.B + 1 }").unwrap_or_else(|error| panic!("enums_when_prior_siblings_include_exact_math: {error}")); + assert_eq!(static_values(&output), vec!["12".to_string()]); +} diff --git a/libs/extractor/src/imported_constants/exact_math_tests.rs b/libs/extractor/src/imported_constants/exact_math_tests.rs new file mode 100644 index 000000000..60f97628d --- /dev/null +++ b/libs/extractor/src/imported_constants/exact_math_tests.rs @@ -0,0 +1,69 @@ +use super::exact_tests::{extracted, static_values}; + +#[test] +#[serial_test::serial] +fn fn09_math_when_local_and_imported_values_are_exact() { + for (expression, expected) in [ + ("Math.abs(-2)", "2"), + ("Math.ceil(1.2)", "2"), + ("Math.floor(1.8)", "1"), + ("Math.round(-2.5)", "-2"), + ("Math.trunc(-1.8)", "-1"), + ("Math.sign(-2)", "-1"), + ("Math.max(1, 3, 2)", "3"), + ("Math.min(1, -3, 2)", "-3"), + ("Math.sqrt(4)", "2"), + ("Math.fround(16777217)", "16777216"), + ("Math.imul(4294967295, 5)", "-5"), + ("Math.clz32(0)", "32"), + ("Math.PI", "3.141592653589793"), + ("Math.E", "2.718281828459045"), + ("Math.LN2", "0.6931471805599453"), + ("Math.LN10", "2.302585092994046"), + ("Math.LOG2E", "1.4426950408889634"), + ("Math.LOG10E", "0.4342944819032518"), + ("Math.SQRT2", "1.4142135623730951"), + ("Math.SQRT1_2", "0.7071067811865476"), + ("Math.imul(2147483647, 2)", "-2"), + ("Math.imul(3.9, 2.9)", "6"), + ("Math.clz32(-1)", "0"), + ("Math.clz32(4294967297)", "31"), + ("Math.fround(0.1)", "0.10000000149011612"), + ("Math.round(-0.5)", "0"), + ("Math.sign(-0)", "0"), + ("Math.max(-0, 0)", "0"), + ("Math.min(0, -0)", "0"), + ("Math.imul('3.9', true)", "3"), + ("Math.clz32(null)", "32"), + ("Math.clz32(undefined)", "32"), + ("Math.clz32(NaN)", "32"), + ("Math.clz32(Infinity)", "32"), + ("Math.max('1', 2)", "2"), + ] { + for imported in [false, true] { + let module = format!("export const VALUE = {expression};"); + let binding = if imported { + "import { VALUE } from './values';".to_string() + } else { + format!("function compute() {{ return {expression}; }} const VALUE = compute();") + }; + let output = extracted(&format!("import {{ css }} from '@devup-ui/react'; {binding} export const s = css({{ zIndex: VALUE }});"), &module).unwrap_or_else(|error| panic!("{expression}, imported={imported}: {error}")); + assert_eq!( + static_values(&output) + .iter() + .map(|value| value + .parse::() + .unwrap_or_else(|error| panic!("parse f64: {error}")) + .to_bits()) + .collect::>(), + vec![ + expected + .parse::() + .unwrap_or_else(|error| panic!("parse expected f64: {error}")) + .to_bits() + ], + "{expression}, imported={imported}" + ); + } + } +} diff --git a/libs/extractor/src/imported_constants/exact_tests.rs b/libs/extractor/src/imported_constants/exact_tests.rs new file mode 100644 index 000000000..85d9f4382 --- /dev/null +++ b/libs/extractor/src/imported_constants/exact_tests.rs @@ -0,0 +1,215 @@ +use crate::{ExtractOption, ExtractOutput, ExtractStyleValue, ResolvedModule}; + +pub(super) fn extracted(code: &str, module: &str) -> Result { + css::class_map::reset_class_map(); + css::file_map::reset_file_map(); + let module = module.to_string(); + let resolver = move |specifier: &str, _: &str| { + (specifier == "./values").then(|| ResolvedModule { + path: "/src/values.ts".to_string(), + code: module.clone(), + }) + }; + crate::extract_with_modules( + "/src/App.tsx", + code, + ExtractOption { + import_main_css: false, + ..ExtractOption::default() + }, + false, + &resolver, + ) + .map_err(|error| error.to_string()) +} + +pub(super) fn static_values(output: &ExtractOutput) -> Vec { + output + .styles + .iter() + .filter_map(|style| match style { + ExtractStyleValue::Static(style) => Some(style.value.clone()), + _ => None, + }) + .collect() +} + +#[test] +#[serial_test::serial] +fn fn08_computed_enum_when_preceding_members_are_exact() { + let module = "const STEP = 3; export enum E { A = 2, B = A + STEP, C = E.B + 1, D, Text = 'gr' + 'een' }"; + let output = extracted("import { css } from '@devup-ui/react'; import { E } from './values'; export const s = css({ zIndex: E.B, order: E.C, flexGrow: E.D, color: E.Text });", module).unwrap_or_else(|error| panic!("fn08_computed_enum_when_preceding_members_are_exact: {error}")); + let values = static_values(&output); + for expected in ["5", "6", "7", "green"] { + assert!(values.contains(&expected.to_string()), "{values:?}"); + } +} + +#[test] +#[serial_test::serial] +fn fn08_enum_when_a_member_is_uncertain_or_ambient() { + for module in [ + "export enum E { A = unknown(), B = A + 3, C = 8 }", + "export declare enum E { A = 2, B = 5 }", + "export enum E { A = B + 1, B = 5 }", + "const B = 8; export enum E { A = B + 1, B = 5 }", + "export enum E { A = 'green', B }", + ] { + assert!(extracted("import { css } from '@devup-ui/react'; import { E } from './values'; css({ zIndex: E.B });", module).is_err(), "{module}"); + } +} + +#[test] +#[serial_test::serial] +fn jsx12_primitives_when_lexical_bindings_share_names() { + let output = extracted("import { Box } from '@devup-ui/react'; const color = 'red'; export function f() { const color = 'green'; const n = Math.imul(2, 3); const alias = n + 1; observe(color, alias); return ; } export const g = () => { const color = 'blue'; return ; }; export const top = ;", "").unwrap_or_else(|error| panic!("jsx12_primitives_when_lexical_bindings_share_names: {error}")); + let values = static_values(&output); + for expected in ["red", "green", "blue", "7"] { + assert!(values.contains(&expected.to_string()), "{values:?}"); + } + assert!(!output.code.contains("--"), "{}", output.code); + assert!( + output.code.contains("observe(color, alias)"), + "{}", + output.code + ); +} + +#[test] +#[serial_test::serial] +fn jsx12_primitives_when_nested_scopes_read_imports_and_outer_constants() { + let output = extracted("import { Box } from '@devup-ui/react'; import { BASE } from './values'; const STEP = 2; export function f() { const n = BASE + STEP; { const n = 9; observe(n); } const value = (`${n}px` as const) satisfies string; return ; }", "export const BASE = 5;").unwrap_or_else(|error| panic!("jsx12_primitives_when_nested_scopes_read_imports_and_outer_constants: {error}")); + let mut values = output + .styles + .iter() + .filter_map(|style| match style { + ExtractStyleValue::Static(style) => Some((style.property(), style.value())), + _ => None, + }) + .collect::>(); + values.sort_unstable(); + assert_eq!(values, vec![("width", "7px"), ("z-index", "7")]); + assert_eq!(output.dependencies, vec!["/src/values.ts".to_string()]); +} + +#[test] +#[serial_test::serial] +fn jsx12_constants_when_reads_precede_initialization_or_write_the_binding() { + for body in [ + "const view = ; var color = 'red'; return view;", + "const color = 'red'; color = 'blue'; return ;", + "const a = compute(); const b = a; return ;", + ] { + let output = extracted( + &format!("import {{ Box }} from '@devup-ui/react'; export function f() {{ {body} }}"), + "", + ) + .unwrap_or_else(|error| { + panic!( + "jsx12_constants_when_reads_precede_initialization_or_write_the_binding: {error}" + ) + }); + assert!(output.code.contains("--"), "{body}: {}", output.code); + } +} + +#[test] +#[serial_test::serial] +fn fn09_math_when_results_or_functions_are_uncertain() { + for expression in [ + "Math.sin(1)", + "Math.random()", + "Math.sqrt(-1)", + "Math.max()", + "Math.min()", + "Math.fround(1e100)", + "Math.NOPE(1)", + "Math.imul(unknown(), 2)", + ] { + let module = format!("export const VALUE = {expression};"); + assert!(extracted("import { css } from '@devup-ui/react'; import { VALUE } from './values'; css({ zIndex: VALUE });", &module).is_err(), "{expression}"); + } + for binding in [ + "let Math = source;", + "function Math() {}", + "const Math = { imul: unknown };", + "const undefined = unknown;", + ] { + let module = format!("{binding} export const VALUE = Math.imul(undefined, 2);"); + assert!(extracted("import { css } from '@devup-ui/react'; import { VALUE } from './values'; css({ zIndex: VALUE });", &module).is_err(), "{binding}"); + } +} + +#[test] +fn fn09_signed_zero_when_exact_math_preserves_js_edges() { + use crate::build_time_values::exact_math::{Operand, evaluate}; + for (name, arguments, negative) in [ + ("round", vec![-0.5], true), + ("round", vec![0.5], false), + ("sign", vec![-0.0], true), + ("min", vec![0.0, -0.0], true), + ("max", vec![-0.0, 0.0], false), + ("fround", vec![-0.0], true), + ] { + let arguments: Vec<_> = arguments.into_iter().map(Operand::Number).collect(); + let result = + evaluate(name, Some(&arguments)).unwrap_or_else(|| panic!("evaluate {name} failed")); + assert_eq!(result.is_sign_negative(), negative, "{name}"); + } + for (name, arguments) in [ + ("max", vec![f64::NAN, 1.0]), + ("min", vec![1.0, f64::NAN]), + ("sign", vec![f64::NAN]), + ("round", vec![f64::INFINITY]), + ] { + let arguments: Vec<_> = arguments.into_iter().map(Operand::Number).collect(); + assert_eq!(evaluate(name, Some(&arguments)), None, "{name}"); + } + assert!(super::fold_math("abs", &[super::Constant::Object(std::rc::Rc::default())]).is_none()); +} + +#[test] +#[serial_test::serial] +fn fn08_exact_prefix_when_later_enum_members_are_uncertain() { + let output = extracted("import { css } from '@devup-ui/react'; import { E } from './values'; css({ zIndex: E.A });", "const A = 99; const OFFSET = A; export enum E { A = 2, B = A + OFFSET, C = unknown(), D = 8 }").unwrap_or_else(|error| panic!("fn08_exact_prefix_when_later_enum_members_are_uncertain (E.A): {error}")); + assert_eq!(static_values(&output), vec!["2".to_string()]); + let output = extracted("import { css } from '@devup-ui/react'; import { E } from './values'; css({ zIndex: E.B });", "const A = 99; const OFFSET = A; export enum E { A = 2, B = A + OFFSET }").unwrap_or_else(|error| panic!("fn08_exact_prefix_when_later_enum_members_are_uncertain (E.B): {error}")); + assert_eq!(static_values(&output), vec!["101".to_string()]); +} + +#[test] +#[serial_test::serial] +fn jsx12_primitive_only_when_no_top_level_value_is_read() { + let output = extracted("import { Box } from '@devup-ui/react'; export function f() { const color = 'green'; const n = 3 as const; const yes = true; const empty = null; return ; }", "").unwrap_or_else(|error| panic!("jsx12_primitive_only_when_no_top_level_value_is_read: {error}")); + let values = static_values(&output); + for expected in ["green", "3", "block"] { + assert!(values.contains(&expected.to_string()), "{values:?}"); + } + assert!(!output.code.contains("--"), "{}", output.code); +} + +#[test] +#[serial_test::serial] +fn jsx12_values_when_nonfinite_constants_are_not_style_literals() { + let output = extracted("import { Box } from '@devup-ui/react'; export function f() { const n = Infinity; return ; }", "").unwrap_or_else(|error| panic!("jsx12_values_when_nonfinite_constants_are_not_style_literals: {error}")); + assert!(output.code.contains("--"), "{}", output.code); + assert!(extracted("import { css } from '@devup-ui/react'; import { E } from './values'; css({ zIndex: E.B });", "export enum E { A = Infinity, B }").is_err()); +} + +#[test] +#[serial_test::serial] +fn jsx12_values_when_parameters_mutation_or_uncertainty_prevent_folding() { + for body in [ + "const color = Math.random();", + "let color = 'red'; color = 'blue';", + "const object = { color: 'red' }; object.color = 'blue'; const color = object.color;", + "const Math = source; const color = Math.imul(2, 3);", + "const color = Math.sin(1);", + "const color = parameter;", + ] { + let output = extracted(&format!("import {{ Box }} from '@devup-ui/react'; const color = 'green'; export function f(parameter) {{ {body} return ; }}"), "").unwrap_or_else(|error| panic!("jsx12_values_when_parameters_mutation_or_uncertainty_prevent_folding: {error}")); + assert!(output.code.contains("--"), "{body}: {}", output.code); + } + let output = extracted("import { Box } from '@devup-ui/react'; const color = 'red'; export function f(color) { return ; }", "").unwrap_or_else(|error| panic!("jsx12_values_when_parameters_mutation_or_uncertainty_prevent_folding (param): {error}")); + assert!(output.code.contains("--"), "{}", output.code); +} diff --git a/libs/extractor/src/imported_constants/initialization.rs b/libs/extractor/src/imported_constants/initialization.rs new file mode 100644 index 000000000..3c55c6b4e --- /dev/null +++ b/libs/extractor/src/imported_constants/initialization.rs @@ -0,0 +1,259 @@ +use oxc_ast::ast::{ + ArrowFunctionExpression, CallExpression, Class, ClassElement, Expression, Function, + IdentifierReference, Program, VariableDeclaration, +}; +use oxc_ast_visit::{Visit, walk}; +use oxc_semantic::Scoping; +use oxc_span::{GetSpan, Span}; +use oxc_syntax::{reference::ReferenceId, scope::ScopeFlags, symbol::SymbolId}; +use rustc_hash::{FxHashMap, FxHashSet}; + +#[derive(Clone, Copy)] +enum Read { + Initialized, + Deferred, + Before { + temporal: bool, + at: u32, + symbol: SymbolId, + }, +} + +pub(super) struct Initialization { + reads: FxHashMap, + references: Vec<(ReferenceId, SymbolId, u32, usize)>, +} + +impl Initialization { + pub(super) fn new(program: &Program<'_>, scoping: &Scoping) -> Self { + let mut collector = Collector { + scoping, + bindings: FxHashMap::default(), + references: Vec::new(), + frames: vec![Frame { + parent: 0, + deferred: false, + }], + frame: 0, + invoked: FxHashSet::default(), + }; + collector.visit_program(program); + let reads = collector + .references + .iter() + .map(|&(reference, symbol, at, frame)| { + let read = collector + .bindings + .get(&symbol) + .map_or(Read::Initialized, |binding| { + if collector.is_deferred(frame, binding.frame) { + Read::Deferred + } else if at < binding.initialized + && !binding + .class_initializers + .iter() + .any(|span| span.start <= at && at < span.end) + { + Read::Before { + temporal: binding.temporal, + at, + symbol, + } + } else { + Read::Initialized + } + }); + (reference, read) + }) + .collect(); + Self { + reads, + references: collector.references, + } + } + + pub(super) fn allows(&self, identifier: &IdentifierReference<'_>) -> bool { + match identifier + .reference_id + .get() + .and_then(|reference| self.reads.get(&reference)) + { + Some(Read::Before { .. }) => false, + Some(Read::Initialized | Read::Deferred) | None => true, + } + } + + pub(super) fn errors( + &mut self, + references: &FxHashSet, + scoping: &Scoping, + declarations: &FxHashMap>, + ) -> Vec<(u32, String)> { + let collected = std::mem::take(&mut self.references); + let mut errors: Vec<_> = references.iter().filter_map(|reference| { + let Read::Before { temporal: true, at, symbol } = self.reads.get(reference)? else { + return None; + }; + let name = scoping.symbol_name(*symbol); + let mut pending = vec![*at]; + let mut seen = FxHashSet::default(); + let mut shapes = Vec::new(); + while let Some(offset) = pending.pop() { + for (owner, init) in declarations { + let span = init.span(); + if span.start <= offset && offset < span.end + && scoping.get_resolved_reference_ids(*owner).iter().any(|read| references.contains(read)) + && seen.insert(*owner) + { + if matches!(crate::utils::unwrap_syntax_only(init), Expression::ObjectExpression(_) | Expression::ArrayExpression(_)) { + shapes.push(scoping.symbol_name(*owner)); + } + pending.extend(collected.iter().filter(|(read, symbol, _, _)| symbol == owner && references.contains(read)).map(|(_, _, at, _)| *at)); + } + } + } + shapes.sort_unstable(); + shapes.dedup(); + let context = if shapes.is_empty() { String::new() } else { + format!("; containing style shapes: {}", shapes.join(", ")) + }; + Some((*at, format!("style value cannot use `{name}` at build time: it is read before its lexical declaration is initialized, so the original JavaScript throws ReferenceError; move the declaration of `{name}` above this use{context}"))) + }).collect(); + errors.sort_unstable_by_key(|(at, _)| *at); + errors + } +} + +struct Binding { + initialized: u32, + class_initializers: Vec, + frame: usize, + temporal: bool, +} + +impl Binding { + /// Class self-bindings initialize after keys and extends, before static values. + fn class(class: &Class<'_>, frame: usize) -> Self { + let initialized = class.span.end; + let class_initializers = class + .body + .body + .iter() + .filter_map(|element| match element { + ClassElement::PropertyDefinition(property) if property.r#static => { + property.value.as_ref().map(GetSpan::span) + } + ClassElement::StaticBlock(block) => Some(block.span), + _ => None, + }) + .collect(); + Self { + initialized, + class_initializers, + frame, + temporal: true, + } + } +} + +struct Frame { + parent: usize, + deferred: bool, +} + +struct Collector<'s> { + scoping: &'s Scoping, + bindings: FxHashMap, + references: Vec<(ReferenceId, SymbolId, u32, usize)>, + frames: Vec, + frame: usize, + invoked: FxHashSet, +} + +impl Collector<'_> { + fn is_deferred(&self, mut from: usize, declaration: usize) -> bool { + while from != declaration && from != 0 { + let frame = &self.frames[from]; + if frame.deferred { + return true; + } + from = frame.parent; + } + false + } + + fn function(&mut self, start: u32, visit: impl FnOnce(&mut Self)) { + let outer = self.frame; + self.frame = self.frames.len(); + self.frames.push(Frame { + parent: outer, + deferred: !self.invoked.contains(&start), + }); + visit(self); + self.frame = outer; + } +} + +impl<'a> Visit<'a> for Collector<'_> { + fn visit_variable_declaration(&mut self, declaration: &VariableDeclaration<'a>) { + for declarator in &declaration.declarations { + for identifier in declarator.id.get_binding_identifiers() { + if let Some(symbol) = identifier.symbol_id.get() { + self.bindings.insert( + symbol, + Binding { + initialized: declarator.span.end, + class_initializers: Vec::new(), + frame: self.frame, + temporal: declaration.kind.is_lexical(), + }, + ); + } + } + } + walk::walk_variable_declaration(self, declaration); + } + + fn visit_class(&mut self, class: &Class<'a>) { + if let Some(symbol) = class.id.as_ref().and_then(|id| id.symbol_id.get()) { + self.bindings + .insert(symbol, Binding::class(class, self.frame)); + } + walk::walk_class(self, class); + } + + fn visit_identifier_reference(&mut self, identifier: &IdentifierReference<'a>) { + if let Some(reference) = identifier.reference_id.get() + && self.scoping.get_reference(reference).is_read() + && let Some(symbol) = self.scoping.get_reference(reference).symbol_id() + { + self.references + .push((reference, symbol, identifier.span.start, self.frame)); + } + } + + fn visit_function(&mut self, function: &Function<'a>, flags: ScopeFlags) { + self.function(function.span.start, |collector| { + walk::walk_function(collector, function, flags); + }); + } + + fn visit_arrow_function_expression(&mut self, arrow: &ArrowFunctionExpression<'a>) { + self.function(arrow.span.start, |collector| { + walk::walk_arrow_function_expression(collector, arrow); + }); + } + + fn visit_call_expression(&mut self, call: &CallExpression<'a>) { + match crate::utils::unwrap_syntax_only(&call.callee) { + Expression::FunctionExpression(function) => { + self.invoked.insert(function.span.start); + } + Expression::ArrowFunctionExpression(arrow) => { + self.invoked.insert(arrow.span.start); + } + _ => {} + } + walk::walk_call_expression(self, call); + } +} diff --git a/libs/extractor/src/imported_constants/lexical.rs b/libs/extractor/src/imported_constants/lexical.rs new file mode 100644 index 000000000..0d83bf4dd --- /dev/null +++ b/libs/extractor/src/imported_constants/lexical.rs @@ -0,0 +1,92 @@ +use oxc_allocator::{CloneIn, GetAllocator}; +use oxc_ast::ast::{ + Expression, JSXSpreadAttribute, ObjectExpression, ObjectPropertyKind, Program, + VariableDeclaration, VariableDeclarationKind, +}; +use oxc_ast::builder::AstBuilder; +use oxc_ast_visit::{Visit, walk}; +use oxc_semantic::Scoping; +use oxc_syntax::reference::ReferenceId; +use oxc_syntax::symbol::SymbolId; +use rustc_hash::{FxHashMap, FxHashSet}; + +/// Const initializers keyed by lexical identity, excluding written bindings. +pub(super) fn declarations<'a>( + builder: &AstBuilder<'a>, + program: &Program<'a>, + scoping: &Scoping, +) -> (FxHashMap>, FxHashSet) { + let mut collector = Collector { + builder, + scoping, + found: FxHashMap::default(), + copies: FxHashSet::default(), + }; + collector.visit_program(program); + (collector.found, collector.copies) +} + +struct Collector<'s, 'a> { + builder: &'s AstBuilder<'a>, + scoping: &'s Scoping, + found: FxHashMap>, + copies: FxHashSet, +} + +impl Collector<'_, '_> { + /// A conditional spread copies only the selected value, never its test. + fn copy_leaves(&mut self, value: &Expression<'_>) { + let mut pending = vec![value]; + while let Some(value) = pending.pop() { + match crate::utils::unwrap_syntax_only(value) { + Expression::Identifier(identifier) => { + self.copies.extend(identifier.reference_id.get()); + } + Expression::ConditionalExpression(branch) => { + pending.extend([&branch.consequent, &branch.alternate]); + } + _ => {} + } + } + } +} + +impl<'a> Visit<'a> for Collector<'_, 'a> { + fn visit_jsx_spread_attribute(&mut self, spread: &JSXSpreadAttribute<'a>) { + self.copy_leaves(&spread.argument); + walk::walk_jsx_spread_attribute(self, spread); + } + fn visit_object_expression(&mut self, object: &ObjectExpression<'a>) { + for property in &object.properties { + if let ObjectPropertyKind::SpreadProperty(spread) = property + && let Expression::Identifier(identifier) = + crate::utils::unwrap_syntax_only(&spread.argument) + { + self.copies.extend(identifier.reference_id.get()); + } + } + walk::walk_object_expression(self, object); + } + fn visit_variable_declaration(&mut self, declaration: &VariableDeclaration<'a>) { + if declaration.kind == VariableDeclarationKind::Const { + for declarator in &declaration.declarations { + if let Some(identifier) = declarator.id.get_binding_identifier() + && let Some(symbol) = identifier.symbol_id.get() + && !self.scoping.get_resolved_reference_ids(symbol).is_empty() + && !self + .scoping + .get_resolved_reference_ids(symbol) + .iter() + .any(|reference| self.scoping.get_reference(*reference).is_write()) + && let Some(init) = &declarator.init + { + self.found.insert( + symbol, + init.clone_in_with_semantic_ids(self.builder.allocator()), + ); + } + } + } + walk::walk_variable_declaration(self, declaration); + } +} diff --git a/libs/extractor/src/imported_constants/numeric_semantics_tests.rs b/libs/extractor/src/imported_constants/numeric_semantics_tests.rs new file mode 100644 index 000000000..077f56db8 --- /dev/null +++ b/libs/extractor/src/imported_constants/numeric_semantics_tests.rs @@ -0,0 +1,84 @@ +use super::exact_tests::{extracted, static_values}; +use super::{Constant, constant_literal}; + +#[rstest::rstest] +#[case(("Math.sign(-0)", "green"))] +#[case(("Math.fround(-0)", "green"))] +#[case(("Math.min(0, -0)", "green"))] +#[case(("Math.sign(0)", "red"))] +#[case(("Math.fround(0)", "red"))] +#[case(("Math.max(-0, 0)", "red"))] +#[serial_test::serial] +fn computed_color_when_imported_zero_is_consumed( + #[case] scenario: (&str, &str), + #[values("Object.is(n, -0)", "1 / n === -Infinity")] predicate: &str, + #[values(false, true)] inline: bool, +) { + // Given + let (expression, expected) = scenario; + let module = format!("export const VALUE = {expression};"); + let consumer = if inline { + "export const s = css({ color: colorOf(VALUE) });" + } else { + "const color = colorOf(VALUE); export const s = css({ color });" + }; + let code = format!( + "import {{ css }} from '@devup-ui/react'; import {{ VALUE }} from './values'; + const colorOf = n => {predicate} ? 'green' : 'red'; {consumer}" + ); + + // When + let output = extracted(&code, &module).unwrap_or_else(|error| panic!("{code}: {error}")); + + // Then + assert_eq!( + static_values(&output), + vec![expected.to_string()], + "{expression}, {predicate}, inline={inline}" + ); +} + +#[rstest::rstest] +#[case("Math.sign(-0)")] +#[case("Math.fround(-0)")] +#[case("Math.min(0, -0)")] +#[case("Math.sign(0)")] +#[serial_test::serial] +fn canonical_css_zero_when_imported_zero_is_a_style_value(#[case] expression: &str) { + // Given + let module = format!("export const VALUE = {expression};"); + let code = "import { css } from '@devup-ui/react'; import { VALUE } from './values'; + export const s = css({ zIndex: VALUE });"; + + // When + let output = extracted(code, &module).unwrap_or_else(|error| panic!("{expression}: {error}")); + + // Then + assert_eq!(static_values(&output), vec!["0".to_string()]); +} + +#[rstest::rstest] +#[case(-0.0, "green")] +#[case(0.0, "red")] +#[serial_test::serial] +fn computed_color_when_scalar_ast_is_serialized(#[case] zero: f64, #[case] expected: &str) { + // Given + let allocator = oxc_allocator::Allocator::default(); + let builder = oxc_ast::builder::AstBuilder::new(&allocator); + let literal = constant_literal(&builder, &Constant::Number(zero), false) + .unwrap_or_else(|| panic!("finite scalar must have a literal")); + let mut codegen = oxc_codegen::Codegen::new(); + codegen.print_expression(&literal); + let code = format!( + "import {{ css }} from '@devup-ui/react'; + const colorOf = n => Object.is(n, -0) ? 'green' : 'red'; + export const s = css({{ color: colorOf({}) }});", + codegen.into_source_text() + ); + + // When + let output = extracted(&code, "").unwrap_or_else(|error| panic!("{code}: {error}")); + + // Then + assert_eq!(static_values(&output), vec![expected.to_string()]); +} diff --git a/libs/extractor/src/imported_constants/require_tests.rs b/libs/extractor/src/imported_constants/require_tests.rs new file mode 100644 index 000000000..86f9aff06 --- /dev/null +++ b/libs/extractor/src/imported_constants/require_tests.rs @@ -0,0 +1,98 @@ +use crate::{ExtractOption, ExtractStyleValue, ResolvedModule}; +use rstest::rstest; +use serial_test::serial; +use std::cell::RefCell; +use std::rc::Rc; + +fn require_probe(module: &str) -> (Vec, Result) { + css::class_map::reset_class_map(); + css::file_map::reset_file_map(); + let requested = Rc::new(RefCell::new(Vec::new())); + let recorded = requested.clone(); + let module = module.to_string(); + let resolver = move |specifier: &str, _: &str| { + recorded.borrow_mut().push(specifier.to_string()); + let source = match specifier { + "./values" => module.as_str(), + "./trap" => "export const color = 'green';", + "./local" => "export const require = () => ({ color: 'red' });", + _ => return None, + }; + Some(ResolvedModule { + path: format!("/src/{specifier}.ts"), + code: source.to_string(), + }) + }; + let output = crate::extract_with_modules("/src/App.tsx", "import {Box} from '@devup-ui/react';import {COLOR} from './values';export const a=;", ExtractOption::default(),false,&resolver).map_err(|error|error.to_string()); + (requested.borrow().clone(), output) +} + +#[rstest] +#[case( + "const require=()=>({color:'red'});const values=require('./trap');export const COLOR=values.color;" +)] +#[case( + "function require(){return {color:'red'};}const values=require('./trap');export const COLOR=values.color;" +)] +#[case("let require=load;const values=require('./trap');export const COLOR=values.color;")] +#[case("class require{}const values=require('./trap');export const COLOR=values.color;")] +#[case( + "import {require} from './local';const values=require('./trap');export const COLOR=values.color;" +)] +#[case("const values=require('./trap');const require=load;export const COLOR=values.color;")] +#[serial] +fn shadowed_require_when_reading_module_constants_never_resolves_a_module(#[case] module: &str) { + let (requested, output) = require_probe(module); + assert!( + !requested.iter().any(|specifier| specifier == "./trap"), + "{requested:?}" + ); + if let Ok(output) = output { + assert!( + !output.styles.iter().any( + |style| matches!(style,ExtractStyleValue::Static(style) if style.value=="green") + ), + "{}", + output.code + ); + } +} + +#[rstest] +#[case( + "export function f(require){const values=require('./trap');return values.color;}export const COLOR=f(local);" +)] +#[case( + "try{throw local;}catch(require){const values=require('./trap');observe(values);}export const COLOR=dynamic;" +)] +#[case( + "const require=local;{const values=require('./trap');observe(values);}export const COLOR=dynamic;" +)] +#[serial] +fn enclosing_require_when_nested_calls_are_read_never_loads_the_named_module(#[case] module: &str) { + let (requested, _) = require_probe(module); + assert!( + !requested.iter().any(|specifier| specifier == "./trap"), + "{requested:?}" + ); +} + +#[test] +#[serial] +fn unbound_require_when_reading_module_constants_still_loads() { + let (requested, output) = + require_probe("const values=require('./trap');export const COLOR=values.color;"); + let output = output.unwrap_or_else(|error| panic!("{error}")); + assert!( + requested.iter().any(|specifier| specifier == "./trap"), + "{requested:?}" + ); + assert!( + output + .styles + .iter() + .any(|style| matches!(style,ExtractStyleValue::Static(style) if style.value=="green")), + "{}", + output.code + ); +} diff --git a/libs/extractor/src/imported_constants/safety_tests.rs b/libs/extractor/src/imported_constants/safety_tests.rs new file mode 100644 index 000000000..7e4408795 --- /dev/null +++ b/libs/extractor/src/imported_constants/safety_tests.rs @@ -0,0 +1,127 @@ +use super::*; +use rstest::rstest; + +#[rstest] +#[case("__proto__", "false|red")] +#[case("['__proto__']", "true|red")] +fn lexical_copy_when_proto_is_a_setter_does_not_invent_an_own_property( + #[case] key: &str, + #[case] expected: &str, +) { + let allocator = Allocator::default(); + let source = format!( + "import {{css}} from '@devup-ui/react'; function run(){{const props={{{key}:null,color:'red'}};return css({{...props}});}} run();" + ); + let mut parsed = Parser::new(&allocator, &source, SourceType::tsx()).parse(); + assert_eq!(parsed.diagnostics.len(), 0); + + inline_constants( + &AstBuilder::new(&allocator), + &mut parsed.program, + "proto.tsx", + &ExtractOption::default(), + None, + CssProp::Off, + &crate::import_alias_visit::PxMarks::default(), + ); + + parsed + .program + .body + .retain(|statement| !matches!(statement, Statement::ImportDeclaration(_))); + let code = oxc_codegen::Codegen::new().build(&parsed.program).code; + let script = format!( + "const css = props => [Object.hasOwn(props, '__proto__'), props.color].join('|'); {code}" + ); + let mut context = boa_engine::Context::default(); + let actual = context + .eval(boa_engine::Source::from_bytes(script.as_bytes())) + .unwrap_or_else(|error| panic!("{error}: {script}")); + assert_eq!( + actual + .as_string() + .unwrap_or_else(|| panic!("string required: {actual:?}")) + .to_std_string_escaped(), + expected, + "{code}" + ); +} + +#[rstest] +#[case("tone; const tone='red';", None)] +#[case("const tone='red'; tone;", Some("\"red\""))] +fn inline_read_when_the_binding_initializes_on_either_side_of_it_is_safe( + #[case] source: &str, + #[case] expected: Option<&str>, +) { + let allocator = Allocator::default(); + let parsed = Parser::new(&allocator, source, SourceType::ts()).parse(); + let scoping = SemanticBuilder::new() + .build(&parsed.program) + .semantic + .into_scoping(); + let initialization = initialization::Initialization::new(&parsed.program, &scoping); + let symbol = scoping + .get_root_binding("tone".into()) + .unwrap_or_else(|| panic!("tone binding")); + let symbols = FxHashMap::from_iter([(symbol, Constant::String("red".to_string()))]); + let inline = ConstantReads { + scoping: &scoping, + initialization: &initialization, + symbols: &symbols, + local_ends: &FxHashMap::default(), + deferred: &FxHashSet::default(), + }; + let expression = parsed + .program + .body + .iter() + .find_map(|statement| match statement { + Statement::ExpressionStatement(statement) => Some(&statement.expression), + _ => None, + }) + .unwrap_or_else(|| panic!("tone read")); + assert_eq!( + inline + .constant(expression) + .and_then(|value| value.js_literal()) + .as_deref(), + expected + ); +} + +#[rstest] +#[case(true)] +#[case(false)] +fn namespace_object_when_a_nested_member_is_a_function_is_recognized(#[case] function: bool) { + let leaf = if function { + Constant::Function + } else { + Constant::Number(2.0) + }; + let object = Constant::Object(Rc::new(FxHashMap::from_iter([( + "member".to_string(), + leaf, + )]))); + assert_eq!(object.has_function(), function); +} + +#[rstest] +#[case(vec![])] +#[case(vec![Constant::Number(2.0)])] +#[case(vec![Constant::String("2".to_string()), Constant::Number(3.0)])] +#[case(vec![Constant::Number(2.0), Constant::String("3".to_string())])] +fn exact_power_when_operands_are_not_two_numbers_does_not_fold(#[case] arguments: Vec) { + assert!(fold_math("pow", &arguments).is_none()); +} + +#[test] +#[serial_test::serial] +fn nested_math_constant_when_read_by_computed_key_keeps_its_exact_value() { + let output = super::exact_tests::extracted("import {Box} from '@devup-ui/react'; export function a(){const n=Math['PI'];return ;}", "") + .unwrap_or_else(|error| panic!("{error}")); + assert_eq!( + super::exact_tests::static_values(&output), + vec!["3.141592653589793".to_string()] + ); +} diff --git a/libs/extractor/src/imported_constants/tdz_tests.rs b/libs/extractor/src/imported_constants/tdz_tests.rs new file mode 100644 index 000000000..cd446fffc --- /dev/null +++ b/libs/extractor/src/imported_constants/tdz_tests.rs @@ -0,0 +1,190 @@ +use oxc_allocator::Allocator; +use oxc_ast::builder::AstBuilder; +use oxc_codegen::Codegen; +use oxc_parser::Parser; +use oxc_span::SourceType; + +use super::{Inlined, inline_constants}; +use crate::ExtractOption; +use crate::css_prop::CssProp; + +fn inline(code: &str) -> (String, Inlined) { + let allocator = Allocator::default(); + let mut program = Parser::new(&allocator, code, SourceType::tsx()) + .parse() + .program; + let result = inline_constants( + &AstBuilder::new(&allocator), + &mut program, + "tdz.tsx", + &ExtractOption::default(), + None, + CssProp::Off, + &crate::import_alias_visit::PxMarks::default(), + ); + (Codegen::new().build(&program).code, result) +} + +#[test] +fn immediate_style_reads_when_lexical_bindings_are_uninitialized() { + for body in [ + "const view = ; const color = 'red';", + "const view = ; let color = 'red';", + "{ const view = ; const color = 'red'; }", + "function render() { const view = ; const color = 'red'; return view; }", + "const render = () => { const view = ; let color = 'red'; return view; };", + "const view = ; class color {}", + "const color = ;", + "const color = Math.max(color, 1); const view = ;", + "const color = later; const view = ; const later = 'red';", + "const view = (() => )(); const color = 'red';", + "const view = (function () { return ; })(); const color = 'red';", + "function render() { const color = later; const later = color; return ; }", + ] { + let source = format!("import {{ Box }} from '@devup-ui/react';\n{body}"); + let (_, result) = inline(&source); + assert_eq!(result.errors.len(), 1, "{source}"); + let (at, message) = &result.errors[0]; + let name = if body.contains("later") { + "later" + } else { + "color" + }; + assert_eq!( + &source[usize::try_from(*at).unwrap_or_else(|error| panic!("try_from at: {error}"))..] + [..name.len()], + name + ); + assert!(message.contains("ReferenceError"), "{message}"); + let located = crate::located_errors("tdz.tsx", &source, &[], result.errors); + assert!(located.starts_with("tdz.tsx:2:"), "{located}"); + } +} + +#[test] +fn deferred_style_reads_when_outer_bindings_initialize_before_invocation() { + for body in [ + "function Render() { return ; } const color = 'red';", + "const Render = () => ; const color = 'red';", + "register(() => ); const color = 'red';", + "function outer() { const Render = () => ; const color = 'red'; return Render; }", + "{ const Render = () => ; const color = 'red'; }", + ] { + let (code, result) = inline(&format!("import {{ Box }} from '@devup-ui/react';\n{body}")); + assert_eq!(result.errors, vec![], "{body}"); + assert!(code.contains("color={\"red\"}"), "{code}"); + } +} + +#[test] +fn var_reads_when_initializers_have_not_run_stay_dynamic() { + let source = "import { Box } from '@devup-ui/react'; const view = ; var color = 'red';"; + let (code, result) = inline(source); + assert_eq!(result.errors, vec![]); + assert!(code.contains("color={color}"), "{code}"); +} + +#[test] +#[serial_test::serial] +fn var_reads_when_rendered_before_assignment_use_css_variables() { + let output = super::exact_tests::extracted("import { Box } from '@devup-ui/react'; const view = ; var color = 'red';", "").unwrap_or_else(|error| panic!("var_reads_when_rendered_before_assignment_use_css_variables: {error}")); + assert!(output.code.contains("--"), "{}", output.code); +} + +#[test] +fn style_reads_when_shadowed_bindings_have_distinct_initialization() { + let source = "import { Box } from '@devup-ui/react'; const color = 'red'; function outer() { const view = ; const color = 'green'; return view; }"; + let (_, result) = inline(source); + assert_eq!(result.errors.len(), 1); + assert_eq!( + &source[usize::try_from(result.errors[0].0) + .unwrap_or_else(|error| panic!("try_from error offset: {error}"))..][..5], + "color" + ); +} + +#[test] +fn nonstyle_reads_when_preinitialization_is_not_a_style_dependency_are_untouched() { + let (code, result) = inline( + "import { Box } from '@devup-ui/react'; observe(color); const color = 'red'; const view = ;", + ); + assert_eq!(result.errors, vec![]); + assert!(code.contains("observe(color)"), "{code}"); + assert!(code.contains("color={\"red\"}"), "{code}"); +} + +#[test] +#[serial_test::serial] +fn class_self_reads_when_static_field_initialization_has_started() { + for source in [ + "import { Box } from '@devup-ui/react'; export class Palette { static tone = 'red'; static view = ; }", + "import { Box } from '@devup-ui/react'; class Palette { static tone = 'red'; static { const view = ; } }", + ] { + let output = super::exact_tests::extracted(source, "").unwrap_or_else(|error| { + panic!("class_self_reads_when_static_field_initialization_has_started: {error}") + }); + assert!(output.code.contains("Palette.tone"), "{}", output.code); + assert!(output.code.contains("className="), "{}", output.code); + } +} + +#[test] +fn class_self_reads_when_method_execution_is_deferred() { + let source = "import { Box } from '@devup-ui/react'; class Palette { view() { return ; } static tone = 'red'; }"; + let (_, result) = inline(source); + assert_eq!(result.errors, vec![]); +} + +#[test] +fn class_self_reads_when_class_binding_is_still_uninitialized() { + for body in [ + "const view = ; class Palette { static tone = 'red'; }", + "class Palette extends () { static tone = 'red'; }", + "class Palette { static tone = 'red'; static [] = 1; }", + ] { + let source = format!("import {{ Box }} from '@devup-ui/react';\n{body}"); + let (_, result) = inline(&source); + assert_eq!(result.errors.len(), 1, "{source}"); + let (at, message) = &result.errors[0]; + assert_eq!( + &source[usize::try_from(*at) + .unwrap_or_else(|error| panic!("try_from class read offset: {error}"))..][..7], + "Palette" + ); + assert!(message.contains("ReferenceError"), "{message}"); + let located = crate::located_errors("tdz.tsx", &source, &[], result.errors); + assert!(located.starts_with("tdz.tsx:2:"), "{located}"); + } +} + +#[test] +fn lexical_reads_when_static_initialization_precedes_their_declaration() { + for body in [ + "class Palette { static view = ; } const tone = 'red';", + "class Palette { static { const view = ; const tone = 'red'; } }", + ] { + let source = format!("import {{ Box }} from '@devup-ui/react'; {body}"); + let (_, result) = inline(&source); + assert_eq!(result.errors.len(), 1, "{source}"); + assert!(result.errors[0].1.contains("ReferenceError")); + } +} + +#[test] +fn shape_iife_tdz_when_eager_keeps_the_located_reference_error() { + for eager in ["(()=>later)()", "(function(){return later})()"] { + let source = format!( + "import {{styled}} from '@devup-ui/react';const shape={{color:{eager}}};const later='red';const View=styled.div(shape);" + ); + let (code, result) = inline(&source); + assert_eq!(result.errors.len(), 1, "{source}"); + let (offset, error) = &result.errors[0]; + let start = usize::try_from(*offset).unwrap_or_else(|error| panic!("{error}")); + assert!( + source[start..].starts_with("later"), + "{source} at {offset}: {error}" + ); + assert!(error.contains("ReferenceError"), "{error}"); + assert!(code.contains("later"), "{code}"); + } +} diff --git a/libs/extractor/src/imported_constants_join_tests.rs b/libs/extractor/src/imported_constants_join_tests.rs index 0fea8fa1e..856fc216e 100644 --- a/libs/extractor/src/imported_constants_join_tests.rs +++ b/libs/extractor/src/imported_constants_join_tests.rs @@ -175,3 +175,161 @@ fn scoping_when_a_bound_callback_captures_a_local_is_returned_for_reuse() assert_eq!(reads.symbols, vec![symbol, symbol]); Ok(()) } + +#[test] +#[serial_test::serial] +fn scoped_captures_when_exact_dependencies_and_raw_copies_join_keep_their_owners() +-> Result<(), Box> { + // Given: one module mixes captured rules, exact primitives and copy-only versus escaped objects. + let source = r"import {Box,styled} from '@devup-ui/react'; +enum E { A=2, B=A+1 } +const trace=[]; +function make(input){const rest=input.color;const __devupValue0='collision';const first=Math.imul(E.B,2);const gap=first+1;const zero=Math.sign(-0);const copy={p:gap};const changed={color:'raw'};const alias=changed;alias.color='mutated';const local={color:rest,_hover:{opacity:input.opacity}};const callback=p=>({...local,m:gap});const Card=styled(Box)(callback);const view=;return {Card,view,changed,alias};} +function shadowed(Math,undefined){const value=Math.imul(undefined,2);return ;} +"; + css::class_map::reset_class_map(); + css::file_map::reset_file_map(); + let output = crate::extract( + "joined.tsx", + source, + ExtractOption { + single_css: true, + import_main_css: false, + ..ExtractOption::default() + }, + )?; + // When: both renderers read the original captured object after the initializer has run once. + let actual = crate::styled_source_tests::captured_render::execute( + ("joined.tsx", None), + &output, + "const made=make({get color(){trace.push('color');return 'navy';},get opacity(){trace.push('opacity');return 0.5;}});const first=render({target:made.Card,props:{}});const second=render({target:made.Card,props:{}});const local=shadowed({imul(a,b){trace.push('math');return a+b;}},9);JSON.stringify([[first,second].map(e=>[values(e,'color'),values(e,'opacity',0,'&:hover'),values(e,'margin')]),values(made.view,'padding'),values(made.view,'z-index'),made.view.props.title,Object.is(made.view.props['data-zero'],-0),made.view.props['data-object']===made.changed,made.changed===made.alias,made.view.props.color,values(local,'z-index'),trace]);", + ); + // Then: shadowed globals and raw object identity survive while only proven styles are extracted. + assert_eq!( + actual, + serde_json::json!([ + [[["navy"], [0.5], ["28px"]], [["navy"], [0.5], ["28px"]]], + ["28px"], + ["3"], + "collision", + true, + true, + true, + "mutated", + [11], + ["color", "opacity", "math"] + ]) + ); + Ok(()) +} + +#[test] +#[serial_test::serial] +fn initialization_failures_when_namespace_aliases_rewrite_keep_authored_locations() +-> Result<(), Box> { + // Given: namespace and import-alias edits precede an immediate lexical read. + let source = concat!( + "import * as emotion from '@emotion/css';\n", + "export const rule=emotion.css({color:late});\nconst late='green';" + ); + let option = ExtractOption { + import_aliases: std::collections::HashMap::from([( + "@emotion/css".into(), + crate::ImportAlias::NamedToNamed, + )]), + ..ExtractOption::default() + }; + // When: the original read is terminal, rather than a candidate for value evaluation. + let error = crate::extract("joined-tdz.tsx", source, option.clone()) + .err() + .ok_or("TDZ compiled")? + .to_string(); + let offset = source.find("late").ok_or("TDZ use")?; + // Then: the error names the authored use; moving the read into a deferred body succeeds. + assert!( + error.starts_with(&format!( + "{}:", + crate::locate("joined-tdz.tsx", source, offset) + )), + "{error}" + ); + assert!(error.contains("ReferenceError"), "{error}"); + let deferred = concat!( + "import * as emotion from '@emotion/css';\n", + "export const rule=()=>emotion.css({color:late});\nconst late='green';" + ); + let output = crate::extract("joined-tdz.tsx", deferred, option.clone())?; + assert!(output.styles.iter().any(|style| matches!(style, ExtractStyleValue::Static(style) if style.property()=="color" && style.value()=="green"))); + // Given: an actual evaluator edit precedes the same namespace/alias TDZ suffix. + let prefix = "import {css} from '@devup-ui/react';function double(n){return n*2;}const earlier=css({width:double(12345)});\n"; + let (computed, edits, _) = crate::build_time_values::evaluate_located( + prefix, + "joined-tdz.tsx", + &option, + None, + &Unknown::default(), + ) + .map_err(|errors| format!("{errors:?}"))? + .ok_or("missing evaluated prefix")?; + assert_ne!(edits, [] as [(usize, usize, usize); 0]); + assert_ne!(prefix.len(), computed.len()); + let original = format!("{prefix}{source}"); + let evaluated = format!("{computed}{source}"); + // When: the recursive extraction seam receives the real earlier replacement map. + let error = crate::extract_source( + "joined-tdz.tsx", + &evaluated, + Some((&original, &[edits.as_slice()])), + None, + option, + false, + None, + ) + .err() + .ok_or("TDZ compiled")? + .to_string(); + // Then: the terminal ReferenceError names the original authored late read. + let offset = original.find("late").ok_or("TDZ use")?; + assert!( + error.starts_with(&format!( + "{}:", + crate::locate("joined-tdz.tsx", &original, offset) + )), + "{error}" + ); + assert!(error.contains("ReferenceError"), "{error}"); + Ok(()) +} + +#[test] +#[serial_test::serial] +fn recoverable_local_errors_when_a_later_value_is_forbidden_reach_the_located_sandbox() +-> Result<(), Box> { + // Given: local ownership needs fallback, and a separate computed value reads a forbidden helper. + let source = "import * as emotion from '@emotion/css';\nconst compare=Object.getOwnPropertyDescriptor(String.prototype,'localeCompare').value;\nexport function f(props){const inner={color:props.color};observe(inner);return emotion.css(inner);}\nexport const later=emotion.css({width:compare('a','b')});"; + let option = ExtractOption { + import_aliases: std::collections::HashMap::from([( + "@emotion/css".into(), + crate::ImportAlias::NamedToNamed, + )]), + ..ExtractOption::default() + }; + // When: public extraction passes recoverable inliner errors to the ordinary fallback pipeline. + let error = crate::extract("joined-fallback.tsx", source, option) + .err() + .ok_or("forbidden helper compiled")? + .to_string(); + // Then: a blanket early return cannot hide the later helper or remap it to generated source. + let offset = source + .find("Object.getOwnPropertyDescriptor") + .ok_or("helper fixture")?; + assert!( + error.lines().any(|line| line.starts_with(&format!( + "{}:", + crate::locate("joined-fallback.tsx", source, offset) + ))), + "{error}" + ); + assert!(error.contains("String.prototype.localeCompare"), "{error}"); + Ok(()) +} diff --git a/libs/extractor/src/imported_styled/tests/relevance_tests.rs b/libs/extractor/src/imported_styled/tests/relevance_tests.rs index 7fcfde8e5..d2e22b849 100644 --- a/libs/extractor/src/imported_styled/tests/relevance_tests.rs +++ b/libs/extractor/src/imported_styled/tests/relevance_tests.rs @@ -145,10 +145,10 @@ fn literal_namespace_retargets_match_dot_with_and_without_trigger(#[case] trigge let actual = extract_with_modules("/src/app.tsx", &computed, option, false, &resolve).unwrap(); // Staged rendering keeps the authored receiver. Normalize only that one // expression, not imports, forwarding, target selection or render stages. - let receiver = "((UI[\"Dyn\"] as typeof UI.Dyn)!)"; + let receiver = "(UI[\"Dyn\"] as typeof UI.Dyn)!"; assert_eq!(actual.code.matches(receiver).count(), 1); - assert_eq!(expected.code.matches("(UI.Dyn)").count(), 1); - assert_eq!(actual.code.replace(receiver, "(UI.Dyn)"), expected.code); + assert_eq!(expected.code.matches("UI.Dyn").count(), 1); + assert_eq!(actual.code.replace(receiver, "UI.Dyn"), expected.code); assert!(!actual.code.contains(".withComponent(")); assert!(actual.code.contains("import * as UI from \"./base\";")); assert_eq!(actual.styles, expected.styles); diff --git a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__named.snap b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__named.snap index 802c4bd9d..95be73dd9 100644 --- a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__named.snap +++ b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__named.snap @@ -2,4 +2,4 @@ source: libs/extractor/src/imported_styled/tests/relevance_tests.rs expression: "format!(\"{}\\n{:?}\", output.code, output.dependencies)" --- -"import { forwardRef as __devupForwardRef } from \"react\";\nimport { Dyn } from \"./base\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => (__devupRecord0=>{const {__devupCss0:__devupRecord1,__devupForwarded0:__devupRecord12,...__devupRecord2}=__devupRecord0;const __devupRecord14=()=>(\"a\");const __devupRecord15=(__devupRecord1&&__devupRecord1[3])??__devupRecord14;const __devupRecord13=__devupRecord1?__devupRecord1[2]:false;const __devupRecord8=(__devupRecord2,__devupRecord7,__devupRecord13)=>{const __devupRecord8=(__devupRecord2);return __devupRecord1?(0,__devupRecord1[0])(__devupRecord8,__devupRecord7,__devupRecord13):__devupRecord7(__devupRecord8);};const __devupRecord9=(__devupRecord3,__devupRecord4)=>{const {style,className,as:DevupAs=__devupRecord4[3],forwardedAs}=__devupRecord3;const rest=__devupRecord4[5];const __devupRecord5=[];const __devupRecord6=[[__devupRecord4[0][0]],__devupRecord4[1],[__devupRecord4[2],\"b--a\",].filter(Boolean).join(' '),__devupRecord4[3],__devupRecord4[4],rest];return __devupRecord1?(0,__devupRecord1[1])(__devupRecord3,__devupRecord6):__devupRecord6[4]({...Object.fromEntries(Object.entries((({ \"big\": __devupOmit0, \"theme\": __devupOmit1, ...__devupDom }) => __devupDom)(rest)).filter(([k]) => k[0] !== \"$\")),as:__devupRecord6[3],forwardedAs:__devupRecord3.forwardedAs,className:(__devupRecord6[0].length||__devupRecord6[2]!==void 0)?[...__devupRecord6[0],__devupRecord6[2],__devupRecord3.className].filter(Boolean).join(' '):__devupRecord3.className,style:__devupRecord6[1]===void 0?__devupRecord3.style:{...__devupRecord6[1],...__devupRecord3.style}});};return ((DevupStyled) => ())(Dyn);})({\n\t...__devupRefProps,\n\tref: __devupRef\n}));\n\n[\"/src/base.tsx\"]" +"import { forwardRef as __devupForwardRef } from \"react\";\nimport { Dyn } from \"./base\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => {\n\tlet __devupRecord18;\n\t__devupRecord18 = {\n\t\t...__devupRefProps,\n\t\tref: __devupRef\n\t};\n\t{\n\t\tlet __devupRecord0 = __devupRecord18;\n\t\t{\n\t\t\tlet __devupRecord17;\n\t\t\tconst { __devupCss0: __devupRecord1, __devupForwarded0: __devupRecord12, ...__devupRecord2 } = __devupRecord0;\n\t\t\tconst __devupRecord14 = () => \"a\";\n\t\t\tconst __devupRecord15 = (__devupRecord1 && __devupRecord1[3]) ?? __devupRecord14;\n\t\t\tconst __devupRecord13 = __devupRecord1 ? __devupRecord1[2] : false;\n\t\t\tconst __devupRecord8 = (__devupRecord2, __devupRecord7, __devupRecord13) => {\n\t\t\t\tconst __devupRecord8 = __devupRecord2;\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[0])(__devupRecord8, __devupRecord7, __devupRecord13) : __devupRecord7(__devupRecord8);\n\t\t\t};\n\t\t\tconst __devupRecord9 = (__devupRecord3, __devupRecord4) => {\n\t\t\t\tlet __devupRecord10;\n\t\t\t\tlet __devupRecord11;\n\t\t\t\tlet __devupRecord16;\n\t\t\t\tconst { style, className, as: DevupAs = __devupRecord4[3], forwardedAs } = __devupRecord3;\n\t\t\t\tconst rest = __devupRecord4[5];\n\t\t\t\tconst __devupRecord5 = [];\n\t\t\t\tconst __devupRecord6 = [\n\t\t\t\t\t[__devupRecord4[0][0]],\n\t\t\t\t\t__devupRecord4[1],\n\t\t\t\t\t[__devupRecord4[2], \"b--a\"].filter(Boolean).join(\" \"),\n\t\t\t\t\t__devupRecord4[3],\n\t\t\t\t\t__devupRecord4[4],\n\t\t\t\t\trest\n\t\t\t\t];\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[1])(__devupRecord3, __devupRecord6) : __devupRecord6[4]({\n\t\t\t\t\t...Object.fromEntries(Object.entries(({\"big\": __devupRecord10, \"theme\": __devupRecord11, ...__devupRecord16} = rest, __devupRecord16)).filter(([k]) => k[0] !== \"$\")),\n\t\t\t\t\tas: __devupRecord6[3],\n\t\t\t\t\tforwardedAs: __devupRecord3.forwardedAs,\n\t\t\t\t\tclassName: __devupRecord6[0].length || __devupRecord6[2] !== void 0 ? [\n\t\t\t\t\t\t...__devupRecord6[0],\n\t\t\t\t\t\t__devupRecord6[2],\n\t\t\t\t\t\t__devupRecord3.className\n\t\t\t\t\t].filter(Boolean).join(\" \") : __devupRecord3.className,\n\t\t\t\t\tstyle: __devupRecord6[1] === void 0 ? __devupRecord3.style : {\n\t\t\t\t\t\t...__devupRecord6[1],\n\t\t\t\t\t\t...__devupRecord3.style\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t\treturn __devupRecord17 = Dyn, <__devupRecord17 {...{\n\t\t\t\t...__devupRecord2,\n\t\t\t\t__devupCss0: [\n\t\t\t\t\t__devupRecord8,\n\t\t\t\t\t__devupRecord9,\n\t\t\t\t\t__devupRecord13,\n\t\t\t\t\t__devupRecord15\n\t\t\t\t]\n\t\t\t}} />;\n\t\t}\n\t}\n});\n\n[\"/src/base.tsx\"]" diff --git a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__namespace.snap b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__namespace.snap index bf8eeb61a..f242bcf15 100644 --- a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__namespace.snap +++ b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__namespace.snap @@ -2,4 +2,4 @@ source: libs/extractor/src/imported_styled/tests/relevance_tests.rs expression: "format!(\"{}\\n{:?}\", output.code, output.dependencies)" --- -"import { forwardRef as __devupForwardRef } from \"react\";\nimport * as UI from \"./base\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => (__devupRecord0=>{const {__devupCss0:__devupRecord1,__devupForwarded0:__devupRecord12,...__devupRecord2}=__devupRecord0;const __devupRecord14=()=>(\"a\");const __devupRecord15=(__devupRecord1&&__devupRecord1[3])??__devupRecord14;const __devupRecord13=__devupRecord1?__devupRecord1[2]:false;const __devupRecord8=(__devupRecord2,__devupRecord7,__devupRecord13)=>{const __devupRecord8=(__devupRecord2);return __devupRecord1?(0,__devupRecord1[0])(__devupRecord8,__devupRecord7,__devupRecord13):__devupRecord7(__devupRecord8);};const __devupRecord9=(__devupRecord3,__devupRecord4)=>{const {style,className,as:DevupAs=__devupRecord4[3],forwardedAs}=__devupRecord3;const rest=__devupRecord4[5];const __devupRecord5=[];const __devupRecord6=[[__devupRecord4[0][0]],__devupRecord4[1],[__devupRecord4[2],\"b--a\",].filter(Boolean).join(' '),__devupRecord4[3],__devupRecord4[4],rest];return __devupRecord1?(0,__devupRecord1[1])(__devupRecord3,__devupRecord6):__devupRecord6[4]({...Object.fromEntries(Object.entries((({ \"big\": __devupOmit0, \"theme\": __devupOmit1, ...__devupDom }) => __devupDom)(rest)).filter(([k]) => k[0] !== \"$\")),as:__devupRecord6[3],forwardedAs:__devupRecord3.forwardedAs,className:(__devupRecord6[0].length||__devupRecord6[2]!==void 0)?[...__devupRecord6[0],__devupRecord6[2],__devupRecord3.className].filter(Boolean).join(' '):__devupRecord3.className,style:__devupRecord6[1]===void 0?__devupRecord3.style:{...__devupRecord6[1],...__devupRecord3.style}});};return ((DevupStyled) => ())(UI.Dyn);})({\n\t...__devupRefProps,\n\tref: __devupRef\n}));\n\n[\"/src/base.tsx\"]" +"import { forwardRef as __devupForwardRef } from \"react\";\nimport * as UI from \"./base\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => {\n\tlet __devupRecord18;\n\t__devupRecord18 = {\n\t\t...__devupRefProps,\n\t\tref: __devupRef\n\t};\n\t{\n\t\tlet __devupRecord0 = __devupRecord18;\n\t\t{\n\t\t\tlet __devupRecord17;\n\t\t\tconst { __devupCss0: __devupRecord1, __devupForwarded0: __devupRecord12, ...__devupRecord2 } = __devupRecord0;\n\t\t\tconst __devupRecord14 = () => \"a\";\n\t\t\tconst __devupRecord15 = (__devupRecord1 && __devupRecord1[3]) ?? __devupRecord14;\n\t\t\tconst __devupRecord13 = __devupRecord1 ? __devupRecord1[2] : false;\n\t\t\tconst __devupRecord8 = (__devupRecord2, __devupRecord7, __devupRecord13) => {\n\t\t\t\tconst __devupRecord8 = __devupRecord2;\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[0])(__devupRecord8, __devupRecord7, __devupRecord13) : __devupRecord7(__devupRecord8);\n\t\t\t};\n\t\t\tconst __devupRecord9 = (__devupRecord3, __devupRecord4) => {\n\t\t\t\tlet __devupRecord10;\n\t\t\t\tlet __devupRecord11;\n\t\t\t\tlet __devupRecord16;\n\t\t\t\tconst { style, className, as: DevupAs = __devupRecord4[3], forwardedAs } = __devupRecord3;\n\t\t\t\tconst rest = __devupRecord4[5];\n\t\t\t\tconst __devupRecord5 = [];\n\t\t\t\tconst __devupRecord6 = [\n\t\t\t\t\t[__devupRecord4[0][0]],\n\t\t\t\t\t__devupRecord4[1],\n\t\t\t\t\t[__devupRecord4[2], \"b--a\"].filter(Boolean).join(\" \"),\n\t\t\t\t\t__devupRecord4[3],\n\t\t\t\t\t__devupRecord4[4],\n\t\t\t\t\trest\n\t\t\t\t];\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[1])(__devupRecord3, __devupRecord6) : __devupRecord6[4]({\n\t\t\t\t\t...Object.fromEntries(Object.entries(({\"big\": __devupRecord10, \"theme\": __devupRecord11, ...__devupRecord16} = rest, __devupRecord16)).filter(([k]) => k[0] !== \"$\")),\n\t\t\t\t\tas: __devupRecord6[3],\n\t\t\t\t\tforwardedAs: __devupRecord3.forwardedAs,\n\t\t\t\t\tclassName: __devupRecord6[0].length || __devupRecord6[2] !== void 0 ? [\n\t\t\t\t\t\t...__devupRecord6[0],\n\t\t\t\t\t\t__devupRecord6[2],\n\t\t\t\t\t\t__devupRecord3.className\n\t\t\t\t\t].filter(Boolean).join(\" \") : __devupRecord3.className,\n\t\t\t\t\tstyle: __devupRecord6[1] === void 0 ? __devupRecord3.style : {\n\t\t\t\t\t\t...__devupRecord6[1],\n\t\t\t\t\t\t...__devupRecord3.style\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t\treturn __devupRecord17 = UI.Dyn, <__devupRecord17 {...{\n\t\t\t\t...__devupRecord2,\n\t\t\t\t__devupCss0: [\n\t\t\t\t\t__devupRecord8,\n\t\t\t\t\t__devupRecord9,\n\t\t\t\t\t__devupRecord13,\n\t\t\t\t\t__devupRecord15\n\t\t\t\t]\n\t\t\t}} />;\n\t\t}\n\t}\n});\n\n[\"/src/base.tsx\"]" diff --git a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__reexport.snap b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__reexport.snap index 41d359351..08729aa7a 100644 --- a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__reexport.snap +++ b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__reexport.snap @@ -2,4 +2,4 @@ source: libs/extractor/src/imported_styled/tests/relevance_tests.rs expression: "format!(\"{}\\n{:?}\", output.code, output.dependencies)" --- -"import { forwardRef as __devupForwardRef } from \"react\";\nimport { Dyn } from \"./forward\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => (__devupRecord0=>{const {__devupCss0:__devupRecord1,__devupForwarded0:__devupRecord12,...__devupRecord2}=__devupRecord0;const __devupRecord14=()=>(\"a\");const __devupRecord15=(__devupRecord1&&__devupRecord1[3])??__devupRecord14;const __devupRecord13=__devupRecord1?__devupRecord1[2]:false;const __devupRecord8=(__devupRecord2,__devupRecord7,__devupRecord13)=>{const __devupRecord8=(__devupRecord2);return __devupRecord1?(0,__devupRecord1[0])(__devupRecord8,__devupRecord7,__devupRecord13):__devupRecord7(__devupRecord8);};const __devupRecord9=(__devupRecord3,__devupRecord4)=>{const {style,className,as:DevupAs=__devupRecord4[3],forwardedAs}=__devupRecord3;const rest=__devupRecord4[5];const __devupRecord5=[];const __devupRecord6=[[__devupRecord4[0][0]],__devupRecord4[1],[__devupRecord4[2],\"c--a\",].filter(Boolean).join(' '),__devupRecord4[3],__devupRecord4[4],rest];return __devupRecord1?(0,__devupRecord1[1])(__devupRecord3,__devupRecord6):__devupRecord6[4]({...Object.fromEntries(Object.entries((({ \"big\": __devupOmit0, \"theme\": __devupOmit1, ...__devupDom }) => __devupDom)(rest)).filter(([k]) => k[0] !== \"$\")),as:__devupRecord6[3],forwardedAs:__devupRecord3.forwardedAs,className:(__devupRecord6[0].length||__devupRecord6[2]!==void 0)?[...__devupRecord6[0],__devupRecord6[2],__devupRecord3.className].filter(Boolean).join(' '):__devupRecord3.className,style:__devupRecord6[1]===void 0?__devupRecord3.style:{...__devupRecord6[1],...__devupRecord3.style}});};return ((DevupStyled) => ())(Dyn);})({\n\t...__devupRefProps,\n\tref: __devupRef\n}));\n\n[\"/src/base.tsx\", \"/src/forward.tsx\"]" +"import { forwardRef as __devupForwardRef } from \"react\";\nimport { Dyn } from \"./forward\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => {\n\tlet __devupRecord18;\n\t__devupRecord18 = {\n\t\t...__devupRefProps,\n\t\tref: __devupRef\n\t};\n\t{\n\t\tlet __devupRecord0 = __devupRecord18;\n\t\t{\n\t\t\tlet __devupRecord17;\n\t\t\tconst { __devupCss0: __devupRecord1, __devupForwarded0: __devupRecord12, ...__devupRecord2 } = __devupRecord0;\n\t\t\tconst __devupRecord14 = () => \"a\";\n\t\t\tconst __devupRecord15 = (__devupRecord1 && __devupRecord1[3]) ?? __devupRecord14;\n\t\t\tconst __devupRecord13 = __devupRecord1 ? __devupRecord1[2] : false;\n\t\t\tconst __devupRecord8 = (__devupRecord2, __devupRecord7, __devupRecord13) => {\n\t\t\t\tconst __devupRecord8 = __devupRecord2;\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[0])(__devupRecord8, __devupRecord7, __devupRecord13) : __devupRecord7(__devupRecord8);\n\t\t\t};\n\t\t\tconst __devupRecord9 = (__devupRecord3, __devupRecord4) => {\n\t\t\t\tlet __devupRecord10;\n\t\t\t\tlet __devupRecord11;\n\t\t\t\tlet __devupRecord16;\n\t\t\t\tconst { style, className, as: DevupAs = __devupRecord4[3], forwardedAs } = __devupRecord3;\n\t\t\t\tconst rest = __devupRecord4[5];\n\t\t\t\tconst __devupRecord5 = [];\n\t\t\t\tconst __devupRecord6 = [\n\t\t\t\t\t[__devupRecord4[0][0]],\n\t\t\t\t\t__devupRecord4[1],\n\t\t\t\t\t[__devupRecord4[2], \"c--a\"].filter(Boolean).join(\" \"),\n\t\t\t\t\t__devupRecord4[3],\n\t\t\t\t\t__devupRecord4[4],\n\t\t\t\t\trest\n\t\t\t\t];\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[1])(__devupRecord3, __devupRecord6) : __devupRecord6[4]({\n\t\t\t\t\t...Object.fromEntries(Object.entries(({\"big\": __devupRecord10, \"theme\": __devupRecord11, ...__devupRecord16} = rest, __devupRecord16)).filter(([k]) => k[0] !== \"$\")),\n\t\t\t\t\tas: __devupRecord6[3],\n\t\t\t\t\tforwardedAs: __devupRecord3.forwardedAs,\n\t\t\t\t\tclassName: __devupRecord6[0].length || __devupRecord6[2] !== void 0 ? [\n\t\t\t\t\t\t...__devupRecord6[0],\n\t\t\t\t\t\t__devupRecord6[2],\n\t\t\t\t\t\t__devupRecord3.className\n\t\t\t\t\t].filter(Boolean).join(\" \") : __devupRecord3.className,\n\t\t\t\t\tstyle: __devupRecord6[1] === void 0 ? __devupRecord3.style : {\n\t\t\t\t\t\t...__devupRecord6[1],\n\t\t\t\t\t\t...__devupRecord3.style\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t\treturn __devupRecord17 = Dyn, <__devupRecord17 {...{\n\t\t\t\t...__devupRecord2,\n\t\t\t\t__devupCss0: [\n\t\t\t\t\t__devupRecord8,\n\t\t\t\t\t__devupRecord9,\n\t\t\t\t\t__devupRecord13,\n\t\t\t\t\t__devupRecord15\n\t\t\t\t]\n\t\t\t}} />;\n\t\t}\n\t}\n});\n\n[\"/src/base.tsx\", \"/src/forward.tsx\"]" diff --git a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__trigger.snap b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__trigger.snap index 802c4bd9d..95be73dd9 100644 --- a/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__trigger.snap +++ b/libs/extractor/src/imported_styled/tests/snapshots/extractor__imported_styled__tests__relevance_tests__trigger.snap @@ -2,4 +2,4 @@ source: libs/extractor/src/imported_styled/tests/relevance_tests.rs expression: "format!(\"{}\\n{:?}\", output.code, output.dependencies)" --- -"import { forwardRef as __devupForwardRef } from \"react\";\nimport { Dyn } from \"./base\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => (__devupRecord0=>{const {__devupCss0:__devupRecord1,__devupForwarded0:__devupRecord12,...__devupRecord2}=__devupRecord0;const __devupRecord14=()=>(\"a\");const __devupRecord15=(__devupRecord1&&__devupRecord1[3])??__devupRecord14;const __devupRecord13=__devupRecord1?__devupRecord1[2]:false;const __devupRecord8=(__devupRecord2,__devupRecord7,__devupRecord13)=>{const __devupRecord8=(__devupRecord2);return __devupRecord1?(0,__devupRecord1[0])(__devupRecord8,__devupRecord7,__devupRecord13):__devupRecord7(__devupRecord8);};const __devupRecord9=(__devupRecord3,__devupRecord4)=>{const {style,className,as:DevupAs=__devupRecord4[3],forwardedAs}=__devupRecord3;const rest=__devupRecord4[5];const __devupRecord5=[];const __devupRecord6=[[__devupRecord4[0][0]],__devupRecord4[1],[__devupRecord4[2],\"b--a\",].filter(Boolean).join(' '),__devupRecord4[3],__devupRecord4[4],rest];return __devupRecord1?(0,__devupRecord1[1])(__devupRecord3,__devupRecord6):__devupRecord6[4]({...Object.fromEntries(Object.entries((({ \"big\": __devupOmit0, \"theme\": __devupOmit1, ...__devupDom }) => __devupDom)(rest)).filter(([k]) => k[0] !== \"$\")),as:__devupRecord6[3],forwardedAs:__devupRecord3.forwardedAs,className:(__devupRecord6[0].length||__devupRecord6[2]!==void 0)?[...__devupRecord6[0],__devupRecord6[2],__devupRecord3.className].filter(Boolean).join(' '):__devupRecord3.className,style:__devupRecord6[1]===void 0?__devupRecord3.style:{...__devupRecord6[1],...__devupRecord3.style}});};return ((DevupStyled) => ())(Dyn);})({\n\t...__devupRefProps,\n\tref: __devupRef\n}));\n\n[\"/src/base.tsx\"]" +"import { forwardRef as __devupForwardRef } from \"react\";\nimport { Dyn } from \"./base\";\nexport const A = __devupForwardRef((__devupRefProps, __devupRef) => {\n\tlet __devupRecord18;\n\t__devupRecord18 = {\n\t\t...__devupRefProps,\n\t\tref: __devupRef\n\t};\n\t{\n\t\tlet __devupRecord0 = __devupRecord18;\n\t\t{\n\t\t\tlet __devupRecord17;\n\t\t\tconst { __devupCss0: __devupRecord1, __devupForwarded0: __devupRecord12, ...__devupRecord2 } = __devupRecord0;\n\t\t\tconst __devupRecord14 = () => \"a\";\n\t\t\tconst __devupRecord15 = (__devupRecord1 && __devupRecord1[3]) ?? __devupRecord14;\n\t\t\tconst __devupRecord13 = __devupRecord1 ? __devupRecord1[2] : false;\n\t\t\tconst __devupRecord8 = (__devupRecord2, __devupRecord7, __devupRecord13) => {\n\t\t\t\tconst __devupRecord8 = __devupRecord2;\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[0])(__devupRecord8, __devupRecord7, __devupRecord13) : __devupRecord7(__devupRecord8);\n\t\t\t};\n\t\t\tconst __devupRecord9 = (__devupRecord3, __devupRecord4) => {\n\t\t\t\tlet __devupRecord10;\n\t\t\t\tlet __devupRecord11;\n\t\t\t\tlet __devupRecord16;\n\t\t\t\tconst { style, className, as: DevupAs = __devupRecord4[3], forwardedAs } = __devupRecord3;\n\t\t\t\tconst rest = __devupRecord4[5];\n\t\t\t\tconst __devupRecord5 = [];\n\t\t\t\tconst __devupRecord6 = [\n\t\t\t\t\t[__devupRecord4[0][0]],\n\t\t\t\t\t__devupRecord4[1],\n\t\t\t\t\t[__devupRecord4[2], \"b--a\"].filter(Boolean).join(\" \"),\n\t\t\t\t\t__devupRecord4[3],\n\t\t\t\t\t__devupRecord4[4],\n\t\t\t\t\trest\n\t\t\t\t];\n\t\t\t\treturn __devupRecord1 ? (0, __devupRecord1[1])(__devupRecord3, __devupRecord6) : __devupRecord6[4]({\n\t\t\t\t\t...Object.fromEntries(Object.entries(({\"big\": __devupRecord10, \"theme\": __devupRecord11, ...__devupRecord16} = rest, __devupRecord16)).filter(([k]) => k[0] !== \"$\")),\n\t\t\t\t\tas: __devupRecord6[3],\n\t\t\t\t\tforwardedAs: __devupRecord3.forwardedAs,\n\t\t\t\t\tclassName: __devupRecord6[0].length || __devupRecord6[2] !== void 0 ? [\n\t\t\t\t\t\t...__devupRecord6[0],\n\t\t\t\t\t\t__devupRecord6[2],\n\t\t\t\t\t\t__devupRecord3.className\n\t\t\t\t\t].filter(Boolean).join(\" \") : __devupRecord3.className,\n\t\t\t\t\tstyle: __devupRecord6[1] === void 0 ? __devupRecord3.style : {\n\t\t\t\t\t\t...__devupRecord6[1],\n\t\t\t\t\t\t...__devupRecord3.style\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t\treturn __devupRecord17 = Dyn, <__devupRecord17 {...{\n\t\t\t\t...__devupRecord2,\n\t\t\t\t__devupCss0: [\n\t\t\t\t\t__devupRecord8,\n\t\t\t\t\t__devupRecord9,\n\t\t\t\t\t__devupRecord13,\n\t\t\t\t\t__devupRecord15\n\t\t\t\t]\n\t\t\t}} />;\n\t\t}\n\t}\n});\n\n[\"/src/base.tsx\"]" diff --git a/libs/extractor/src/jsx_emission.rs b/libs/extractor/src/jsx_emission.rs new file mode 100644 index 000000000..a8adbef2d --- /dev/null +++ b/libs/extractor/src/jsx_emission.rs @@ -0,0 +1,112 @@ +use std::error::Error; + +use crate::parsing::goal_policy; +use oxc_allocator::Allocator; +use oxc_ast::ast::JSXExpressionContainer; +use oxc_codegen::CodegenReturn; +use oxc_parser::{ParseOptions, Parser}; +use oxc_span::SourceType; + +/// JSX extraction outcomes used for final admission and sequence emission. +#[derive(Default)] +pub(crate) struct Outcome { + pub(crate) sequences: bool, + /// Whether the visit compiled the `css` prop of an element. + pub(crate) compiled_css_prop: bool, +} + +pub(crate) fn is_sequence(container: &JSXExpressionContainer<'_>) -> bool { + container.expression.as_expression().is_some_and(|value| { + matches!( + crate::utils::unwrap_syntax_only(value), + oxc_ast::ast::Expression::SequenceExpression(_) + ) + }) +} + +/// Oxc prints JSX sequence expressions at its lowest precedence. Restore only +/// their missing parentheses, without adding evaluation or changing scope. +pub(crate) fn parenthesize( + result: &mut CodegenReturn<'_>, + source_type: SourceType, +) -> Result<(), Box> { + let arena = Allocator::default(); + let parsed = Parser::new(&arena, &result.code, source_type) + .with_options(ParseOptions { + parse_regular_expression: true, + ..ParseOptions::default() + }) + .parse(); + if !goal_policy::has_diagnostics(&parsed) { + return Ok(()); + } + if parsed.fatal_error { + return Err(format!("Cannot emit JSX: {:?}", parsed.diagnostics).into()); + } + let mut insertions = Vec::new(); + for diagnostic in &parsed.diagnostics { + if goal_policy::accepts_declaration_goal( + &parsed, + &diagnostic.to_string(), + &diagnostic.labels, + ) { + continue; + } + if diagnostic.code.scope.as_deref() != Some("TS") + || diagnostic.code.number.as_deref() != Some("18007") + || diagnostic.labels.len() != 1 + { + return Err(format!("Cannot emit JSX: {diagnostic}").into()); + } + let label = &diagnostic.labels[0]; + let start = usize::try_from(label.offset())?; + let end = start + .checked_add(usize::try_from(label.len())?) + .ok_or("JSX sequence span overflow")?; + insertions.push((start, '(')); + insertions.push((end, ')')); + } + insertions.sort_unstable_by_key(|(offset, _)| *offset); + let mut code = String::with_capacity(result.code.len() + insertions.len()); + let mut previous = 0; + for &(offset, character) in &insertions { + code.push_str(&result.code[previous..offset]); + code.push(character); + previous = offset; + } + code.push_str(&result.code[previous..]); + validate(&code, source_type)?; + if let Some(map) = result.map.take() { + let offsets: Vec<_> = insertions.iter().map(|(offset, _)| *offset).collect(); + result.map = Some(crate::source_map::shift_generated( + map, + &result.code, + &offsets, + )?); + } + result.code = code; + Ok(()) +} + +fn validate(code: &str, source_type: SourceType) -> Result<(), Box> { + let arena = Allocator::default(); + let checked = Parser::new(&arena, code, source_type) + .with_options(ParseOptions { + parse_regular_expression: true, + ..ParseOptions::default() + }) + .parse(); + if goal_policy::has_diagnostics(&checked) { + Err(format!( + "Cannot emit JSX after grouping sequences: {:?}", + checked.diagnostics + ) + .into()) + } else { + Ok(()) + } +} + +#[cfg(test)] +#[path = "jsx_emission_tests.rs"] +mod tests; diff --git a/libs/extractor/src/jsx_emission_tests.rs b/libs/extractor/src/jsx_emission_tests.rs new file mode 100644 index 000000000..5001982b0 --- /dev/null +++ b/libs/extractor/src/jsx_emission_tests.rs @@ -0,0 +1,390 @@ +use super::*; +use oxc_codegen::{Codegen, CodegenOptions}; +use oxc_sourcemap::{SourceMap, TokenChunk}; +use rstest::rstest; +use std::borrow::Cow; + +#[rstest] +#[case("function f(){return
;}", 2)] +#[case("function f(){return
{(first(),last())}
;}", 2)] +#[case( + "function f(){return
{(child(),3)})}/>;}", + 6 +)] +#[case("function f(){return <>{(first(),last())};}", 2)] +#[case("function f(){return <><>{(first(),last())};}", 2)] +#[case("async function f(p){return
{(first(),await p)}
;}", 2)] +#[case("function* f(){return
{(first(),yield 1)}
;}", 2)] +fn grouping_changes_only_the_missing_parentheses(#[case] source: &str, #[case] added: usize) { + let arena = Allocator::default(); + let parsed = Parser::new(&arena, source, SourceType::tsx()).parse(); + assert!(parsed.diagnostics.is_empty()); + let mut result = Codegen::new().build(&parsed.program); + let before = result.code.clone(); + parenthesize(&mut result, SourceType::tsx()).unwrap_or_else(|error| panic!("{error:?}")); + assert_eq!(result.code.len(), before.len() + added); + assert!( + Parser::new(&arena, &result.code, SourceType::tsx()) + .parse() + .diagnostics + .is_empty() + ); + // Parsing the result again and printing it produces the same ungrouped + // Oxc output. Thus grouping adds no other AST operation, binding or scope. + let grouped = Parser::new(&arena, &result.code, SourceType::tsx()).parse(); + assert_eq!(Codegen::new().build(&grouped.program).code, before); +} + +#[test] +fn valid_output_is_byte_and_map_identical() { + let source = "const value=(first(),last());"; + let arena = Allocator::default(); + let parsed = Parser::new(&arena, source, SourceType::tsx()).parse(); + let mut result = Codegen::new() + .with_options(CodegenOptions { + source_map_path: Some("input.tsx".into()), + ..CodegenOptions::default() + }) + .build(&parsed.program); + let before = result.code.clone(); + let map = result + .map + .as_ref() + .unwrap_or_else(|| panic!("expected generated source map")) + .to_json_string(); + parenthesize(&mut result, SourceType::tsx()).unwrap_or_else(|error| panic!("{error:?}")); + assert_eq!(result.code, before); + assert_eq!( + result + .map + .as_ref() + .unwrap_or_else(|| panic!("expected generated source map")) + .to_json_string(), + map + ); +} + +#[test] +fn other_generated_errors_are_not_recovered() { + let arena = Allocator::default(); + let parsed = Parser::new(&arena, "const ok=1;", SourceType::tsx()).parse(); + let mut result = Codegen::new().build(&parsed.program); + result.code = "const = ;".into(); + let error = match parenthesize(&mut result, SourceType::tsx()) { + Err(error) => error.to_string(), + Ok(()) => panic!("invalid generated JSX must remain an error"), + }; + assert!(error.starts_with("Cannot emit JSX:"), "{error}"); + assert_eq!(result.code, "const = ;"); + assert!(validate("
{first(),last()}
", SourceType::tsx()).is_err()); +} + +#[test] +fn generated_map_column_overflow_is_reported() { + let parts = oxc_sourcemap::SourceMapParts { + tokens: vec![oxc_sourcemap::Token::new(0, u32::MAX, 0, 0, None, None)].into_boxed_slice(), + ..oxc_sourcemap::SourceMapParts::default() + }; + let error = match crate::source_map::shift_generated(SourceMap::from_parts(parts), "a", &[0]) { + Err(error) => error.to_string(), + Ok(_) => panic!("generated source map column overflow must remain an error"), + }; + assert_eq!(error, "Generated source map column overflow"); +} + +#[test] +#[serial_test::serial] +fn original_invalid_jsx_remains_a_located_source_error() { + let error = match crate::extract( + "original.tsx", + "import {Box} from '@devup-ui/react';const value=;", + crate::ExtractOption::default(), + ) { + Err(error) => error.to_string(), + Ok(_) => panic!("original invalid JSX must remain a located error"), + }; + assert!(error.starts_with("original.tsx:1:"), "{error}"); + assert!(error.contains("comma operator"), "{error}"); +} + +#[test] +#[serial_test::serial] +fn compiled_elements_use_the_rare_emission_path() { + let source = "import {Box} from '@devup-ui/react';function f(){return {(before(),child())};}"; + let output = crate::extract("compiled.tsx", source, crate::ExtractOption::default()) + .unwrap_or_else(|error| panic!("{error:?}")); + let arena = Allocator::default(); + assert!( + Parser::new(&arena, &output.code, SourceType::tsx()) + .parse() + .diagnostics + .is_empty(), + "{}", + output.code + ); + assert!( + output.code.contains("(before(), child())"), + "{}", + output.code + ); +} + +#[test] +fn unicode_nested_jsx_keeps_source_map_metadata_and_token_origins() { + let source = "const label='🦀';\r\nfunction f(){return
é🦀\r\n\u{2028}\u{2029}{(child(),label)})}/>;}"; + let arena = Allocator::default(); + let parsed = Parser::new(&arena, source, SourceType::tsx()).parse(); + assert!(parsed.diagnostics.is_empty()); + let mut result = Codegen::new() + .with_options(CodegenOptions { + source_map_path: Some("input.tsx".into()), + ..CodegenOptions::default() + }) + .build(&parsed.program); + let old_code = result.code.clone(); + assert!( + old_code.contains("\r\n") && old_code.contains('\u{2028}') && old_code.contains('\u{2029}') + ); + let mut before = result + .map + .take() + .unwrap_or_else(|| panic!("expected generated source map")) + .into_parts(); + before.file = Some(Cow::Borrowed("output.js")); + before.source_root = Some(Cow::Borrowed("/root")); + before.ignore_list = Some(vec![0]); + before.debug_id = Some(Cow::Borrowed("emission-test")); + let middle = before.tokens.len() / 2; + let previous = before.tokens[middle - 1]; + let previous_name = before.tokens[..middle] + .iter() + .rev() + .find_map(oxc_sourcemap::Token::get_name_id) + .unwrap_or(0); + before.token_chunks = Some(vec![ + TokenChunk::new( + 0, + u32::try_from(middle).unwrap_or_else(|error| panic!("{error:?}")), + 0, + 0, + 0, + 0, + 0, + 0, + ), + TokenChunk::new( + u32::try_from(middle).unwrap_or_else(|error| panic!("{error:?}")), + u32::try_from(before.tokens.len()).unwrap_or_else(|error| panic!("{error:?}")), + previous.get_dst_line(), + previous.get_dst_col(), + previous.get_src_line(), + previous.get_src_col(), + previous_name, + previous.get_source_id().unwrap_or(0), + ), + ]); + result.map = Some(SourceMap::from_parts(before.clone())); + parenthesize(&mut result, SourceType::tsx()).unwrap_or_else(|error| panic!("{error:?}")); + assert_eq!(result.code.len(), old_code.len() + 6); + let after = result + .map + .as_ref() + .unwrap_or_else(|| panic!("expected generated source map")) + .clone() + .into_parts(); + assert_eq!(after.file, before.file); + assert_eq!(after.names, before.names); + assert_eq!(after.source_root, before.source_root); + assert_eq!(after.sources, before.sources); + assert_eq!(after.source_contents, before.source_contents); + assert_eq!(after.ignore_list, before.ignore_list); + assert_eq!(after.debug_id, before.debug_id); + assert_eq!(after.tokens.len(), before.tokens.len()); + let old_lines = crate::source_map::Lines::new(&old_code); + let new_lines = crate::source_map::Lines::new(&result.code); + for (old, new) in before.tokens.iter().zip(after.tokens.iter()) { + assert_eq!( + ( + old.get_src_line(), + old.get_src_col(), + old.get_source_id(), + old.get_name_id() + ), + ( + new.get_src_line(), + new.get_src_col(), + new.get_source_id(), + new.get_name_id() + ) + ); + assert_eq!(old.get_dst_line(), new.get_dst_line()); + let old_offset = old_lines.offset(old.get_dst_line(), old.get_dst_col()); + let new_offset = new_lines.offset(new.get_dst_line(), new.get_dst_col()); + assert_eq!( + old_code[old_offset..].chars().next(), + result.code[new_offset..].chars().next() + ); + } + let mut expected_chunks = before + .token_chunks + .unwrap_or_else(|| panic!("expected original token chunks")); + for chunk in &mut expected_chunks { + if let Some((_, new)) = before + .tokens + .iter() + .zip(after.tokens.iter()) + .find(|(old, _)| { + old.get_dst_line() == chunk.prev_dst_line && old.get_dst_col() == chunk.prev_dst_col + }) + { + chunk.prev_dst_col = new.get_dst_col(); + } + } + assert_eq!( + after + .token_chunks + .as_ref() + .unwrap_or_else(|| panic!("expected emitted token chunks")), + &expected_chunks + ); + let encoded = result + .map + .as_ref() + .unwrap_or_else(|| panic!("expected generated source map")) + .to_json_string(); + let decoded = SourceMap::from_json_string(&encoded).unwrap_or_else(|error| panic!("{error:?}")); + assert_eq!( + decoded.get_tokens().collect::>(), + after.tokens.to_vec() + ); +} + +#[rstest] +#[case("<>{(first(),last())}")] +#[case("<><>{(first(),last())}")] +#[serial_test::serial] +fn compiled_siblings_detect_fragment_sequences(#[case] fragment: &str) { + let source = format!( + "import {{Box}} from '@devup-ui/react';function f(){{return [,{fragment}];}}" + ); + let output = crate::extract("fragment.tsx", &source, crate::ExtractOption::default()) + .unwrap_or_else(|error| panic!("{error:?}")); + let arena = Allocator::default(); + assert!( + Parser::new(&arena, &output.code, SourceType::tsx()) + .parse() + .diagnostics + .is_empty(), + "{}", + output.code + ); + assert!(output.code.contains("(first(), last())"), "{}", output.code); +} + +#[rstest] +#[case("input.cjs", "return
{(first(),last())}
;", false)] +#[case("input.js", "const value=
{(first(),last())}
;", false)] +#[case( + "input.mjs", + "export const value=
{(first(),last())}
;", + false +)] +#[case( + "input.cts", + "const count:number=1;const value=
{(first(),count)}
;", + true +)] +#[case( + "input.cjs", + "import x from 'x';console.log(new.target);return
{(first(),last())}
;export {x};", + false +)] +fn emission_preserves_physical_goal_and_generated_jsx( + #[case] filename: &str, + #[case] source: &str, + #[case] typescript: bool, +) { + let source_type = crate::parsing::source_type(filename) + .unwrap_or_else(|error| panic!("{error:?}")) + .with_jsx(true); + assert_eq!(source_type.is_typescript(), typescript); + let arena = Allocator::default(); + let parsed = Parser::new(&arena, source, source_type).parse(); + assert!( + !goal_policy::has_diagnostics(&parsed), + "{:?}", + parsed.diagnostics + ); + let mut result = Codegen::new().build(&parsed.program); + let before = result.code.clone(); + parenthesize(&mut result, source_type).unwrap_or_else(|error| panic!("{error:?}")); + assert_eq!(result.code.len(), before.len() + 2); + validate(&result.code, source_type).unwrap_or_else(|error| panic!("{error:?}")); + let grouped = Parser::new(&arena, &result.code, source_type).parse(); + assert_eq!( + grouped.program.source_type.is_commonjs(), + source_type.is_commonjs() + ); + assert_eq!(Codegen::new().build(&grouped.program).code, before); +} + +#[rstest] +#[case("input.js", "const value:number=1;")] +#[case("input.mjs", "return
{(first(),last())}
;")] +#[case("input.cjs", "const value=import.meta;")] +#[case("input.cjs", "await pending;")] +fn unrelated_dialect_errors_remain_errors(#[case] filename: &str, #[case] source: &str) { + let source_type = crate::parsing::source_type(filename) + .unwrap_or_else(|error| panic!("{error:?}")) + .with_jsx(true); + assert!(validate(source, source_type).is_err()); +} + +#[test] +fn recoverable_non_sequence_emission_error_preserves_code_and_map() { + let arena = Allocator::default(); + let parsed = Parser::new(&arena, "const original=1;", SourceType::tsx()).parse(); + let mut result = Codegen::new() + .with_options(CodegenOptions { + source_map_path: Some("original.tsx".into()), + ..CodegenOptions::default() + }) + .build(&parsed.program); + result.code = "const invalid=/[z-a]/;".into(); + let checked = Parser::new(&arena, &result.code, SourceType::tsx()) + .with_options(ParseOptions { + parse_regular_expression: true, + ..ParseOptions::default() + }) + .parse(); + assert!( + !checked.fatal_error, + "fixture must exercise a recoverable diagnostic" + ); + assert_eq!(checked.diagnostics.len(), 1); + assert_eq!( + checked.diagnostics[0].to_string(), + "Invalid regular expression: Character class atom range out of order" + ); + assert_ne!(checked.diagnostics[0].code.number.as_deref(), Some("18007")); + let before = result.code.clone(); + let before_map = result + .map + .as_ref() + .map(oxc_sourcemap::SourceMap::to_json_string); + let Err(error) = parenthesize(&mut result, SourceType::tsx()) else { + panic!("only missing JSX sequence parentheses can be repaired") + }; + assert_eq!( + error.to_string(), + "Cannot emit JSX: Invalid regular expression: Character class atom range out of order" + ); + assert_eq!(result.code, before); + assert_eq!( + result + .map + .as_ref() + .map(oxc_sourcemap::SourceMap::to_json_string), + before_map + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests.rs b/libs/extractor/src/jsx_semantics_tests.rs new file mode 100644 index 000000000..a849b5619 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests.rs @@ -0,0 +1,108 @@ +use super::*; +use crate::extract_style::style_property::StyleProperty; +use css::class_map::reset_class_map; +use css::file_map::reset_file_map; + +mod binding_edges; +mod boundary_classes; +mod boundary_selection; +mod call_diagnostics; +mod call_spread_attachment; +mod calls; +mod capture_edges; +mod capture_elision; +mod capture_preservation; +mod create_element; +mod create_element_attachment; +mod css_prop; +mod errors; +mod evaluation_edges; +mod factory_order; +mod forwarded; +mod gate_edges; +mod ordered; +mod pass_through; +mod pass_through_edges; +mod pass_through_known; +mod repeated; +mod scoped_captures; +mod slots; +mod spread_repair; +mod style_order; +mod styled; +mod type_imports; +pub(crate) mod whole; + +const BOX: &str = "import { Box } from '@devup-ui/react';\n"; +const EMOTION: &str = "/** @jsxImportSource @emotion/react */\n"; +const JSX_RUNTIME: &str = "import { jsx } from 'react/jsx-runtime';\n"; + +fn compile_with(code: &str, option: ExtractOption) -> Result { + reset_class_map(); + reset_file_map(); + css::debug::set_debug(true); + let output = extract("a.tsx", code, option).map_err(|error| error.to_string()); + css::debug::set_debug(false); + output +} + +fn compile(code: &str) -> Result { + compile_with(code, ExtractOption::default()) +} + +fn compile_emotion(code: &str) -> Result { + compile_with( + code, + ExtractOption { + import_aliases: HashMap::from([( + "@emotion/react".to_string(), + ImportAlias::NamedToNamed, + )]), + ..ExtractOption::default() + }, + ) +} + +/// The output of a file that compiles +fn output(source: &str) -> ExtractOutput { + compile(source).unwrap_or_else(|error| panic!("the file does not compile: {error}")) +} + +fn code(source: &str) -> String { + output(source).code +} + +/// The message of a file that does not compile +fn error(source: &str) -> String { + compile(source) + .err() + .unwrap_or_else(|| panic!("the negative fixture compiles: {source}")) +} + +fn static_styles(output: &ExtractOutput) -> Vec<(String, String)> { + let mut found: Vec<_> = output + .styles + .iter() + .filter_map(|style| match style { + ExtractStyleValue::Static(style) => { + Some((style.property().to_string(), style.value().to_string())) + } + _ => None, + }) + .collect(); + found.sort(); + found +} + +/// What the JavaScript `body` returns, run as the build's output runs it +fn run(body: &str) -> String { + let script = format!("(function() {{ {body} }})()"); + let mut context = boa_engine::Context::default(); + let value = context + .eval(boa_engine::Source::from_bytes(script.as_bytes())) + .unwrap_or_else(|error| panic!("{error}: {script}")); + value.to_string(&mut context).map_or_else( + |error| panic!("{error}: {script}"), + |text| text.to_std_string_escaped(), + ) +} diff --git a/libs/extractor/src/jsx_semantics_tests/binding_edges.rs b/libs/extractor/src/jsx_semantics_tests/binding_edges.rs new file mode 100644 index 000000000..5b93ea601 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/binding_edges.rs @@ -0,0 +1,194 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case("(Box)")] +#[case("Box as typeof Box")] +#[case("Box satisfies typeof Box")] +#[serial] +fn wrapped_component_bindings_when_create_element_reads_them_compile(#[case] component: &str) { + let source = format!( + "{BOX}import {{createElement}} from 'react'; export const a=()=>createElement({component},{{color:'red'}},'child');" + ); + let actual = evaluate(&source, "a()"); + assert_eq!(actual.element["type"], "div"); + assert_eq!(actual.element["children"], serde_json::json!(["child"])); +} + +#[test] +#[serial] +fn shadowed_undefined_when_used_as_props_is_forwarded() { + let source = format!( + "{BOX}import {{createElement}} from 'react';export const a=(undefined)=>createElement(Box,undefined,'child');" + ); + let actual = evaluate(&source, "a({id:'kept'})"); + assert_eq!(actual.element["props"]["id"], "kept"); +} + +#[test] +#[serial] +fn void_effect_when_used_as_props_runs_before_children() { + let source = format!( + "{BOX}import {{createElement}} from 'react';export const a=()=>createElement(Box,void trace.push('props'),(trace.push('children'),'child'));" + ); + let actual = evaluate(&source, "a()"); + assert_eq!(actual.trace, serde_json::json!(["props", "children"])); +} + +#[rstest] +#[case("undefined")] +#[case("void effect()")] +#[case("cond ? 1 : undefined")] +#[case("cond ? void effect() : 2")] +#[serial] +fn uncertain_empty_order_when_shadowed_or_effectful_is_located(#[case] order: &str) { + for element in [ + format!(""), + format!("jsx(Box,{{styleOrder:{order},color:'red'}})"), + ] { + let source = + format!("{BOX}{JSX_RUNTIME}export const a=(undefined,effect,cond)=>{element};"); + let message = error(&source); + assert!(message.starts_with("a.tsx:3:"), "{message}"); + assert!(message.contains(order), "{message}"); + } +} + +#[test] +#[serial] +fn shadowed_globals_when_spreads_copy_props_do_not_capture_generated_names() { + let source = format!( + "{BOX}export const a=(Object,undefined,__devupSpread0,__devupValue0)=> ;" + ); + let actual = evaluate(&source, "a(null,'not-undefined',{color:void 0},'red')"); + assert_eq!( + actual.element["props"]["className"] + .as_str() + .unwrap_or_else(|| panic!("class name: {}", actual.element)) + .split_whitespace() + .count(), + 1 + ); + assert!( + actual.element["props"]["style"] + .as_object() + .unwrap_or_else(|| panic!("expected an authored style object")) + .values() + .any(|value| value == "red") + ); +} + +#[rstest] +#[case("jsx(Box,{id:first(),as:type(),color:'red',...rest},child())")] +#[case("createElement(Box,{id:first(),as:type(),color:'red',...rest},child())")] +#[case("React.createElement(Box,{id:first(),as:type(),color:'red',...rest},child())")] +#[serial] +fn dynamic_as_when_props_are_captured_keeps_type_at_its_source_position(#[case] element: &str) { + let source = format!( + "{BOX}{JSX_RUNTIME}import React,{{createElement}} from 'react';export const a=(first,type,rest,child)=>{element};" + ); + let actual = evaluate( + &source, + "a(()=>{trace.push('id');return 'id';},()=>{trace.push('type');return 'section';},{get color(){trace.push('spread');return 'blue';}},()=>{trace.push('child');return 'child';})", + ); + assert_eq!(actual.element["type"], "section"); + assert_eq!( + actual.trace, + serde_json::json!(["id", "type", "spread", "child"]) + ); +} + +#[test] +#[serial] +fn dynamic_as_when_member_factory_looks_up_a_receiver_keeps_it() { + let source = format!( + "{BOX}import React from 'react';export const a=()=>React.createElement(Box,{{color:(trace.push('color'),'red'),as:(trace.push('type'),'a')}},(trace.push('child'),'child'));" + ); + let actual = evaluate( + &source, + "(()=>{React.marker='receiver';Object.defineProperty(React,'createElement',{get(){trace.push('callee');return function(type,props,...children){return {type,props,children,receiver:this.marker};};}});return a();})()", + ); + assert_eq!(actual.element["receiver"], "receiver"); + assert_eq!( + actual.trace, + serde_json::json!(["callee", "color", "type", "child"]) + ); +} + +#[test] +#[serial] +fn shadowed_undefined_when_a_conditional_style_is_absent_stays_absent() { + let source = + format!("{BOX}export const a=(undefined,active,value)=>;"); + let actual = evaluate(&source, "a('incorrect',false,'red')"); + assert!( + actual.element["props"]["style"] + .as_object() + .is_none_or(serde_json::Map::is_empty), + "{}", + actual.element + ); +} + +#[test] +#[serial] +fn locally_compiled_keyframes_when_capture_precedes_props_keep_static_rules() { + let source = "import {Box,keyframes} from '@devup-ui/react';export function a(props){const spin=keyframes({from:{opacity:0},to:{opacity:1}});return ;}"; + let actual = output(source); + assert!( + static_styles(&actual) + .iter() + .any(|(property, _)| property == "animation-name"), + "{}", + actual.code + ); + assert!(!actual.styles.iter().any(|style|matches!(style,ExtractStyleValue::Dynamic(style) if style.property()=="animation-name")),"{}",actual.code); +} + +#[rstest] +#[case("{take('child')}")] +#[case("createElement(Box,{id:take('id'),as:type,...rest,title:take('title')},take('child'))")] +#[serial] +fn absent_dynamic_as_when_captured_defaults_without_reordering_later_props(#[case] element: &str) { + let source = format!( + "{BOX}import {{createElement}} from 'react';export const a=(type,rest,take)=>{element};" + ); + let actual = evaluate( + &source, + "a(null,{get x(){trace.push('spread');return 1;}},key=>{trace.push(key);return key;})", + ); + assert_eq!(actual.element["type"], "div"); + assert_eq!( + actual.trace, + serde_json::json!(["id", "spread", "title", "child"]) + ); +} + +#[rstest] +#[case("({lg:'large',sm:'small'})[size]")] +#[case("({lg:'large',sm:'small'} as const)[size]")] +#[serial] +fn wrapped_written_typography_when_captured_keeps_its_known_tokens(#[case] value: &str) { + let source = format!( + "{BOX}export const a=(size,rest)=>;" + ); + let actual = output(&source); + assert!( + actual + .styles + .iter() + .any(|style| matches!(style,ExtractStyleValue::Typography(name) if name=="large")), + "{}", + actual.code + ); + assert!( + actual + .styles + .iter() + .any(|style| matches!(style,ExtractStyleValue::Typography(name) if name=="small")), + "{}", + actual.code + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests/boundary_classes.rs b/libs/extractor/src/jsx_semantics_tests/boundary_classes.rs new file mode 100644 index 000000000..a91184be9 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/boundary_classes.rs @@ -0,0 +1,220 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[test] +#[serial] +fn class_boundary_when_isolated_member_call_runs_keeps_receiver_getter_and_iterator_once() { + let source = format!( + "{BOX}export const a=(receiver,args)=>;" + ); + let actual = evaluate( + &source, + "a({marker:'receiver',get read(){trace.push('get');return function(value){trace.push(this.marker+':'+value);return 'opaque';};}},{[Symbol.iterator](){trace.push('iterator');return ['arg'][Symbol.iterator]();}})", + ); + assert_eq!(actual.element["props"]["className"], "opaque"); + assert_eq!( + actual.trace, + serde_json::json!(["get", "iterator", "receiver:arg"]) + ); + assert!(!code(&source).contains("__devupValue")); +} + +#[rstest] +#[case("{get read(){trace.push('get');throw 'boom';}}", "[]", serde_json::json!(["get"]))] +#[case("{get read(){trace.push('get');return ()=>{trace.push('call');};}}", "{[Symbol.iterator](){trace.push('iterator');throw 'boom';}}", serde_json::json!(["get","iterator"]))] +#[case("{get read(){trace.push('get');return function(){trace.push('call');throw 'boom';};}}", "{[Symbol.iterator](){trace.push('iterator');return [][Symbol.iterator]();}}", serde_json::json!(["get","iterator","call"]))] +#[serial] +fn class_boundary_when_call_parts_throw_preserves_the_original_cutoff( + #[case] receiver: &str, + #[case] args: &str, + #[case] trace: serde_json::Value, +) { + let source = format!( + "{BOX}export const a=(receiver,args)=>;" + ); + let actual = evaluate( + &source, + &format!("(()=>{{try{{return a({receiver},{args});}}catch(error){{return error;}}}})()"), + ); + assert_eq!(actual.element, "boom"); + assert_eq!(actual.trace, trace); +} + +#[rstest] +#[case("", "'id'", "early", true)] +#[case( + "", + "{className:'override'}", + "override", + true +)] +#[case( + "", + "'override'", + "override", + false +)] +#[serial] +fn class_boundary_keeps_evaluation_order_and_only_captures_used_values( + #[case] element: &str, + #[case] later: &str, + #[case] expected: &str, + #[case] captured: bool, +) { + let source = format!("{BOX}export const a=(read,later)=>{element};"); + let actual = evaluate( + &source, + &format!( + "(()=>{{let value='early';return a(()=>{{trace.push('read');return value;}},()=>{{trace.push('later');value='late';return {later};}});}})()" + ), + ); + assert_eq!(actual.trace, serde_json::json!(["read", "later"])); + assert_eq!(actual.element["props"]["className"], expected); + assert_eq!(code(&source).contains("__devupValue"), captured); +} + +#[test] +#[serial] +fn class_boundary_when_style_order_expands_calls_still_evaluates_once() { + let source = format!( + "{BOX}export const a=(read,active)=>;" + ); + let actual = evaluate(&source, "a(()=>{trace.push('read');return 'opaque';},true)"); + assert_eq!(actual.trace, serde_json::json!(["read"])); + assert_eq!(actual.element["props"]["className"], "opaque"); + assert!(code(&source).contains("__devupValue")); +} + +#[test] +#[serial] +fn class_boundary_when_child_yields_keeps_the_class_before_suspension() { + let source = format!( + "{BOX}export function* a(read){{return {{yield (trace.push('yield'),'pause')}};}}" + ); + let actual = evaluate( + &source, + "(()=>{const iterator=a(()=>{trace.push('read');return 'opaque';});iterator.next();trace.push('resume');return iterator.next('child').value;})()", + ); + assert_eq!(actual.trace, serde_json::json!(["read", "yield", "resume"])); + assert_eq!(actual.element["children"], serde_json::json!(["child"])); + assert!(code(&source).contains("__devupValue")); +} + +#[test] +#[serial] +fn class_boundary_when_only_a_css_value_calls_keeps_its_single_read_inline() { + let source = format!("{BOX}export const a=(read)=>;"); + let actual = evaluate(&source, "a(()=>{trace.push('read');return 2;})"); + assert_eq!(actual.trace, serde_json::json!(["read"])); + assert_eq!( + actual.element["props"]["style"] + .as_object() + .and_then(|style| style.values().next()), + Some(&serde_json::json!(2)) + ); + assert!(!code(&source).contains("__devupValue")); +} + +#[rstest] +#[case("", false)] +#[case("", false)] +#[case("{'child'}", false)] +#[case("", true)] +#[serial] +fn class_boundary_keeps_capture_only_when_the_component_route_needs_it( + #[case] element: &str, + #[case] captured: bool, +) { + let source = format!( + "import {{Box,styled}} from '@devup-ui/react';const Card=styled(Box,{{color:'red'}});export const a=(read)=>{element};" + ); + let compiled = code(&source); + assert_eq!(compiled.contains("__devupValue"), captured); + let actual = super::whole::execute( + &format!("const __devupForwardRef=render=>props=>render(props,null);{compiled}"), + "a(()=>{trace.push('read');return 'opaque';})", + ); + assert_eq!(actual.trace, serde_json::json!(["read"])); + assert!( + actual.element["props"]["className"] + .as_str() + .is_some_and(|value| value.contains("opaque")) + ); +} + +#[test] +#[serial] +fn class_boundary_when_outer_text_is_forced_to_capture_compiles_before_later_spread() { + let source = format!( + "{BOX}const base=`p-4`;export const a=(clsx,on,rest)=>;" + ); + let compiled = output(&source); + assert_eq!( + static_styles(&compiled), + vec![ + ("margin".into(), ".5rem".into()), + ("padding".into(), "1rem".into()) + ] + ); + let actual = evaluate( + &source, + "a((...parts)=>{trace.push('class');return parts.filter(Boolean).join(' ');},true,{get className(){trace.push('spread');return 'override';}})", + ); + assert_eq!(actual.trace, serde_json::json!(["class", "spread"])); + assert_eq!(actual.element["props"]["className"], "override"); +} + +#[test] +#[serial] +fn class_boundary_when_parameter_shadows_text_and_id_reads_outer_binding_preserves_both() { + let source = format!( + "{BOX}const base='p-4';export const a=(clsx,rest)=>;export const b=(base,clsx,rest)=>;" + ); + let actual = evaluate( + &source, + "(()=>{const clsx=(value)=>value;return [a(clsx,{}).props,b('shadow',clsx,{}).props];})()", + ); + assert_eq!(actual.element[0]["id"], "p-4"); + assert_eq!(actual.element[0]["className"], "padding-0-1rem--255-a"); + assert_eq!(actual.element[1]["id"], "shadow"); + assert_eq!(actual.element[1]["className"], "shadow"); +} + +#[test] +#[serial] +fn class_boundary_when_call_argument_yields_keeps_the_original_generator_scope() { + let source = format!( + "{BOX}export function* a(read){{return ;}}" + ); + let actual = evaluate( + &source, + "(()=>{const iterator=a(value=>{trace.push('call:'+value);return 'opaque';});iterator.next();trace.push('resume');return iterator.next('arg').value;})()", + ); + assert_eq!( + actual.trace, + serde_json::json!(["yield", "resume", "call:arg"]) + ); + assert_eq!(actual.element["props"]["className"], "opaque"); + assert!(!code(&source).contains("__devupValue")); +} + +#[test] +#[serial] +fn class_boundary_when_merge_reads_outer_text_before_spread_keeps_only_final_padding() { + let source = format!( + "{BOX}const base='p-4';export const a=(rest)=>;" + ); + let compiled = output(&source); + assert_eq!( + static_styles(&compiled), + vec![("padding".into(), "2rem".into())] + ); + let actual = evaluate( + &source, + "a({get className(){trace.push('spread');return 'override';}})", + ); + assert_eq!(actual.trace, serde_json::json!(["spread"])); + assert_eq!(actual.element["props"]["className"], "override"); +} diff --git a/libs/extractor/src/jsx_semantics_tests/boundary_selection.rs b/libs/extractor/src/jsx_semantics_tests/boundary_selection.rs new file mode 100644 index 000000000..0af6b0788 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/boundary_selection.rs @@ -0,0 +1,166 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case("({0:[first(),second()],1:[third(),fourth()]})")] +#[case("[[first(),second()],[third(),fourth()]]")] +#[serial] +fn responsive_selection_preserves_missing_keys_without_capture_arrows( + #[case] table: &str, + #[values("0", "1", "2", "undefined", "null", "Symbol('missing')")] key: &str, +) { + let source = format!( + "{BOX}export const a=(index,first,second,third,fourth,later)=>;" + ); + assert_eq!(code(&source).matches("=>").count(), 1); + let actual = evaluate( + &source, + &format!( + "a({key},()=>{{trace.push('first');return '1px';}},()=>{{trace.push('second');return '2px';}},()=>{{trace.push('third');return '3px';}},()=>{{trace.push('fourth');return '4px';}},()=>{{trace.push('later');return 'id';}})" + ), + ); + assert_eq!( + actual.trace, + serde_json::json!(["first", "second", "third", "fourth", "later"]) + ); + assert_eq!(actual.element["props"]["id"], "id"); + let Some(style) = actual.element["props"]["style"].as_object() else { + panic!("style object required") + }; + let expected = match key { + "0" => vec![serde_json::json!("1px"), serde_json::json!("2px")], + "1" => vec![serde_json::json!("3px"), serde_json::json!("4px")], + _ => { + assert_eq!(actual.element["props"]["className"], ""); + Vec::new() + } + }; + assert_eq!(style.values().cloned().collect::>(), expected); +} + +#[rstest] +#[case("({0:[first(),second()],1:[third(),fourth()]})")] +#[case("[[first(),second()],[third(),fourth()]]")] +#[serial] +fn responsive_selection_coerces_the_key_once_after_eager_values( + #[case] table: &str, + #[values("return '0'", "return '1'", "return 'missing'", "throw 'key-failed'")] + resolution: &str, +) { + let source = format!( + "{BOX}export const a=(index,first,second,third,fourth,later)=>;" + ); + let actual = evaluate( + &source, + &format!( + "(()=>{{try{{return a({{[Symbol.toPrimitive](){{trace.push('key');{resolution};}}}},()=>{{trace.push('first');return '1px';}},()=>{{trace.push('second');return '2px';}},()=>{{trace.push('third');return '3px';}},()=>{{trace.push('fourth');return '4px';}},()=>{{trace.push('later');return 'id';}});}}catch(error){{return {{error:String(error)}};}}}})()" + ), + ); + if resolution.starts_with("throw") { + assert_eq!(actual.element, serde_json::json!({"error":"key-failed"})); + assert_eq!( + actual.trace, + serde_json::json!(["first", "second", "third", "fourth", "key"]) + ); + } else { + assert_eq!(actual.element["props"]["id"], "id"); + assert_eq!( + actual.trace, + serde_json::json!(["first", "second", "third", "fourth", "key", "later"]) + ); + } +} + +#[rstest] +#[case("({0:[first(),'2px'],1:['3px',second()]})")] +#[case("[[first(),'2px'],['3px',second()]]")] +#[serial] +fn responsive_selection_with_static_and_dynamic_values_keeps_missing_keys_safe( + #[case] table: &str, + #[values("0", "1", "2")] key: &str, +) { + let source = format!("{BOX}export const a=(index,first,second)=>;"); + assert_eq!(code(&source).matches("=>").count(), 1); + let actual = evaluate( + &source, + &format!( + "a({key},()=>{{trace.push('first');return '1px';}},()=>{{trace.push('second');return '4px';}})" + ), + ); + assert_eq!(actual.trace, serde_json::json!(["first", "second"])); + let Some(style) = actual.element["props"]["style"].as_object() else { + panic!("style object required") + }; + let Some(class) = actual.element["props"]["className"].as_str() else { + panic!("className string required") + }; + match key { + "0" => { + assert_eq!(style["--padding-0-"], "1px"); + assert!(class.contains("padding-1-2px")); + } + "1" => { + assert_eq!(style["--padding-1-"], "4px"); + assert!(class.contains("padding-0-3px")); + } + _ => { + assert!(style.is_empty()); + assert_eq!(class, ""); + } + } +} + +#[rstest] +#[case("0")] +#[case("index")] +#[serial] +fn selection_boundary_when_unselected_branches_run_keeps_eager_source_order(#[case] key: &str) { + let source = format!( + "{BOX}export const a=(index,first,second,later)=>;" + ); + let actual = evaluate( + &source, + "a(0,()=>{trace.push('first');return '4px';},()=>{trace.push('second');return '8px';},()=>{trace.push('later');return 'id';})", + ); + assert_eq!( + actual.trace, + serde_json::json!(["first", "second", "later"]) + ); + assert!( + actual.element["props"]["style"] + .as_object() + .is_some_and(|style| { style.values().any(|value| value == "4px") }) + ); +} + +#[rstest] +#[case("0")] +#[case("index")] +#[serial] +fn selection_boundary_when_an_unselected_branch_throws_prevents_later_attributes( + #[case] key: &str, +) { + let source = format!( + "{BOX}export const a=(index,first,second,later)=>;" + ); + let actual = evaluate( + &source, + "(()=>{try{return a(0,()=>{trace.push('first');return '4px';},()=>{trace.push('second');throw 'boom';},()=>{trace.push('later');return 'id';});}catch(error){return error;}})()", + ); + assert_eq!(actual.element, "boom"); + assert_eq!(actual.trace, serde_json::json!(["first", "second"])); +} + +#[test] +#[serial] +fn selection_boundary_when_selected_array_is_nested_keeps_existing_flat_array_error() { + let source = format!("{BOX}export const a=;"); + let message = error(&source); + assert!( + message.contains("responsive arrays must be flat"), + "{message}" + ); + assert!(message.contains("[1, 2]"), "{message}"); +} diff --git a/libs/extractor/src/jsx_semantics_tests/call_diagnostics.rs b/libs/extractor/src/jsx_semantics_tests/call_diagnostics.rs new file mode 100644 index 000000000..445263842 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/call_diagnostics.rs @@ -0,0 +1,137 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; + +fn source(factory: &str, props: &str) -> String { + let module = match factory { + "jsx" | "jsxs" => "react/jsx-runtime", + "jsxDEV" => "react/jsx-dev-runtime", + "createElement" => "react", + _ => panic!("unknown factory: {factory}"), + }; + format!( + "{BOX}import {{{factory}}} from '{module}';\nexport const a=(rest)=>{factory}(Box,{props});" + ) +} + +#[rstest] +#[serial] +fn factory_styles_when_unreadable_report_the_jsx_error_at_the_value( + #[values("jsx", "jsxs", "jsxDEV", "createElement")] factory: &str, + #[values(false, true)] single_css: bool, +) { + let source = source(factory, "{color: () => 1}"); + let jsx = format!("{BOX}export const a=()=> 1}}/>;"); + let option = || ExtractOption { + single_css, + ..ExtractOption::default() + }; + let expected = compile_with(&jsx, option()) + .err() + .unwrap_or_else(|| panic!("JSX unreadable control must fail")); + let offset = source + .find("() => 1") + .unwrap_or_else(|| panic!("missing value")); + let column = source[..offset] + .rsplit('\n') + .next() + .unwrap_or_default() + .len() + + 1; + let actual = compile_with(&source, option()) + .err() + .unwrap_or_else(|| panic!("factory silently drops its explicit style: {source}")); + let category = expected + .split_once(": ``") + .unwrap_or_else(|| panic!("{expected}")); + assert_eq!(actual, format!("a.tsx:3:{column}: ``{}", category.1)); +} + +#[rstest] +#[serial] +fn factory_styles_when_shadowed_keep_the_winner_and_discarded_effects( + #[values("jsx", "jsxs", "jsxDEV", "createElement")] factory: &str, + #[values(false, true)] single_css: bool, + #[values( + "{color:()=>1,color:'red'}", + "{...{color:()=>1},color:'red'}", + "{color:(trace.push('discarded'),()=>1),color:'red'}" + )] + props: &str, +) { + let source = source(factory, props); + let compiled = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error}")); + assert_eq!( + static_styles(&compiled), + vec![("color".into(), "red".into())] + ); + let script = compiled + .code + .replace("jsxs(", "jsx(") + .replace("jsxDEV(", "jsx("); + let actual = whole::execute(&script, "a({})"); + let expected = if props.contains("trace.push") { + serde_json::json!(["discarded"]) + } else { + serde_json::json!([]) + }; + assert_eq!(actual.trace, expected); +} + +#[rstest] +#[serial] +fn factory_styles_when_only_spread_keys_are_unreadable_pass_them_through( + #[values("jsx", "jsxs", "jsxDEV", "createElement")] factory: &str, + #[values(false, true)] single_css: bool, +) { + let source = source(factory, "{color:'red',...rest}"); + let compiled = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error}")); + let script = compiled + .code + .replace("jsxs(", "jsx(") + .replace("jsxDEV(", "jsx("); + let actual = whole::execute( + &script, + "(()=>{const raw=()=>{throw 'called';};return a({color:raw}).props.color===raw;})()", + ); + assert_eq!(actual.element, true); + assert_eq!( + static_styles(&compiled), + vec![("color".into(), "red".into())] + ); +} + +#[rstest] +#[serial] +fn factory_values_when_known_copy_keys_are_not_selectors_keep_d1( + #[values("jsx", "jsxs", "jsxDEV", "createElement")] factory: &str, + #[values(false, true)] single_css: bool, +) { + let source = source(factory, "{p:'4px',...{['__proto__']:null,p:'20px'}}"); + let compiled = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error}")); + assert_eq!( + static_styles(&compiled), + vec![("padding".into(), "20px".into())] + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests/call_spread_attachment.rs b/libs/extractor/src/jsx_semantics_tests/call_spread_attachment.rs new file mode 100644 index 000000000..ce8072dda --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/call_spread_attachment.rs @@ -0,0 +1,216 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; + +fn source(runtime: &str, props: &str) -> String { + let module = match runtime { + "jsx" | "jsxs" => "react/jsx-runtime", + "jsxDEV" => "react/jsx-dev-runtime", + _ => panic!("unknown factory: {runtime}"), + }; + let tail = match runtime { + "jsx" | "jsxs" => ", 'key'", + "jsxDEV" => ", 'key', false, undefined, undefined", + _ => panic!("unknown factory: {runtime}"), + }; + format!( + "{BOX}import {{{runtime} as jsx}} from '{module}';export const a=(first,read)=>jsx(Box,{props}{tail});" + ) +} + +fn parity(call: &str, element: &str, probe: &str) -> whole::Evaluation { + let plain = whole::evaluate( + &format!("{BOX}export const a=(first,read)=>{element};"), + probe, + ); + let actual = whole::evaluate(call, probe); + assert_eq!(actual.trace, plain.trace, "{call}"); + assert_eq!(actual.element["type"], plain.element["type"], "{call}"); + assert_eq!(actual.element["props"], plain.element["props"], "{call}"); + actual +} + +#[rstest] +#[case("jsx")] +#[case("jsxs")] +#[case("jsxDEV")] +#[serial] +fn styles_attach_when_the_original_evidence_object_is_parenthesized(#[case] runtime: &str) { + let actual = whole::evaluate( + &source(runtime, "({color:first(),...read()})"), + "(()=>{const e=a(()=>{trace.push('first');return 'red';},()=>{trace.push('spread');return {color:'green'};});return [e.type,e.props.color,(e.props.className||'').trim().length>0,Object.values(e.props.style||{})];})()", + ); + assert_eq!(actual.trace, serde_json::json!(["first", "spread"])); + assert_eq!( + actual.element, + serde_json::json!(["div", "green", true, ["red"]]) + ); +} + +#[rstest] +#[serial] +fn props_match_plain_jsx_when_syntax_wrappers_surround_the_object( + #[values("jsx", "jsxs", "jsxDEV")] runtime: &str, + #[values( + "BODY", + "(BODY)", + "((BODY))", + "(BODY as const)", + "(BODY satisfies object)" + )] + wrapper: &str, +) { + let props = wrapper.replace("BODY", "{color:first(),...read()}"); + let actual = parity( + &source(runtime, &props), + "", + "a(()=>{trace.push('first');return 'red';},()=>{trace.push('spread');return {color:'green',id:'kept',className:'external',style:{opacity:0.5}};})", + ); + assert_eq!(actual.trace, serde_json::json!(["first", "spread"])); + assert_eq!(actual.element["props"]["color"], "green"); + assert_eq!(actual.element["props"]["style"]["opacity"], 0.5); + assert!( + actual.element["props"]["style"] + .as_object() + .unwrap_or_else(|| panic!("expected an authored style object")) + .values() + .any(|v| v == "red") + ); +} + +#[rstest] +#[case("{color:'green'}")] +#[case("{}")] +#[case("null")] +#[case("undefined")] +#[case("Object.create({color:'inherited'})")] +#[case("Object.defineProperty({},'color',{value:'hidden'})")] +#[serial] +fn authored_values_when_spreads_copy_own_enumerable_keys_remain_attached( + #[values("jsx", "jsxs", "jsxDEV")] runtime: &str, + #[case] spread: &str, +) { + let actual = parity( + &source(runtime, "({color:first(),...read()})"), + "", + &format!( + "(()=>{{const e=a(()=>{{trace.push('first');return 'red';}},()=>{{trace.push('spread');return {spread};}});return Object.values(e.props.style||{{}});}})()" + ), + ); + assert_eq!(actual.trace, serde_json::json!(["first", "spread"])); + assert_eq!(actual.element, serde_json::json!(["red"])); +} + +#[rstest] +#[serial] +fn absent_own_values_when_passed_through_keep_the_authored_style( + #[values("jsx", "jsxs", "jsxDEV")] runtime: &str, + #[values("null", "undefined", "false")] absent: &str, +) { + let actual = parity( + &source(runtime, "({color:first(),...read()})"), + "", + &format!( + "(()=>{{const e=a(()=>{{trace.push('first');return 'red';}},()=>{{trace.push('spread');return {{color:{absent}}};}});return [Object.hasOwn(e.props,'color'),Object.is(e.props.color,{absent}),Object.values(e.props.style||{{}})];}})()" + ), + ); + assert_eq!(actual.trace, serde_json::json!(["first", "spread"])); + assert_eq!(actual.element, serde_json::json!([true, true, ["red"]])); +} + +#[rstest] +#[serial] +fn getters_when_passed_through_run_once(#[values("jsx", "jsxs", "jsxDEV")] runtime: &str) { + let actual = parity( + &source(runtime, "({color:first(),...read()})"), + "", + "a(()=>{trace.push('first');return 'red';},()=>{trace.push('spread');return {get color(){trace.push('getter');return 'green';}};})", + ); + assert_eq!( + actual.trace, + serde_json::json!(["first", "spread", "getter"]) + ); + assert_eq!(actual.element["props"]["color"], "green"); +} + +#[rstest] +#[serial] +fn explicit_values_when_written_after_unknown_spreads_attach( + #[values("jsx", "jsxs", "jsxDEV")] runtime: &str, +) { + let actual = parity( + &source(runtime, "({...read(),color:first(),_hover:{bg:'blue'}})"), + "", + "a(()=>{trace.push('first');return 'red';},()=>{trace.push('spread');return {color:'green',id:'kept'};})", + ); + assert_eq!(actual.trace, serde_json::json!(["spread", "first"])); + assert_eq!(actual.element["props"]["color"], "green"); +} + +#[rstest] +#[serial] +fn responsive_values_when_spreads_follow_match_jsx( + #[values("jsx", "jsxs", "jsxDEV")] runtime: &str, + #[values("{}", "{color:'green'}")] spread: &str, +) { + let actual = parity( + &source(runtime, "({color:[first(),null,'blue'],...read()})"), + "", + &format!( + "a(()=>{{trace.push('first');return 'red';}},()=>{{trace.push('spread');return {spread};}})" + ), + ); + assert_eq!(actual.trace, serde_json::json!(["first", "spread"])); + assert!( + actual.element["props"]["style"] + .as_object() + .unwrap_or_else(|| panic!("expected an authored style object")) + .values() + .any(|v| v == "red") + ); +} + +#[rstest] +#[serial] +fn conditional_order_when_props_are_wrapped_attaches_both_branches( + #[values("jsx", "jsxs", "jsxDEV")] runtime: &str, + #[values("true", "false")] enabled: &str, +) { + let actual = parity( + &source( + runtime, + "({styleOrder:first.on?2:4,color:first(),...read(),_hover:{bg:'blue'}})", + ), + "", + &format!( + "a(Object.assign(()=>{{trace.push('first');return 'red';}},{{on:{enabled}}}),()=>{{trace.push('spread');return {{color:'green'}};}})" + ), + ); + assert_eq!(actual.trace, serde_json::json!(["first", "spread"])); + assert!( + actual.element["props"]["style"] + .as_object() + .unwrap_or_else(|| panic!("expected an authored style object")) + .values() + .any(|v| v == "red") + ); +} + +#[rstest] +#[serial] +fn selectors_when_unknown_spreads_follow_wrapped_props_compile( + #[values("jsx", "jsxs", "jsxDEV")] runtime: &str, +) { + let actual = parity( + &source(runtime, "({_hover:{bg:'blue'},...read()})"), + "", + "a(null,()=>({_hover:{bg:'green'}}))", + ); + assert_eq!(actual.element["props"]["_hover"]["bg"], "green"); + assert!( + actual.element["props"]["className"] + .as_str() + .unwrap_or_else(|| panic!("expected a selector class name")) + .contains("blue") + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests/calls.rs b/libs/extractor/src/jsx_semantics_tests/calls.rs new file mode 100644 index 000000000..73b38b17d --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/calls.rs @@ -0,0 +1,146 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; +const CREATE_ELEMENT: &str = "import {createElement} from 'react';\n"; + +#[rstest] +#[case("jsx(Box,{color:'red',...rest})", "color", "red")] +#[case("jsx(Box,{...rest,color:'red'})", "color", "red")] +#[case("jsx(Box,{color:'red',...rest,color:'blue'})", "color", "blue")] +#[case("jsx(Box,{bg:'red',background:'blue',...rest})", "background", "blue")] +#[case("jsx(Box,{...{color:'red'},...rest})", "color", "red")] +#[case("createElement(Box,{color:'red',...rest})", "color", "red")] +#[serial] +fn calls_when_unknown_spreads_interleave_keep_authored_styles( + #[case] element: &str, + #[case] property: &str, + #[case] value: &str, +) { + let source = format!("{BOX}{JSX_RUNTIME}{CREATE_ELEMENT}export const a=(rest)=>{element};"); + assert_eq!( + static_styles(&output(&source)), + vec![(property.into(), value.into())] + ); + assert_eq!( + whole::evaluate(&source, "a({color:'raw',bg:'raw'}).props.color").element, + "raw" + ); +} + +#[rstest] +#[case("jsx(Box,{color:'red',...first,color:'blue',...last})")] +#[case("createElement(Box,{color:'red',...first,color:'blue',...last},'child')")] +#[serial] +fn calls_when_repeated_spreads_own_keys_preserve_dom_precedence(#[case] element: &str) { + let source = format!( + "{BOX}{JSX_RUNTIME}{CREATE_ELEMENT}export const a=(first,last)=>{element}; + " + ); + assert_eq!( + static_styles(&output(&source)), + vec![("color".into(), "blue".into())] + ); + for (first, last, expected) in [ + ("{color:'x'}", "{}", "x"), + ("{}", "{ color: undefined }", "undefined"), + ("{}", "{color:'y'}", "y"), + ] { + assert_eq!( + whole::evaluate(&source, &format!("String(a({first},{last}).props.color)")).element, + expected + ); + } + if element.starts_with("createElement") { + assert!(output(&source).code.contains("\"child\"")); + } +} + +#[test] +#[serial] +fn calls_when_runtime_style_is_explicit_ignore_raw_absence() { + let source = format!("{BOX}{JSX_RUNTIME}export const a=(rest,x)=>jsx(Box,{{p:x,...rest}});"); + for rest in ["{ p: undefined }", "{}"] { + assert_eq!( + whole::evaluate(&source, &format!("Object.values(a({rest},5).props.style)")).element, + serde_json::json!([5]) + ); + } +} + +#[test] +#[serial] +fn calls_when_spread_sources_are_effectful_read_them_once() { + let source = format!("{BOX}{JSX_RUNTIME}export const a=(f)=>jsx(Box,{{color:'red',...f()}});"); + let actual = whole::evaluate( + &source, + "a(()=>{trace.push('spread');return {color:'blue'};})", + ); + assert_eq!(actual.trace, serde_json::json!(["spread"])); + assert_eq!(actual.element["props"]["color"], "blue"); +} + +#[test] +#[serial] +fn calls_when_selectors_precede_spreads_keep_the_selector() { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=(rest)=>jsx(Box,{{_hover:{{bg:'red'}},...rest}});" + ); + assert_eq!( + static_styles(&output(&source)), + vec![("background".into(), "red".into())] + ); + assert_eq!( + whole::evaluate(&source, "a({_hover:{bg:'raw'}}).props._hover.bg").element, + "raw" + ); +} + +#[test] +#[serial] +fn calls_when_dom_props_are_explicit_keep_them() { + let rendered = code(&format!( + "{BOX}{JSX_RUNTIME}export const a=(rest)=>jsx(Box,{{as:'a',id:'x',styleOrder:3,color:'red',...rest}});" + )); + assert!(rendered.contains("jsx(\"a\""), "{rendered}"); + assert!(rendered.contains("id: \"x\""), "{rendered}"); +} + +#[test] +#[serial] +fn calls_when_style_keys_are_not_identifiers_keep_raw_keys() { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=(rest)=>jsx(Box,{{'background-color':'red',...rest}});" + ); + assert_eq!( + whole::evaluate( + &source, + "a({'background-color':'blue'}).props['background-color']" + ) + .element, + "blue" + ); + assert_eq!( + static_styles(&output(&source)), + vec![("background-color".into(), "red".into())] + ); +} + +#[test] +#[serial] +fn calls_when_props_suspend_keep_suspension_in_the_caller() { + let rendered = code(&format!( + "{BOX}{JSX_RUNTIME}export const a=async(k,f,g)=>jsx(Box,{{color:'red',[k]:await g(),...f()}});" + )); + assert_eq!(rendered.matches("f()").count(), 1, "{rendered}"); + assert!(rendered.contains("await g()"), "{rendered}"); +} + +#[test] +#[serial] +fn create_element_when_props_are_opaque_keeps_native_merging() { + let rendered = code(&format!( + "{CREATE_ELEMENT}{BOX}export const a=(p)=>createElement(Box,p,'x');" + )); + assert!(rendered.contains("...p"), "{rendered}"); + assert!(rendered.contains("?.className"), "{rendered}"); +} diff --git a/libs/extractor/src/jsx_semantics_tests/capture_edges.rs b/libs/extractor/src/jsx_semantics_tests/capture_edges.rs new file mode 100644 index 000000000..239e58010 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/capture_edges.rs @@ -0,0 +1,70 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case("false && load()", false)] +#[case("true && load()", true)] +#[case("null ?? load()", true)] +#[case("false || load()", true)] +#[serial] +fn literal_logical_when_the_right_side_runs_only_if_selected( + #[case] value: &str, + #[case] called: bool, +) { + let source = format!("{BOX}export const a=(load)=>;"); + let actual = evaluate(&source, "a(()=>{trace.push('load');return 'blue';})"); + assert_eq!( + actual.trace, + if called { + serde_json::json!(["load"]) + } else { + serde_json::json!([]) + } + ); +} + +#[test] +#[serial] +fn responsive_iterator_when_captured_runs_before_later_props_and_keeps_holes() { + let source = format!( + "{BOX}export const a=(items,take,later)=>;" + ); + let actual = evaluate( + &source, + "a({[Symbol.iterator](){trace.push('iterator');return [1][Symbol.iterator]();}},()=>{trace.push('take');return '8px';},()=>{trace.push('later');return 'id';})", + ); + assert_eq!( + actual.trace, + serde_json::json!(["iterator", "take", "later"]) + ); +} + +#[test] +#[serial] +fn child_suspension_when_empty_and_constant_children_precede_it_keeps_them() { + let source = format!( + "{BOX}export function* a(rest){{return {{/* empty */}}{{'constant'}}{{yield 'pause'}};}}" + ); + let actual = evaluate( + &source, + "(()=>{const iterator=a({});iterator.next();return iterator.next('child').value;})()", + ); + assert_eq!( + actual.element["children"], + serde_json::json!(["constant", "child"]) + ); +} + +#[test] +#[serial] +fn unrelated_react_call_when_it_receives_a_compile_only_component_is_not_a_factory() { + let message = error(&format!( + "{BOX}import * as React from 'react';export const a=React.cloneElement(Box,{{}});" + )); + assert!( + message.starts_with("a.tsx:2:") && message.contains("Box"), + "{message}" + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests/capture_elision.rs b/libs/extractor/src/jsx_semantics_tests/capture_elision.rs new file mode 100644 index 000000000..1342ff0da --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/capture_elision.rs @@ -0,0 +1,649 @@ +use super::*; +use oxc_allocator::{Allocator, CloneIn}; +use oxc_ast::{ + ast::{Expression, Statement}, + builder::AstBuilder, +}; +use oxc_parser::Parser; +use oxc_span::SourceType; +use rstest::rstest; +use serial_test::serial; + +fn lowered(values: &[(&str, &str)], body: &str) -> (String, usize) { + lowered_slots(values, body, &[]) +} + +fn lowered_slots(values: &[(&str, &str)], body: &str, slots: &[(&str, &str)]) -> (String, usize) { + let arena = Allocator::default(); + let ast = AstBuilder::new(&arena); + let parse = |source: &str| { + let wrapped = arena.alloc_str(&format!("async function* parse(){{return ({source});}}")); + let parsed = Parser::new(&arena, wrapped, SourceType::tsx()).parse(); + assert!( + parsed.diagnostics.is_empty(), + "{:?}: {source}", + parsed.diagnostics + ); + let Statement::FunctionDeclaration(function) = &parsed.program.body[0] else { + panic!("expected function"); + }; + let Some(body) = &function.body else { + panic!("expected body"); + }; + let Statement::ReturnStatement(returned) = &body.statements[0] else { + panic!("expected return"); + }; + returned + .argument + .as_ref() + .unwrap_or_else(|| panic!("expected value")) + .clone_in(&arena) + }; + let mut body = parse(body); + crate::utils::rewrite_expression(&mut body, &mut |expression| { + if let Expression::Identifier(identifier) = expression + && let Some((_, code)) = slots.iter().find(|(name, _)| identifier.name == *name) + { + *expression = Expression::new_identifier( + oxc_span::SPAN, + as oxc_allocator::FromIn<'_, &str>>::from_in( + *code, &arena, + ), + &ast, + ); + return true; + } + false + }); + let expression = crate::utils::call_with_values( + &ast, + values + .iter() + .map(|(name, value)| ((*name).to_string(), parse(value))) + .collect(), + body, + ); + let parameters = match &expression { + Expression::CallExpression(call) => match crate::utils::unwrap_syntax_only(&call.callee) { + Expression::ArrowFunctionExpression(arrow) => arrow.params.items.len(), + _ => 0, + }, + _ => 0, + }; + (crate::utils::readable_code(&expression), parameters) +} + +fn baseline(values: &[(&str, &str)], body: &str) -> String { + format!( + "(({})=>({body}))({})", + values + .iter() + .map(|(name, _)| *name) + .collect::>() + .join(","), + values + .iter() + .map(|(_, value)| format!("({value})")) + .collect::>() + .join(",") + ) +} + +#[rstest] +#[case("'prefix'")] +#[case("42")] +#[case("true")] +#[case("null")] +#[case("42n")] +#[case("void 0")] +#[case("1+2")] +#[case("`prefix`")] +#[case("(trace.push('prefix'), 'prefix')")] +fn captured_primitive_template_prefix_does_not_delay_a_later_argument( + #[case] primitive_value: &str, +) { + let values = [ + ("prefix", primitive_value), + ("slot", "(trace.push('read'),'last')"), + ]; + let body = "`${prefix}:${slot}`"; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, 0, "{compiled}"); + let observe = |expression: &str| { + run(&format!( + "const trace=[];const value={expression};return JSON.stringify([value,trace]);" + )) + }; + assert_eq!(observe(&compiled), observe(&baseline(&values, body))); +} + +#[rstest] +#[case("")] +#[case("")] +fn captured_component_tags_remain_bound_in_the_emitted_element(#[case] body: &str) { + let values = [("Slot", "component")]; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, 1, "{compiled}"); + let observe = |expression: &str| { + let script = whole::plain_script(&format!("const view=({expression});")); + run(&format!( + "const component={{Part:'part'}};const h=(type)=>type===component?'direct':type;{script}return JSON.stringify(view);" + )) + }; + assert_eq!(observe(&compiled), observe(&baseline(&values, body))); +} + +#[rstest] +#[case("
{trace.push('child')}
", 0)] +#[case("
", 1)] +#[case("
", 1)] +#[case("
} b={slot}/>", 1)] +#[case("
} b={slot}/>", 1)] +#[case("
b={slot}/>", 1)] +#[case("
text{slot}
", 0)] +#[case("
{trace.push('prefix')}{slot}
", 1)] +#[case("
{slot}
", 1)] +#[case("
", 1)] +#[case("
", 0)] +#[case("
", 0)] +#[case("", 1)] +#[case("slot ? 'yes' : 'no'", 0)] +#[case("false ? slot : 'no'", 1)] +#[case("slot || ''", 0)] +#[case("false && slot", 1)] +#[case("slot + 'px'", 0)] +#[case("'prefix' + slot", 0)] +#[case("missing + slot", 1)] +#[case("!slot", 0)] +#[case("+slot", 0)] +#[case("void slot", 0)] +#[case("typeof slot", 1)] +#[case("delete slot.x", 1)] +#[case("slot.length", 0)] +#[case("({red:'class'})[slot]", 0)] +#[case("missing[slot]", 1)] +#[case("null?.[slot]", 1)] +#[case("null?.[slot].length", 1)] +#[case("slot?.length", 0)] +#[case("slot?.['length']", 0)] +#[case("slot?.()", 1)] +#[case("`prefix-${slot}`", 0)] +#[case("`${trace.push('prefix')}-${slot}`", 1)] +#[case("(1, 2, slot)", 0)] +#[case("((1, 2), slot)", 0)] +#[case("(trace.push('prefix'), slot)", 1)] +#[case("[,,slot]", 0)] +#[case("[[1], slot]", 0)] +#[case("[...slot]", 0)] +#[case("[...[], slot]", 1)] +#[case("[{x: 1},slot]", 0)] +#[case("[
,slot]", 1)] +#[case("[`${'a'}`,slot]", 0)] +#[case("[missing && 1,slot]", 1)] +#[case("[(missing ? 1 : 2),slot]", 1)] +#[case("[false && 1, slot]", 0)] +#[case("[true ? 1 : 2, slot]", 0)] +#[case("[null, true, 1n, slot].length", 0)] +#[case("({x:1, value:slot})", 0)] +#[case("({slot})", 0)] +#[case("({...slot})", 0)] +#[case("({[slot]:1})", 0)] +#[case("({['first']:1,[`--${slot}`]:2})", 0)] +#[case("({[1n]:1,value:slot})", 0)] +#[case("({[{}]:1,value:slot})", 1)] +#[case("({[slot]:missing})", 0)] +#[case("({callback:()=>42,value:slot})", 0)] +#[case("({get first(){return 42;},value:slot})", 0)] +#[case("
42} value={slot}/>", 0)] +#[case("[4/0,slot]", 0)] +#[case("[`px`-1,slot]", 0)] +#[case("[false+null,slot]", 0)] +#[case("[1n+1,slot]", 1)] +#[case("[1n/0n,slot]", 1)] +#[case("[1 in 2,slot]", 1)] +#[case("[1 instanceof 2,slot]", 1)] +#[case("[({valueOf(){trace.push('coerce');return 1;}})+1,slot]", 1)] +#[case("[function(){},slot]", 0)] +#[case("[()=>slot,slot]", 1)] +#[case("({get x(){return slot;}})", 1)] +#[case("({method(){return slot;}})", 1)] +#[case("()=>slot", 1)] +#[case("function(){return slot;}", 1)] +#[case("class {static value=slot;}", 1)] +#[case("slot=1", 1)] +#[case("slot++", 1)] +#[case("({value:slot}={value:'changed'})", 1)] +#[case("[slot]=['changed']", 1)] +#[case("globalThis.changed='yes'", 0)] +#[case("eval('slot')", 1)] +#[case("[slot, (eval)('slot')]", 1)] +#[case("'unused'", 0)] +fn capture_elision_preserves_native_values_effects_and_throw_order( + #[case] body: &str, + #[case] retained: usize, +) { + let values = [("slot", "(trace.push('value'),'red')")]; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, retained, "{body}: {compiled}"); + let probe = "(()=>{try{return ['value',a()];}catch(error){return ['error',String(error)];}})()"; + let expected = whole::execute( + &format!("export const a=()=>({});", baseline(&values, body)), + probe, + ); + let actual = whole::execute(&format!("export const a=()=>({compiled});"), probe); + assert_eq!(actual.element, expected.element, "{body}: {compiled}"); + assert_eq!(actual.trace, expected.trace, "{body}: {compiled}"); +} + +#[rstest] +#[case("function(){}")] +#[case("()=>{}")] +#[case("class {}")] +#[case("eval(\"trace.push('eval');'red'\")")] +#[case("(eval)(\"trace.push('eval');'red'\")")] +fn capture_elision_keeps_name_inference_and_direct_eval_scope(#[case] value: &str) { + let values = [("slot", value)]; + let body = "({fn: slot}).fn.name"; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, 1, "{compiled}"); + let expected = whole::execute( + &format!("export const a=()=>({});", baseline(&values, body)), + "a()", + ); + let actual = whole::execute(&format!("export const a=()=>({compiled});"), "a()"); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, expected.trace); +} + +#[rstest] +#[case("
", 0)] +#[case("
", 1)] +#[case("`${first} ${last}`", 0)] +#[case("first + last", 0)] +#[case("'unused'", 0)] +#[case("({value:last})", 0)] +#[case("({value:first})", 1)] +#[case("({callback:()=>42,first,last})", 0)] +fn multiple_capture_elision_preserves_argument_order(#[case] body: &str, #[case] retained: usize) { + let values = [ + ("first", "(trace.push('first'),'a')"), + ("last", "(trace.push('last'),'b')"), + ]; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, retained, "{compiled}"); + let expected = whole::execute( + &format!("export const a=()=>({});", baseline(&values, body)), + "a()", + ); + let actual = whole::execute(&format!("export const a=()=>({compiled});"), "a()"); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, expected.trace); + assert_eq!(actual.trace, serde_json::json!(["first", "last"])); +} + +#[rstest] +#[case(false)] +#[case(true)] +fn unused_captures_keep_throw_cutoff_before_later_values(#[case] first_throws: bool) { + let first = if first_throws { + "(trace.push('first'),missing.value)" + } else { + "(trace.push('first'),'a')" + }; + let values = [ + ("first", first), + ("last", "(trace.push('last'),missing.value)"), + ]; + let (compiled, parameters) = lowered(&values, "'unused'"); + assert_eq!(parameters, 0, "{compiled}"); + let probe = "(()=>{try{return a();}catch(error){return error.name;}})()"; + let expected = whole::execute( + &format!("export const a=()=>({});", baseline(&values, "'unused'")), + probe, + ); + let actual = whole::execute(&format!("export const a=()=>({compiled});"), probe); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, expected.trace); + assert_eq!( + actual.trace, + if first_throws { + serde_json::json!(["first"]) + } else { + serde_json::json!(["first", "last"]) + } + ); +} + +#[rstest] +#[case("({})[1]")] +#[case("[][1]")] +fn unused_selection_captures_still_run_inherited_getters_once(#[case] value: &str) { + let values = [("slot", value)]; + let (compiled, parameters) = lowered(&values, "'unused'"); + assert_eq!(parameters, 0, "{compiled}"); + let prefix = "Object.defineProperty(Object.prototype,'1',{configurable:true,get(){trace.push('get');throw 'getter';}});"; + let probe = "(()=>{try{return a();}catch(error){return error;}})()"; + let expected = whole::execute( + &format!( + "{prefix}export const a=()=>({});", + baseline(&values, "'unused'") + ), + probe, + ); + let actual = whole::execute(&format!("{prefix}export const a=()=>({compiled});"), probe); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, expected.trace); + assert_eq!(actual.element, "getter"); + assert_eq!(actual.trace, serde_json::json!(["get"])); +} + +#[test] +#[serial] +fn unused_object_selection_has_no_arrow_and_keeps_evaluation_before_children() { + let source = + format!("{BOX}export const a=(child)=>{{child()}};"); + let compiled = code(&source); + assert!(!compiled.contains("__devupChoice"), "{compiled}"); + let actual = whole::execute(&compiled, "a(()=>{trace.push('child');return 'text';})"); + assert_eq!(actual.trace, serde_json::json!(["child"])); + assert_eq!(actual.element["children"], serde_json::json!(["text"])); +} + +#[rstest] +#[case("
", "slot[`1`]", 0)] +#[case("
", "slot[`1`]", 1)] +#[case("
", "4/0", 0)] +#[case("
", "`px`-1", 0)] +fn encoded_style_slots_count_all_reads_before_eliding_a_capture( + #[case] body: &str, + #[case] encoded: &str, + #[case] retained: usize, +) { + let values = [("slot", "['class',(trace.push('leaf'),'red')]")]; + let (compiled, parameters) = lowered_slots(&values, body, &[("RAW", encoded)]); + assert_eq!(parameters, retained, "{compiled}"); + let expected = whole::execute( + &format!( + "export const a=()=>({});", + baseline(&values, &body.replace("RAW", encoded)) + ), + "a()", + ); + let actual = whole::execute(&format!("export const a=()=>({compiled});"), "a()"); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, serde_json::json!(["leaf"])); +} + +#[rstest] +#[case("counter.value++")] +#[case("counter.value='red'")] +fn inlined_argument_writes_keep_their_result_and_run_once(#[case] value: &str) { + let values = [("slot", value)]; + let body = "({value:slot})"; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, 0, "{compiled}"); + let prefix = r#"const counter={"value":1};"#; + let probe = "[a(),counter.value]"; + let expected = whole::execute( + &format!("{prefix}export const a=()=>({});", baseline(&values, body)), + probe, + ); + let actual = whole::execute(&format!("{prefix}export const a=()=>({compiled});"), probe); + assert_eq!(actual.element, expected.element); +} + +#[rstest] +fn inlined_suspending_arguments_keep_await_outside_remaining_wrappers( + #[values(false, true)] awaits_first: bool, + #[values(false, true)] rejects: bool, +) { + let values = [ + ( + "first", + if awaits_first { + "await read()" + } else { + "(trace.push('first'),'a')" + }, + ), + ( + "last", + if awaits_first { + "(trace.push('last'),'b')" + } else { + "await read()" + }, + ), + ]; + let body = "
"; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, if awaits_first { 0 } else { 2 }, "{compiled}"); + let observe = |name: &str, expression: &str| { + let code = whole::plain_script(&format!("export const a=async()=>({expression});")); + format!( + "async function {name}(){{const trace=[];const h=(type,props)=>props;async function read(){{trace.push('read');if({rejects})throw 'boom';return 'async';}}{code}try{{return [await a(),trace];}}catch(error){{return [error,trace];}}}}" + ) + }; + let script = format!( + "{}{}Promise.all([before(),after()]).then(result=>process.stdout.write(JSON.stringify(result)));", + observe("before", &baseline(&values, body)), + observe("after", &compiled), + ); + let actual = std::process::Command::new("node") + .args(["-e", &script]) + .output() + .unwrap_or_else(|error| panic!("Node is required for async capture checks: {error}")); + assert!( + actual.status.success(), + "{}", + String::from_utf8_lossy(&actual.stderr) + ); + let actual: serde_json::Value = serde_json::from_slice(&actual.stdout) + .unwrap_or_else(|error| panic!("{error}: {}", String::from_utf8_lossy(&actual.stdout))); + assert_eq!(actual[0], actual[1], "{compiled}"); + assert_eq!( + actual[1][1], + if awaits_first { + if rejects { + serde_json::json!(["read"]) + } else { + serde_json::json!(["read", "last"]) + } + } else { + serde_json::json!(["first", "read"]) + } + ); + if rejects { + assert_eq!(actual[1][0], "boom"); + } +} + +#[rstest] +fn inlined_suspending_arguments_keep_yield_in_the_original_generator( + #[values(false, true)] yields_first: bool, + #[values(false, true)] throws: bool, +) { + let values = [ + ( + "first", + if yields_first { + "yield (trace.push('yield'),'pause')" + } else { + "(trace.push('first'),'a')" + }, + ), + ( + "last", + if yields_first { + "(trace.push('last'),'b')" + } else { + "yield (trace.push('yield'),'pause')" + }, + ), + ]; + let body = "
"; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, if yields_first { 0 } else { 2 }, "{compiled}"); + let resume = if throws { + "iterator.throw('boom')" + } else { + "iterator.next('resumed')" + }; + let probe = format!( + "(()=>{{const iterator=a();trace.push(iterator.next().value);try{{return {resume}.value;}}catch(error){{return error;}}}})()" + ); + let expected = whole::execute( + &format!( + "export function* a(){{return ({});}}", + baseline(&values, body) + ), + &probe, + ); + let actual = whole::execute( + &format!("export function* a(){{return ({compiled});}}"), + &probe, + ); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, expected.trace); + if throws { + assert_eq!(actual.element, "boom"); + } +} + +#[test] +fn template_captures_keep_object_coercion_after_later_arguments() { + let values = [ + ("first", "({toString(){trace.push('coerce');return 'a';}})"), + ("last", "(trace.push('last'),'b')"), + ]; + let (compiled, parameters) = lowered(&values, "`${first} ${last}`"); + assert_eq!(parameters, 2, "{compiled}"); + let actual = whole::execute(&format!("export const a=()=>({compiled});"), "a()"); + assert_eq!(actual.element, "a b"); + assert_eq!(actual.trace, serde_json::json!(["last", "coerce"])); +} + +#[rstest] +#[case("null")] +#[case("undefined")] +#[case("false")] +#[case("0")] +#[case("Symbol('class')")] +#[case("({[Symbol.toPrimitive](hint){trace.push(hint);return 'class';}})")] +#[case("({toString(){trace.push('coerce');throw Error('coercion');}})")] +fn inlined_template_capture_keeps_one_string_conversion(#[case] value: &str) { + let values = [("slot", "`${read()}`")]; + let body = "`prefix-${slot} external`"; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, 0, "{compiled}"); + assert_eq!(compiled, "`prefix-${read()} external`"); + let probe = "(()=>{try{return ['value',a()];}catch(error){return ['error',String(error)];}})()"; + let prefix = format!("function read(){{trace.push('read');return {value};}}"); + let expected = whole::execute( + &format!("{prefix}export const a=()=>({});", baseline(&values, body)), + probe, + ); + let actual = whole::execute(&format!("{prefix}export const a=()=>({compiled});"), probe); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, expected.trace); +} + +#[rstest] +#[case("`${slot} external`", "`prefix-${read()}`", 0)] +#[case("tag`${slot} external`", "`${read()}`", 1)] +fn inlined_template_capture_keeps_text_and_tagged_template_values( + #[case] body: &str, + #[case] value: &str, + #[case] retained: usize, +) { + let values = [("slot", value)]; + let (compiled, parameters) = lowered(&values, body); + assert_eq!(parameters, retained, "{compiled}"); + let prefix = "function read(){trace.push('read');return {toString(){trace.push('coerce');return 'class';}};}function tag(parts,value){return [parts.raw,value];}"; + let expected = whole::execute( + &format!("{prefix}export const a=()=>({});", baseline(&values, body)), + "a()", + ); + let actual = whole::execute(&format!("{prefix}export const a=()=>({compiled});"), "a()"); + assert_eq!(actual.element, expected.element); + assert_eq!(actual.trace, expected.trace); +} + +#[test] +#[serial] +fn emotion_class_template_keeps_the_original_flat_interpolation() { + let source = "import {css} from '@emotion/react';const override=css({color:'blue'});export const a=()=>
;"; + let compiled = compile_emotion(source) + .unwrap_or_else(|error| panic!("{error}: {source}")) + .code; + assert!( + compiled.contains("className={`${override} external "), + "{compiled}" + ); + assert!(!compiled.contains("__devupValue"), "{compiled}"); + let actual = whole::execute(&compiled, "a()"); + assert_eq!( + actual.element["props"]["className"], + "color-0-blue--255-a external margin-0-0--255-a" + ); +} + +#[test] +fn capture_elision_keeps_yield_in_the_original_generator_scope() { + let values = [("slot", "yield (trace.push('yield'),'pause')")]; + let (compiled, parameters) = lowered(&values, "
{slot}
"); + assert_eq!(parameters, 0, "{compiled}"); + let actual = whole::execute( + &format!("export function* a(){{return ({compiled});}}"), + "(()=>{const iterator=a();trace.push(iterator.next().value);return iterator.next('child').value;})()", + ); + assert_eq!(actual.element["children"], serde_json::json!(["child"])); + assert_eq!(actual.trace, serde_json::json!(["yield", "pause"])); +} + +#[test] +#[serial] +fn typography_table_with_children_has_no_capture_wrapper() { + let source = "import {Text} from '@devup-ui/react';export const a=(size,child)=>{child()};"; + let compiled = code(source); + assert!(!compiled.contains("__devupChoice"), "{compiled}"); + let actual = whole::evaluate( + source, + "a({toString(){trace.push('key');return 'lg';}},()=>{trace.push('child');return 'text';})", + ); + assert_eq!(actual.element["props"]["className"], "typo-buttonLg"); + assert_eq!(actual.element["children"], serde_json::json!(["text"])); + assert_eq!(actual.trace, serde_json::json!(["key", "child"])); +} + +#[rstest] +#[case(true, serde_json::json!(["read", "child"]))] +#[case(false, serde_json::json!(["child"]))] +#[serial] +fn branch_payload_with_encoded_style_reads_keeps_its_capture( + #[case] on: bool, + #[case] trace: serde_json::Value, +) { + let source = format!( + "{BOX}export const a=(on,read,child)=>{{child()}};" + ); + let actual = whole::evaluate( + &source, + &format!( + "a({on},()=>{{trace.push('read');return 12;}},()=>{{trace.push('child');return 'text';}})" + ), + ); + assert_eq!(actual.trace, trace); + assert_eq!(actual.element["children"], serde_json::json!(["text"])); + let style = actual.element["props"]["style"] + .as_object() + .unwrap_or_else(|| panic!("missing style: {}", actual.element)); + if on { + assert_eq!( + style.values().collect::>(), + vec![&serde_json::json!("12px")] + ); + } else { + assert!(style.is_empty()); + } +} diff --git a/libs/extractor/src/jsx_semantics_tests/capture_preservation.rs b/libs/extractor/src/jsx_semantics_tests/capture_preservation.rs new file mode 100644 index 000000000..3eba3b8e3 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/capture_preservation.rs @@ -0,0 +1,308 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[test] +#[serial] +fn lone_dynamic_style_keeps_the_value_in_place_without_an_arrow_wrapper() { + let actual = output(&format!( + "{BOX}export const a=(color)=>;" + )); + assert!( + !actual.code.contains("__devupValue"), + "unexpected capture wrapper: {}", + actual.code + ); + assert!(actual.code.contains("color"), "{}", actual.code); +} + +#[test] +#[serial] +fn lone_dynamic_template_keeps_the_value_in_place_without_an_arrow_wrapper() { + let actual = output(&format!( + r"{BOX}export const a=(color)=>;" + )); + assert!( + !actual.code.contains("__devupValue"), + "unexpected capture wrapper: {}", + actual.code + ); +} + +#[rstest] +#[case("data[key as Key] as Value")] +#[case("(data[key as Key] as Value)")] +#[case("((data[key as Key] as Value) as Value)")] +#[case("data[key as Key] satisfies Value")] +#[case("data[key as Key]!")] +#[case("(data[key as Key]! as Value) satisfies Value")] +#[serial] +fn captured_style_values_do_not_restore_outer_type_wrappers( + #[case] value: &str, + #[values(false, true)] ordered: bool, +) { + let tail = if ordered { "id={later()}" } else { "" }; + let source = format!("{BOX}export const a=(data,key,later)=>;"); + let compiled = code(&source); + assert!(compiled.contains("data[key as Key]"), "{compiled}"); + for wrapper in ["as Value", "satisfies Value", "data[key as Key]!"] { + assert!(!compiled.contains(wrapper), "{compiled}"); + } + let actual = whole::execute( + &compiled, + "Object.values(a({get width(){trace.push('get');return '12px';}},{toString(){trace.push('key');return 'width';}},()=>{trace.push('later');return 'id';}).props.style)", + ); + assert_eq!(actual.element, serde_json::json!(["12px"])); + assert_eq!( + actual.trace, + if ordered { + serde_json::json!(["key", "get", "later"]) + } else { + serde_json::json!(["key", "get"]) + } + ); +} + +#[rstest] +#[case(true)] +#[case(false)] +#[serial] +fn captured_style_type_wrappers_keep_key_and_getter_throw_order(#[case] key_throws: bool) { + let source = format!( + "{BOX}export const a=(data,key,later)=>;" + ); + let key = if key_throws { + "throw 'key';" + } else { + "return 'width';" + }; + let actual = whole::evaluate( + &source, + &format!( + "(()=>{{try{{a({{get width(){{trace.push('get');throw 'get';}}}},{{toString(){{trace.push('key');{key}}}}},()=>{{trace.push('later');return 'id';}});}}catch(error){{return error;}}}})()" + ), + ); + assert_eq!(actual.element, if key_throws { "key" } else { "get" }); + assert_eq!( + actual.trace, + if key_throws { + serde_json::json!(["key"]) + } else { + serde_json::json!(["key", "get"]) + } + ); +} + +#[test] +#[serial] +fn captured_style_type_wrappers_keep_important_without_restoring_the_assertion() { + let source = format!( + "{BOX}export const a=(read,later)=>;" + ); + let compiled = output(&source); + assert!(!compiled.code.contains("as Value"), "{}", compiled.code); + assert!( + compiled + .styles + .iter() + .any(|style| matches!(style, ExtractStyleValue::Dynamic(style) if style.important())) + ); + let actual = whole::execute( + &compiled.code, + "Object.values(a(()=>{trace.push('read');return '12px';},()=>{trace.push('later');return 'id';}).props.style)", + ); + assert_eq!(actual.element, serde_json::json!(["12px"])); + assert_eq!(actual.trace, serde_json::json!(["read", "later"])); +} + +#[test] +#[serial] +fn captured_style_type_wrappers_leave_authored_dom_assertions_intact() { + let source = format!( + "{BOX}export const a=(read,later)=>;" + ); + let compiled = code(&source); + assert!(!compiled.contains("as StyleValue"), "{compiled}"); + assert!(compiled.contains("as IdValue"), "{compiled}"); + let actual = whole::execute( + &compiled, + "a(()=>{trace.push('read');return '12px';},()=>{trace.push('later');return 'id';}).props", + ); + assert_eq!(actual.element["id"], "id"); + assert_eq!(actual.trace, serde_json::json!(["read", "later"])); +} + +#[test] +#[serial] +fn known_object_spreads_are_flattened_before_attribute_ordering() { + let actual = output(&format!( + r"{BOX}export const a=(color)=>;" + )); + assert!(actual.code.contains("color"), "{}", actual.code); +} + +#[test] +#[serial] +fn lone_static_member_reads_a_getter_once_without_a_capture_wrapper() { + let source = format!( + r"{BOX}const value={{get p(){{trace.push('p');return 'red';}}}};export const a=()=> ;" + ); + let compiled = output(&source); + assert!( + !compiled.code.contains("__devupValue"), + "unexpected capture wrapper: {}", + compiled.code + ); + let actual = whole::evaluate(&source, "a().props"); + assert_eq!( + actual.element["style"] + .as_object() + .and_then(|style| style.values().next()), + Some(&serde_json::json!("red")) + ); + assert_eq!(actual.trace, serde_json::json!(["p"])); +} + +#[rstest] +#[case("'12px'", serde_json::json!(["12px"]))] +#[case("undefined", serde_json::json!([null]))] +#[serial] +fn lone_dynamic_call_runs_once_without_a_capture_wrapper( + #[case] returned: &str, + #[case] expected: serde_json::Value, +) { + let source = format!("{BOX}export const a=(getWidth)=>;"); + let actual = whole::evaluate( + &source, + &format!("Object.values(a(()=>{{trace.push('width');return {returned};}}).props.style)"), + ); + assert_eq!(actual.element, expected); + assert_eq!(actual.trace, serde_json::json!(["width"])); + assert!(!code(&source).contains("__devupValue")); +} + +#[test] +#[serial] +fn lone_dynamic_member_call_keeps_its_receiver_and_argument_evaluation() { + let source = + format!("{BOX}export const a=(receiver,args)=>;"); + let actual = whole::evaluate( + &source, + "Object.values(a({width:'12px',get read(){trace.push('get');return function(value){trace.push(value);return this.width;};}},{[Symbol.iterator](){trace.push('iterator');return ['call'][Symbol.iterator]();}}).props.style)", + ); + assert_eq!(actual.element, serde_json::json!(["12px"])); + assert_eq!(actual.trace, serde_json::json!(["get", "iterator", "call"])); + assert!(!code(&source).contains("__devupValue")); +} + +#[rstest] +#[case("{get read(){trace.push('get');throw 'boom';}}", "[]", serde_json::json!(["get"]))] +#[case("{get read(){trace.push('get');return ()=>{trace.push('call');};}}", "{[Symbol.iterator](){trace.push('iterator');throw 'boom';}}", serde_json::json!(["get","iterator"]))] +#[case("{get read(){trace.push('get');return ()=>{trace.push('call');throw 'boom';};}}", "[]", serde_json::json!(["get","call"]))] +#[serial] +fn lone_dynamic_call_preserves_throw_cutoff( + #[case] receiver: &str, + #[case] args: &str, + #[case] trace: serde_json::Value, +) { + let source = + format!("{BOX}export const a=(receiver,args)=>;"); + let actual = whole::evaluate( + &source, + &format!("(()=>{{try{{return a({receiver},{args});}}catch(error){{return error;}}}})()"), + ); + assert_eq!(actual.element, "boom"); + assert_eq!(actual.trace, trace); +} + +#[rstest] +#[case("", serde_json::json!(["read", "later"]), true)] +#[case("{later()}", serde_json::json!(["read", "later"]), false)] +#[case("", serde_json::json!(["read"]), true)] +#[serial] +fn dynamic_calls_that_move_or_expand_still_run_once( + #[case] element: &str, + #[case] trace: serde_json::Value, + #[case] captured: bool, +) { + let source = format!("{BOX}export const a=(read,later)=>{element};"); + let actual = whole::evaluate( + &source, + "a(()=>{trace.push('read');return '12px';},()=>{trace.push('later');return 'id';})", + ); + assert_eq!(actual.trace, trace); + let style = actual.element["props"]["style"] + .as_object() + .unwrap_or_else(|| panic!("missing generated style: {}", actual.element)); + assert_eq!(style.len(), if element.contains("boxSize") { 2 } else { 1 }); + assert!(style.values().all(|value| value == "12px")); + assert_eq!(code(&source).contains("__devupValue"), captured); +} + +#[test] +#[serial] +fn class_templates_when_captured_keep_their_static_tailwind_rules() { + let actual = output(&format!( + "{BOX}export const a=(get,rest)=>;" + )); + let styles = static_styles(&actual); + assert!( + styles + .iter() + .any(|(property, value)| property == "color" && value == "#3B82F6"), + "{styles:?}" + ); + assert!( + styles + .iter() + .any(|(property, value)| property == "padding" && value == "1rem"), + "{styles:?}" + ); + assert_eq!(actual.code.matches("get()").count(), 1); +} + +#[test] +#[serial] +fn computed_literal_selector_keys_when_captured_keep_the_static_rule() { + let actual = output(&format!( + "{BOX}{JSX_RUNTIME}export const a=(rest)=>jsx(Box,{{['_hover']:{{bg:'blue'}},color:'red'}});" + )); + assert!(actual.styles.iter().any(|style|matches!(style,ExtractStyleValue::Static(style) if style.value=="blue"&&style.selector().is_some())),"{}",actual.code); +} + +#[test] +#[serial] +fn computed_literal_selectors_when_unknown_keys_follow_keep_their_rule() { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=(key)=>jsx(Box,{{['_hover']:{{bg:'blue'}},[key]:'red'}});" + ); + assert!(output(&source).styles.iter().any(|style|matches!(style,ExtractStyleValue::Static(value) if value.value()=="blue" && value.selector().is_some()))); + let actual = whole::evaluate( + &source, + "a({toString(){trace.push('key');return '_hover';}}).props._hover", + ); + assert_eq!(actual.element, "red"); + assert_eq!(actual.trace, serde_json::json!(["key"])); +} + +#[test] +#[serial] +fn named_blue_500_when_captured_keeps_the_main_oklch_palette() { + let actual = output(&format!( + "{BOX}export const a=(get,rest)=>;" + )); + let styles = static_styles(&actual); + assert!( + styles.iter().any(|(property, value)| { + property == "color" && value == "oklch(62.3% .214 259.815)" + }), + "{styles:?}" + ); + assert!( + styles + .iter() + .any(|(property, value)| property == "padding" && value == "1rem"), + "{styles:?}" + ); + assert_eq!(actual.code.matches("get()").count(), 1); +} diff --git a/libs/extractor/src/jsx_semantics_tests/create_element.rs b/libs/extractor/src/jsx_semantics_tests/create_element.rs new file mode 100644 index 000000000..a0c7be706 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/create_element.rs @@ -0,0 +1,145 @@ +use super::*; +use serial_test::serial; + +#[test] +#[serial] +fn create_element_compiles_by_binding_whatever_it_is_named() { + let rendered = code(&format!( + "import React, {{ createElement as make }} from 'react';\n{BOX}export const named = make(Box, {{ color: 'red' }}, 'child');\nexport const namespace = React.createElement(Box, {{ bg: 'blue' }}, 'a', 'b');" + )); + + assert!( + rendered.contains("make(\"div\", { className: \"color-0-red--255-a\" }, \"child\")"), + "{rendered}" + ); + assert!( + rendered.contains( + "React.createElement(\"div\", { className: \"background-0-blue--255-a\" }, \"a\", \"b\")" + ), + "{rendered}" + ); + assert!(!rendered.contains("Box"), "{rendered}"); +} + +#[test] +#[serial] +fn create_element_through_a_namespace_import_and_require_compiles() { + let rendered = code(&format!( + "import * as R from 'react';\n{BOX}const React = require('react');\nconst {{ createElement: ce }} = require('react');\nexport const a = R.createElement(Box, {{ bg: 'red' }});\nexport const b = React.createElement(Box, {{ bg: 'blue' }});\nexport const c = ce(Box, {{ bg: 'green' }});" + )); + + assert_eq!(rendered.matches("(\"div\"").count(), 3, "{rendered}"); +} + +#[test] +#[serial] +fn create_element_keeps_children_key_and_ref() { + let rendered = code(&format!( + "import {{ createElement }} from 'react';\n{BOX}export const a = (r) => createElement(Box, {{ bg: 'blue', key: 1, ref: r }}, 'a', createElement(Box));" + )); + + assert!(rendered.contains("key: 1"), "{rendered}"); + assert!(rendered.contains("ref: r"), "{rendered}"); + assert!( + rendered.contains("\"a\", createElement(\"div\", {})"), + "{rendered}" + ); +} + +#[test] +#[serial] +fn create_element_without_props_builds_the_element() { + let rendered = code(&format!( + "import {{ createElement }} from 'react';\n{BOX}export const a = createElement(Box);\nexport const b = createElement(Box, null, 'x');\nexport const c = createElement(Box, undefined);" + )); + + assert_eq!( + rendered.matches("createElement(\"div\", {}").count(), + 3, + "{rendered}" + ); +} + +#[test] +#[serial] +fn create_element_with_props_held_in_a_value_spreads_them() { + let rendered = code(&format!( + "import {{ createElement }} from 'react';\n{BOX}export const a = (p) => createElement(Box, p, 'x');\nexport const b = (f) => createElement(Box, f(), 'y');\nexport const c = createElement(Box, {{ p: 1 }} as {{ p: number }});" + )); + + assert!(rendered.contains("...p"), "{rendered}"); + assert!( + rendered.contains("className: __devupSpread0?.className || \"\""), + "{rendered}" + ); + assert!( + rendered.contains("createElement(\"div\", (__devupSpread"), + "{rendered}" + ); + assert!( + rendered.contains("className: \"padding-0-4px--255-a\""), + "{rendered}" + ); +} + +#[test] +#[serial] +fn a_shadowed_create_element_is_not_react() { + let message = error(&format!( + "import {{ createElement }} from 'react';\n{BOX}export const a = (createElement) => createElement(Box, {{ color: 'red' }});" + )); + + assert!(message.contains("`Box` is read at runtime"), "{message}"); +} + +#[test] +#[serial] +fn a_shadowed_react_is_not_react() { + let message = error(&format!( + "import React from 'react';\n{BOX}export const a = (React) => React.createElement(Box, {{ color: 'red' }});" + )); + + assert!(message.contains("`Box` is read at runtime"), "{message}"); +} + +#[test] +#[serial] +fn create_element_of_anything_else_is_left_alone() { + let rendered = code(&format!( + "import {{ createElement }} from 'react';\n{BOX}export const a = createElement('div', {{ color: 'red' }});\nexport const b = createElement(Foo, {{ color: 'red' }});\nexport const c = ;" + )); + + assert!( + rendered.contains("createElement(\"div\", { color: \"red\" })"), + "{rendered}" + ); + assert!( + rendered.contains("createElement(Foo, { color: \"red\" })"), + "{rendered}" + ); +} + +#[test] +#[serial] +fn create_element_given_a_spread_argument_is_read_at_runtime() { + let message = error(&format!( + "import {{ createElement }} from 'react';\n{BOX}export const a = (args) => createElement(Box, ...args);" + )); + + assert!(message.contains("`Box` is read at runtime"), "{message}"); +} + +#[test] +#[serial] +fn create_element_props_that_hold_nothing_build_an_empty_object() { + let rendered = code(&format!( + "import React, {{ createElement, useState }} from 'react';\n{BOX}export const a = createElement(Box, void 0);\nexport const b = React.createElement(Box, null);\nexport const c = useState(0);" + )); + + assert_eq!( + rendered.matches("createElement(\"div\", {})").count(), + 2, + "{rendered}" + ); + assert!(rendered.contains("= useState(0)"), "{rendered}"); +} diff --git a/libs/extractor/src/jsx_semantics_tests/create_element_attachment.rs b/libs/extractor/src/jsx_semantics_tests/create_element_attachment.rs new file mode 100644 index 000000000..ed28eff9a --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/create_element_attachment.rs @@ -0,0 +1,130 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; + +fn source(props: &str) -> String { + format!( + "{BOX}import {{createElement}} from 'react';export const a=(first,read)=>createElement(Box,{props},'child');" + ) +} + +#[rstest] +#[serial] +fn explicit_styles_when_create_element_props_are_wrapped_remain_independent( + #[values("(BODY)", "((BODY))", "(BODY as const)", "(BODY satisfies object)")] wrapper: &str, + #[values(true, false)] before: bool, + #[values(true, false)] single_css: bool, +) { + // Given an explicit declaration and an unknown spread in either order. + let body = if before { + "{...read(),color:'red',p:1}" + } else { + "{color:'red',p:1,...read()}" + }; + let source = source(&wrapper.replace("BODY", body)); + + // When the complete factory source is extracted and executed. + let output = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("the factory does not compile: {error}")); + let actual = whole::execute( + &output.code, + "(()=>{const raw={};const e=a(null,()=>{trace.push('spread');return {get color(){trace.push('getter');return raw;},p:'blue',id:'kept',className:'external',style:{opacity:0.5}};});return [e.type,e.props.color===raw,e.props.p,e.props.id,e.props.className,e.props.style,e.children];})()", + ); + + // Then authored CSS/classes coexist with raw identity and existing merges. + assert_eq!( + static_styles(&output), + vec![ + ("color".into(), "red".into()), + ("padding".into(), "4px".into()) + ] + ); + assert_eq!(actual.trace, serde_json::json!(["spread", "getter"])); + let suffix = if single_css { "" } else { "-a" }; + assert_eq!( + actual.element, + serde_json::json!(["div", true, "blue", "kept", format!("external color-0-red--255{suffix} padding-0-4px--255{suffix}"), {"opacity":0.5}, ["child"]]) + ); +} + +#[rstest] +#[serial] +fn authored_effects_when_create_element_props_are_wrapped_run_in_source_order( + #[values("(BODY)", "((BODY))", "(BODY as const)", "(BODY satisfies object)")] wrapper: &str, + #[values(true, false)] before: bool, + #[values(true, false)] single_css: bool, +) { + // Given a dynamic explicit style adjacent to an effectful unknown spread. + let body = if before { + "{...read(),color:first()}" + } else { + "{color:first(),...read()}" + }; + let source = source(&wrapper.replace("BODY", body)); + + // When the emitted factory runs with a conflicting raw color. + let output = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("the factory does not compile: {error}")); + let actual = whole::execute( + &output.code, + "(()=>{const e=a(()=>{trace.push('first');return 'red';},()=>{trace.push('spread');return {get color(){trace.push('getter');return 'green';}};});return [e.props.color,(e.props.className||'').trim().length>0,Object.values(e.props.style||{}),e.children];})()", + ); + + // Then the explicit dynamic class/value attaches, with each effect once. + assert_eq!(output.styles.len(), 1); + assert!( + matches!(output.styles.iter().next(), Some(ExtractStyleValue::Dynamic(value)) if value.property() == "color") + ); + assert_eq!( + actual.element, + serde_json::json!(["green", true, ["red"], ["child"]]) + ); + let expected = if before { + vec!["spread", "getter", "first"] + } else { + vec!["first", "spread", "getter"] + }; + assert_eq!(actual.trace, serde_json::json!(expected)); +} + +#[rstest] +#[serial] +fn explicit_styles_when_wrapped_create_element_has_no_spread_compile( + #[values("(BODY)", "((BODY))", "(BODY as const)", "(BODY satisfies object)")] wrapper: &str, + #[values(true, false)] single_css: bool, +) { + // Given the wrapped literal without an unknown spread. + let source = source(&wrapper.replace("BODY", "{color:'red'}")); + + // When the control compiles and runs. + let output = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("the factory does not compile: {error}")); + let actual = whole::execute(&output.code, "a()"); + + // Then absolute red CSS and its class remain attached. + assert_eq!(static_styles(&output), vec![("color".into(), "red".into())]); + let suffix = if single_css { "" } else { "-a" }; + assert_eq!( + actual.element["props"]["className"], + format!("color-0-red--255{suffix}") + ); + assert_eq!(actual.trace, serde_json::json!([])); +} diff --git a/libs/extractor/src/jsx_semantics_tests/css_prop.rs b/libs/extractor/src/jsx_semantics_tests/css_prop.rs new file mode 100644 index 000000000..dd418477a --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/css_prop.rs @@ -0,0 +1,70 @@ +use super::*; +use serial_test::serial; + +fn emotion_error(source: &str) -> String { + match compile_emotion(source) { + Err(message) => message, + Ok(compiled) => panic!("the file compiles: {}", compiled.code), + } +} + +fn emotion_output(source: &str) -> ExtractOutput { + compile_emotion(source).unwrap_or_else(|error| panic!("the file does not compile: {error}")) +} + +#[test] +#[serial] +fn the_css_prop_before_a_spread_is_a_located_error() { + let message = emotion_error(&format!( + "{EMOTION}export const a = (rest) =>
;" + )); + + assert!( + message.contains("`css` on `
` cannot use `...rest`"), + "{message}" + ); + assert!(message.starts_with("a.tsx:2:"), "{message}"); + assert!( + message.contains("write the spread before `css`"), + "{message}" + ); +} + +#[test] +#[serial] +fn the_css_prop_after_a_spread_compiles() { + let output = emotion_output(&format!( + "{EMOTION}export const a = (rest) =>
;" + )); + + assert_eq!( + static_styles(&output), + vec![("color".to_string(), "red".to_string())] + ); +} + +#[test] +#[serial] +fn the_css_prop_of_a_call_before_a_spread_is_a_located_error() { + let message = emotion_error( + "import { jsx } from '@emotion/react';\nexport const a = (rest) => jsx('div', { css: { color: 'red' }, ...rest });", + ); + + assert!( + message.contains("`css` on `
` cannot use `...rest`"), + "{message}" + ); +} + +#[test] +#[serial] +fn the_css_prop_of_a_call_after_a_spread_compiles() { + let output = emotion_output( + "import { jsx } from '@emotion/react';\nexport const a = (rest) => jsx('div', { ...rest, css: { color: 'red' } });", + ); + + assert_eq!( + static_styles(&output), + vec![("color".to_string(), "red".to_string())] + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests/errors.rs b/libs/extractor/src/jsx_semantics_tests/errors.rs new file mode 100644 index 000000000..382e76816 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/errors.rs @@ -0,0 +1,82 @@ +use super::*; +use serial_test::serial; + +#[test] +#[serial] +fn a_selector_object_before_a_spread_keeps_its_rule() { + let compiled = output(&format!( + "{BOX}export const a = (rest) => ;" + )); + + assert_eq!( + static_styles(&compiled), + vec![("background".into(), "red".into())] + ); +} + +#[test] +#[serial] +fn a_selector_object_after_a_spread_keeps_its_rule() { + let output = output(&format!( + "{BOX}export const a = (rest) => ;" + )); + + assert_eq!(static_styles(&output).len(), 1); +} + +#[test] +#[serial] +fn a_runtime_value_under_a_selector_before_a_spread_keeps_its_value() { + let source = + format!("{BOX}export const a = (rest, x) => ;"); + + assert_eq!( + whole::evaluate( + &source, + "Object.values(a({_hover:'raw'},'red').props.style)" + ) + .element, + serde_json::json!(["red"]) + ); +} + +#[test] +#[serial] +fn explicit_shapes_when_spreads_follow_match_the_spread_absent_control() { + for (attribute, _key) in [ + ("typography=\"body\"", "typography"), + ("bg={['red', 'blue'][index]}", "bg"), + ("positioning={mode}", "positioning"), + ("selectors={{ '& > a': { color: 'red' } }}", "selectors"), + ] { + let compiled = output(&format!( + "{BOX}export const a = (rest, index, mode) => ;" + )); + + let control = output(&format!( + "{BOX}export const a=(rest,index,mode)=>;" + )); + assert_eq!(compiled.styles, control.styles, "{attribute}"); + } +} + +#[test] +#[serial] +fn a_value_the_build_cannot_read_stays_an_error_before_a_spread() { + let message = error(&format!( + "{BOX}export const a = (rest) => 1}} {{...rest}} />;" + )); + + assert!(message.contains("cannot use `() => 1`"), "{message}"); +} + +#[test] +#[serial] +fn a_spread_beside_suspending_props_is_evaluated_once() { + let rendered = code(&format!( + "{BOX}export const a = async (f, load) => ;" + )); + + assert_eq!(rendered.matches("f()").count(), 1, "{rendered}"); + assert!(rendered.contains("await load()"), "{rendered}"); +} diff --git a/libs/extractor/src/jsx_semantics_tests/evaluation_edges.rs b/libs/extractor/src/jsx_semantics_tests/evaluation_edges.rs new file mode 100644 index 000000000..0cff9f962 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/evaluation_edges.rs @@ -0,0 +1,89 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case("active || [2,load()]", "false", true)] +#[case("active || [2,load()]", "'12px'", false)] +#[case("active ?? [2,load()]", "null", true)] +#[case("active ?? [2,load()]", "0", false)] +#[serial] +fn lazy_logical_arrays_when_captured_evaluate_only_the_selected_branch( + #[case] value: &str, + #[case] active: &str, + #[case] loads: bool, +) { + let source = + format!("{BOX}export const a=(active,load,rest)=>;"); + let actual = evaluate( + &source, + &format!( + "a({active},()=>{{trace.push('branch');return '4px';}},{{get id(){{trace.push('spread');return 'id';}}}})" + ), + ); + assert_eq!( + actual.trace, + if loads { + serde_json::json!(["branch", "spread"]) + } else { + serde_json::json!(["spread"]) + } + ); +} + +#[test] +#[serial] +fn literal_spread_with_effectful_keys_when_followed_by_an_unknown_spread_keeps_effects() { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=(load,rest)=>jsx(Box,{{...{{color:load(),id:load()}},...rest}});" + ); + let actual = evaluate( + &source, + "a(()=>{trace.push('load');return 'red';},{color:'blue'})", + ); + assert_eq!(actual.trace, serde_json::json!(["load", "load"])); + assert_eq!(actual.element["props"]["id"], "red"); +} + +#[test] +#[serial] +fn suspending_children_when_wrapped_leave_await_and_yield_in_the_callers_scope() { + for declaration in [ + "async function a(load){return {await load()}{load()};}", + "function* a(load){return {yield load()}{load()};}", + ] { + let rendered = code(&format!("{BOX}export {declaration}")); + assert!(rendered.contains("load()")); + assert!(rendered.contains("__devupValue")); + } +} + +#[test] +#[serial] +fn trailing_children_spread_when_dynamic_as_is_captured_evaluates_the_iterable_once() { + let source = format!( + "{BOX}import {{createElement}} from 'react';export const a=(type,rest,kids)=>createElement(Box,{{as:type(),color:'red',...rest}},...kids());" + ); + let actual = evaluate( + &source, + "a(()=>{trace.push('type');return 'section';},{get id(){trace.push('spread');return 'id';}},()=>{trace.push('children');return ['a','b'];})", + ); + assert_eq!( + actual.trace, + serde_json::json!(["type", "spread", "children"]) + ); + assert_eq!(actual.element["children"], serde_json::json!(["a", "b"])); +} + +#[test] +#[serial] +fn duplicate_styles_when_a_throwing_earlier_read_is_discarded_still_throw() { + let source = format!("{BOX}export const a=(bad)=>;"); + assert!(code(&source).contains("bad")); + let actual = evaluate( + &source, + "(()=>{try{return a(missing);}catch(error){return error.name;}})()", + ); + assert_eq!(actual.element, "ReferenceError"); +} diff --git a/libs/extractor/src/jsx_semantics_tests/factory_order.rs b/libs/extractor/src/jsx_semantics_tests/factory_order.rs new file mode 100644 index 000000000..ffbd001c8 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/factory_order.rs @@ -0,0 +1,426 @@ +use super::*; +use crate::extract_style::ExtractStyleProperty; +use oxc_ast::ast::{ImportDeclarationSpecifier, Statement}; +use oxc_transformer::{JsxRuntime, TransformOptions, Transformer}; + +// Bounded adapter of whole::plain_script: same parser/transformer/codegen/run, +// selectable actual JSX lowering and aliases for the automatic-runtime imports. +fn factory_script(source: &str, runtime: &str) -> String { + let arena = oxc_allocator::Allocator::default(); + let parsed = oxc_parser::Parser::new(&arena, source, oxc_span::SourceType::tsx()).parse(); + assert!( + !parsed.fatal_error && parsed.diagnostics.is_empty(), + "{source}" + ); + let mut program = parsed.program; + let scoping = oxc_semantic::SemanticBuilder::new() + .build(&program) + .semantic + .into_scoping(); + let mut options = TransformOptions::default(); + options.jsx.runtime = if runtime == "automatic" { + JsxRuntime::Automatic + } else { + JsxRuntime::Classic + }; + if runtime != "automatic" { + options.jsx.pragma = Some( + if runtime == "pragma" { + "h" + } else { + "React.createElement" + } + .into(), + ); + } + let transformed = Transformer::new(&arena, std::path::Path::new("factory.tsx"), &options) + .build_with_scoping(scoping, &mut program); + assert!( + transformed.diagnostics.is_empty(), + "{source}: {:?}", + transformed.diagnostics + ); + let mut aliases = String::new(); + for statement in &program.body { + if let Statement::ImportDeclaration(import) = statement + && import.source.value.as_str() == Some("react/jsx-runtime") + { + for specifier in import.specifiers.iter().flatten() { + if let ImportDeclarationSpecifier::ImportSpecifier(named) = specifier { + assert!(matches!( + named.imported.to_string().as_str(), + "jsx" | "jsxs" + )); + aliases.push_str("const "); + aliases.push_str(named.local.name.as_str()); + aliases.push_str(" = automatic;\n"); + } + } + } + } + let generated = oxc_codegen::Codegen::new().build(&program).code; + aliases + + &generated + .lines() + .filter(|line| !line.starts_with("import ")) + .map(|line| line.strip_prefix("export ").unwrap_or(line)) + .collect::>() + .join("\n") +} + +#[test] +#[serial_test::serial] +fn factory_lookup_precedes_owned_style_evaluation() { + struct RestoreDebug(bool); + impl Drop for RestoreDebug { + fn drop(&mut self) { + css::debug::set_debug(self.0); + } + } + let _debug = RestoreDebug(css::debug::is_debug()); + css::debug::set_debug(false); + let prefix = "import {css} from '@emotion/react';"; + let mutable = "const props={get color(){trace.push('value');active='NEW';return 'purple';}};function f(props){return
;}const result=observe(()=>f(props));"; + let throwing = "factoryThrows=true;const props={get color(){trace.push('value');throw valueError;}};function f(props){return
;}const result=observe(()=>f(props));"; + let tdz = "const props={get color(){trace.push('value');return 'purple';}};function f(props){return
;}const result=observe(()=>f(props));const h=automatic;"; + let initializer = "const props={get color(){trace.push('value');active='NEW';return 'purple';}};function f(props){const inner={color:props.color};return
;}const result=observe(()=>f(props));"; + let shorthand = "Object.defineProperty(globalThis,'position',{configurable:true,get(){trace.push('position');return 3;}});const result=observe(()=> );"; + let template = "const c={toString(){trace.push('coerce');active='NEW';return 'purple';}};function f(c){return
;}const result=observe(()=>f(c));"; + let ordered = "const props={get color(){trace.push('value');return 'purple';}};function before(){trace.push('before');return 'id';}function after(){trace.push('after');return 'title';}function f(props){return
;}const result=observe(()=>f(props));"; + let cases = [ + ( + "mutable", + "classic", + mutable, + "ok", + vec!["factory", "value", "call:OLD"], + ), + ( + "throw-identity", + "classic", + throwing, + "factory", + vec!["factory"], + ), + ("pragma-tdz", "pragma", tdz, "reference", vec![]), + ( + "initializer", + "classic", + initializer, + "ok", + vec!["value", "factory", "call:NEW"], + ), + ( + "duplicate-shorthand", + "classic", + shorthand, + "ok", + vec!["factory", "position", "call:OLD"], + ), + ( + "dynamic-template", + "classic", + template, + "ok", + vec!["factory", "coerce", "call:OLD"], + ), + ( + "ordered-refusal", + "classic", + ordered, + "ok", + vec!["factory", "before", "value", "after", "call:OLD"], + ), + ( + "mutable", + "automatic", + mutable, + "ok", + vec!["value", "call:AUTO"], + ), + ( + "throw-identity", + "automatic", + throwing, + "value", + vec!["value"], + ), + ( + "dynamic-template", + "automatic", + template, + "ok", + vec!["coerce", "call:AUTO"], + ), + ( + "ordered-refusal", + "automatic", + ordered, + "ok", + vec!["before", "value", "after", "call:AUTO"], + ), + ]; + let prelude = "const trace=[];const factoryError={},valueError={};let active='OLD',factoryThrows=false;const Box='div';function automatic(type,props){trace.push('call:AUTO');return {type,props};}const React={get createElement(){trace.push('factory');if(factoryThrows)throw factoryError;const selected=active;return (type,props)=>{trace.push('call:'+selected);return {type,props};};}};function observe(invoke){try{invoke();return 'ok';}catch(error){return error===factoryError?'factory':error===valueError?'value':error instanceof ReferenceError?'reference':'other';}}"; + for (id, runtime, body, outcome, trace) in cases { + let source = if id == "duplicate-shorthand" { + format!("import {{Box}} from '@devup-ui/react';{body}") + } else { + format!("{prefix}{body}") + }; + let authored_script = factory_script(&source, runtime); + let authored_text = run(&format!( + "{prelude}{authored_script}\nreturn JSON.stringify({{outcome:result,trace}});" + )); + let authored: serde_json::Value = serde_json::from_str(&authored_text) + .unwrap_or_else(|error| panic!("{error}: {authored_text}")); + assert_eq!( + authored, + serde_json::json!({"outcome":outcome,"trace":trace}), + "authored {id}/{runtime}" + ); + for single_css in [false, true] { + reset_class_map(); + reset_file_map(); + let options = ExtractOption { + single_css, + import_aliases: HashMap::from([( + "@emotion/react".into(), + ImportAlias::NamedToNamed, + )]), + ..ExtractOption::default() + }; + let output = extract("factory.tsx", &source, options) + .unwrap_or_else(|error| panic!("{id}/{runtime}/{single_css}: {error}")); + let script = factory_script(&output.code, runtime); + let current_text = run(&format!( + "{prelude}{script}\nreturn JSON.stringify({{outcome:result,trace}});" + )); + let current: serde_json::Value = serde_json::from_str(¤t_text) + .unwrap_or_else(|error| panic!("{error}: {current_text}")); + if id == "duplicate-shorthand" { + assert_eq!( + current["trace"] + .as_array() + .map(|rows| rows.iter().filter(|v| *v == "position").count()), + Some(1) + ); + } + assert_eq!( + current, authored, + "{id}/{runtime}/{single_css}: {}", + output.code + ); + } + } +} + +struct RestoreDebug(bool); +impl Drop for RestoreDebug { + fn drop(&mut self) { + css::debug::set_debug(self.0); + } +} + +#[test] +#[serial_test::serial] +fn public_dynamic_identifiers_match_emitted_style_expressions() { + use oxc_ast_visit::{Visit, walk}; + struct Slots(Vec<(String, String)>); + impl<'a> Visit<'a> for Slots { + fn visit_object_property(&mut self, property: &oxc_ast::ast::ObjectProperty<'a>) { + if let Some(key) = property.key.static_name().map(|key| { + key.into_cow_str() + .unwrap_or_else(|| panic!("non-UTF-8 static property key")) + }) && key.starts_with("--") + { + self.0.push(( + key.into_owned(), + crate::utils::readable_code(&property.value), + )); + } + walk::walk_object_property(self, property); + } + } + let _restore_debug = RestoreDebug(css::debug::is_debug()); + css::debug::set_debug(false); + for (body, expected) in [ + ("color: props.color", "props.color"), + ("padding: gap * 4", "gap * 4"), + ("color: `${c}`", "c"), + ] { + let source = format!( + "import {{css}} from '@emotion/react';function f(props,gap,c){{return
;}}" + ); + reset_class_map(); + reset_file_map(); + let output = extract( + "a.tsx", + &source, + ExtractOption { + import_aliases: HashMap::from([( + "@emotion/react".into(), + ImportAlias::NamedToNamed, + )]), + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error}")); + let arena = oxc_allocator::Allocator::default(); + let parsed = + oxc_parser::Parser::new(&arena, &output.code, oxc_span::SourceType::tsx()).parse(); + assert!(!parsed.fatal_error && parsed.diagnostics.is_empty()); + let mut slots = Slots(Vec::new()); + slots.visit_program(&parsed.program); + assert_eq!(slots.0.len(), 1, "{}", output.code); + assert_eq!( + output + .styles + .iter() + .filter(|style| matches!(style, ExtractStyleValue::Dynamic(_))) + .count(), + 1 + ); + for style in &output.styles { + if let ExtractStyleValue::Dynamic(style) = style { + let StyleProperty::Variable { + variable_name, + identifier, + .. + } = style.extract(Some("a.tsx")) + else { + panic!("dynamic style has no variable"); + }; + assert!(identifier.contains(expected), "{identifier}"); + let expression = + oxc_parser::Parser::new(&arena, &identifier, oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + assert_eq!( + slots.0, + vec![(variable_name, crate::utils::readable_code(&expression))] + ); + } + } + } +} + +#[test] +#[serial_test::serial] +fn rewriting_one_owner_preserves_other_sites_and_capture_fallbacks() { + use oxc_ast_visit::{Visit, walk}; + use oxc_span::ContentEq; + struct Slots(Vec<(String, String)>); + impl<'a> Visit<'a> for Slots { + fn visit_object_property(&mut self, property: &oxc_ast::ast::ObjectProperty<'a>) { + if let Some(key) = property.key.static_name().map(|key| { + key.into_cow_str() + .unwrap_or_else(|| panic!("non-UTF-8 static property key")) + }) && key.starts_with("--") + { + self.0.push(( + key.into_owned(), + crate::utils::readable_code(&property.value), + )); + } + walk::walk_object_property(self, property); + } + } + let _restore_debug = RestoreDebug(css::debug::is_debug()); + css::debug::set_debug(false); + for body in [ + "const a=
;const b=;", + "const b=;const a=
;", + "const a=
;const b=
;", + ] { + for single_css in [true, false] { + let source = format!( + "import {{css}} from '@emotion/react';function f(first,second){{{body}return [a,b];}}" + ); + reset_class_map(); + reset_file_map(); + let output = extract( + "a.tsx", + &source, + ExtractOption { + single_css, + import_aliases: HashMap::from([( + "@emotion/react".into(), + ImportAlias::NamedToNamed, + )]), + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error}")); + let arena = oxc_allocator::Allocator::default(); + let parsed = + oxc_parser::Parser::new(&arena, &output.code, oxc_span::SourceType::tsx()).parse(); + assert!(!parsed.fatal_error && parsed.diagnostics.is_empty()); + let mut slots = Slots(Vec::new()); + slots.visit_program(&parsed.program); + assert_eq!(slots.0.len(), 2, "{}", output.code); + let guarded_first_reads = slots + .0 + .iter() + .filter(|(_, source)| { + let expression = + oxc_parser::Parser::new(&arena, source, oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + let Expression::SequenceExpression(sequence) = + expression.get_inner_expression() + else { + return false; + }; + let Some(Expression::AssignmentExpression(assignment)) = + sequence.expressions.first() + else { + return false; + }; + let oxc_ast::ast::AssignmentTarget::AssignmentTargetIdentifier(identifier) = + &assignment.left + else { + return false; + }; + let expected = crate::style_slot_test_support::numeric_with_capture( + "first.color", + identifier.name.as_str(), + ); + let guard = + oxc_parser::Parser::new(&arena, &expected, oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + expression + .get_inner_expression() + .content_eq(guard.get_inner_expression()) + }) + .count(); + assert_eq!(guarded_first_reads, 1); + assert!(output.code.contains("second.color")); + let mut public = Vec::new(); + for style in &output.styles { + if let ExtractStyleValue::Dynamic(style) = style { + let StyleProperty::Variable { + variable_name, + identifier, + .. + } = style.extract(Some("a.tsx")) + else { + panic!("dynamic style has no variable"); + }; + let expression = + oxc_parser::Parser::new(&arena, &identifier, oxc_span::SourceType::tsx()) + .parse_expression() + .unwrap_or_else(|error| panic!("{error:?}")); + public.push((variable_name, crate::utils::readable_code(&expression))); + } + } + public.sort(); + slots.0.sort(); + assert_eq!(public.len(), 2); + assert_eq!(public, slots.0, "{single_css}: {}", output.code); + } + } +} + +#[path = "factory_spread.rs"] +mod spread_css; diff --git a/libs/extractor/src/jsx_semantics_tests/factory_spread.rs b/libs/extractor/src/jsx_semantics_tests/factory_spread.rs new file mode 100644 index 000000000..5e7f165c0 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/factory_spread.rs @@ -0,0 +1,308 @@ +use super::*; + +const PREFIX: &str = "import { jsx as _jsx } from '@emotion/react/jsx-runtime';"; + +fn extract_spread(source: &str, single_css: bool) -> ExtractOutput { + reset_class_map(); + reset_file_map(); + extract( + "factory.tsx", + source, + ExtractOption { + single_css, + import_aliases: HashMap::from([ + ("@emotion/react".into(), ImportAlias::NamedToNamed), + ( + "@emotion/react/jsx-runtime".into(), + ImportAlias::NamedToNamed, + ), + ]), + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error}: {source}")) +} + +// Only factory argument construction is observed. The mocks never render a component. +const PRELUDE: &str = "const trace=[],poison={};let reads=0;const Custom='Custom',Box='div',k='id';function automatic(type,props,key){return {type,props,key};}const React={get createElement(){trace.push('callee');return automatic;}};"; + +// factory_script already binds React automatic-runtime imports. Bind the other +// actual imports here; no executable body or component implementation is rewritten. +fn spread_script(source: &str) -> String { + let arena = oxc_allocator::Allocator::default(); + let parsed = oxc_parser::Parser::new(&arena, source, oxc_span::SourceType::tsx()).parse(); + assert!( + !parsed.fatal_error && parsed.diagnostics.is_empty(), + "{source}" + ); + let mut bindings = String::new(); + for statement in &parsed.program.body { + if let Statement::ImportDeclaration(import) = statement { + for specifier in import.specifiers.iter().flatten() { + let binding = match (import.source.value.as_str(), specifier) { + ( + Some("@emotion/react/jsx-runtime"), + ImportDeclarationSpecifier::ImportSpecifier(named), + ) => { + assert!(matches!( + named.imported.to_string().as_str(), + "jsx" | "jsxs" + )); + Some((named.local.name.as_str(), "automatic")) + } + (Some("react"), ImportDeclarationSpecifier::ImportSpecifier(named)) + if matches!(named.imported.to_string().as_str(), "forwardRef") => + { + Some((named.local.name.as_str(), "()=>Custom")) + } + ( + Some("@emotion/styled"), + ImportDeclarationSpecifier::ImportDefaultSpecifier(default), + ) => Some((default.local.name.as_str(), "{button:()=>Custom}")), + _ => None, + }; + if let Some((name, value)) = binding { + bindings.push_str("const "); + bindings.push_str(name); + bindings.push('='); + bindings.push_str(value); + bindings.push_str(";\n"); + } + } + } + } + bindings + &factory_script(source, "automatic") +} + +fn observe_spread(script: &str, setup: &str, probe: &str) -> serde_json::Value { + let text = run(&format!("{PRELUDE}{setup}{script}\n{probe}")); + serde_json::from_str(&text).unwrap_or_else(|error| panic!("{error}: {text}")) +} + +#[test] +#[serial_test::serial] +fn factory_css_spread_getter_is_read_once() { + let _debug = RestoreDebug(css::debug::is_debug()); + css::debug::set_debug(false); + let source = format!( + "{PREFIX}function App(props){{return _jsx(Custom,{{...props,css:{{color:'red'}}}});}}" + ); + let setup = "const props={get className(){trace.push('class:'+ ++reads);if(reads>1)throw poison;return 'first';}};"; + let probe = "let result;try{const node=App(props);result={reads,trace,first:node.props.className.split(' ')[0]};}catch(error){result={reads,trace,poison:error===poison};}return JSON.stringify(result);"; + let authored = observe_spread(&spread_script(&source), setup, probe); + assert_eq!( + authored, + serde_json::json!({"reads":1,"trace":["class:1"],"first":"first"}) + ); + for single_css in [false, true] { + let output = extract_spread(&source, single_css); + assert_eq!(static_styles(&output), vec![("color".into(), "red".into())]); + let actual = observe_spread(&spread_script(&output.code), setup, probe); + assert_eq!( + actual, authored, + "getter must read the copied slot, mode={single_css}: {}", + output.code + ); + } +} + +#[test] +#[serial_test::serial] +fn factory_css_spread_keeps_proxy_order_errors_and_authored_reads() { + let _debug = RestoreDebug(css::debug::is_debug()); + css::debug::set_debug(false); + let setup = "const props=new Proxy({className:'first',id:'id'},{ownKeys(t){trace.push('keys');return Reflect.ownKeys(t);},getOwnPropertyDescriptor(t,k){trace.push('descriptor:'+String(k));return Reflect.getOwnPropertyDescriptor(t,k);},get(t,k,r){trace.push('get:'+String(k));if(k==='className')reads++;return Reflect.get(t,k,r);}});"; + let cases = [ + ("proxy", "{...props,css:{color:'red'}}", setup), + ( + "class-before", + "{className:'before',...props,css:{color:'red'}}", + setup, + ), + ( + "class-after", + "{...props,className:'after',css:{color:'red'}}", + setup, + ), + ( + "multiple", + "{...props,...other,css:{color:'red'}}", + "const props={get className(){trace.push('first');reads++;return 'first';}};const other={get className(){trace.push('last');reads++;return 'last';}};", + ), + ( + "computed", + "{...props,[key()]:value(),css:{color:'red'}}", + "const props={get className(){trace.push('spread');reads++;return 'first';}};function key(){trace.push('key');return 'className';}function value(){trace.push('value');return 'computed';}", + ), + ( + "authored-read", + "{...props,title:props.className,css:{color:'red'}}", + "const props={get className(){trace.push('class:'+ ++reads);return reads===1?'first':'second';}};", + ), + ( + "getter-throw", + "{id:(trace.push('id'),'id'),...props,css:{color:'red'},title:(trace.push('title'),'title')}", + "const props={get className(){trace.push('throw');reads++;throw poison;}};", + ), + ("null", "{...props,css:{color:'red'}}", "const props=null;"), + ]; + // React.createElement on an unknown component intentionally keeps its css prop. + let negative = format!( + "{PREFIX}import * as React from 'react';function App(props){{return React.createElement(Custom,{{...props,css:{{color:'red'}}}});}}" + ); + let negative_probe = "const node=App(props);return JSON.stringify({trace,reads,css:node.props.css,className:node.props.className});"; + let negative_authored = observe_spread(&spread_script(&negative), setup, negative_probe); + for single_css in [false, true] { + let output = extract_spread(&negative, single_css); + assert!( + output.styles.is_empty(), + "unknown React component is not a css owner" + ); + assert_eq!( + observe_spread(&spread_script(&output.code), setup, negative_probe), + negative_authored + ); + } + for (id, props, setup) in cases { + let source = format!( + "{PREFIX}function App(props){{return _jsx((trace.push('type'),Custom),{props},(trace.push('key'),'key'));}}" + ); + let probe = "let result;try{const node=App(props);result={trace,reads,className:node.props.className||'',id:node.props.id||null,title:node.props.title||null,key:node.key};}catch(error){result={trace,reads,poison:error===poison};}return JSON.stringify(result);"; + let authored = observe_spread(&spread_script(&source), setup, probe); + if id == "getter-throw" { + assert_eq!( + authored, + serde_json::json!({"trace":["type","id","throw"],"reads":1,"poison":true}) + ); + } + for single_css in [false, true] { + let output = extract_spread(&source, single_css); + assert_eq!(static_styles(&output), vec![("color".into(), "red".into())]); + let mut actual = observe_spread(&spread_script(&output.code), setup, probe); + if let Some(class_name) = actual.get_mut("className") { + let text = class_name + .as_str() + .unwrap_or_else(|| panic!("className must be text")); + let suffix = output + .styles + .iter() + .find_map(|style| { + match style.extract( + css_bucket( + "factory.tsx", + &ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .as_deref(), + ) { + Some(StyleProperty::ClassName(name)) => Some(name), + _ => None, + } + }) + .unwrap_or_else(|| panic!("missing emitted red class")); + assert!( + text == suffix || text.ends_with(&format!(" {suffix}")), + "{id}: {text}" + ); + *class_name = serde_json::Value::String( + text.strip_suffix(&format!(" {suffix}")) + .unwrap_or("") + .to_string(), + ); + } + assert_eq!(actual, authored, "{id}/{single_css}: {}", output.code); + } + } +} + +#[test] +#[serial_test::serial] +fn saved_eight_factory_calls_keep_spread_value_and_direct_identity() { + let _debug = RestoreDebug(css::debug::is_debug()); + css::debug::set_debug(false); + let source = SAVED_FIXTURE; + let setup = "const props={get className(){trace.push('class:'+ ++reads);return reads===1?'external-first':'external-second';}};"; + let probe = "const nodes=App(props);return JSON.stringify({calls:nodes.length,reads,trace,first:nodes[3].props.className.split(' ')[0],identity:nodes[6].props===props});"; + let authored = observe_spread(&spread_script(source), setup, probe); + assert_eq!( + authored, + serde_json::json!({"calls":8,"reads":1,"trace":["class:1"],"first":"external-first","identity":true}) + ); + for single_css in [false, true] { + reset_class_map(); + reset_file_map(); + let output = extract( + "test.ts", + source, + ExtractOption { + package: "@devup-ui/react".into(), + css_dir: "@devup-ui/react".into(), + single_css, + import_main_css: false, + import_aliases: HashMap::from([ + ("@emotion/react".into(), ImportAlias::NamedToNamed), + ( + "@emotion/styled".into(), + ImportAlias::DefaultToNamed("styled".into()), + ), + ]), + }, + ) + .unwrap_or_else(|error| panic!("saved original context: {error}")); + let actual = observe_spread(&spread_script(&output.code), setup, probe); + assert_eq!( + actual, authored, + "saved factory row/{single_css}: {}", + output.code + ); + println!( + "LANE756_FACTORY_SAVED {}", + serde_json::json!({"singleCss":single_css,"source":source,"output":output.code,"authored":authored,"actual":actual,"mockComponentsNotExecuted":true}) + ); + } +} + +#[test] +#[serial_test::serial] +fn factory_css_unknown_trailing_spread_keeps_original_error_location() { + let source = format!( + "{PREFIX}\nfunction App(props){{return _jsx(Custom,{{css:{{color:'red'}},...props}});}}" + ); + let offset = source + .find("...props") + .unwrap_or_else(|| panic!("authored spread")); + let column = source[..offset] + .rsplit('\n') + .next() + .unwrap_or_default() + .len() + + 1; + for single_css in [false, true] { + let actual = compile_with( + &source, + ExtractOption { + single_css, + import_aliases: HashMap::from([ + ("@emotion/react".into(), ImportAlias::NamedToNamed), + ( + "@emotion/react/jsx-runtime".into(), + ImportAlias::NamedToNamed, + ), + ]), + ..ExtractOption::default() + }, + ) + .err() + .unwrap_or_else(|| panic!("unknown css owner must fail")); + assert_eq!( + actual, + format!( + "a.tsx:2:{column}: `css` on `` cannot use `...props` at build time: a spread after the `css` prop may carry a `css` of its own, which replaces it whole where only the runtime could tell: write the spread before `css`" + ) + ); + } +} + +const SAVED_FIXTURE: &str = "import styled from '@emotion/styled';\nimport { Box } from '@devup-ui/react';\nimport { jsx as _jsx } from '@emotion/react/jsx-runtime';\nconst Button = styled.button({ color: 'blue' });\nexport const App = (props) => [_jsx(Custom, { className: 'x', css: { color: 'red' } }), _jsx(Box, { p: 1, css: { padding: 4 } }), _jsx(Button, { css: { color: 'red' } }), _jsx(Button, { ...props, css: { margin: 1 } }), _jsx(Button, { as: 'a', css: { margin: 2 } }), _jsx(Button, { [k]: 1, css: { padding: 3 } }), _jsx('div', props), _jsx('div', { ['css']: { color: 'red' }, id: 'x' })];"; diff --git a/libs/extractor/src/jsx_semantics_tests/forwarded.rs b/libs/extractor/src/jsx_semantics_tests/forwarded.rs new file mode 100644 index 000000000..ef65fc767 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/forwarded.rs @@ -0,0 +1,78 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case( + r#""#, + "spread", + 2 +)] +#[case( + r#""#, + "direct", + 1 +)] +#[case( + r#""#, + "spread", + 2 +)] +#[case( + r#""#, + "last", + 2 +)] +#[case( + r#""#, + "spread", + 2 +)] +#[case(r"", "last", 3)] +#[serial] +fn forwarded_props_when_later_values_overwrite_them_match_original_props( + #[case] element: &str, + #[case] class: &str, + #[case] opacity: u8, +) { + let actual = evaluate( + &format!("{BOX}export const a=(rest,more)=>{element};"), + r"a({'className':'spread','style':{'opacity':2}},{'className':'last','style':{'opacity':3}})", + ); + assert_eq!(actual.element["props"]["className"], class); + assert_eq!(actual.element["props"]["style"]["opacity"], opacity); +} + +#[test] +#[serial] +fn shadowed_object_when_multiple_spreads_select_props_does_not_replace_the_intrinsic() { + let actual = evaluate( + &format!( + "{BOX}export const a=(Object,first,last)=>;" + ), + r"(()=>{const e=a(null,{'className':'first','style':{'opacity':2}},{'className':undefined,'style':undefined});return {className:e.props.className,styleUndefined:e.props.style===undefined};})()", + ); + assert!( + actual.element["className"] + .as_str() + .is_some_and(|class| !class.contains("first") && !class.contains("direct")) + ); + assert_eq!(actual.element["styleUndefined"], true); +} + +#[test] +#[serial] +fn ordinary_attributes_when_styles_are_lowered_keep_source_order() { + let source = format!( + "{BOX}export const a=(take)=>{{take('child')}};" + ); + let actual = evaluate( + &source, + r"a(key=>{trace.push(key);return key==='style'?{'opacity':0.5}:key;})", + ); + assert_eq!( + actual.trace, + serde_json::json!(["id", "color", "class", "style", "title", "child"]) + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests/gate_edges.rs b/libs/extractor/src/jsx_semantics_tests/gate_edges.rs new file mode 100644 index 000000000..9db05462b --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/gate_edges.rs @@ -0,0 +1,216 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case("")] +#[case("createElement(Box,{...{color:first()},color:'blue'})")] +#[serial] +fn overwritten_known_spreads_when_compiled_still_evaluate_written_values(#[case] element: &str) { + let source = + format!("{BOX}import {{createElement}} from 'react';export const a=(first)=>{element};"); + let actual = evaluate(&source, "a(()=>{trace.push('first');return 'red';})"); + assert_eq!(actual.trace, serde_json::json!(["first"])); +} + +#[test] +#[serial] +fn known_spreads_when_style_keys_precede_dom_keys_keep_their_order() { + let source = + format!("{BOX}export const a=(take)=>;"); + let actual = evaluate(&source, "a(key=>{trace.push(key);return key;})"); + assert_eq!(actual.trace, serde_json::json!(["color", "id"])); +} + +#[test] +#[serial] +fn nested_copy_when_a_later_prop_changes_the_source_keeps_the_original_value() { + let source = format!( + "{BOX}export const a=(rest,later)=>;" + ); + let actual = evaluate( + &source, + "(()=>{let color='red';return a({get color(){trace.push('get');return color;}},()=>{trace.push('later');color='blue';return 'id';});})()", + ); + assert_eq!(actual.trace, serde_json::json!(["get", "later"])); + assert!( + actual.element["props"]["style"] + .as_object() + .is_some_and(|style| style.values().any(|value| value == "red")), + "{}", + actual.element + ); +} + +#[test] +#[serial] +fn literal_selector_when_opaque_is_forwarded_without_extraction() { + let source = format!( + "{BOX}export const a=(rest,key)=>;" + ); + assert_eq!( + whole::evaluate(&source, "a({},'title').props._hover.color").element, + "red" + ); + assert_eq!(output(&source).styles.len(), 0); +} + +#[test] +#[serial] +fn computed_selection_when_a_key_object_coerces_runs_the_coercion_once() { + let source = format!( + "{BOX}export const a=(key,first,second)=>;" + ); + let actual = evaluate( + &source, + "a({toString(){trace.push('key');return 'a';}},'red','blue')", + ); + assert_eq!(actual.trace, serde_json::json!(["key"])); +} + +#[test] +#[serial] +fn template_interpolations_when_later_props_execute_keep_coercion_order() { + let source = format!( + "{BOX}export const a=(value,later)=>;" + ); + // Boa 0.22 evaluates all interpolations before converting them to strings. + // Run this ordering check in Node, which converts each interpolation eagerly. + let script = format!( + "const trace=[];const h=(type,props)=>props;{}\na({{toString(){{trace.push('coerce');return 'external';}}}},()=>{{trace.push('later');return 'other';}});process.stdout.write(JSON.stringify(trace));", + whole::plain_script(&code(&source)), + ); + let actual = std::process::Command::new("node") + .args(["-e", &script]) + .output() + .unwrap_or_else(|error| { + panic!("Node is required for template coercion order checks: {error}") + }); + assert!( + actual.status.success(), + "{}", + String::from_utf8_lossy(&actual.stderr) + ); + assert_eq!(actual.stdout, br#"["coerce","later"]"#); +} + +#[rstest] +#[case("2 || load()", "padding", "8px")] +#[case("'$primary' ?? load()", "padding", "$primary")] +#[serial] +fn exact_logical_left_when_right_is_dynamic_keeps_its_static_style( + #[case] value: &str, + #[case] property: &str, + #[case] expected: &str, +) { + let actual = output(&format!( + "{BOX}export const a=(load)=>;" + )); + assert!( + static_styles(&actual).contains(&(property.to_string(), expected.to_string())), + "{}", + actual.code + ); +} + +#[rstest] +#[case("`${color}` + ' !important'", true)] +#[case("`${color}` + ';'", false)] +#[serial] +fn binary_css_suffix_when_captured_is_not_left_in_the_variable( + #[case] value: &str, + #[case] important: bool, +) { + let source = format!("{BOX}export const a=(color)=>;"); + let actual = output(&source); + let runtime = evaluate(&source, "a('red')"); + assert!( + runtime.element["props"]["style"] + .as_object() + .is_some_and(|style| style.values().all(|value| value == "red")), + "{}", + runtime.element + ); + assert!(actual.styles.iter().any(|style|matches!(style,ExtractStyleValue::Dynamic(style) if style.important()==important)),"{}",actual.code); +} + +#[rstest] +#[case( + "async function a(active,load,rest){return ;}", + "await load()" +)] +#[case( + "function* a(active,load,rest){return ;}", + "yield load()" +)] +#[serial] +fn lazy_suspending_props_when_a_sync_wrapper_cannot_move_them_are_located( + #[case] declaration: &str, + #[case] written: &str, +) { + let message = error(&format!("{BOX}export {declaration}")); + assert!( + message.starts_with("a.tsx:2:") + && message.contains(written) + && !message.contains("__devup"), + "{message}" + ); +} + +#[test] +#[serial] +fn nested_iterator_when_later_props_execute_is_expanded_at_its_original_position() { + let source = format!( + "{BOX}export const a=(items,later)=>;" + ); + let actual = evaluate( + &source, + "a({[Symbol.iterator](){trace.push('iterator');return ['red'][Symbol.iterator]();}},()=>{trace.push('later');return 'id';})", + ); + assert_eq!(actual.trace, serde_json::json!(["iterator", "later"])); +} + +#[test] +#[serial] +fn missing_native_choice_when_classes_are_combined_emits_no_undefined_class() { + let source = + format!("{BOX}export const a=(key)=>;"); + let actual = evaluate(&source, "a('missing')"); + assert!( + actual.element["props"]["className"] + .as_str() + .is_some_and(|class| !class.contains("undefined")), + "{}", + actual.element + ); +} + +#[rstest] +#[case("@media")] +#[case("@supports")] +#[serial] +fn hidden_at_rule_when_opaque_is_forwarded_without_extraction(#[case] rule: &str) { + let source = format!( + "{BOX}export const a=(rest,key)=>;" + ); + assert_eq!( + whole::evaluate( + &source, + &format!("a({{}},'title').props['{rule}']['(min-width:500px)'].color") + ) + .element, + "red" + ); + assert_eq!(output(&source).styles.len(), 0); +} + +#[test] +#[serial] +fn object_valued_conditional_template_when_selected_coerces_before_later_interpolations() { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=(active,later)=>jsx(Box,{{className:`${{active ? {{toString(){{trace.push('coerce');return 'external';}}}} : 'fallback'}} ${{later()}}`}});" + ); + let actual = evaluate(&source, "a(true,()=>{trace.push('later');return 'other';})"); + assert_eq!(actual.trace, serde_json::json!(["coerce", "later"])); +} diff --git a/libs/extractor/src/jsx_semantics_tests/ordered.rs b/libs/extractor/src/jsx_semantics_tests/ordered.rs new file mode 100644 index 000000000..51b93c772 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/ordered.rs @@ -0,0 +1,144 @@ +use super::whole::evaluate; +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case("")] +#[case("jsx(Box, {color:first(), ...read()})")] +#[case("createElement(Box, {color:first(), ...read()})")] +#[case("")] +#[serial] +fn explicit_effects_when_overwritten_still_run_before_spreads(#[case] element: &str) { + let source = format!( + "{BOX}{JSX_RUNTIME}import {{createElement}} from 'react'; export const a = (first, read) => {element};" + ); + let actual = evaluate( + &source, + "a(() => {trace.push('first'); return 'red';}, () => {trace.push('spread'); return {color:'blue'};})", + ); + assert_eq!(actual.trace, serde_json::json!(["first", "spread"])); + assert_eq!(actual.element["props"]["color"], "blue"); +} + +#[rstest] +#[case("")] +#[case("jsx(Box, {color:'red', bg:'gray', ...rest})")] +#[case("createElement(Box, {color:'red', bg:'gray', ...rest})")] +#[serial] +fn getters_when_props_are_forwarded_and_selected_run_once(#[case] element: &str) { + let source = format!( + "{BOX}{JSX_RUNTIME}import {{createElement}} from 'react'; export const a = (rest) => {element};" + ); + let actual = evaluate( + &source, + "a({get color(){trace.push('color');return 'blue';},get className(){trace.push('class');return 'user';},get style(){trace.push('style');return {opacity:0.5};}})", + ); + assert_eq!(actual.trace, serde_json::json!(["color", "class", "style"])); + assert_eq!(actual.element["props"]["style"]["opacity"], 0.5); +} + +#[rstest] +#[case("")] +#[case("jsx(Box, {color:x, id:change()})")] +#[case("createElement(Box, {color:x, id:change()})")] +#[serial] +fn earlier_identifier_when_later_props_mutate_it_keeps_its_value(#[case] element: &str) { + let source = format!( + "{BOX}{JSX_RUNTIME}import {{createElement}} from 'react'; export function a() {{let x='red';function change(){{x='blue';return 'id';}} return {element};}}" + ); + let actual = evaluate(&source, "a()"); + let style = actual.element["props"]["style"] + .as_object() + .unwrap_or_else(|| panic!("{}", actual.element)); + assert!( + style.values().any(|value| value == "red"), + "{}", + actual.element + ); +} + +#[test] +#[serial] +fn mixed_branches_when_captured_stay_lazy_and_keep_static_spacing() { + let source = format!( + "{BOX}export const a=(active, value, rest) => ;" + ); + let actual = evaluate( + &source, + "a(true,()=>{trace.push('inactive');return '9px';},{get id(){trace.push('spread');return 'id';}})", + ); + assert_eq!(actual.trace, serde_json::json!(["spread"])); + assert!(static_styles(&output(&source)).contains(&("padding".into(), "8px".into()))); +} + +#[test] +#[serial] +fn a_throwing_spread_when_props_precede_it_keeps_the_original_trace() { + let source = format!( + "{BOX}export const a=() => ;" + ); + let actual = evaluate( + &source, + "(()=>{try{return a();}catch(error){return error;}})()", + ); + assert_eq!(actual.element, "boom"); + assert_eq!(actual.trace, serde_json::json!(["id", "getter"])); +} + +#[test] +#[serial] +fn receiver_lookup_when_props_are_captured_precedes_props_and_children() { + let source = format!( + "{BOX}import React from 'react'; export const a=()=>React.createElement(Box,{{color:(trace.push('color'),'red'),...{{get id(){{trace.push('spread');return 'id';}}}}}},(trace.push('child'),'child'));" + ); + let actual = evaluate( + &source, + "(()=>{Object.defineProperty(React,'createElement',{get(){trace.push('callee');return h;}});return a();})()", + ); + assert_eq!( + actual.trace, + serde_json::json!(["callee", "color", "spread", "child"]) + ); +} + +#[rstest] +#[case("")] +#[case("jsx(Box,{p:choose() ? 2 : value(),bg:last()})")] +#[case("createElement(Box,{p:choose() ? 2 : value(),bg:last()})")] +#[serial] +fn conditions_when_classes_and_variables_read_them_run_once(#[case] element: &str) { + let source = format!( + "{BOX}{JSX_RUNTIME}import {{createElement}} from 'react';export const a=(choose,value,last)=>{element};" + ); + let actual = evaluate( + &source, + "a(()=>{trace.push('test');return false;},()=>{trace.push('branch');return '9px';},()=>{trace.push('last');return 'red';})", + ); + assert_eq!(actual.trace, serde_json::json!(["test", "branch", "last"])); +} + +#[rstest] +#[case(false)] +#[case(true)] +#[serial] +fn logical_branches_when_captured_keep_short_circuit_evaluation(#[case] active: bool) { + let source = format!( + "{BOX}export const a=(active,load,rest)=>;" + ); + let actual = evaluate( + &source, + &format!( + "a({active},()=>{{trace.push('branch');return '9px';}},{{get id(){{trace.push('spread');return 'id';}}}})" + ), + ); + assert_eq!( + actual.trace, + if active { + serde_json::json!(["branch", "spread"]) + } else { + serde_json::json!(["spread"]) + } + ); + assert!(static_styles(&output(&source)).contains(&("padding".into(), "8px".into()))); +} diff --git a/libs/extractor/src/jsx_semantics_tests/pass_through.rs b/libs/extractor/src/jsx_semantics_tests/pass_through.rs new file mode 100644 index 000000000..3bd7a4617 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/pass_through.rs @@ -0,0 +1,221 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[rstest] +#[case("")] +#[case("")] +#[case("jsx(Box,{color:'red',...rest})")] +#[case("jsx(Box,{...rest,color:'red'})")] +#[case("createElement(Box,{color:'red',...rest})")] +#[case("createElement(Box,{...rest,color:'red'})")] +#[serial] +fn authored_styles_when_unknown_keys_collide_keep_raw_props(#[case] element: &str) { + let control = output(&format!("{BOX}export const a=()=> ;")); + let source = format!( + "{BOX}{JSX_RUNTIME}import {{createElement}} from 'react';export const a=(rest)=>{element};" + ); + for input in [ + "undefined", + "null", + "false", + "true", + "NaN", + "Infinity", + "-Infinity", + "''", + "0", + "-0", + "2", + "'2'", + "'.5'", + "'1.e2'", + "'0x10'", + "'4\\n'", + "({toString(){throw 'coerced';}})", + "Symbol('raw')", + "1n", + "(()=>1)", + ] { + let actual = whole::evaluate( + &source, + &format!( + "(()=>{{const raw={input};const e=a({{color:raw}});return [e.type,Object.hasOwn(e.props,'color'),Object.is(e.props.color,raw),Object.keys(e.props.style||{{}}),e.props.className];}})()" + ), + ); + assert_eq!(actual.element[0], "div"); + assert_eq!(actual.element[1], true); + assert_eq!(actual.element[2], true); + assert_eq!(actual.element[3], serde_json::json!([])); + assert_eq!( + actual.element[4] + .as_str() + .unwrap_or_else(|| panic!("expected an authored class name")) + .trim(), + "color-0-red--255-a", + "{element}/{input}" + ); + assert_eq!(static_styles(&output(&source)), static_styles(&control)); + assert_eq!(output(&source).styles.len(), control.styles.len()); + } +} + +#[rstest] +#[case("")] +#[case("")] +#[case("")] +#[case("")] +#[case("jsx(Box,{color:'red',...{color:'blue',...rest}})")] +#[case("jsx(Box,{color:'red',[key]:'blue'})")] +#[serial] +fn opaque_objects_when_named_keys_are_visible_stay_whole(#[case] element: &str) { + let source = format!("{BOX}{JSX_RUNTIME}export const a=(rest,key)=>{element};"); + let actual = whole::evaluate(&source, "a({},'title')"); + if element.contains("[key]:'blue'") { + assert_eq!(actual.element["props"]["title"], "blue"); + } else { + assert_eq!(actual.element["props"]["color"], "blue"); + } + assert_eq!( + actual.element["props"]["className"] + .as_str() + .unwrap_or_else(|| panic!("expected an authored class name")) + .trim(), + "color-0-red--255-a" + ); + assert_eq!( + static_styles(&output(&source)), + vec![("color".into(), "red".into())] + ); +} + +#[rstest] +#[case("")] +#[case("")] +#[case("jsx(Box,{_hover:{color:'red'},...rest})")] +#[serial] +fn selectors_when_unknown_spreads_follow_compile_independently(#[case] element: &str) { + let source = format!("{BOX}{JSX_RUNTIME}export const a=(rest)=>{element};"); + let actual = whole::evaluate( + &source, + "(()=>{const raw={color:'blue'};const e=a({_hover:raw});return [e.props._hover===raw,e.props.className];})()", + ); + assert_eq!(actual.element[0], true); + assert_eq!( + actual.element[1] + .as_str() + .unwrap_or_else(|| panic!("expected a selector class name")) + .trim(), + "color-0-red-_a__c_hover-255-a" + ); +} + +#[rstest] +#[case("jsx", "react/jsx-runtime")] +#[case("jsxs", "react/jsx-runtime")] +#[case("jsxDEV", "react/jsx-dev-runtime")] +#[serial] +fn wrapped_factory_props_when_no_unknown_spread_exists_attach_authored_styles( + #[case] factory: &str, + #[case] module: &str, +) { + for wrapper in [ + "BODY", + "(BODY)", + "((BODY))", + "(BODY as const)", + "(BODY satisfies object)", + ] { + let props = wrapper.replace("BODY", "{color:first()}"); + let source = format!( + "{BOX}import {{{factory} as jsx}} from '{module}';export const a=(first)=>jsx(Box,{props});" + ); + let actual = whole::evaluate( + &source, + "(()=>{const e=a(()=>{trace.push('first');return 'red';});return [e.type,(e.props.className||'').length>0,Object.values(e.props.style||{})];})()", + ); + assert_eq!(actual.trace, serde_json::json!(["first"])); + assert_eq!( + actual.element, + serde_json::json!(["div", true, ["red"]]), + "{factory}/{wrapper}" + ); + } +} + +#[test] +#[serial] +fn distinct_esm_and_commonjs_dynamic_bindings_when_captured_match_runtime_metadata() { + // Given: the snapshot fixture's two DYNAMIC exports deliberately have different runtime sentinels. + let source = "import {Box} from '@devup-ui/react';import {DYNAMIC,PRIMARY} from './tokens';import {DYNAMIC as CJS_DYNAMIC} from './cjs-tokens';export const a=state=>;export const shadowed=PRIMARY=>;"; + let resolver = |specifier: &str, _: &str| match specifier { + "./tokens" => Some(ResolvedModule { + path: "/src/tokens.ts".into(), + code: "export const DYNAMIC=readEsm();export const PRIMARY='global';".into(), + }), + "./cjs-tokens" => Some(ResolvedModule { + path: "/src/cjs-tokens.js".into(), + code: "exports.DYNAMIC=readCjs();".into(), + }), + _ => None, + }; + reset_class_map(); + reset_file_map(); + let output = extract_with_modules( + "/src/App.tsx", + source, + ExtractOption { + single_css: true, + import_main_css: false, + ..ExtractOption::default() + }, + false, + &resolver, + ) + .unwrap_or_else(|error| panic!("distinct import extraction: {error}")); + let mut metadata: Vec<_> = output + .styles + .iter() + .filter_map(|style| { + let ExtractStyleValue::Dynamic(value) = style else { + return None; + }; + match style.extract(None) { + Some(StyleProperty::Variable { + class_name, + variable_name, + .. + }) => Some((value.property().to_string(), class_name, variable_name)), + _ => panic!("dynamic declaration must expose its variable"), + } + }) + .collect(); + metadata.sort(); + assert_eq!(metadata.len(), 3); + let metadata = + serde_json::to_string(&metadata).unwrap_or_else(|error| panic!("metadata: {error}")); + let compiled = format!( + "const DYNAMIC='esm-sentinel';const CJS_DYNAMIC='cjs-sentinel';{}", + output.code + ); + // When: executable output reads both getters once and uses metadata to select the real variables. + let result = whole::execute( + &compiled, + &format!( + "(()=>{{const raw={{p:{{sentinel:true}}}};const e=a({{get esm(){{trace.push('esm');return 1;}},get cjs(){{trace.push('cjs');return 2;}},raw}});const local=shadowed('local-sentinel');return [{metadata}.map(([property,name,variable])=>[property,((property==='color'?local:e).props.className||'').split(/\\s+/).includes(name),(property==='color'?local:e).props.style[variable]]),e.props.p===raw.p];}})()" + ), + ); + // Then: neither code nor metadata aliases CJS to ESM, and PRIMARY remains the parameter. + assert_eq!( + result.element, + serde_json::json!([ + [ + ["accent-color", true, "esm-sentinel"], + ["color", true, "local-sentinel"], + ["lighting-color", true, "cjs-sentinel"] + ], + true + ]) + ); + assert_eq!(result.trace, serde_json::json!(["esm", "cjs"])); +} diff --git a/libs/extractor/src/jsx_semantics_tests/pass_through_edges.rs b/libs/extractor/src/jsx_semantics_tests/pass_through_edges.rs new file mode 100644 index 000000000..e4be0df64 --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/pass_through_edges.rs @@ -0,0 +1,96 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; + +#[test] +#[serial] +fn computed_proto_when_local_const_is_only_copied_keeps_known_d1() { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=()=>{{const first={{['__proto__']:null,p:'20px'}};return jsx(Box,{{p:'4px',...first}});}};" + ); + let compiled = output(&source); + assert_eq!( + static_styles(&compiled), + vec![("padding".into(), "20px".into())] + ); +} + +#[test] +#[serial] +fn computed_proto_when_known_in_jsx_keeps_the_literal_selector_diagnostic() { + let direct = + format!("{BOX}export const a=()=> ;"); + let copied = format!( + "{BOX}export const a=()=>{{const first={{['__proto__']:null,p:'20px'}};return ;}};" + ); + for source in [direct, copied] { + let message = error(&source); + assert!(message.contains("cannot use `__proto__`"), "{message}"); + assert!(message.contains(crate::utils::SELECTOR_NAME), "{message}"); + } +} + +#[rstest] +#[case("jsx(Box,{color:()=>1,color:'red'})")] +#[case("jsx(Box,{...{color:()=>1},color:'red'})")] +#[case("jsx(Box,{color:(trace.push('discarded'),()=>1),color:'red'})")] +#[serial] +fn shadowed_factory_values_when_unreadable_keep_the_last_known_style(#[case] element: &str) { + let source = format!("{BOX}{JSX_RUNTIME}export const a=()=>{element};"); + let compiled = output(&source); + assert_eq!( + static_styles(&compiled), + vec![("color".into(), "red".into())] + ); + let actual = whole::execute(&compiled.code, "a()"); + let expected = if element.contains("trace.push") { + serde_json::json!(["discarded"]) + } else { + serde_json::json!([]) + }; + assert_eq!(actual.trace, expected); +} + +#[test] +#[serial] +fn computed_proto_when_copied_into_ordinary_objects_stays_an_own_key() { + let source = format!( + "{BOX}export const a=()=>{{const first={{['__proto__']:null,p:'20px'}};const copy={{...first}};return ;}};" + ); + assert_eq!(whole::evaluate(&source, "a().props.title").element, true); +} + +#[rstest] +#[case("
")] +#[case("jsx('div',{css:{color:'red'},...{...{title:'x'}}})")] +#[case("
")] +#[case("jsx('div',{css:{color:'red'},...rest})")] +#[serial] +fn native_emotion_when_spreads_are_not_flat_keeps_its_existing_refusal(#[case] element: &str) { + let source = format!("{EMOTION}{JSX_RUNTIME}export const a=(rest)=>{element};"); + let message = compile_emotion(&source) + .err() + .unwrap_or_else(|| panic!("native admission must stay unchanged")); + assert!(message.contains("a.tsx:3:"), "{message}"); + assert!( + message.contains("a spread after the `css` prop"), + "{message}" + ); +} + +#[rstest] +#[case("
")] +#[case("jsx('div',{css:{color:'red'},...{title:'x'}})")] +#[serial] +fn native_emotion_when_spreads_are_flat_keeps_its_known_style(#[case] element: &str) { + let source = format!("{EMOTION}{JSX_RUNTIME}export const a=()=>{element};"); + let compiled = compile_emotion(&source).unwrap_or_else(|error| panic!("{error}")); + assert_eq!( + static_styles(&compiled), + vec![("color".into(), "red".into())] + ); + assert_eq!( + whole::execute(&compiled.code, "a().props.title").element, + "x" + ); +} diff --git a/libs/extractor/src/jsx_semantics_tests/pass_through_known.rs b/libs/extractor/src/jsx_semantics_tests/pass_through_known.rs new file mode 100644 index 000000000..eed8c047a --- /dev/null +++ b/libs/extractor/src/jsx_semantics_tests/pass_through_known.rs @@ -0,0 +1,1023 @@ +use super::*; +use rstest::rstest; +use serial_test::serial; + +fn compile_imported_spread( + source: &str, + known: &'static str, + single_css: bool, +) -> Result { + let resolver = move |specifier: &str, _: &str| { + (specifier == "./known").then(|| ResolvedModule { + path: "known.ts".into(), + code: known.into(), + }) + }; + reset_class_map(); + reset_file_map(); + extract_with_modules( + "case.tsx", + source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + true, + &resolver, + ) + .map_err(|error| error.to_string()) +} + +#[rstest] +#[case("cond ? knownImport : rest")] +#[case("cond ? rest : knownImport")] +#[serial] +fn imported_rule_and_runtime_conditional_arms_refuse_at_the_authored_read( + #[case] branch: &str, + #[values(false, true)] single_css: bool, +) { + // The independent real-WASM agreement fixture must keep the constants owner's rule admission. + let prefix = "import { Box, type DevupProps } from '@devup-ui/react'; import { styles as knownImport } from './known';\n"; + let body = format!( + "export function render(cond: boolean, rest: DevupProps) {{ return }}" + ); + let source = format!("{prefix}{body}"); + let error = + match compile_imported_spread(&source, "export const styles = { bg: 'red' }", single_css) { + Err(error) => error, + Ok(_) => panic!("a known rule arm must not turn into raw props"), + }; + let column = body.rfind("rest").unwrap_or_else(|| panic!("runtime arm")) + 1; + assert!( + error.starts_with(&format!("case.tsx:2:{column}:")), + "{error}" + ); + assert!(error.contains("cannot use `rest`"), "{error}"); + assert_eq!(error.lines().count(), 1, "{error}"); +} + +#[rstest] +#[case::known_first("cond ? knownImport : rest", "known", "rest")] +#[case::runtime_first("cond ? rest : knownImport", "rest", "known")] +#[case::runtime_only("cond ? rest : other", "rest", "other")] +#[case::authored_literal(concat!("cond ? {", "p:1} : rest"), "literal", "rest")] +#[case::authored_literal_first_runtime(concat!("cond ? rest : {", "p:1}"), "rest", "literal")] +#[serial] +fn conditional_props_without_a_proven_rule_owner_keep_raw_values( + #[case] branch: &str, + #[case] consequent: &str, + #[case] alternate: &str, + #[values(false, true)] single_css: bool, +) { + let source = format!( + "{BOX}import {{styles as knownImport}} from './known';export const render=(cond,rest,other)=>;" + ); + let output = + compile_imported_spread(&source, "export const styles = { id: 'kept' }", single_css) + .unwrap_or_else(|error| panic!("{error}")); + assert!(output.styles.is_empty()); + // Select both arms; distinct objects expose accidental eager reads or wrong-arm reuse. + for (cond, selected) in [(true, consequent), (false, alternate)] { + let observed = whole::execute( + &output.code, + &format!( + "(()=>{{const first={{}};const second={{}};const firstCallback=()=>0;const secondCallback=()=>1;const make=(label,p,payload,callback)=>({{get p(){{trace.push(label+':p');return p;}},get payload(){{trace.push(label+':payload');return payload;}},get onClick(){{trace.push(label+':onClick');return callback;}}}});const e=render({cond},make('rest',7,first,firstCallback),make('other',9,second,secondCallback));return [e.props.p??null,e.props.id??null,e.props.payload===first,e.props.payload===second,e.props.onClick===firstCallback,e.props.onClick===secondCallback];}})()" + ), + ); + let expected = match selected { + "rest" => serde_json::json!([7, null, true, false, true, false]), + "other" => serde_json::json!([9, null, false, true, false, true]), + "known" => serde_json::json!([null, "kept", false, false, false, false]), + "literal" => serde_json::json!([1, null, false, false, false, false]), + _ => panic!("unknown selected arm"), + }; + assert_eq!(observed.element, expected, "{branch}/{cond}"); + let trace = if matches!(selected, "rest" | "other") { + serde_json::json!([ + format!("{selected}:p"), + format!("{selected}:payload"), + format!("{selected}:onClick") + ]) + } else { + serde_json::json!([]) + }; + assert_eq!(observed.trace, trace, "{branch}/{cond}"); + } +} + +#[rstest] +#[case("")] +#[case("jsx(Box,{px:1,...rest,pl:2,...{...{bg:'red'},background:'blue'}})")] +#[serial] +fn known_composition_when_nested_keeps_aliases_and_partial_targets(#[case] element: &str) { + let source = format!("{BOX}{JSX_RUNTIME}export const a=(rest)=>{element};"); + let actual = whole::evaluate(&source, "a({px:9,bg:'green',id:'kept'})"); + assert_eq!(actual.element["props"]["px"], 9); + assert_eq!(actual.element["props"]["bg"], "green"); + assert_eq!(actual.element["props"]["id"], "kept"); + assert_eq!( + static_styles(&output(&source)), + vec![ + ("background".into(), "blue".into()), + ("padding-left".into(), "8px".into()), + ("padding-right".into(), "4px".into()) + ] + ); +} + +#[rstest] +#[case("")] +#[case("jsx(Box,{color:first(),...{color:second(),...{color:'blue'}},...read()})")] +#[serial] +fn known_duplicates_when_discarded_keep_original_effects(#[case] element: &str) { + let source = format!("{BOX}{JSX_RUNTIME}export const a=(first,second,read)=>{element};"); + let actual = whole::evaluate( + &source, + "a(()=>{trace.push('first');return 'red';},()=>{trace.push('second');return 'green';},()=>{trace.push('spread');return {color:'raw'};})", + ); + assert_eq!( + actual.trace, + serde_json::json!(["first", "second", "spread"]) + ); + assert_eq!(actual.element["props"]["color"], "raw"); + assert_eq!( + static_styles(&output(&source)), + vec![("color".into(), "blue".into())] + ); +} + +#[rstest] +#[case("")] +#[case("jsx(Box,{typography:'body',positioning:'top',...rest})")] +#[serial] +fn explicit_shapes_when_spreads_follow_keep_ordinary_rules(#[case] element: &str) { + let source = format!("{BOX}{JSX_RUNTIME}export const a=(rest)=>{element};"); + let actual = whole::evaluate(&source, "a({typography:'raw',positioning:'raw'})"); + assert_eq!(actual.element["props"]["typography"], "raw"); + assert_eq!( + static_styles(&output(&source)), + vec![("top".into(), "0".into())] + ); + assert!(output(&source).code.contains("typo-body")); +} + +#[rstest] +#[case("")] +#[case("jsx(Box,{css:{color:'red'},...rest})")] +#[serial] +fn devup_css_when_unknown_data_follows_compiles_without_replacement(#[case] element: &str) { + let source = format!("{EMOTION}{BOX}{JSX_RUNTIME}export const a=(rest)=>{element};"); + let compiled = compile_emotion(&source).unwrap_or_else(|error| panic!("{error}")); + assert_eq!( + static_styles(&compiled), + vec![("color".into(), "red".into())] + ); + assert!(compiled.code.contains("...")); + let actual = whole::execute( + &compiled.code, + "(()=>{const raw={color:'blue'};const e=a({css:raw});return [e.props.css===raw,e.props.className];})()", + ); + assert_eq!(actual.element[0], true); + assert!( + actual.element[1] + .as_str() + .unwrap_or_else(|| panic!("expected an authored class name")) + .contains("red") + ); +} + +#[rstest] +#[case("")] +#[case("jsx(Box,{p:'4px',...first,...rest})")] +#[serial] +fn local_known_objects_when_only_copied_compose_without_runtime_evaluation(#[case] element: &str) { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=(rest)=>{{const first={{p:'20px'}};return {element};}};" + ); + assert_eq!( + static_styles(&output(&source)), + vec![("padding".into(), "20px".into())] + ); + assert_eq!( + whole::evaluate(&source, "a({p:'raw'}).props.p").element, + "raw" + ); +} + +#[rstest] +#[case("first.p='mutated';")] +#[case("const alias=first;alias.p='mutated';")] +#[serial] +fn local_objects_when_mutated_or_aliased_remain_opaque(#[case] mutation: &str) { + let source = format!( + "{BOX}export const a=()=>{{const first={{p:'20px'}};{mutation}return ;}};" + ); + assert_eq!( + static_styles(&output(&source)), + vec![("padding".into(), "4px".into())] + ); + assert_eq!(whole::evaluate(&source, "a().props.p").element, "mutated"); +} + +#[test] +#[serial] +fn raw_values_when_unit_policies_differ_keep_identity_without_coercion() { + let source = format!( + "{BOX}{JSX_RUNTIME}export const a=(rest)=>jsx(Box,{{p:1,animationDuration:1,opacity:0.3,'--custom':'authored',...rest}});" + ); + for input in [ + "undefined", + "null", + "false", + "true", + "NaN", + "Infinity", + "-Infinity", + "''", + "0", + "-0", + "Number.MIN_VALUE", + "Number.MAX_VALUE", + "'02'", + "1n", + "Symbol('s')", + "({[Symbol.toPrimitive](){throw 'coerced';}})", + "(()=>0)", + ] { + let actual = whole::evaluate( + &source, + &format!( + "(()=>{{const raw={input};const e=a({{p:raw,animationDuration:raw,opacity:raw,'--custom':raw}});return ['p','animationDuration','opacity','--custom'].every(key=>Object.hasOwn(e.props,key)&&Object.is(e.props[key],raw));}})()" + ), + ); + assert_eq!(actual.element, true, "{input}"); + } + assert_eq!( + static_styles(&output(&source)), + vec![ + ("--custom".into(), "authored".into()), + ("animation-duration".into(), "1ms".into()), + ("opacity".into(), ".3".into()), + ("padding".into(), "4px".into()) + ] + ); +} + +#[test] +#[serial] +fn iterators_when_local_objects_are_spread_keep_the_original_receiver() { + let source = format!( + "{BOX}export const a=()=>{{const first={{p:0}};return ;}};" + ); + let actual = whole::evaluate( + &source, + "(()=>{Object.prototype[Symbol.iterator]=function*(){this.p++;yield this.p;};return a().props.title;})()", + ); + assert_eq!(actual.element, "1,2"); +} + +#[test] +#[serial] +fn local_objects_when_ordinary_callbacks_capture_them_remain_raw() { + let source = format!( + "{BOX}export const a=()=>{{const first={{p:'20px'}};return {{first.p='mutated';}}}} data-object={{first}}/>;}};" + ); + assert_eq!( + static_styles(&output(&source)), + vec![("padding".into(), "4px".into())] + ); + assert_eq!( + whole::evaluate( + &source, + "(()=>{const e=a();const before=e.props.p;e.props.onClick();return [before,e.props.p,e.props['data-object'].p];})()" + ) + .element, + serde_json::json!(["20px", "20px", "mutated"]) + ); +} + +#[rstest] +#[case::conditional( + concat!( + "export const a=(on,rest)=>;", +), + "a(false,raw)", + 3 +)] +#[case::nested("export const a=(rest)=>;", "a(raw)", 1)] +#[case::shadow_undefined( + concat!( + "export const a=(on,undefined)=>;", +), + "a(false,raw)", + 3 +)] +#[case::shadow_nan( + concat!( + "export const a=(on,NaN)=>;", +), + "a(false,raw)", + 3 +)] +#[case::shadow_infinity( + concat!( + "export const a=(on,Infinity)=>;", +), + "a(false,raw)", + 3 +)] +#[serial] +fn opaque_local_props_preserve_original_copy_and_cutoff( + #[case] body: &str, + #[case] call: &str, + #[case] padding: i32, + #[values(false, true)] single_css: bool, +) { + let source = format!("{BOX}{body}"); + let output = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error:?}")); + assert!(output.styles.is_empty(), "{output:?}"); + if padding == 3 { + let active = whole::execute( + &output.code, + "(()=>{const raw={get p(){trace.push('unexpected');throw new Error('opaque arm ran');}};return a(true,raw).props.p;})()", + ); + assert_eq!(active.element, 1); + assert_eq!(active.trace, serde_json::json!([])); + } + for throwing in [false, true] { + let observed = whole::execute( + &output.code, + &format!( + r"(()=>{{ +const callback=()=>0;const token={{}};const style={{opacity:0.4}}; +const raw={{get p(){{trace.push('p');if({throwing})throw new Error('stop');return 3;}},get onClick(){{trace.push('callback');return callback;}},get className(){{trace.push('class');return 'raw';}},get style(){{trace.push('style');return style;}},get payload(){{trace.push('payload');return token;}}}}; +try{{const e={call};return ['ok',e.props.p,e.props.onClick===callback,e.props.className==='raw',e.props.style===style,e.props.payload===token];}}catch(error){{return [error.message];}} +}})()" + ), + ); + if throwing { + assert_eq!(observed.element, serde_json::json!(["stop"])); + assert_eq!(observed.trace, serde_json::json!(["p"])); + } else { + assert_eq!( + observed.element, + serde_json::json!(["ok", padding, true, true, true, true]) + ); + assert_eq!( + observed.trace, + serde_json::json!(["p", "callback", "class", "style", "payload"]) + ); + } + } +} + +#[rstest] +#[case::member( + concat!( + "export const a=(on,rest)=>;", +), + "rest.rules" +)] +#[case::call(concat!( + "export const a=(on,rest)=>;", +), "read()")] +#[case::module( + concat!( + "export const a=(on)=>;", +), + "unknownRules" +)] +#[case::selector("export const a=(rest)=>;", "rest")] +#[serial] +fn opaque_props_dispatch_preserves_explicit_style_refusals( + #[case] body: &str, + #[case] leaf: &str, + #[values(false, true)] single_css: bool, +) { + let source = format!("{BOX}import {{css}} from '@devup-ui/react';{body}"); + let error = match compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) { + Err(error) => error, + Ok(_) => panic!("style refusal must remain"), + }; + assert!(error.starts_with("a.tsx:"), "{error}"); + assert!(error.contains(&format!("cannot use `{leaf}`")), "{error}"); +} + +#[rstest] +#[case::empty("{}")] +#[case::inert("undefined")] +#[serial] +fn known_conditional_rules_keep_style_admission( + #[case] alternate: &str, + #[values(false, true)] single_css: bool, +) { + let source = format!("{BOX}export const a=(on)=>;"); + let output = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error:?}")); + assert_eq!( + static_styles(&output), + vec![("padding".into(), "4px".into())] + ); +} + +#[rstest] +#[case::known( + "const rules=css({color:'red'});return ;", + false +)] +#[case::shadow( + "const rules=css({color:'red'});return ((rules)=>)(raw);", + true +)] +#[serial] +fn local_known_class_and_shadowed_props_keep_their_own_bindings( + #[case] body: &str, + #[case] shadowed: bool, + #[values(false, true)] single_css: bool, +) { + let source = + format!("{BOX}import {{css}} from '@devup-ui/react';export const a=(on,raw)=>{{{body}}};"); + let output = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error:?}")); + let observed = whole::execute( + &output.code, + "(()=>{const token={};const raw={payload:token,className:'external'};const e=a(false,raw);return [e.props.payload===token,e.props.className];})()", + ); + if shadowed { + assert_eq!(static_styles(&output), vec![("color".into(), "red".into())]); + assert_eq!(observed.element, serde_json::json!([true, "external"])); + } else { + assert_eq!( + static_styles(&output), + vec![ + ("color".into(), "red".into()), + ("padding".into(), "4px".into()) + ] + ); + assert_eq!(observed.element[0], false); + assert_eq!(observed.element[1], ""); + } +} + +#[rstest] +#[case::function("export const a=(rest)=>css(rest);", "a(token)")] +#[case::native_prop("export const a=(rest)=>
;", "a(token).props.css")] +#[serial] +fn opaque_css_controls_keep_passthrough_identity_without_reading_the_value( + #[case] body: &str, + #[case] call: &str, + #[values(false, true)] single_css: bool, +) { + let source = format!("{BOX}import {{css}} from '@devup-ui/react';{body}"); + let output = compile_with( + &source, + ExtractOption { + single_css, + ..ExtractOption::default() + }, + ) + .unwrap_or_else(|error| panic!("{error:?}")); + assert!(output.styles.is_empty(), "{output:?}"); + let observed = whole::execute( + &output.code, + &format!( + r"(()=>{{ +const callback=()=>0;const style={{opacity:0.4}}; +const token={{get onClick(){{trace.push('callback');return callback;}},get style(){{trace.push('style');return style;}}}}; +const actual={call};const before=trace.slice(); +return [actual===token,before,actual.onClick===callback,actual.style===style]; +}})()" + ), + ); + assert_eq!(observed.element, serde_json::json!([true, [], true, true])); + assert_eq!(observed.trace, serde_json::json!(["callback", "style"])); +} + +#[derive(Default)] +struct StaticCaptureWork { + calls: usize, + wrappers: usize, + arrays: usize, + sequences: usize, + class_reads: Vec, +} + +impl<'a> oxc_ast_visit::Visit<'a> for StaticCaptureWork { + fn visit_call_expression(&mut self, value: &oxc_ast::ast::CallExpression<'a>) { + self.calls += 1; + self.wrappers += usize::from(matches!( + value.callee.get_inner_expression(), + oxc_ast::ast::Expression::ArrowFunctionExpression(_) + | oxc_ast::ast::Expression::FunctionExpression(_) + )); + oxc_ast_visit::walk::walk_call_expression(self, value); + } + fn visit_array_expression(&mut self, value: &oxc_ast::ast::ArrayExpression<'a>) { + self.arrays += 1; + oxc_ast_visit::walk::walk_array_expression(self, value); + } + fn visit_sequence_expression(&mut self, value: &oxc_ast::ast::SequenceExpression<'a>) { + self.sequences += 1; + oxc_ast_visit::walk::walk_sequence_expression(self, value); + } + fn visit_identifier_reference(&mut self, value: &oxc_ast::ast::IdentifierReference<'a>) { + if matches!(value.name.as_str(), "base" | "extra") { + self.class_reads.push(value.name.to_string()); + } + } +} + +fn static_capture_work(source: &str) -> StaticCaptureWork { + let allocator = oxc_allocator::Allocator::default(); + let parsed = oxc_parser::Parser::new(&allocator, source, oxc_span::SourceType::tsx()).parse(); + assert!( + !parsed.fatal_error && parsed.diagnostics.is_empty(), + "{source}\n{:?}", + parsed.diagnostics + ); + let mut work = StaticCaptureWork::default(); + oxc_ast_visit::Visit::visit_program(&mut work, &parsed.program); + work +} + +#[rstest] +#[case::original_focused( + "export const App = () =>
;", + "App()", + false +)] +#[case::original_mixed( + "export const App = ({ cls }) => <>
;", + "(()=>{globalThis.cond=false;return App({cls:'external'}).children[1];})()", + false +)] +#[case::nested_child( + "export const App=()=>
;", + "App().children[0]", + false +)] +#[case::nested_attribute( + "export const App=()=>
}/>;", + "App().props.child", + false +)] +#[case::fragment( + "export const App=()=> <>