diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 627407566bb..af13d36f721 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,6 +50,9 @@ jobs: - name: Install dependencies run: deno install + - name: Install Chromium for Puppeteer + run: deno run -A npm:puppeteer browsers install chrome + - name: Verify formatting if: startsWith(matrix.os, 'ubuntu') && matrix.deno == 'v2.x' run: deno fmt --check diff --git a/deno.json b/deno.json index 4a18845b718..32e9c11f1b3 100644 --- a/deno.json +++ b/deno.json @@ -74,7 +74,7 @@ "@std/semver": "jsr:@std/semver@1", "@std/streams": "jsr:@std/streams@1", - "@astral/astral": "jsr:@astral/astral@^0.5.5", + "puppeteer": "npm:puppeteer@^24.40.0", "@marvinh-test/fresh-island": "jsr:@marvinh-test/fresh-island@^0.0.3", "linkedom": "npm:linkedom@^0.18.10", "@std/async": "jsr:@std/async@^1.0.13", diff --git a/deno.lock b/deno.lock index 2dd99cbb470..74a07e37122 100644 --- a/deno.lock +++ b/deno.lock @@ -1,54 +1,46 @@ { "version": "5", "specifiers": { - "jsr:@astral/astral@~0.5.5": "0.5.5", - "jsr:@deno-library/progress@^1.5.1": "1.5.1", "jsr:@deno/cache-dir@0.14": "0.14.0", - "jsr:@deno/cache-dir@0.22.2": "0.22.2", "jsr:@deno/doc@0.172": "0.172.0", "jsr:@deno/esbuild-plugin@^1.2.0": "1.2.1", "jsr:@deno/graph@0.86": "0.86.9", "jsr:@deno/graph@~0.82.3": "0.82.3", - "jsr:@deno/loader@~0.3.10": "0.3.10", - "jsr:@fresh/build-id@1": "1.0.1", - "jsr:@fresh/core@2": "2.2.0", + "jsr:@deno/loader@~0.3.10": "0.3.14", "jsr:@marvinh-test/fresh-island@^0.0.3": "0.0.3", "jsr:@marvinh-test/import-json@^0.0.1": "0.0.1", "jsr:@matmen/imagescript@^1.3.0": "1.3.1", - "jsr:@std/assert@^1.0.14": "1.0.16", - "jsr:@std/assert@^1.0.15": "1.0.16", - "jsr:@std/async@1": "1.0.16", - "jsr:@std/async@^1.0.13": "1.0.16", - "jsr:@std/async@^1.0.15": "1.0.16", - "jsr:@std/bytes@^1.0.5": "1.0.6", + "jsr:@std/assert@^1.0.17": "1.0.19", + "jsr:@std/assert@^1.0.19": "1.0.19", + "jsr:@std/async@^1.0.13": "1.2.0", + "jsr:@std/async@^1.1.0": "1.2.0", "jsr:@std/bytes@^1.0.6": "1.0.6", - "jsr:@std/cli@^1.0.19": "1.0.25", - "jsr:@std/cli@^1.0.25": "1.0.25", + "jsr:@std/cli@^1.0.19": "1.0.28", + "jsr:@std/cli@^1.0.28": "1.0.28", "jsr:@std/collections@^1.1.2": "1.1.3", "jsr:@std/collections@^1.1.3": "1.1.3", "jsr:@std/crypto@^1.0.5": "1.0.5", - "jsr:@std/data-structures@^1.0.9": "1.0.9", + "jsr:@std/data-structures@^1.0.10": "1.0.10", "jsr:@std/dotenv@~0.225.5": "0.225.6", "jsr:@std/encoding@1": "1.0.10", "jsr:@std/encoding@^1.0.10": "1.0.10", - "jsr:@std/expect@^1.0.16": "1.0.17", - "jsr:@std/fmt@1.0.3": "1.0.3", - "jsr:@std/fmt@^1.0.3": "1.0.8", - "jsr:@std/fmt@^1.0.7": "1.0.8", - "jsr:@std/fmt@^1.0.8": "1.0.8", + "jsr:@std/expect@^1.0.16": "1.0.18", + "jsr:@std/fmt@^1.0.3": "1.0.9", + "jsr:@std/fmt@^1.0.7": "1.0.9", + "jsr:@std/fmt@^1.0.8": "1.0.9", + "jsr:@std/fmt@^1.0.9": "1.0.9", "jsr:@std/front-matter@^1.0.5": "1.0.9", - "jsr:@std/fs@1": "1.0.21", - "jsr:@std/fs@^1.0.19": "1.0.21", - "jsr:@std/fs@^1.0.21": "1.0.21", - "jsr:@std/fs@^1.0.6": "1.0.21", + "jsr:@std/fs@1": "1.0.23", + "jsr:@std/fs@^1.0.19": "1.0.23", + "jsr:@std/fs@^1.0.22": "1.0.23", + "jsr:@std/fs@^1.0.23": "1.0.23", + "jsr:@std/fs@^1.0.6": "1.0.23", "jsr:@std/html@1": "1.0.5", "jsr:@std/html@^1.0.5": "1.0.5", - "jsr:@std/http@^1.0.15": "1.0.23", - "jsr:@std/http@^1.0.21": "1.0.23", - "jsr:@std/internal@^1.0.10": "1.0.12", + "jsr:@std/http@^1.0.15": "1.0.25", + "jsr:@std/http@^1.0.21": "1.0.25", "jsr:@std/internal@^1.0.12": "1.0.12", - "jsr:@std/io@0.225": "0.225.2", - "jsr:@std/io@0.225.0": "0.225.0", + "jsr:@std/io@0.225": "0.225.3", "jsr:@std/json@^1.0.2": "1.0.3", "jsr:@std/jsonc@1": "1.0.2", "jsr:@std/jsonc@^1.0.2": "1.0.2", @@ -60,23 +52,22 @@ "jsr:@std/path@^1.1.1": "1.1.4", "jsr:@std/path@^1.1.2": "1.1.4", "jsr:@std/path@^1.1.4": "1.1.4", - "jsr:@std/semver@1": "1.0.7", - "jsr:@std/semver@^1.0.6": "1.0.7", - "jsr:@std/streams@1": "1.0.16", - "jsr:@std/streams@^1.0.16": "1.0.16", - "jsr:@std/testing@^1.0.12": "1.0.16", + "jsr:@std/semver@1": "1.0.8", + "jsr:@std/semver@^1.0.6": "1.0.8", + "jsr:@std/streams@1": "1.0.17", + "jsr:@std/streams@^1.0.17": "1.0.17", + "jsr:@std/testing@^1.0.12": "1.0.17", "jsr:@std/toml@^1.0.3": "1.0.11", "jsr:@std/uuid@^1.0.7": "1.1.0", "jsr:@std/uuid@^1.0.9": "1.1.0", "jsr:@std/yaml@^1.0.5": "1.0.10", - "jsr:@zip-js/zip-js@^2.7.52": "2.8.13", "npm:@babel/core@^7.28.0": "7.28.5", "npm:@babel/preset-react@^7.27.1": "7.28.5_@babel+core@7.28.5", "npm:@docsearch/js@^3.5.2": "3.9.0_@algolia+client-search@5.50.0_search-insights@2.17.3", - "npm:@opentelemetry/api@^1.9.0": "1.9.0", - "npm:@preact/signals@2": "2.5.1_preact@10.29.0", - "npm:@preact/signals@^2.2.1": "2.5.1_preact@10.29.0", - "npm:@preact/signals@^2.5.1": "2.5.1_preact@10.29.0", + "npm:@opentelemetry/api@^1.9.0": "1.9.1", + "npm:@preact/signals@2": "2.9.0_preact@10.29.0", + "npm:@preact/signals@^2.2.1": "2.9.0_preact@10.29.0", + "npm:@preact/signals@^2.5.1": "2.9.0_preact@10.29.0", "npm:@prefresh/vite@^2.4.8": "2.4.11_preact@10.29.0_vite@7.3.1__@types+node@24.9.2__picomatch@4.0.3", "npm:@radix-ui/themes@^3.2.1": "3.2.1_react@19.1.1_react-dom@19.1.1__react@19.1.1", "npm:@remix-run/node-fetch-server@0.12": "0.12.0", @@ -107,14 +98,15 @@ "npm:pg@^8.16.3": "8.16.3", "npm:postcss@8.5.6": "8.5.6", "npm:postcss@^8.5.6": "8.5.6", - "npm:preact-render-to-string@^6.6.3": "6.6.5_preact@10.29.0", - "npm:preact-render-to-string@^6.6.5": "6.6.5_preact@10.29.0", + "npm:preact-render-to-string@^6.6.3": "6.6.7_preact@10.29.0", + "npm:preact-render-to-string@^6.6.5": "6.6.7_preact@10.29.0", "npm:preact@^10.22.0": "10.29.0", "npm:preact@^10.26.9": "10.29.0", "npm:preact@^10.27.0": "10.29.0", "npm:preact@^10.28.2": "10.29.0", "npm:preact@^10.28.3": "10.29.0", "npm:prismjs@^1.29.0": "1.30.0", + "npm:puppeteer@^24.40.0": "24.40.0", "npm:qs@^6.14.0": "6.14.0", "npm:redis@^5.8.2": "5.9.0_@redis+client@5.9.0", "npm:rollup-plugin-visualizer@^6.0.3": "6.0.5_rollup@4.55.1", @@ -129,49 +121,20 @@ "npm:vite@^7.3.1": "7.3.1_@types+node@24.9.2_picomatch@4.0.3" }, "jsr": { - "@astral/astral@0.5.5": { - "integrity": "01b258a7021556f2af8526903320ea90ee5f6045771e6091529fce7822550dcb", - "dependencies": [ - "jsr:@deno-library/progress", - "jsr:@deno/cache-dir@0.22.2", - "jsr:@std/async@1", - "jsr:@std/encoding@1", - "jsr:@std/fs@1", - "jsr:@std/path@1", - "jsr:@zip-js/zip-js" - ] - }, - "@deno-library/progress@1.5.1": { - "integrity": "966611826b8bb27baae73ab1c4fa4317cd4edd2abb99750cd6f8488d22d5b121", - "dependencies": [ - "jsr:@std/fmt@1.0.3", - "jsr:@std/io@0.225.0" - ] - }, "@deno/cache-dir@0.14.0": { "integrity": "729f0b68e7fc96443c09c2c544b830ca70897bdd5168598446d752f7a4c731ad", "dependencies": [ "jsr:@deno/graph@0.86", "jsr:@std/fmt@^1.0.3", "jsr:@std/fs@^1.0.6", - "jsr:@std/io@0.225", - "jsr:@std/path@^1.0.8" - ] - }, - "@deno/cache-dir@0.22.2": { - "integrity": "0c84b8db6175618cc2e25ed7d7648d83b38e298c14c1aae1e4b4e1b2219b840c", - "dependencies": [ - "jsr:@deno/graph@0.86", - "jsr:@std/fmt@^1.0.3", - "jsr:@std/fs@^1.0.6", - "jsr:@std/io@0.225", + "jsr:@std/io", "jsr:@std/path@^1.0.8" ] }, "@deno/doc@0.172.0": { "integrity": "72a68ed533576a06feb930a84784ad9ba6d83ca9d581fc734d498c58e32b7cf5", "dependencies": [ - "jsr:@deno/cache-dir@0.14", + "jsr:@deno/cache-dir", "jsr:@deno/graph@~0.82.3" ] }, @@ -189,35 +152,8 @@ "@deno/graph@0.86.9": { "integrity": "c4f353a695bcc5246c099602977dabc6534eacea9999a35a8cb24e807192e6a1" }, - "@deno/loader@0.3.10": { - "integrity": "a9c0aa44a0499e7fecef52c29fbc206c1c8f8946388f25d9d0789a23313bfd43" - }, - "@fresh/build-id@1.0.1": { - "integrity": "12a2ec25fd52ae9ec68c26848a5696cd1c9b537f7c983c7e56e4fb1e7e816c20", - "dependencies": [ - "jsr:@std/encoding@^1.0.10" - ] - }, - "@fresh/core@2.2.0": { - "integrity": "b3c00f82288a2c4c8ec85e4abb67b080b366ec5971860f2f2898eb281ea1a80f", - "dependencies": [ - "jsr:@deno/esbuild-plugin", - "jsr:@std/encoding@^1.0.10", - "jsr:@std/fmt@^1.0.8", - "jsr:@std/fs@^1.0.19", - "jsr:@std/html@^1.0.5", - "jsr:@std/http@^1.0.21", - "jsr:@std/jsonc@^1.0.2", - "jsr:@std/media-types@^1.1.0", - "jsr:@std/path@^1.1.2", - "jsr:@std/semver@^1.0.6", - "jsr:@std/uuid@^1.0.9", - "npm:@opentelemetry/api", - "npm:@preact/signals@^2.2.1", - "npm:esbuild-wasm@~0.25.11", - "npm:esbuild@0.25.7", - "npm:preact-render-to-string@^6.6.3" - ] + "@deno/loader@0.3.14": { + "integrity": "97bc63a6cc2d27a60bcdc953f588c5213331d866d44212eebb24cebfb9b011ca" }, "@marvinh-test/fresh-island@0.0.3": { "integrity": "6d06b6009b7dfba9bba28e941e03e6ff652c4ef4f2fbfdf4b78741abd6c6c1c6", @@ -232,22 +168,23 @@ "@matmen/imagescript@1.3.1": { "integrity": "8b3d4fc6a4597259ede419497c7dce9cc523bfdc0fa25f95a33dfab2135cc59b" }, - "@std/assert@1.0.16": { - "integrity": "6a7272ed1eaa77defe76e5ff63ca705d9c495077e2d5fd0126d2b53fc5bd6532", + "@std/assert@1.0.19": { + "integrity": "eaada96ee120cb980bc47e040f82814d786fe8162ecc53c91d8df60b8755991e", "dependencies": [ - "jsr:@std/internal@^1.0.12" + "jsr:@std/internal" ] }, - "@std/async@1.0.16": { - "integrity": "6c9e43035313b67b5de43e2b3ee3eadb39a488a0a0a3143097f112e025d3ee9a" + "@std/async@1.2.0": { + "integrity": "c059c6f6d95ca7cc012ae8e8d7164d1697113d54b0b679e4372b354b11c2dee5" }, "@std/bytes@1.0.6": { "integrity": "f6ac6adbd8ccd99314045f5703e23af0a68d7f7e58364b47d2c7f408aeb5820a" }, - "@std/cli@1.0.25": { - "integrity": "1f85051b370c97a7a9dfc6ba626e7ed57a91bea8c081597276d1e78d929d8c91", + "@std/cli@1.0.28": { + "integrity": "74ef9b976db59ca6b23a5283469c9072be6276853807a83ec6c7ce412135c70a", "dependencies": [ - "jsr:@std/internal@^1.0.12" + "jsr:@std/fmt@^1.0.9", + "jsr:@std/internal" ] }, "@std/collections@1.1.3": { @@ -256,8 +193,8 @@ "@std/crypto@1.0.5": { "integrity": "0dcfbb319fe0bba1bd3af904ceb4f948cde1b92979ec1614528380ed308a3b40" }, - "@std/data-structures@1.0.9": { - "integrity": "033d6e17e64bf1f84a614e647c1b015fa2576ae3312305821e1a4cb20674bb4d" + "@std/data-structures@1.0.10": { + "integrity": "f574f86b0e07c69b9edc555fcc814b57d29258bad39fd5a34ba8a80ecf033cfe" }, "@std/dotenv@0.225.5": { "integrity": "9ce6f9d0ec3311f74a32535aa1b8c62ed88b1ab91b7f0815797d77a6f60c922f" @@ -268,18 +205,16 @@ "@std/encoding@1.0.10": { "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" }, - "@std/expect@1.0.17": { - "integrity": "316b47dd65c33e3151344eb3267bf42efba17d1415425f07ed96185d67fc04d9", + "@std/expect@1.0.18": { + "integrity": "8566eab35200466f8609eb7e7aed062ed0db314e9a258d5d201b1b8997ce801a", "dependencies": [ - "jsr:@std/assert@^1.0.14", - "jsr:@std/internal@^1.0.10" + "jsr:@std/assert@^1.0.19", + "jsr:@std/internal", + "jsr:@std/path@^1.1.4" ] }, - "@std/fmt@1.0.3": { - "integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f" - }, - "@std/fmt@1.0.8": { - "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" + "@std/fmt@1.0.9": { + "integrity": "2487343e8899fb2be5d0e3d35013e54477ada198854e52dd05ed0422eddcabe0" }, "@std/front-matter@1.0.9": { "integrity": "ee6201d06674cbef137dda2252f62477450b48249e7d8d9ab57a30f85ff6f051", @@ -288,40 +223,37 @@ "jsr:@std/yaml" ] }, - "@std/fs@1.0.21": { - "integrity": "d720fe1056d78d43065a4d6e0eeb2b19f34adb8a0bc7caf3a4dbf1d4178252cd", + "@std/fs@1.0.23": { + "integrity": "3ecbae4ce4fee03b180fa710caff36bb5adb66631c46a6460aaad49515565a37", "dependencies": [ - "jsr:@std/internal@^1.0.12", + "jsr:@std/internal", "jsr:@std/path@^1.1.4" ] }, "@std/html@1.0.5": { "integrity": "4e2d693f474cae8c16a920fa5e15a3b72267b94b84667f11a50c6dd1cb18d35e" }, - "@std/http@1.0.23": { - "integrity": "6634e9e034c589bf35101c1b5ee5bbf052a5987abca20f903e58bdba85c80dee", + "@std/http@1.0.25": { + "integrity": "577b4252290af1097132812b339fffdd55fb0f4aeb98ff11bdbf67998aa17193", "dependencies": [ - "jsr:@std/cli@^1.0.25", + "jsr:@std/cli@^1.0.28", "jsr:@std/encoding@^1.0.10", - "jsr:@std/fmt@^1.0.8", - "jsr:@std/fs@^1.0.21", + "jsr:@std/fmt@^1.0.9", + "jsr:@std/fs@^1.0.23", "jsr:@std/html@^1.0.5", "jsr:@std/media-types@^1.1.0", "jsr:@std/net", "jsr:@std/path@^1.1.4", - "jsr:@std/streams@^1.0.16" + "jsr:@std/streams@^1.0.17" ] }, "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" }, - "@std/io@0.225.0": { - "integrity": "c1db7c5e5a231629b32d64b9a53139445b2ca640d828c26bf23e1c55f8c079b3" - }, - "@std/io@0.225.2": { - "integrity": "3c740cd4ee4c082e6cfc86458f47e2ab7cb353dc6234d5e9b1f91a2de5f4d6c7", + "@std/io@0.225.3": { + "integrity": "27b07b591384d12d7b568f39e61dff966b8230559122df1e9fd11cc068f7ddd1", "dependencies": [ - "jsr:@std/bytes@^1.0.5" + "jsr:@std/bytes" ] }, "@std/json@1.0.3": { @@ -342,30 +274,30 @@ "@std/path@1.1.4": { "integrity": "1d2d43f39efb1b42f0b1882a25486647cb851481862dc7313390b2bb044314b5", "dependencies": [ - "jsr:@std/internal@^1.0.12" + "jsr:@std/internal" ] }, "@std/semver@1.0.5": { "integrity": "529f79e83705714c105ad0ba55bec0f9da0f24d2f726b6cc1c15e505cc2c0624" }, - "@std/semver@1.0.7": { - "integrity": "7d5f65391762dc4358abde80fc3354086ddb40101f140295e60f290c138887d0" + "@std/semver@1.0.8": { + "integrity": "dc830e8b8b6a380c895d53fbfd1258dc253704ca57bbe1629ac65fd7830179b7" }, - "@std/streams@1.0.16": { - "integrity": "85030627befb1767c60d4f65cb30fa2f94af1d6ee6e5b2515b76157a542e89c4", + "@std/streams@1.0.17": { + "integrity": "7859f3d9deed83cf4b41f19223d4a67661b3d3819e9fc117698f493bf5992140", "dependencies": [ - "jsr:@std/bytes@^1.0.6" + "jsr:@std/bytes" ] }, - "@std/testing@1.0.16": { - "integrity": "a917ffdeb5924c9be436dc78bc32e511760e14d3a96e49c607fc5ecca86d0092", + "@std/testing@1.0.17": { + "integrity": "87bdc2700fa98249d48a17cd72413352d3d3680dcfbdb64947fd0982d6bbf681", "dependencies": [ - "jsr:@std/assert@^1.0.15", - "jsr:@std/async@^1.0.15", + "jsr:@std/assert@^1.0.17", + "jsr:@std/async@^1.1.0", "jsr:@std/data-structures", - "jsr:@std/fs@^1.0.19", - "jsr:@std/internal@^1.0.12", - "jsr:@std/path@^1.1.2" + "jsr:@std/fs@^1.0.22", + "jsr:@std/internal", + "jsr:@std/path@^1.1.4" ] }, "@std/toml@1.0.10": { @@ -383,7 +315,7 @@ "@std/uuid@1.1.0": { "integrity": "6268db2ccf172849c9be80763354ca305d49ef4af41fe995623d44fcc3f7457c", "dependencies": [ - "jsr:@std/bytes@^1.0.6", + "jsr:@std/bytes", "jsr:@std/crypto" ] }, @@ -392,9 +324,6 @@ }, "@std/yaml@1.0.10": { "integrity": "245706ea3511cc50c8c6d00339c23ea2ffa27bd2c7ea5445338f8feff31fa58e" - }, - "@zip-js/zip-js@2.8.13": { - "integrity": "ebf8d73ba59197c96a2d8b466737b6f62294fd39e6e97298cbee2ad2d8b92387" } }, "npm": { @@ -549,14 +478,6 @@ "leven" ] }, - "@babel/code-frame@7.27.1": { - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dependencies": [ - "@babel/helper-validator-identifier", - "js-tokens", - "picocolors" - ] - }, "@babel/code-frame@7.29.0": { "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dependencies": [ @@ -565,47 +486,34 @@ "picocolors" ] }, - "@babel/compat-data@7.28.5": { - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==" - }, "@babel/compat-data@7.29.0": { "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==" }, "@babel/core@7.28.5": { "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dependencies": [ - "@babel/code-frame@7.27.1", - "@babel/generator@7.28.5", - "@babel/helper-compilation-targets@7.27.2", - "@babel/helper-module-transforms@7.28.3_@babel+core@7.28.5", + "@babel/code-frame", + "@babel/generator", + "@babel/helper-compilation-targets", + "@babel/helper-module-transforms", "@babel/helpers", - "@babel/parser@7.28.5", - "@babel/template@7.27.2", - "@babel/traverse@7.28.5", - "@babel/types@7.28.5", + "@babel/parser", + "@babel/template", + "@babel/traverse", + "@babel/types", "@jridgewell/remapping", "convert-source-map", "debug", "gensync", "json5", - "semver" - ] - }, - "@babel/generator@7.28.5": { - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "dependencies": [ - "@babel/parser@7.28.5", - "@babel/types@7.28.5", - "@jridgewell/gen-mapping", - "@jridgewell/trace-mapping", - "jsesc" + "semver@6.3.1" ] }, "@babel/generator@7.29.1": { "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dependencies": [ - "@babel/parser@7.29.2", - "@babel/types@7.29.0", + "@babel/parser", + "@babel/types", "@jridgewell/gen-mapping", "@jridgewell/trace-mapping", "jsesc" @@ -614,26 +522,17 @@ "@babel/helper-annotate-as-pure@7.27.3": { "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dependencies": [ - "@babel/types@7.28.5" - ] - }, - "@babel/helper-compilation-targets@7.27.2": { - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dependencies": [ - "@babel/compat-data@7.28.5", - "@babel/helper-validator-option", - "browserslist", - "lru-cache@5.1.1", - "semver" + "@babel/types" ] }, "@babel/helper-compilation-targets@7.28.6": { "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dependencies": [ - "@babel/compat-data@7.29.0", + "@babel/compat-data", "@babel/helper-validator-option", + "browserslist", "lru-cache@5.1.1", - "semver" + "semver@6.3.1" ] }, "@babel/helper-create-class-features-plugin@7.28.6_@babel+core@7.28.5": { @@ -645,8 +544,8 @@ "@babel/helper-optimise-call-expression", "@babel/helper-replace-supers", "@babel/helper-skip-transparent-expression-wrappers", - "@babel/traverse@7.29.0", - "semver" + "@babel/traverse", + "semver@6.3.1" ] }, "@babel/helper-create-regexp-features-plugin@7.28.5_@babel+core@7.28.5": { @@ -655,15 +554,15 @@ "@babel/core", "@babel/helper-annotate-as-pure", "regexpu-core", - "semver" + "semver@6.3.1" ] }, "@babel/helper-define-polyfill-provider@0.6.8_@babel+core@7.28.5": { "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", "dependencies": [ "@babel/core", - "@babel/helper-compilation-targets@7.28.6", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", "debug", "lodash.debounce", "resolve" @@ -675,59 +574,32 @@ "@babel/helper-member-expression-to-functions@7.28.5": { "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "dependencies": [ - "@babel/traverse@7.29.0", - "@babel/types@7.29.0" - ] - }, - "@babel/helper-module-imports@7.27.1": { - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dependencies": [ - "@babel/traverse@7.28.5", - "@babel/types@7.28.5" + "@babel/traverse", + "@babel/types" ] }, "@babel/helper-module-imports@7.28.6": { "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dependencies": [ - "@babel/traverse@7.29.0", - "@babel/types@7.29.0" - ] - }, - "@babel/helper-module-transforms@7.28.3": { - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", - "dependencies": [ - "@babel/helper-module-imports@7.28.6", - "@babel/helper-validator-identifier", - "@babel/traverse@7.29.0" - ] - }, - "@babel/helper-module-transforms@7.28.3_@babel+core@7.28.5": { - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", - "dependencies": [ - "@babel/core", - "@babel/helper-module-imports@7.27.1", - "@babel/helper-validator-identifier", - "@babel/traverse@7.28.5" + "@babel/traverse", + "@babel/types" ] }, "@babel/helper-module-transforms@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dependencies": [ "@babel/core", - "@babel/helper-module-imports@7.28.6", + "@babel/helper-module-imports", "@babel/helper-validator-identifier", - "@babel/traverse@7.29.0" + "@babel/traverse" ] }, "@babel/helper-optimise-call-expression@7.27.1": { "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dependencies": [ - "@babel/types@7.29.0" + "@babel/types" ] }, - "@babel/helper-plugin-utils@7.27.1": { - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==" - }, "@babel/helper-plugin-utils@7.28.6": { "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==" }, @@ -737,7 +609,7 @@ "@babel/core", "@babel/helper-annotate-as-pure", "@babel/helper-wrap-function", - "@babel/traverse@7.29.0" + "@babel/traverse" ] }, "@babel/helper-replace-supers@7.28.6_@babel+core@7.28.5": { @@ -746,14 +618,13 @@ "@babel/core", "@babel/helper-member-expression-to-functions", "@babel/helper-optimise-call-expression", - "@babel/traverse@7.29.0" + "@babel/traverse" ] }, "@babel/helper-skip-transparent-expression-wrappers@7.27.1": { "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dependencies": [ - "@babel/traverse@7.29.0", - "@babel/types@7.28.5" + "@babel/traverse" ] }, "@babel/helper-string-parser@7.27.1": { @@ -768,29 +639,22 @@ "@babel/helper-wrap-function@7.28.6": { "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", "dependencies": [ - "@babel/template@7.28.6", - "@babel/traverse@7.29.0", - "@babel/types@7.29.0" + "@babel/template", + "@babel/traverse", + "@babel/types" ] }, "@babel/helpers@7.28.4": { "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dependencies": [ - "@babel/template@7.27.2", - "@babel/types@7.28.5" + "@babel/template", + "@babel/types" ] }, - "@babel/parser@7.28.5": { - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "dependencies": [ - "@babel/types@7.28.5" - ], - "bin": true - }, "@babel/parser@7.29.2": { "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dependencies": [ - "@babel/types@7.29.0" + "@babel/types" ], "bin": true }, @@ -798,29 +662,28 @@ "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", - "@babel/traverse@7.28.5" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/helper-skip-transparent-expression-wrappers", "@babel/plugin-transform-optional-chaining" ] @@ -829,8 +692,8 @@ "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", - "@babel/traverse@7.29.0" + "@babel/helper-plugin-utils", + "@babel/traverse" ] }, "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2_@babel+core@7.28.5": { @@ -843,21 +706,21 @@ "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-syntax-import-attributes@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-syntax-jsx@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.27.1" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-syntax-unicode-sets-regex@7.18.6_@babel+core@7.28.5": { @@ -865,31 +728,31 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-arrow-functions@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-async-generator-functions@7.29.0_@babel+core@7.28.5": { "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/helper-remap-async-to-generator", - "@babel/traverse@7.29.0" + "@babel/traverse" ] }, "@babel/plugin-transform-async-to-generator@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", "dependencies": [ "@babel/core", - "@babel/helper-module-imports@7.28.6", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-module-imports", + "@babel/helper-plugin-utils", "@babel/helper-remap-async-to-generator" ] }, @@ -897,14 +760,14 @@ "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-block-scoping@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-class-properties@7.28.6_@babel+core@7.28.5": { @@ -912,7 +775,7 @@ "dependencies": [ "@babel/core", "@babel/helper-create-class-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-class-static-block@7.28.6_@babel+core@7.28.5": { @@ -920,7 +783,7 @@ "dependencies": [ "@babel/core", "@babel/helper-create-class-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-classes@7.28.6_@babel+core@7.28.5": { @@ -928,27 +791,27 @@ "dependencies": [ "@babel/core", "@babel/helper-annotate-as-pure", - "@babel/helper-compilation-targets@7.28.6", + "@babel/helper-compilation-targets", "@babel/helper-globals", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/helper-replace-supers", - "@babel/traverse@7.29.0" + "@babel/traverse" ] }, "@babel/plugin-transform-computed-properties@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", - "@babel/template@7.28.6" + "@babel/helper-plugin-utils", + "@babel/template" ] }, "@babel/plugin-transform-destructuring@7.28.5_@babel+core@7.28.5": { "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", - "@babel/traverse@7.29.0" + "@babel/helper-plugin-utils", + "@babel/traverse" ] }, "@babel/plugin-transform-dotall-regex@7.28.6_@babel+core@7.28.5": { @@ -956,14 +819,14 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-duplicate-keys@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0_@babel+core@7.28.5": { @@ -971,21 +834,21 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-dynamic-import@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-explicit-resource-management@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/plugin-transform-destructuring" ] }, @@ -993,21 +856,21 @@ "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-export-namespace-from@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-for-of@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/helper-skip-transparent-expression-wrappers" ] }, @@ -1015,71 +878,70 @@ "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dependencies": [ "@babel/core", - "@babel/helper-compilation-targets@7.28.6", - "@babel/helper-plugin-utils@7.28.6", - "@babel/traverse@7.29.0" + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", + "@babel/traverse" ] }, "@babel/plugin-transform-json-strings@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-literals@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-logical-assignment-operators@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-member-expression-literals@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-modules-amd@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dependencies": [ "@babel/core", - "@babel/helper-module-transforms@7.28.3", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-modules-commonjs@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", "dependencies": [ "@babel/core", - "@babel/helper-module-transforms@7.28.6_@babel+core@7.28.5", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-module-transforms", + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-modules-systemjs@7.29.0_@babel+core@7.28.5": { "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "dependencies": [ "@babel/core", - "@babel/helper-module-transforms@7.28.6_@babel+core@7.28.5", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-module-transforms", + "@babel/helper-plugin-utils", "@babel/helper-validator-identifier", - "@babel/traverse@7.29.0" + "@babel/traverse" ] }, "@babel/plugin-transform-modules-umd@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dependencies": [ "@babel/core", - "@babel/helper-module-transforms@7.28.6_@babel+core@7.28.5", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-module-transforms", + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-named-capturing-groups-regex@7.29.0_@babel+core@7.28.5": { @@ -1087,46 +949,46 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-new-target@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-nullish-coalescing-operator@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-numeric-separator@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-object-rest-spread@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", "dependencies": [ "@babel/core", - "@babel/helper-compilation-targets@7.28.6", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", "@babel/plugin-transform-destructuring", "@babel/plugin-transform-parameters", - "@babel/traverse@7.29.0" + "@babel/traverse" ] }, "@babel/plugin-transform-object-super@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/helper-replace-supers" ] }, @@ -1134,14 +996,14 @@ "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-optional-chaining@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/helper-skip-transparent-expression-wrappers" ] }, @@ -1149,7 +1011,7 @@ "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-private-methods@7.28.6_@babel+core@7.28.5": { @@ -1157,7 +1019,7 @@ "dependencies": [ "@babel/core", "@babel/helper-create-class-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-private-property-in-object@7.28.6_@babel+core@7.28.5": { @@ -1166,21 +1028,21 @@ "@babel/core", "@babel/helper-annotate-as-pure", "@babel/helper-create-class-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-property-literals@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-react-display-name@7.28.0_@babel+core@7.28.5": { "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.27.1" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-react-jsx-development@7.27.1_@babel+core@7.28.5": { @@ -1195,10 +1057,10 @@ "dependencies": [ "@babel/core", "@babel/helper-annotate-as-pure", - "@babel/helper-module-imports@7.27.1", - "@babel/helper-plugin-utils@7.27.1", + "@babel/helper-module-imports", + "@babel/helper-plugin-utils", "@babel/plugin-syntax-jsx", - "@babel/types@7.28.5" + "@babel/types" ] }, "@babel/plugin-transform-react-pure-annotations@7.27.1_@babel+core@7.28.5": { @@ -1206,14 +1068,14 @@ "dependencies": [ "@babel/core", "@babel/helper-annotate-as-pure", - "@babel/helper-plugin-utils@7.27.1" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-regenerator@7.29.0_@babel+core@7.28.5": { "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-regexp-modifiers@7.28.6_@babel+core@7.28.5": { @@ -1221,28 +1083,28 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-reserved-words@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-shorthand-properties@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-spread@7.28.6_@babel+core@7.28.5": { "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-plugin-utils", "@babel/helper-skip-transparent-expression-wrappers" ] }, @@ -1250,28 +1112,28 @@ "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-template-literals@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-typeof-symbol@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-unicode-escapes@7.27.1_@babel+core@7.28.5": { "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-unicode-property-regex@7.28.6_@babel+core@7.28.5": { @@ -1279,7 +1141,7 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-unicode-regex@7.27.1_@babel+core@7.28.5": { @@ -1287,7 +1149,7 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/plugin-transform-unicode-sets-regex@7.28.6_@babel+core@7.28.5": { @@ -1295,16 +1157,16 @@ "dependencies": [ "@babel/core", "@babel/helper-create-regexp-features-plugin", - "@babel/helper-plugin-utils@7.28.6" + "@babel/helper-plugin-utils" ] }, "@babel/preset-env@7.29.2_@babel+core@7.28.5": { "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", "dependencies": [ - "@babel/compat-data@7.29.0", + "@babel/compat-data", "@babel/core", - "@babel/helper-compilation-targets@7.28.6", - "@babel/helper-plugin-utils@7.28.6", + "@babel/helper-compilation-targets", + "@babel/helper-plugin-utils", "@babel/helper-validator-option", "@babel/plugin-bugfix-firefox-class-in-computed-class-key", "@babel/plugin-bugfix-safari-class-field-initializer-scope", @@ -1371,15 +1233,14 @@ "babel-plugin-polyfill-corejs3", "babel-plugin-polyfill-regenerator", "core-js-compat", - "semver" + "semver@6.3.1" ] }, "@babel/preset-modules@0.1.6-no-external-plugins_@babel+core@7.28.5": { "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.28.6", - "@babel/types@7.28.5", + "@babel/helper-plugin-utils", "esutils" ] }, @@ -1387,7 +1248,7 @@ "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", "dependencies": [ "@babel/core", - "@babel/helper-plugin-utils@7.27.1", + "@babel/helper-plugin-utils", "@babel/helper-validator-option", "@babel/plugin-transform-react-display-name", "@babel/plugin-transform-react-jsx", @@ -1398,53 +1259,26 @@ "@babel/runtime@7.29.2": { "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==" }, - "@babel/template@7.27.2": { - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dependencies": [ - "@babel/code-frame@7.27.1", - "@babel/parser@7.28.5", - "@babel/types@7.28.5" - ] - }, "@babel/template@7.28.6": { "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dependencies": [ - "@babel/code-frame@7.29.0", - "@babel/parser@7.29.2", - "@babel/types@7.29.0" - ] - }, - "@babel/traverse@7.28.5": { - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "dependencies": [ - "@babel/code-frame@7.27.1", - "@babel/generator@7.28.5", - "@babel/helper-globals", - "@babel/parser@7.28.5", - "@babel/template@7.27.2", - "@babel/types@7.28.5", - "debug" + "@babel/code-frame", + "@babel/parser", + "@babel/types" ] }, "@babel/traverse@7.29.0": { "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dependencies": [ - "@babel/code-frame@7.29.0", - "@babel/generator@7.29.1", + "@babel/code-frame", + "@babel/generator", "@babel/helper-globals", - "@babel/parser@7.29.2", - "@babel/template@7.28.6", - "@babel/types@7.29.0", + "@babel/parser", + "@babel/template", + "@babel/types", "debug" ] }, - "@babel/types@7.28.5": { - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "dependencies": [ - "@babel/helper-string-parser", - "@babel/helper-validator-identifier" - ] - }, "@babel/types@7.29.0": { "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dependencies": [ @@ -1827,8 +1661,8 @@ "fastq" ] }, - "@opentelemetry/api@1.9.0": { - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==" + "@opentelemetry/api@1.9.1": { + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==" }, "@pkgjs/parseargs@0.11.0": { "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==" @@ -1836,11 +1670,11 @@ "@polka/url@1.0.0-next.29": { "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==" }, - "@preact/signals-core@1.12.1": { - "integrity": "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA==" + "@preact/signals-core@1.14.0": { + "integrity": "sha512-AowtCcCU/33lFlh1zRFf/u+12rfrhtNakj7UpaGEsmMwUKpKWMVvcktOGcwBBNiB4lWrZWc01LhiyyzVklJyaQ==" }, - "@preact/signals@2.5.1_preact@10.29.0": { - "integrity": "sha512-VPjk5YFt7i11Fi4UK0tzaEe5xLwfhUxXL3l89ocxQ5aPz7bRo8M5+N73LjBMPklyXKYKz6YsNo4Smp8n6nplng==", + "@preact/signals@2.9.0_preact@10.29.0": { + "integrity": "sha512-hYrY0KyUqkDgOl1qba/JGn6y81pXnurn21PMaxfcMwdncdZ3M/oVdmpTvEnsGjh48dIwDVc7bjWHqIsngSjYug==", "dependencies": [ "@preact/signals-core", "preact" @@ -1870,6 +1704,19 @@ "vite" ] }, + "@puppeteer/browsers@2.13.0": { + "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", + "dependencies": [ + "debug", + "extract-zip", + "progress", + "proxy-agent", + "semver@7.7.4", + "tar-fs", + "yargs" + ], + "bin": true + }, "@radix-ui/colors@3.0.0": { "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==" }, @@ -2629,7 +2476,6 @@ "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", "dependencies": [ "@babel/core", - "@babel/helper-module-imports@7.27.1", "@rollup/pluginutils@3.1.0_rollup@2.80.0", "@types/babel__core", "rollup@2.80.0" @@ -2953,6 +2799,9 @@ "vite" ] }, + "@tootallnate/quickjs-emscripten@0.23.0": { + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, "@trysound/sax@0.2.0": { "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, @@ -2967,8 +2816,8 @@ "@types/babel__core@7.20.5": { "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dependencies": [ - "@babel/parser@7.28.5", - "@babel/types@7.28.5", + "@babel/parser", + "@babel/types", "@types/babel__generator", "@types/babel__template", "@types/babel__traverse" @@ -2977,20 +2826,20 @@ "@types/babel__generator@7.27.0": { "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dependencies": [ - "@babel/types@7.28.5" + "@babel/types" ] }, "@types/babel__template@7.4.4": { "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dependencies": [ - "@babel/parser@7.28.5", - "@babel/types@7.28.5" + "@babel/parser", + "@babel/types" ] }, "@types/babel__traverse@7.28.0": { "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dependencies": [ - "@babel/types@7.28.5" + "@babel/types" ] }, "@types/estree@0.0.39": { @@ -3028,10 +2877,19 @@ "@types/trusted-types@2.0.7": { "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" }, + "@types/yauzl@2.10.3": { + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dependencies": [ + "@types/node" + ] + }, "acorn@8.16.0": { "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "bin": true }, + "agent-base@7.1.4": { + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==" + }, "ajv@8.18.0": { "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dependencies": [ @@ -3091,6 +2949,9 @@ "arg@5.0.2": { "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, + "argparse@2.0.1": { + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "aria-hidden@1.2.6": { "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", "dependencies": [ @@ -3116,6 +2977,12 @@ "is-array-buffer" ] }, + "ast-types@0.13.4": { + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dependencies": [ + "tslib" + ] + }, "async-function@1.0.0": { "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==" }, @@ -3129,7 +2996,7 @@ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dependencies": [ "browserslist", - "caniuse-lite@1.0.30001751", + "caniuse-lite", "fraction.js", "normalize-range", "picocolors", @@ -3144,13 +3011,16 @@ "possible-typed-array-names" ] }, + "b4a@1.8.0": { + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==" + }, "babel-plugin-polyfill-corejs2@0.4.17_@babel+core@7.28.5": { "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", "dependencies": [ - "@babel/compat-data@7.29.0", + "@babel/compat-data", "@babel/core", "@babel/helper-define-polyfill-provider", - "semver" + "semver@6.3.1" ] }, "babel-plugin-polyfill-corejs3@0.14.2_@babel+core@7.28.5": { @@ -3174,10 +3044,52 @@ "balanced-match@4.0.4": { "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==" }, + "bare-events@2.8.2": { + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==" + }, + "bare-fs@4.5.6": { + "integrity": "sha512-1QovqDrR80Pmt5HPAsMsXTCFcDYr+NSUKW6nd6WO5v0JBmnItc/irNRzm2KOQ5oZ69P37y+AMujNyNtG+1Rggw==", + "dependencies": [ + "bare-events", + "bare-path", + "bare-stream", + "bare-url", + "fast-fifo" + ] + }, + "bare-os@3.8.6": { + "integrity": "sha512-l8xaNWWb/bXuzgsrlF5jaa5QYDJ9S0ddd54cP6CH+081+5iPrbJiCfBWQqrWYzmUhCbsH+WR6qxo9MeHVCr0MQ==" + }, + "bare-path@3.0.0": { + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dependencies": [ + "bare-os" + ] + }, + "bare-stream@2.11.0_bare-events@2.8.2": { + "integrity": "sha512-Y/+iQ49fL3rIn6w/AVxI/2+BRrpmzJvdWt5Jv8Za6Ngqc6V227c+pYjYYgLdpR3MwQ9ObVXD0ZrqoBztakM0rw==", + "dependencies": [ + "bare-events", + "streamx", + "teex" + ], + "optionalPeers": [ + "bare-events" + ] + }, + "bare-url@2.4.0": { + "integrity": "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==", + "dependencies": [ + "bare-path" + ] + }, "baseline-browser-mapping@2.10.12": { "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==", "bin": true }, + "basic-ftp@5.2.0": { + "integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==" + }, "binary-extensions@2.3.0": { "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" }, @@ -3209,13 +3121,16 @@ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dependencies": [ "baseline-browser-mapping", - "caniuse-lite@1.0.30001782", + "caniuse-lite", "electron-to-chromium", "node-releases", "update-browserslist-db" ], "bin": true }, + "buffer-crc32@0.2.13": { + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, "buffer-from@1.1.2": { "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, @@ -3248,6 +3163,9 @@ "get-intrinsic" ] }, + "callsites@3.1.0": { + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, "camelcase-css@2.0.1": { "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, @@ -3255,14 +3173,11 @@ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dependencies": [ "browserslist", - "caniuse-lite@1.0.30001751", + "caniuse-lite", "lodash.memoize", "lodash.uniq" ] }, - "caniuse-lite@1.0.30001751": { - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==" - }, "caniuse-lite@1.0.30001782": { "integrity": "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==" }, @@ -3281,6 +3196,14 @@ "fsevents" ] }, + "chromium-bidi@14.0.0_devtools-protocol@0.0.1581282": { + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", + "dependencies": [ + "devtools-protocol", + "mitt", + "zod" + ] + }, "classnames@2.5.1": { "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, @@ -3331,6 +3254,15 @@ "browserslist" ] }, + "cosmiconfig@9.0.1": { + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "dependencies": [ + "env-paths", + "import-fresh", + "js-yaml", + "parse-json" + ] + }, "cross-spawn@7.0.6": { "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": [ @@ -3438,6 +3370,9 @@ "cssom@0.5.0": { "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, + "data-uri-to-buffer@6.0.2": { + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==" + }, "data-view-buffer@1.0.2": { "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dependencies": [ @@ -3503,6 +3438,14 @@ "object-keys" ] }, + "degenerator@5.0.1": { + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "dependencies": [ + "ast-types", + "escodegen", + "esprima" + ] + }, "denque@2.1.0": { "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" }, @@ -3512,6 +3455,9 @@ "detect-node-es@1.1.0": { "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, + "devtools-protocol@0.0.1581282": { + "integrity": "sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==" + }, "didyoumean@1.2.2": { "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, @@ -3570,6 +3516,12 @@ "emoji-regex@9.2.2": { "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, + "end-of-stream@1.4.5": { + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dependencies": [ + "once" + ] + }, "enhanced-resolve@5.18.3": { "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dependencies": [ @@ -3583,6 +3535,15 @@ "entities@6.0.1": { "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" }, + "env-paths@2.2.1": { + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "error-ex@1.3.4": { + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dependencies": [ + "is-arrayish" + ] + }, "error-stack-parser-es@1.0.5": { "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==" }, @@ -3751,6 +3712,25 @@ "escalade@3.2.0": { "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, + "escodegen@2.1.0": { + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": [ + "esprima", + "estraverse", + "esutils" + ], + "optionalDependencies": [ + "source-map@0.6.1" + ], + "bin": true + }, + "esprima@4.0.1": { + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": true + }, + "estraverse@5.3.0": { + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, "estree-walker@1.0.1": { "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" }, @@ -3760,9 +3740,30 @@ "esutils@2.0.3": { "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, + "events-universal@1.0.1": { + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dependencies": [ + "bare-events" + ] + }, + "extract-zip@2.0.1": { + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": [ + "debug", + "get-stream", + "yauzl" + ], + "optionalDependencies": [ + "@types/yauzl" + ], + "bin": true + }, "fast-deep-equal@3.1.3": { "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-fifo@1.3.2": { + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + }, "fast-glob@3.3.3": { "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dependencies": [ @@ -3785,6 +3786,12 @@ "reusify" ] }, + "fd-slicer@1.1.0": { + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": [ + "pend" + ] + }, "fdir@6.5.0_picomatch@4.0.3": { "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dependencies": [ @@ -3896,6 +3903,12 @@ "es-object-atoms" ] }, + "get-stream@5.2.0": { + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": [ + "pump" + ] + }, "get-symbol-description@1.1.0": { "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dependencies": [ @@ -3904,6 +3917,14 @@ "get-intrinsic" ] }, + "get-uri@6.0.5": { + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "dependencies": [ + "basic-ftp", + "data-uri-to-buffer", + "debug" + ] + }, "github-slugger@2.0.0": { "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, @@ -4000,9 +4021,30 @@ "entities@6.0.1" ] }, + "http-proxy-agent@7.0.2": { + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": [ + "agent-base", + "debug" + ] + }, + "https-proxy-agent@7.0.6": { + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": [ + "agent-base", + "debug" + ] + }, "idb@7.1.1": { "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" }, + "import-fresh@3.3.1": { + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": [ + "parent-module", + "resolve-from" + ] + }, "internal-slot@1.1.0": { "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dependencies": [ @@ -4025,6 +4067,9 @@ "standard-as-callback" ] }, + "ip-address@10.1.0": { + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==" + }, "is-array-buffer@3.0.5": { "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dependencies": [ @@ -4033,6 +4078,9 @@ "get-intrinsic" ] }, + "is-arrayish@0.2.1": { + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "is-async-function@2.1.1": { "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dependencies": [ @@ -4265,10 +4313,20 @@ "js-tokens@4.0.0": { "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml@4.1.1": { + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dependencies": [ + "argparse" + ], + "bin": true + }, "jsesc@3.1.0": { "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "bin": true }, + "json-parse-even-better-errors@2.3.1": { + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "json-schema-traverse@1.0.0": { "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, @@ -4414,6 +4472,9 @@ "yallist" ] }, + "lru-cache@7.18.3": { + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + }, "magic-string@0.25.9": { "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dependencies": [ @@ -4479,6 +4540,9 @@ "minipass@7.1.2": { "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, + "mitt@3.0.1": { + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "mrmime@2.0.1": { "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==" }, @@ -4497,6 +4561,9 @@ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "bin": true }, + "netmask@2.0.2": { + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + }, "node-releases@2.0.27": { "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" }, @@ -4538,6 +4605,12 @@ "ohash@2.0.11": { "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==" }, + "once@1.4.0": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": [ + "wrappy" + ] + }, "open@10.2.0": { "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dependencies": [ @@ -4563,9 +4636,44 @@ "safe-push-apply" ] }, + "pac-proxy-agent@7.2.0": { + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dependencies": [ + "@tootallnate/quickjs-emscripten", + "agent-base", + "debug", + "get-uri", + "http-proxy-agent", + "https-proxy-agent", + "pac-resolver", + "socks-proxy-agent" + ] + }, + "pac-resolver@7.0.1": { + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dependencies": [ + "degenerator", + "netmask" + ] + }, "package-json-from-dist@1.0.1": { "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, + "parent-module@1.0.1": { + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": [ + "callsites" + ] + }, + "parse-json@5.2.0": { + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": [ + "@babel/code-frame", + "error-ex", + "json-parse-even-better-errors", + "lines-and-columns" + ] + }, "path-browserify@1.0.1": { "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, @@ -4592,6 +4700,9 @@ "pathe@2.0.3": { "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" }, + "pend@1.2.0": { + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, "perfect-debounce@2.0.0": { "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==" }, @@ -4929,8 +5040,8 @@ "xtend" ] }, - "preact-render-to-string@6.6.5_preact@10.29.0": { - "integrity": "sha512-O6MHzYNIKYaiSX3bOw0gGZfEbOmlIDtDfWwN1JJdc/T3ihzRT6tGGSEWE088dWrEDGa1u7101q+6fzQnO9XCPA==", + "preact-render-to-string@6.6.7_preact@10.29.0": { + "integrity": "sha512-3XdbsX3+vn9dQW+jJI/FsI9rlkgl6dbeUpqLsChak6jp3j3auFqBCkno7VChbMFs5Q8ylBj6DrUkKRwtVN3nvw==", "dependencies": [ "preact" ] @@ -4947,9 +5058,60 @@ "prismjs@1.30.0": { "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==" }, + "progress@2.0.3": { + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-agent@6.5.0": { + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "dependencies": [ + "agent-base", + "debug", + "http-proxy-agent", + "https-proxy-agent", + "lru-cache@7.18.3", + "pac-proxy-agent", + "proxy-from-env", + "socks-proxy-agent" + ] + }, + "proxy-from-env@1.1.0": { + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pump@3.0.4": { + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dependencies": [ + "end-of-stream", + "once" + ] + }, "punycode@2.3.1": { "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, + "puppeteer-core@24.40.0": { + "integrity": "sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==", + "dependencies": [ + "@puppeteer/browsers", + "chromium-bidi", + "debug", + "devtools-protocol", + "typed-query-selector", + "webdriver-bidi-protocol", + "ws" + ] + }, + "puppeteer@24.40.0": { + "integrity": "sha512-IxQbDq93XHVVLWHrAkFP7F7iHvb9o0mgfsSIMlhHb+JM+JjM1V4v4MNSQfcRWJopx9dsNOr9adYv0U5fm9BJBQ==", + "dependencies": [ + "@puppeteer/browsers", + "chromium-bidi", + "cosmiconfig", + "devtools-protocol", + "puppeteer-core", + "typed-query-selector" + ], + "scripts": true, + "bin": true + }, "qs@6.14.0": { "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dependencies": [ @@ -5155,6 +5317,9 @@ "require-from-string@2.0.2": { "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "resolve-from@4.0.0": { + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, "resolve@1.22.11": { "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dependencies": [ @@ -5273,6 +5438,10 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": true }, + "semver@7.7.4": { + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "bin": true + }, "serialize-javascript@6.0.2": { "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dependencies": [ @@ -5363,9 +5532,27 @@ "totalist" ] }, + "smart-buffer@4.2.0": { + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, "smob@1.6.1": { "integrity": "sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==" }, + "socks-proxy-agent@8.0.5": { + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dependencies": [ + "agent-base", + "debug", + "socks" + ] + }, + "socks@2.8.7": { + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dependencies": [ + "ip-address", + "smart-buffer" + ] + }, "source-map-js@1.2.1": { "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, @@ -5406,6 +5593,14 @@ "internal-slot" ] }, + "streamx@2.25.0": { + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", + "dependencies": [ + "events-universal", + "fast-fifo", + "text-decoder" + ] + }, "string-width@4.2.3": { "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": [ @@ -5573,6 +5768,32 @@ "tapable@2.3.0": { "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==" }, + "tar-fs@3.1.2": { + "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", + "dependencies": [ + "pump", + "tar-stream" + ], + "optionalDependencies": [ + "bare-fs", + "bare-path" + ] + }, + "tar-stream@3.1.8": { + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", + "dependencies": [ + "b4a", + "bare-fs", + "fast-fifo", + "streamx" + ] + }, + "teex@1.0.1": { + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dependencies": [ + "streamx" + ] + }, "temp-dir@2.0.0": { "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" }, @@ -5595,6 +5816,12 @@ ], "bin": true }, + "text-decoder@1.2.7": { + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "dependencies": [ + "b4a" + ] + }, "thenify-all@1.6.0": { "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dependencies": [ @@ -5689,6 +5916,9 @@ "reflect.getprototypeof" ] }, + "typed-query-selector@2.12.1": { + "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==" + }, "uhyphen@0.2.0": { "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==" }, @@ -5831,6 +6061,9 @@ ], "bin": true }, + "webdriver-bidi-protocol@0.4.1": { + "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==" + }, "webidl-conversions@3.0.1": { "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, @@ -6064,6 +6297,12 @@ "strip-ansi@7.1.2" ] }, + "wrappy@1.0.2": { + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws@8.20.0": { + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==" + }, "wsl-utils@0.1.0": { "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", "dependencies": [ @@ -6100,11 +6339,20 @@ "y18n", "yargs-parser" ] + }, + "yauzl@2.10.0": { + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": [ + "buffer-crc32", + "fd-slicer" + ] + }, + "zod@3.25.76": { + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" } }, "workspace": { "dependencies": [ - "jsr:@astral/astral@~0.5.5", "jsr:@deno/doc@0.172", "jsr:@deno/esbuild-plugin@^1.2.0", "jsr:@fresh/build-id@1", @@ -6150,6 +6398,7 @@ "npm:preact-render-to-string@^6.6.5", "npm:preact@^10.28.2", "npm:prismjs@^1.29.0", + "npm:puppeteer@^24.40.0", "npm:redis@^5.8.2", "npm:rollup@^4.55.1", "npm:tailwindcss@^4.1.10", diff --git a/packages/fresh/tests/active_links_test.tsx b/packages/fresh/tests/active_links_test.tsx index 2d5262e8a07..e99c1be38de 100644 --- a/packages/fresh/tests/active_links_test.tsx +++ b/packages/fresh/tests/active_links_test.tsx @@ -9,7 +9,7 @@ import { withBrowserApp, } from "./test_utils.tsx"; -import { FakeServer } from "../src/test_utils.ts"; +import { FakeServer, integrationTest } from "../src/test_utils.ts"; import { Partial } from "fresh/runtime"; const allIslandCache = await buildProd({ islandDir: ALL_ISLAND_DIR }); @@ -22,145 +22,139 @@ function testApp(): App { return app; } -Deno.test({ - name: "active links - without client nav", - fn: async () => { - function View() { - return ( - -
-

nav

-

- /active_nav/foo/bar -

-

- /active_nav/foo -

-

- /active_nav -

-

- / -

-
-
- ); - } - - const app = testApp() - .get("/active_nav/foo", (ctx) => { - return ctx.render(); - }) - .get("/active_nav", (ctx) => { - return ctx.render(); - }); - - const server = new FakeServer(app.handler()); - let res = await server.get("/active_nav"); - let doc = parseHtml(await res.text()); - - assertSelector(doc, "a[href='/'][data-ancestor]"); - - // Current - assertNotSelector(doc, "a[href='/active_nav'][data-ancestor]"); - assertSelector(doc, "a[href='/active_nav'][data-current]"); - assertSelector(doc, `a[href='/active_nav'][aria-current="page"]`); - - // Unrelated links - assertNotSelector(doc, "a[href='/active_nav/foo'][data-ancestor]"); - assertNotSelector(doc, "a[href='/active_nav/foo'][aria-current]"); - assertNotSelector(doc, "a[href='/active_nav/foo/bar'][data-ancestor]"); - assertNotSelector(doc, "a[href='/active_nav/foo/bar'][aria-current]"); - - res = await server.get(`/active_nav/foo`); - doc = parseHtml(await res.text()); - assertSelector(doc, "a[href='/active_nav/foo'][data-current]"); - assertSelector(doc, `a[href='/active_nav/foo'][aria-current="page"]`); - assertSelector(doc, "a[href='/active_nav'][data-ancestor]"); - assertSelector(doc, `a[href='/active_nav'][aria-current="true"]`); - assertSelector(doc, "a[href='/'][data-ancestor]"); - assertSelector(doc, `a[href='/'][aria-current="true"]`); - }, -}); - -Deno.test({ - name: "active links - updates outside of vdom", - fn: async () => { - function PartialPage() { - return ( +integrationTest("active links - without client nav", async () => { + function View() { + return ( + - ); - } - - const app = testApp() - .get("/active_nav_partial/foo", (ctx) => { - return ctx.render(); - }) - .get("/active_nav_partial", (ctx) => { - return ctx.render(); - }); - - await withBrowserApp(app, async (page, address) => { - await page.goto(`${address}/active_nav_partial`); - - let doc = parseHtml(await page.content()); - assertSelector(doc, "a[href='/'][data-ancestor]"); - - // Current - assertNotSelector(doc, "a[href='/active_nav_partial'][data-ancestor]"); - assertSelector(doc, "a[href='/active_nav_partial'][data-current]"); - assertSelector(doc, `a[href='/active_nav_partial'][aria-current="page"]`); - - // Unrelated links - assertNotSelector( - doc, - "a[href='/active_nav_partial/foo'][data-ancestor]", - ); - assertNotSelector( - doc, - "a[href='/active_nav_partial/foo'][aria-current]", - ); - assertNotSelector( - doc, - "a[href='/active_nav_partial/foo/bar'][data-ancestor]", - ); - assertNotSelector( - doc, - "a[href='/active_nav_partial/foo/bar'][aria-current]", - ); - - await page.goto(`${address}/active_nav_partial/foo`); - doc = parseHtml(await page.content()); - assertSelector(doc, "a[href='/active_nav_partial/foo'][data-current]"); - assertSelector( - doc, - `a[href='/active_nav_partial/foo'][aria-current="page"]`, - ); - assertSelector(doc, "a[href='/active_nav_partial'][data-ancestor]"); - assertSelector( - doc, - `a[href='/active_nav_partial'][data-ancestor][aria-current="true"]`, - ); - assertSelector(doc, "a[href='/'][data-ancestor]"); - assertSelector(doc, `a[href='/'][aria-current="true"]`); + + ); + } + + const app = testApp() + .get("/active_nav/foo", (ctx) => { + return ctx.render(); + }) + .get("/active_nav", (ctx) => { + return ctx.render(); }); - }, + + const server = new FakeServer(app.handler()); + let res = await server.get("/active_nav"); + let doc = parseHtml(await res.text()); + + assertSelector(doc, "a[href='/'][data-ancestor]"); + + // Current + assertNotSelector(doc, "a[href='/active_nav'][data-ancestor]"); + assertSelector(doc, "a[href='/active_nav'][data-current]"); + assertSelector(doc, `a[href='/active_nav'][aria-current="page"]`); + + // Unrelated links + assertNotSelector(doc, "a[href='/active_nav/foo'][data-ancestor]"); + assertNotSelector(doc, "a[href='/active_nav/foo'][aria-current]"); + assertNotSelector(doc, "a[href='/active_nav/foo/bar'][data-ancestor]"); + assertNotSelector(doc, "a[href='/active_nav/foo/bar'][aria-current]"); + + res = await server.get(`/active_nav/foo`); + doc = parseHtml(await res.text()); + assertSelector(doc, "a[href='/active_nav/foo'][data-current]"); + assertSelector(doc, `a[href='/active_nav/foo'][aria-current="page"]`); + assertSelector(doc, "a[href='/active_nav'][data-ancestor]"); + assertSelector(doc, `a[href='/active_nav'][aria-current="true"]`); + assertSelector(doc, "a[href='/'][data-ancestor]"); + assertSelector(doc, `a[href='/'][aria-current="true"]`); +}); + +integrationTest("active links - updates outside of vdom", async () => { + function PartialPage() { + return ( +
+ +

/active_nav_partial

+
+

+ + /active_nav_partial/foo/bar + +

+

+ /active_nav_partial/foo +

+

+ /active_nav_partial +

+

+ / +

+
+ ); + } + + const app = testApp() + .get("/active_nav_partial/foo", (ctx) => { + return ctx.render(); + }) + .get("/active_nav_partial", (ctx) => { + return ctx.render(); + }); + + await withBrowserApp(app, async (page, address) => { + await page.goto(`${address}/active_nav_partial`); + + let doc = parseHtml(await page.content()); + assertSelector(doc, "a[href='/'][data-ancestor]"); + + // Current + assertNotSelector(doc, "a[href='/active_nav_partial'][data-ancestor]"); + assertSelector(doc, "a[href='/active_nav_partial'][data-current]"); + assertSelector(doc, `a[href='/active_nav_partial'][aria-current="page"]`); + + // Unrelated links + assertNotSelector( + doc, + "a[href='/active_nav_partial/foo'][data-ancestor]", + ); + assertNotSelector( + doc, + "a[href='/active_nav_partial/foo'][aria-current]", + ); + assertNotSelector( + doc, + "a[href='/active_nav_partial/foo/bar'][data-ancestor]", + ); + assertNotSelector( + doc, + "a[href='/active_nav_partial/foo/bar'][aria-current]", + ); + + await page.goto(`${address}/active_nav_partial/foo`); + doc = parseHtml(await page.content()); + assertSelector(doc, "a[href='/active_nav_partial/foo'][data-current]"); + assertSelector( + doc, + `a[href='/active_nav_partial/foo'][aria-current="page"]`, + ); + assertSelector(doc, "a[href='/active_nav_partial'][data-ancestor]"); + assertSelector( + doc, + `a[href='/active_nav_partial'][data-ancestor][aria-current="true"]`, + ); + assertSelector(doc, "a[href='/'][data-ancestor]"); + assertSelector(doc, `a[href='/'][aria-current="true"]`); + }); }); diff --git a/packages/fresh/tests/islands_test.tsx b/packages/fresh/tests/islands_test.tsx index 3a364f36b8b..a9acb1ae9ef 100644 --- a/packages/fresh/tests/islands_test.tsx +++ b/packages/fresh/tests/islands_test.tsx @@ -25,7 +25,7 @@ import { FnIsland } from "./fixtures_islands/FnIsland.tsx"; import { EscapeIsland } from "./fixtures_islands/EscapeIsland.tsx"; import type { FreshConfig } from "../src/config.ts"; import { FreshAttrs } from "./fixtures_islands/FreshAttrs.tsx"; -import { FakeServer } from "../src/test_utils.ts"; +import { FakeServer, integrationTest } from "../src/test_utils.ts"; import { PARTIAL_SEARCH_PARAM } from "../src/constants.ts"; import { ComputedSignal } from "./fixtures_islands/Computed.tsx"; import { EnvIsland } from "./fixtures_islands/EnvIsland.tsx"; @@ -55,31 +55,28 @@ function testGroupApp(config?: FreshConfig): App { return app; } -Deno.test({ - name: "islands - should make signals interactive", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - const sig = signal(3); - return ctx.render( - - - , - ); - }); - - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); - await page.locator(".increment").click(); - await waitForText(page, ".output", "4"); +integrationTest("islands - should make signals interactive", async () => { + const app = testApp() + .get("/", (ctx) => { + const sig = signal(3); + return ctx.render( + + + , + ); }); - }, + + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); + await page.locator(".increment").click(); + await waitForText(page, ".output", "4"); + }); }); -Deno.test({ - name: "islands - revive multiple islands from one island file", - fn: async () => { +integrationTest( + "islands - revive multiple islands from one island file", + async () => { const app = testApp() .get("/", (ctx) => { return ctx.render( @@ -100,11 +97,11 @@ Deno.test({ await waitForText(page, "#multiple-2 .output", "1"); }); }, -}); +); -Deno.test({ - name: "islands - revive multiple islands with shared signal", - fn: async () => { +integrationTest( + "islands - revive multiple islands with shared signal", + async () => { const app = testApp() .get("/", (ctx) => { const sig = signal(0); @@ -125,208 +122,182 @@ Deno.test({ await waitForText(page, "#counter-2 .output", "1"); }); }, -}); - -Deno.test({ - // Note that computed signals are detached because we cannot - // serialize the whole signal tree at the moment. - name: "islands - should serialize computed", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - , - ); - }); - - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator("#comp.ready").wait(); - await page.locator("#comp .trigger").click(); - await waitForText(page, "#comp .output", "it works"); +); + +integrationTest("islands - should serialize computed", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + + , + ); }); - }, -}); -Deno.test({ - name: "islands - import json", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - , - ); - }); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator("#comp.ready").wait(); + await page.locator("#comp .trigger").click(); + await waitForText(page, "#comp .output", "it works"); + }); +}); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator("pre").wait(); - const text = await page - .locator("pre") - .evaluate((el) => el.textContent!); - const json = JSON.parse(text); - expect(json).toEqual({ foo: 123 }); +integrationTest("islands - import json", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + + , + ); }); - }, -}); -Deno.test({ - name: "islands - returns null", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - , - ); - }); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator("pre").wait(); + const text = await page + .locator("pre") + .evaluate((el) => el.textContent!); + const json = JSON.parse(text); + expect(json).toEqual({ foo: 123 }); + }); +}); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); +integrationTest("islands - returns null", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + + , + ); }); - }, + + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); + }); }); -Deno.test({ - name: "islands - only instantiate top level island", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - , - ); - }); +integrationTest("islands - only instantiate top level island", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + + , + ); + }); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); - await page.locator(".trigger").click(); - await waitForText(page, ".output", "1"); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); + await page.locator(".trigger").click(); + await waitForText(page, ".output", "1"); - const html = await page.content(); - expect(html).not.toContain("import { Counter }"); - }); - }, + const html = await page.content(); + expect(html).not.toContain("import { Counter }"); + }); }); -Deno.test({ - name: "islands - pass null JSX props to islands", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - {null} - , - ); - }); +integrationTest("islands - pass null JSX props to islands", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + {null} + , + ); + }); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); - const html = await page.content(); - const doc = parseHtml(html); - expect(doc.querySelector(".jsx")!.childNodes.length).toEqual(0); - expect(doc.querySelector(".children")!.childNodes.length).toEqual(0); - }); - }, + const html = await page.content(); + const doc = parseHtml(html); + expect(doc.querySelector(".jsx")!.childNodes.length).toEqual(0); + expect(doc.querySelector(".children")!.childNodes.length).toEqual(0); + }); }); -Deno.test({ - name: "islands - pass JSX props to islands", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - foo

}> -

bar

-
-
, - ); - }); +integrationTest("islands - pass JSX props to islands", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + foo

}> +

bar

+
+
, + ); + }); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); - const text = await page - .locator("pre") - .evaluate((el) => el.textContent!); - expect(JSON.parse(text)).toEqual({ jsx: true, children: true }); - }); - }, + const text = await page + .locator("pre") + .evaluate((el) => el.textContent!); + expect(JSON.parse(text)).toEqual({ jsx: true, children: true }); + }); }); -Deno.test({ - name: "islands - never serialize children prop", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - foobar - - , - ); - }); +integrationTest("islands - never serialize children prop", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + + foobar + + , + ); + }); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); - const text = await page - .locator("script") - .evaluate((el) => el.textContent!); - expect(text).not.toContain("foobar"); + const text = await page + .locator("script") + .evaluate((el) => el.textContent!); + expect(text).not.toContain("foobar"); - const childText = await page - .locator(".after") - .evaluate((el) => el.textContent!); - expect(childText).toEqual("foobar"); - }); - }, + const childText = await page + .locator(".after") + .evaluate((el) => el.textContent!); + expect(childText).toEqual("foobar"); + }); }); -Deno.test({ - name: "islands - instantiate islands in jsx children", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - -
- -
-
-
, - ); - }); +integrationTest("islands - instantiate islands in jsx children", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + +
+ +
+
+
, + ); + }); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); - await page.locator(".increment").click(); - await waitForText(page, ".output", "1"); - }); - }, + await page.locator(".increment").click(); + await waitForText(page, ".output", "1"); + }); }); -Deno.test({ - name: "islands - instantiate islands in jsx children with slots", - fn: async () => { +integrationTest( + "islands - instantiate islands in jsx children with slots", + async () => { const app = testApp() .get("/", (ctx) => { return ctx.render( @@ -359,406 +330,376 @@ Deno.test({ await waitForText(page, ".children .output", "1"); }); }, -}); - -Deno.test({ - name: "islands - nested children slots", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - +); + +integrationTest("islands - nested children slots", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + - -
- -
-
- -
- -
-
+
+ +
-
, - ); - }); - - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); - - await page.locator("#a .increment").click(); - await page.locator("#b .increment").click(); - - await waitForText(page, "#a .output", "1"); - await waitForText(page, "#b .output", "1"); - }); - }, -}); - -Deno.test({ - name: "islands - conditional jsx children", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - - - } - > +
- +
-
-
, - ); - }); + + +
, + ); + }); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); - await page.locator(".jsx .increment").click(); - await page.locator(".children .increment").click(); - await page.locator(".cond-update").click(); + await page.locator("#a .increment").click(); + await page.locator("#b .increment").click(); - await waitForText(page, ".cond-output", "1"); - await waitForText(page, ".jsx .output", "1"); - await waitForText(page, ".children .output", "1"); - }); - }, + await waitForText(page, "#a .output", "1"); + await waitForText(page, "#b .output", "1"); + }); }); -Deno.test({ - name: "islands - revive DOM attributes", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - -
-
- - - - - - - - - - -
+integrationTest("islands - conditional jsx children", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + +
-
-
, - ); - }); - - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); - - await page.locator(".children > .foo").wait(); - - const checkboxChecked = await page - .locator("input[name='check']") - .evaluate((el) => el.checked); - expect(checkboxChecked).toEqual(true); - - const required = await page - .locator("input[name='text']") - .evaluate((el) => el.required); - expect(required).toEqual(true); - - const radio1 = await page - .locator("input[type='radio'][value='1']") - .evaluate((el) => el.checked); - expect(radio1).toEqual(false); - - const radio2 = await page - .locator("input[type='radio'][value='2']") - .evaluate((el) => el.checked); - expect(radio2).toEqual(true); + } + > +
+ +
+ + , + ); }); - }, -}); -Deno.test({ - name: "islands - revive island with fn inside", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - , - ); - }); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); + await page.locator(".jsx .increment").click(); + await page.locator(".children .increment").click(); + await page.locator(".cond-update").click(); - const text = await page - .locator(".ready") - .evaluate((el) => el.textContent!); - expect(text).toEqual("it works"); - }); - }, + await waitForText(page, ".cond-output", "1"); + await waitForText(page, ".jsx .output", "1"); + await waitForText(page, ".children .output", "1"); + }); }); -Deno.test({ - name: "islands - escape props", - fn: async () => { - const app = testApp() - .get("/", (ctx) => { - return ctx.render( - - - , - ); - }) - .get("/foo", (ctx) => { - return ctx.render( - - alert('hey')`} /> - , - ); - }) - .get("/bar", (ctx) => { - return ctx.render( - - alert('hey')`} /> - , - ); - }); - - await withBrowserApp(app, async (page, address) => { - await page.goto(address, { waitUntil: "load" }); - await page.locator(".ready").wait(); - - // Page would error here - const text = await page - .locator(".ready p") - .evaluate((el) => el.textContent!); - expect(text).toEqual("it works"); - - // Page would error here - const text2 = await page - .locator(".ready div") - .evaluate((el) => el.textContent!); - expect(text2).toEqual(`"foo"asdf`); +integrationTest("islands - revive DOM attributes", async () => { + const app = testApp() + .get("/", (ctx) => { + return ctx.render( + + +
+
+ + + + + + + + + + +
+ +
+
+
, + ); }); - // Check escaping of ` { - await page.goto(`${address}/foo`, { waitUntil: "load" }); - - await page.locator(".ready").wait(); + await withBrowserApp(app, async (page, address) => { + await page.goto(address, { waitUntil: "load" }); + await page.locator(".ready").wait(); - const text = await page - .locator(".ready p") - .evaluate((el) => el.textContent!); - expect(text).toEqual("it works"); + await page.locator(".children > .foo").wait(); - const text2 = await page - .locator(".ready div") - .evaluate((el) => el.textContent!); - expect(text2).toEqual(``); - }); + const checkboxChecked = await page + .locator("input[name='check']") + .evaluate((el) => el.checked); + expect(checkboxChecked).toEqual(true); - // Check escaping of `