From 89a69e757dc107aa2454f584a20e1903a302496a Mon Sep 17 00:00:00 2001 From: "Alexis H. Munsayac" Date: Wed, 23 Sep 2026 22:18:14 +0800 Subject: [PATCH 1/5] feat: highlight error sources with twinkleplop Replace shiki with twinkleplop. The highlighter runs synchronously, so a stack frame's source appears with the panel instead of a moment later, and the package no longer carries a WebAssembly grammar engine: the build drops from 8.1 MB to 3.6 MB. The error line and the word the frame points at are marked with the `hl` and `err` directives, written as comments on their own lines above the snippet. The code is never edited to carry a marker, and a line holding only a marker is dropped from the output. Co-Authored-By: Claude Opus 5 --- .changeset/twinkleplop-highlighting.md | 8 + package.json | 5 +- pnpm-lock.yaml | 410 ++++---------------- rolldown.config.js | 24 +- src/dev-toolbar/error-viewer/CodeView.tsx | 116 ++---- src/dev-toolbar/error-viewer/env.d.ts | 4 - src/dev-toolbar/error-viewer/index.tsx | 1 + src/dev-toolbar/error-viewer/marker.test.ts | 51 +++ src/dev-toolbar/error-viewer/marker.ts | 61 +++ src/dev-toolbar/error-viewer/styles.css | 28 +- tests/e2e/devtools.spec.ts | 12 + 11 files changed, 270 insertions(+), 450 deletions(-) create mode 100644 .changeset/twinkleplop-highlighting.md delete mode 100644 src/dev-toolbar/error-viewer/env.d.ts create mode 100644 src/dev-toolbar/error-viewer/marker.test.ts create mode 100644 src/dev-toolbar/error-viewer/marker.ts diff --git a/.changeset/twinkleplop-highlighting.md b/.changeset/twinkleplop-highlighting.md new file mode 100644 index 0000000..4aca0f1 --- /dev/null +++ b/.changeset/twinkleplop-highlighting.md @@ -0,0 +1,8 @@ +--- +'@solidjs/start-devtools': patch +--- + +Highlight error sources with twinkleplop instead of shiki. + +The code view now highlights synchronously, so a stack frame's source appears with the panel rather than a moment later, and the toolbar no longer ships a WebAssembly grammar engine. The built package drops from 8.1 MB to 3.6 MB, and the error viewer chunk from 1.1 MB to 273 kB. +The error line and the word the frame points at are marked with twinkleplop's `hl` and `err` directives, written as comments above the snippet. The code itself is never edited to carry them, and the marker lines are dropped from the output. diff --git a/package.json b/package.json index 42ee50a..2edb97b 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,10 @@ "@playwright/test": "^1.62.1", "@solidjs/vite-plugin": "3.0.0-next.35", "@solidjs/web": "^2.0.0-rc.0", + "@twinkleplop/annotation": "^0.1.3", + "@twinkleplop/theme-github": "^0.2.0", + "@twinkleplop/tsx": "^0.1.3", + "@twinkleplop/typescript": "^0.1.3", "@types/node": "^24.0.0", "error-stack-parser-es": "^2.0.1", "html-to-image": "^1.11.13", @@ -71,7 +75,6 @@ "rolldown": "^1.2.4", "rolldown-plugin-dts": "^0.28.2", "seroval": "^1.6.0", - "shiki": "^4.3.1", "solid-js": "^2.0.0-rc.0", "terracotta": "2.0.0-next.9", "typescript": "^7.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da44693..4570864 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,18 @@ importers: '@solidjs/web': specifier: ^2.0.0-rc.0 version: 2.0.0-rc.0(solid-js@2.0.0-rc.0) + '@twinkleplop/annotation': + specifier: ^0.1.3 + version: 0.1.3 + '@twinkleplop/theme-github': + specifier: ^0.2.0 + version: 0.2.0 + '@twinkleplop/tsx': + specifier: ^0.1.3 + version: 0.1.3 + '@twinkleplop/typescript': + specifier: ^0.1.3 + version: 0.1.3 '@types/node': specifier: ^24.0.0 version: 24.13.3 @@ -53,9 +65,6 @@ importers: seroval: specifier: ^1.6.0 version: 1.6.2 - shiki: - specifier: ^4.3.1 - version: 4.4.3 solid-js: specifier: ^2.0.0-rc.0 version: 2.0.0-rc.0 @@ -569,37 +578,6 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} - '@shikijs/core@4.4.3': - resolution: {integrity: sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg==} - engines: {node: '>=20'} - - '@shikijs/engine-javascript@4.4.3': - resolution: {integrity: sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ==} - engines: {node: '>=20'} - - '@shikijs/engine-oniguruma@4.4.3': - resolution: {integrity: sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w==} - engines: {node: '>=20'} - - '@shikijs/langs@4.4.3': - resolution: {integrity: sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A==} - engines: {node: '>=20'} - - '@shikijs/primitive@4.4.3': - resolution: {integrity: sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ==} - engines: {node: '>=20'} - - '@shikijs/themes@4.4.3': - resolution: {integrity: sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw==} - engines: {node: '>=20'} - - '@shikijs/types@4.4.3': - resolution: {integrity: sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g==} - engines: {node: '>=20'} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -673,6 +651,30 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@twinkleplop/annotation@0.1.3': + resolution: {integrity: sha512-7rgXvsO/aLcTu0IzaMuOOZoTkVsuYWwsEItVtFY9vrw1r2EjL+ENKupXjdPY4tsDaAsTbK1NR88QadNbUt9GTw==} + + '@twinkleplop/core@0.2.0': + resolution: {integrity: sha512-rSzamqk0r8fF0O3LkeBpV+dnKLCwn/cM6ww1HTOVMl8QTu4EfeJqxOcMHq20cqCcE/Vvs+w/BENq++UywpSeSA==} + + '@twinkleplop/css@0.1.3': + resolution: {integrity: sha512-6ZB/rDLwkZLJlMaTiekCYkQ7DMcc52sO20FkIq60RtVw8Rr/q7bG5qCpX5tiFu7Z55y7Xj1JIY90mKQ6NjNJLA==} + + '@twinkleplop/html@0.1.3': + resolution: {integrity: sha512-CV+GvBPrKVhotoSO0LmKWUFUP01Ojj8G4+XJ8YN6cp9TcuxzaEKDyUgBG94l0qNwLjl9brd+GPcNnnjSeP9Lzg==} + + '@twinkleplop/javascript@0.1.3': + resolution: {integrity: sha512-32E+UMI3OVFaLwARSIyKgto1oUx5IjZpvY7T1ebYpq8nRE58P9TnPuqVs2UVBsxyC1OPrfAyEtrL9P8IT+40+A==} + + '@twinkleplop/theme-github@0.2.0': + resolution: {integrity: sha512-NXvq9duV5H42GyApEDTyPKXQtQhWfkCd+Cs6bNSSUgE92HWamfKS3gmmFnJYO7pDBPYa9Bub9MalKFxwIYXOIw==} + + '@twinkleplop/tsx@0.1.3': + resolution: {integrity: sha512-f3SguxVjX2/xGGqxieTV9RXSRB3xYdttw4rGcsmQPgalfDXb8A6te29Thg4WeSDo0U0pZquYlxlMOSJ3XcMWNg==} + + '@twinkleplop/typescript@0.1.3': + resolution: {integrity: sha512-M9jPfDCOvvyORUi6TEKvVUbvmdR0wu365E6P9aBE4x6I1LY83cXMfMYu2pCAH6qtMQmH7Xn6F5Ql17Jwta6omQ==} + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} @@ -697,21 +699,12 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/hast@3.0.5': - resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} '@types/node@24.13.3': resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript/typescript-aix-ppc64@7.0.2': resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} engines: {node: '>=16.20.0'} @@ -832,9 +825,6 @@ packages: cpu: [x64] os: [win32] - '@ungap/structured-clone@1.3.3': - resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==} - '@vitest/expect@4.1.11': resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} @@ -1057,9 +1047,6 @@ packages: caniuse-lite@1.0.30001810: resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -1076,12 +1063,6 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - chardet@2.2.0: resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} @@ -1107,9 +1088,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -1133,10 +1111,6 @@ packages: supports-color: optional: true - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -1145,9 +1119,6 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1279,12 +1250,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -1294,9 +1259,6 @@ packages: html-to-image@1.11.13: resolution: {integrity: sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==} - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - human-id@4.2.0: resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} hasBin: true @@ -1466,9 +1428,6 @@ packages: engines: {node: '>= 16'} hasBin: true - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - merge-anything@5.1.7: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} @@ -1477,21 +1436,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -1527,12 +1471,6 @@ packages: resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} engines: {node: '>=12.20.0'} - oniguruma-parser@0.12.2: - resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} - - oniguruma-to-es@4.3.6: - resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} - outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -1636,9 +1574,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - property-information@7.2.0: - resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} - publint@0.3.23: resolution: {integrity: sha512-5MQipUPcB7MWw84zLUkHrg/H/UBtk3LL+A0GngTTBSsiNJLQurMUaSIRG3edlOrRz4UFe0AOKK9TZdIWviV+jQ==} engines: {node: '>=18'} @@ -1654,15 +1589,6 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@6.1.0: - resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -1743,10 +1669,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@4.4.3: - resolution: {integrity: sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g==} - engines: {node: '>=20'} - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -1775,9 +1697,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} @@ -1794,9 +1713,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1854,9 +1770,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1877,21 +1790,6 @@ packages: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - - unist-util-visit@5.1.0: - resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -1909,12 +1807,6 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@8.2.1: resolution: {integrity: sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2045,9 +1937,6 @@ packages: yuku-parser@0.8.7: resolution: {integrity: sha512-vRD9nwt4L3aYpxNqeSC4WqLv58xrXef0Ong1Mc45CTXTIpvLafx7JO05sczmQZwdLEZvywrLOGdNC5+Rp5N1BQ==} - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - snapshots: '@ampproject/remapping@2.3.0': @@ -2585,46 +2474,6 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@shikijs/core@4.4.3': - dependencies: - '@shikijs/primitive': 4.4.3 - '@shikijs/types': 4.4.3 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.5 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@4.4.3': - dependencies: - '@shikijs/types': 4.4.3 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.6 - - '@shikijs/engine-oniguruma@4.4.3': - dependencies: - '@shikijs/types': 4.4.3 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@4.4.3': - dependencies: - '@shikijs/types': 4.4.3 - - '@shikijs/primitive@4.4.3': - dependencies: - '@shikijs/types': 4.4.3 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.5 - - '@shikijs/themes@4.4.3': - dependencies: - '@shikijs/types': 4.4.3 - - '@shikijs/types@4.4.3': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.5 - - '@shikijs/vscode-textmate@10.0.2': {} - '@sindresorhus/is@4.6.0': {} '@solidjs/babel-plugin@2.0.0-rc.7(@babel/core@7.29.7(supports-color@7.2.0))': @@ -2694,6 +2543,43 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@twinkleplop/annotation@0.1.3': + dependencies: + '@twinkleplop/core': 0.2.0 + + '@twinkleplop/core@0.2.0': {} + + '@twinkleplop/css@0.1.3': + dependencies: + '@twinkleplop/core': 0.2.0 + + '@twinkleplop/html@0.1.3': + dependencies: + '@twinkleplop/core': 0.2.0 + '@twinkleplop/css': 0.1.3 + '@twinkleplop/javascript': 0.1.3 + + '@twinkleplop/javascript@0.1.3': + dependencies: + '@twinkleplop/core': 0.2.0 + '@twinkleplop/css': 0.1.3 + '@twinkleplop/html': 0.1.3 + + '@twinkleplop/theme-github@0.2.0': + dependencies: + '@twinkleplop/core': 0.2.0 + + '@twinkleplop/tsx@0.1.3': + dependencies: + '@twinkleplop/core': 0.2.0 + '@twinkleplop/javascript': 0.1.3 + '@twinkleplop/typescript': 0.1.3 + + '@twinkleplop/typescript@0.1.3': + dependencies: + '@twinkleplop/core': 0.2.0 + '@twinkleplop/javascript': 0.1.3 + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -2729,22 +2615,12 @@ snapshots: '@types/estree@1.0.9': {} - '@types/hast@3.0.5': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - '@types/node@12.20.55': {} '@types/node@24.13.3': dependencies: undici-types: 7.18.2 - '@types/unist@3.0.3': {} - '@typescript/typescript-aix-ppc64@7.0.2': optional: true @@ -2805,8 +2681,6 @@ snapshots: '@typescript/typescript-win32-x64@7.0.2': optional: true - '@ungap/structured-clone@1.3.3': {} - '@vitest/expect@4.1.11': dependencies: '@standard-schema/spec': 1.1.0 @@ -2968,8 +2842,6 @@ snapshots: caniuse-lite@1.0.30001810: {} - ccount@2.0.1: {} - chai@6.2.2: {} chalk@4.1.2: @@ -2981,10 +2853,6 @@ snapshots: char-regex@1.0.2: {} - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - chardet@2.2.0: {} cjs-module-lexer@1.4.3: {} @@ -3016,8 +2884,6 @@ snapshots: color-name@1.1.4: {} - comma-separated-tokens@2.0.3: {} - commander@10.0.1: {} convert-source-map@2.0.0: {} @@ -3036,16 +2902,10 @@ snapshots: optionalDependencies: supports-color: 7.2.0 - dequal@2.0.3: {} - detect-indent@6.1.0: {} detect-libc@2.1.2: {} - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -3153,32 +3013,12 @@ snapshots: has-flag@4.0.0: {} - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.5 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - property-information: 7.2.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.5 - highlight.js@10.7.3: {} html-entities@2.3.3: {} html-to-image@1.11.13: {} - html-void-elements@3.0.0: {} - human-id@4.2.0: {} iconv-lite@0.7.3: @@ -3304,41 +3144,12 @@ snapshots: marked@9.1.6: {} - mdast-util-to-hast@13.2.1: - dependencies: - '@types/hast': 3.0.5 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.3 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - merge-anything@5.1.7: dependencies: is-what: 4.1.16 merge2@1.4.1: {} - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-encode@2.0.1: {} - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -3369,14 +3180,6 @@ snapshots: obug@2.1.4: {} - oniguruma-parser@0.12.2: {} - - oniguruma-to-es@4.3.6: - dependencies: - oniguruma-parser: 0.12.2 - regex: 6.1.0 - regex-recursion: 6.0.2 - outdent@0.5.0: {} oxfmt@0.64.0: @@ -3469,8 +3272,6 @@ snapshots: prettier@2.8.8: {} - property-information@7.2.0: {} - publint@0.3.23: dependencies: '@publint/pack': 0.1.6 @@ -3489,16 +3290,6 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.1.0: - dependencies: - regex-utilities: 2.3.0 - require-directory@2.1.1: {} resolve-from@5.0.0: {} @@ -3569,17 +3360,6 @@ snapshots: shebang-regex@3.0.0: {} - shiki@4.4.3: - dependencies: - '@shikijs/core': 4.4.3 - '@shikijs/engine-javascript': 4.4.3 - '@shikijs/engine-oniguruma': 4.4.3 - '@shikijs/langs': 4.4.3 - '@shikijs/themes': 4.4.3 - '@shikijs/types': 4.4.3 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.5 - siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -3603,8 +3383,6 @@ snapshots: source-map-js@1.2.1: {} - space-separated-tokens@2.0.2: {} - spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -3622,11 +3400,6 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3675,8 +3448,6 @@ snapshots: dependencies: is-number: 7.0.0 - trim-lines@3.0.1: {} - tslib@2.8.1: optional: true @@ -3709,29 +3480,6 @@ snapshots: unicode-emoji-modifier-base@1.0.0: {} - unist-util-is@6.0.1: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit@5.1.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - universalify@0.1.2: {} update-browserslist-db@1.3.2(browserslist@4.28.9): @@ -3744,16 +3492,6 @@ snapshots: validate-npm-package-name@5.0.1: {} - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - vite@8.2.1(@types/node@24.13.3): dependencies: lightningcss: 1.33.0 @@ -3865,5 +3603,3 @@ snapshots: '@yuku-parser/binding-linux-x64-musl': 0.8.7 '@yuku-parser/binding-win32-arm64': 0.8.7 '@yuku-parser/binding-win32-x64': 0.8.7 - - zwitch@2.0.4: {} diff --git a/rolldown.config.js b/rolldown.config.js index 245d323..32d53f7 100644 --- a/rolldown.config.js +++ b/rolldown.config.js @@ -56,28 +56,6 @@ function css(server = false) { }; } -function assetUrl() { - return { - name: 'devtools-asset-url', - async resolveId(source, importer) { - if (!source.endsWith('?url')) return null; - const resolved = await this.resolve(source.slice(0, -4), importer, { - skipSelf: true, - }); - return resolved ? `${resolved.id}?url` : null; - }, - load(id) { - if (!id.endsWith('?url')) return null; - const referenceId = this.emitFile({ - type: 'asset', - name: 'onig.wasm', - source: readFileSync(id.slice(0, -4)), - }); - return `export default import.meta.ROLLDOWN_FILE_URL_${referenceId};`; - }, - }; -} - function packageVersion() { const version = JSON.parse(readFileSync(new URL('./package.json', import.meta.url))).version; return { @@ -112,7 +90,7 @@ function config({ input, entryFileNames, chunkFileNames, generate, server = fals sourcemap: true, }, external, - plugins: [css(server), assetUrl(), packageVersion(), solid(generate)], + plugins: [css(server), packageVersion(), solid(generate)], }; } diff --git a/src/dev-toolbar/error-viewer/CodeView.tsx b/src/dev-toolbar/error-viewer/CodeView.tsx index f2f6a1d..c71c620 100644 --- a/src/dev-toolbar/error-viewer/CodeView.tsx +++ b/src/dev-toolbar/error-viewer/CodeView.tsx @@ -1,97 +1,63 @@ // @refresh skip -import { getSingletonHighlighterCore, type HighlighterCore } from 'shiki/core'; -import { createOnigurumaEngine } from 'shiki/engine/oniguruma'; -import langJS from 'shiki/langs/javascript.mjs'; -import langJSX from 'shiki/langs/jsx.mjs'; -import langTSX from 'shiki/langs/tsx.mjs'; -import langTS from 'shiki/langs/typescript.mjs'; -import url from 'shiki/onig.wasm?url'; -import darkPlus from 'shiki/themes/dark-plus.mjs'; -import { createEffect, createMemo } from 'solid-js'; +import { err, hl } from '@twinkleplop/annotation'; +import { language as tsxLanguage } from '@twinkleplop/tsx'; +import { language as typescriptLanguage } from '@twinkleplop/typescript'; +import { createMemo } from 'solid-js'; +import { withMarkers } from './marker.js'; import type { JSX } from '@solidjs/web'; - -let HIGHLIGHTER: HighlighterCore; - -async function loadHighlighter() { - if (!HIGHLIGHTER) { - HIGHLIGHTER = await getSingletonHighlighterCore({ - engine: createOnigurumaEngine(fetch(url)), - themes: [darkPlus], - langs: [langJS, langJSX, langTS, langTSX], - }); - } - return HIGHLIGHTER; +import '@twinkleplop/theme-github/dark'; + +const options = { + annotation: { + plugins: [hl, err], + // The markers are written by the panel, not by the reader, so a bad one is + // a bug here rather than something the app's console should carry. + on_error: () => {}, + }, +}; + +const highlighters = { + ts: typescriptLanguage(options), + tsx: tsxLanguage(options), +}; + +/** The grammar for a file. The TSX grammar also covers plain JavaScript and JSX. */ +function highlighterFor(fileName: string): (input: string, render?: object) => string { + const extension = fileName.split(/[#?]/)[0]!.split('.').pop()?.trim(); + return extension === 'ts' || extension === 'mts' || extension === 'cts' + ? highlighters.ts + : highlighters.tsx; } export interface CodeViewProps { fileName: string; content: string; line: number; + /** Column of the error, so the marker can point at one word instead of the line. */ + column?: number; } const RANGE = 15; export function CodeView(props: CodeViewProps): JSX.Element | null { - const lines = () => - props.content.split('\n').map((item, index) => ({ - index: index + 1, - line: item, - })); + const lines = () => props.content.split('\n'); const minLine = () => Math.max(props.line - (1 + RANGE), 0); const maxLine = () => Math.min(props.line + RANGE, lines().length - 1); - let ref: HTMLDivElement | undefined; + const html = createMemo(() => { + const snippet = lines().slice(minLine(), maxLine()); + const source = withMarkers({ + snippet, + // 1-based line of the error inside the snippet. + line: props.line - minLine(), + column: props.column, + }); - const data = createMemo(async () => { - const value = lines() - .slice(minLine(), maxLine()) - .map((item) => item.line) - .join('\n'); - const highlighter = await loadHighlighter(); - const fileExtension = props.fileName.split(/[#?]/)[0]!.split('.').pop()?.trim(); - // Only these grammars are loaded — anything else would make shiki - // throw. Fall back to plain JS highlighting for unknown sources. - let lang: 'js' | 'jsx' | 'ts' | 'tsx' = 'js'; - if ( - fileExtension === 'jsx' || - fileExtension === 'ts' || - fileExtension === 'tsx' || - fileExtension === 'js' - ) { - lang = fileExtension; - } - return highlighter.codeToHtml(value, { - theme: 'dark-plus', - lang, + return highlighterFor(props.fileName)(source, { + line_numbers: { start: minLine() + 1 }, }); }); - createEffect( - () => data(), - (result) => { - if (ref && result) { - ref.innerHTML = result; - - const lines = ref.querySelectorAll('span[class="line"]'); - - for (let i = 0, len = lines.length; i < len; i++) { - const el = lines[i] as HTMLElement; - if (props.line - minLine() - 1 === i) { - el.dataset.solidErrorViewerErrorLine = ''; - } - } - } - }, - ); - - return ( -
- ); + return
; } diff --git a/src/dev-toolbar/error-viewer/env.d.ts b/src/dev-toolbar/error-viewer/env.d.ts deleted file mode 100644 index 7636b5d..0000000 --- a/src/dev-toolbar/error-viewer/env.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.wasm?url' { - const url: string; - export default url; -} diff --git a/src/dev-toolbar/error-viewer/index.tsx b/src/dev-toolbar/error-viewer/index.tsx index 966950c..98f7d7e 100644 --- a/src/dev-toolbar/error-viewer/index.tsx +++ b/src/dev-toolbar/error-viewer/index.tsx @@ -172,6 +172,7 @@ function StackFramesContent(props: StackFramesContentProps) {
diff --git a/src/dev-toolbar/error-viewer/marker.test.ts b/src/dev-toolbar/error-viewer/marker.test.ts new file mode 100644 index 0000000..b77ba89 --- /dev/null +++ b/src/dev-toolbar/error-viewer/marker.test.ts @@ -0,0 +1,51 @@ +import { describe, expect, it } from 'vitest'; +import { withMarkers, wordAt } from './marker.js'; + +describe('wordAt', () => { + const line = ' throw new Error("boom");'; + + it('reads a 1-based column', () => { + expect(wordAt(line, 3)).toBe('throw'); + }); + + it('reads a 0-based column', () => { + expect(wordAt(line, 8)).toBe('new'); + }); + + it('keeps the whole word from any position inside it', () => { + expect(wordAt(line, 13)).toBe('Error'); + }); + + it('has no word for punctuation', () => { + expect(wordAt(line, 26)).toBeUndefined(); + }); + + // A digit is part of a number, and a number reads worse marked than its line. + it('has no word for a number', () => { + expect(wordAt('const total = 42;', 15)).toBeUndefined(); + }); + + it('has no word without a column', () => { + expect(wordAt(line, undefined)).toBeUndefined(); + }); +}); + +describe('withMarkers', () => { + const snippet = ['function boom() {', ' throw new Error("boom");', '}']; + + // Both markers are dropped from the output, and `:N` counts dropped lines. + it('marks the line and the word the column points at', () => { + expect(withMarkers({ snippet, line: 2, column: 3 }).split('\n').slice(0, 2)).toEqual([ + '// [!hl :4]', + '// [!err =throw :4]', + ]); + }); + + it('marks the line alone without a column', () => { + expect(withMarkers({ snippet, line: 2 }).split('\n')[0]).toBe('// [!hl :3]'); + }); + + it('leaves the snippet alone when the line is outside it', () => { + expect(withMarkers({ snippet, line: 9, column: 1 })).toBe(snippet.join('\n')); + }); +}); diff --git a/src/dev-toolbar/error-viewer/marker.ts b/src/dev-toolbar/error-viewer/marker.ts new file mode 100644 index 0000000..875d3f1 --- /dev/null +++ b/src/dev-toolbar/error-viewer/marker.ts @@ -0,0 +1,61 @@ +/** + * Builds the directive markers the code view puts above a snippet. + * + * Twinkleplop reads directives out of comments in the source it highlights, + * and drops a line that holds nothing else. Keeping the markers on their own + * lines means the code itself is never edited to carry them, which matters for + * a snippet the reader compares against their own file. + */ +const WORD = /[\p{L}\p{N}_$]/u; + +/** + * The word at a column. + * + * A column is 1-based in a stack frame and 0-based in a source map, and a + * frame arrives from either, so both readings are tried. + */ +export function wordAt(line: string | undefined, column: number | undefined): string | undefined { + if (!line || column === undefined) return undefined; + for (const candidate of [column - 1, column]) { + if (candidate < 0 || candidate >= line.length) continue; + if (!WORD.test(line[candidate]!)) continue; + let start = candidate; + while (start > 0 && WORD.test(line[start - 1]!)) start--; + let end = candidate; + while (end < line.length && WORD.test(line[end]!)) end++; + const word = line.slice(start, end); + // A word that starts with a digit is part of a number, which reads worse + // marked than the whole line does. + if (!/^\p{N}/u.test(word)) return word; + } + return undefined; +} + +export interface MarkerInput { + /** The lines of the snippet, without any markers. */ + snippet: string[]; + /** 1-based line of the error inside the snippet. */ + line: number; + /** Column of the error, when the frame carries one. */ + column?: number; +} + +/** + * The source to highlight: the markers, then the snippet. + * + * A line reference counts the lines that are dropped, so the error line moves + * down by however many markers sit above it. + */ +export function withMarkers(input: MarkerInput): string { + const { snippet, line, column } = input; + if (line < 1 || line > snippet.length) return snippet.join('\n'); + + const word = wordAt(snippet[line - 1], column); + const target = line + (word ? 2 : 1); + const markers = [`// [!hl :${target}]`]; + // The frame points at one word, which the error mark sits under while the + // line stays highlighted around it. + if (word) markers.push(`// [!err =${word} :${target}]`); + + return [...markers, ...snippet].join('\n'); +} diff --git a/src/dev-toolbar/error-viewer/styles.css b/src/dev-toolbar/error-viewer/styles.css index 09f44e1..7732998 100644 --- a/src/dev-toolbar/error-viewer/styles.css +++ b/src/dev-toolbar/error-viewer/styles.css @@ -246,27 +246,35 @@ height: 100%; } -[data-solid-error-viewer-code-view] > .shiki { +[data-solid-error-viewer-code-view] > .twinkleplop { float: left; min-width: 100%; overflow-x: auto; + margin: 0; font-size: 0.75rem; line-height: 1rem; - counter-reset: step; - counter-increment: step calc(var(--error-viewer-code-view-start, 1) - 1); - background-color: transparent !important; + background-color: transparent; } -[data-solid-error-viewer-code-view] > .shiki .line::before { - content: counter(step); - counter-increment: step; - width: 1rem; - margin-right: 1.5rem; +/* The highlighter numbers the lines, so the panel only has to place them. */ +[data-solid-error-viewer-code-view] .ln { display: inline-block; + width: 2.5rem; + margin-right: 1rem; text-align: right; color: rgba(115, 138, 148, 0.4); } -[data-solid-error-viewer-error-line] { +/* The `hl` directive marks the line the frame points at. */ +[data-solid-error-viewer-code-view] .l.highlight { + display: inline-block; + min-width: 100%; background-color: oklch(0.63 0.21 25 / 0.25); } + +/* The `err` directive marks the word inside it, when the frame has a column. */ +[data-solid-error-viewer-code-view] .tok.error { + border-radius: 0.125rem; + background-color: oklch(0.63 0.21 25 / 0.35); + box-shadow: 0 1px 0 0 oklch(0.63 0.21 25 / 0.9); +} diff --git a/tests/e2e/devtools.spec.ts b/tests/e2e/devtools.spec.ts index cf69381..c1c82c1 100644 --- a/tests/e2e/devtools.spec.ts +++ b/tests/e2e/devtools.spec.ts @@ -41,6 +41,18 @@ test('captures client errors', async ({ page }) => { // Frames come from the parsed stack, so an empty list means the parser broke. const frames = page.locator('[data-solid-error-viewer-stack-frame]'); await expect(frames.first()).toContainText('app.tsx'); + + // The source is highlighted, and the frame's line and word are marked by the + // directives the panel writes above the snippet. + const code = page.locator('[data-solid-error-viewer-code-view]').first(); + await expect(code.locator('.twinkleplop')).toBeVisible(); + await expect(code.locator('.l.highlight')).toHaveCount(1); + await expect(code.locator('.l.highlight')).toContainText('client boom'); + await expect(code.locator('.tok.error')).toHaveCount(1); + + // The markers themselves never reach the reader. + await expect(code).not.toContainText('[!hl'); + await expect(code).not.toContainText('[!err'); }); test('shows server-function calls', async ({ page }) => { From d4f310e21b507b7492fe101bea611c8b6c0d83c7 Mon Sep 17 00:00:00 2001 From: "Alexis H. Munsayac" Date: Wed, 23 Sep 2026 22:26:00 +0800 Subject: [PATCH 2/5] fix: highlight the whole file and hide what the window leaves out The code view cut the file down to the window it shows before highlighting it. A window that starts inside a block comment or a template literal left the highlighter reading an opening it never saw, and every line after that read as comment. The whole file is highlighted now, and the lines outside the window are hidden through render overlays instead of cut away. The frame's line is marked with the `focus` directive, so the lines around it can step back. Co-Authored-By: Claude Opus 5 --- .changeset/twinkleplop-highlighting.md | 3 +- src/dev-toolbar/error-viewer/CodeView.tsx | 52 ++-------- src/dev-toolbar/error-viewer/highlight.ts | 39 ++++++++ src/dev-toolbar/error-viewer/marker.test.ts | 71 +++++++++++-- src/dev-toolbar/error-viewer/marker.ts | 104 ++++++++++++++------ src/dev-toolbar/error-viewer/styles.css | 10 +- tests/e2e/devtools.spec.ts | 11 ++- 7 files changed, 203 insertions(+), 87 deletions(-) create mode 100644 src/dev-toolbar/error-viewer/highlight.ts diff --git a/.changeset/twinkleplop-highlighting.md b/.changeset/twinkleplop-highlighting.md index 4aca0f1..ae14eaf 100644 --- a/.changeset/twinkleplop-highlighting.md +++ b/.changeset/twinkleplop-highlighting.md @@ -5,4 +5,5 @@ Highlight error sources with twinkleplop instead of shiki. The code view now highlights synchronously, so a stack frame's source appears with the panel rather than a moment later, and the toolbar no longer ships a WebAssembly grammar engine. The built package drops from 8.1 MB to 3.6 MB, and the error viewer chunk from 1.1 MB to 273 kB. -The error line and the word the frame points at are marked with twinkleplop's `hl` and `err` directives, written as comments above the snippet. The code itself is never edited to carry them, and the marker lines are dropped from the output. +The panel highlights the whole file and hides the lines outside the window it shows. Cutting the file first left the highlighter reading a block comment or template literal it never saw open, which broke the colours for the rest of the snippet. +The frame's line is marked with the `focus` directive and the word it points at with `err`, both written as comments above the file. The code itself is never edited to carry them, and marker lines are dropped from the output. diff --git a/src/dev-toolbar/error-viewer/CodeView.tsx b/src/dev-toolbar/error-viewer/CodeView.tsx index c71c620..7d4e45a 100644 --- a/src/dev-toolbar/error-viewer/CodeView.tsx +++ b/src/dev-toolbar/error-viewer/CodeView.tsx @@ -1,34 +1,9 @@ // @refresh skip -import { err, hl } from '@twinkleplop/annotation'; -import { language as tsxLanguage } from '@twinkleplop/tsx'; -import { language as typescriptLanguage } from '@twinkleplop/typescript'; import { createMemo } from 'solid-js'; -import { withMarkers } from './marker.js'; import type { JSX } from '@solidjs/web'; +import { codeToHtml } from './highlight.js'; import '@twinkleplop/theme-github/dark'; -const options = { - annotation: { - plugins: [hl, err], - // The markers are written by the panel, not by the reader, so a bad one is - // a bug here rather than something the app's console should carry. - on_error: () => {}, - }, -}; - -const highlighters = { - ts: typescriptLanguage(options), - tsx: tsxLanguage(options), -}; - -/** The grammar for a file. The TSX grammar also covers plain JavaScript and JSX. */ -function highlighterFor(fileName: string): (input: string, render?: object) => string { - const extension = fileName.split(/[#?]/)[0]!.split('.').pop()?.trim(); - return extension === 'ts' || extension === 'mts' || extension === 'cts' - ? highlighters.ts - : highlighters.tsx; -} - export interface CodeViewProps { fileName: string; content: string; @@ -40,24 +15,15 @@ export interface CodeViewProps { const RANGE = 15; export function CodeView(props: CodeViewProps): JSX.Element | null { - const lines = () => props.content.split('\n'); - - const minLine = () => Math.max(props.line - (1 + RANGE), 0); - const maxLine = () => Math.min(props.line + RANGE, lines().length - 1); - - const html = createMemo(() => { - const snippet = lines().slice(minLine(), maxLine()); - const source = withMarkers({ - snippet, - // 1-based line of the error inside the snippet. - line: props.line - minLine(), + const html = createMemo(() => + codeToHtml({ + fileName: props.fileName, + content: props.content, + line: props.line, column: props.column, - }); - - return highlighterFor(props.fileName)(source, { - line_numbers: { start: minLine() + 1 }, - }); - }); + range: RANGE, + }), + ); return
; } diff --git a/src/dev-toolbar/error-viewer/highlight.ts b/src/dev-toolbar/error-viewer/highlight.ts new file mode 100644 index 0000000..c26710e --- /dev/null +++ b/src/dev-toolbar/error-viewer/highlight.ts @@ -0,0 +1,39 @@ +import { err, focus } from '@twinkleplop/annotation'; +import { language as tsxLanguage } from '@twinkleplop/tsx'; +import { language as typescriptLanguage } from '@twinkleplop/typescript'; +import { buildSnippet, type SnippetInput } from './marker.js'; + +const options = { + annotation: { + plugins: [focus, err], + // The markers are written by the panel, not by the reader, so a bad one is + // a bug here rather than something the app's console should carry. + on_error: () => {}, + }, +}; + +const highlighters = { + ts: typescriptLanguage(options), + tsx: tsxLanguage(options), +}; + +/** The grammar for a file. The TSX grammar also covers plain JavaScript and JSX. */ +function highlighterFor(fileName: string) { + const extension = fileName.split(/[#?]/)[0]!.split('.').pop()?.trim(); + return extension === 'ts' || extension === 'mts' || extension === 'cts' + ? highlighters.ts + : highlighters.tsx; +} + +export interface CodeHtmlInput extends SnippetInput { + fileName: string; +} + +/** The window around a frame, highlighted as part of the whole file. */ +export function codeToHtml(input: CodeHtmlInput): string { + const { source, hidden, firstLine } = buildSnippet(input); + return highlighterFor(input.fileName)(source, { + line_numbers: { start: firstLine }, + overlays: hidden, + }); +} diff --git a/src/dev-toolbar/error-viewer/marker.test.ts b/src/dev-toolbar/error-viewer/marker.test.ts index b77ba89..1f0c6f1 100644 --- a/src/dev-toolbar/error-viewer/marker.test.ts +++ b/src/dev-toolbar/error-viewer/marker.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { withMarkers, wordAt } from './marker.js'; +import { codeToHtml } from './highlight.js'; +import { buildSnippet, wordAt } from './marker.js'; describe('wordAt', () => { const line = ' throw new Error("boom");'; @@ -30,22 +31,72 @@ describe('wordAt', () => { }); }); -describe('withMarkers', () => { - const snippet = ['function boom() {', ' throw new Error("boom");', '}']; +const FILE = [ + '/**', + ' * A block comment the window would cut in half.', + ' * More of it.', + ' */', + 'export function boom() {', + ' throw new Error("bang");', + '}', + '', + 'const tail = 1;', +].join('\n'); +describe('buildSnippet', () => { // Both markers are dropped from the output, and `:N` counts dropped lines. it('marks the line and the word the column points at', () => { - expect(withMarkers({ snippet, line: 2, column: 3 }).split('\n').slice(0, 2)).toEqual([ - '// [!hl :4]', - '// [!err =throw :4]', - ]); + const { source } = buildSnippet({ content: FILE, line: 6, column: 3, range: 1 }); + expect(source.split('\n').slice(0, 2)).toEqual(['// [!focus :8]', '// [!err =throw :8]']); }); it('marks the line alone without a column', () => { - expect(withMarkers({ snippet, line: 2 }).split('\n')[0]).toBe('// [!hl :3]'); + const { source } = buildSnippet({ content: FILE, line: 6, range: 1 }); + expect(source.split('\n')[0]).toBe('// [!focus :7]'); }); - it('leaves the snippet alone when the line is outside it', () => { - expect(withMarkers({ snippet, line: 9, column: 1 })).toBe(snippet.join('\n')); + it('keeps the whole file and hides what sits outside the window', () => { + const { source, hidden, firstLine } = buildSnippet({ + content: FILE, + line: 6, + column: 3, + range: 1, + }); + + expect(source).toContain('A block comment the window would cut in half.'); + expect(firstLine).toBe(5); + expect(hidden).toHaveLength(2); + // The head runs to the start of the first shown line, the tail to the end. + expect(hidden[0]!.start).toBe(0); + expect(hidden[1]!.end).toBe(source.length); + }); + + it('hides nothing when the window covers the file', () => { + expect(buildSnippet({ content: FILE, line: 5, range: 50 }).hidden).toHaveLength(0); + }); +}); + +describe('codeToHtml', () => { + // Cutting the file at the window would leave the highlighter inside a block + // comment it never saw open, and every line after it would read as comment. + it('highlights a window under an unclosed-looking comment', () => { + const html = codeToHtml({ + fileName: 'boom.ts', + content: FILE, + line: 6, + column: 3, + range: 1, + }); + + expect(html).toContain('throw'); + expect(html).not.toContain('A block comment'); + expect(html).toContain('5'); + }); + + it('puts the frame in focus and marks its word', () => { + const html = codeToHtml({ fileName: 'boom.ts', content: FILE, line: 6, column: 3, range: 1 }); + + expect(html).toContain('class="l focus"'); + expect(html).toContain(''); }); }); diff --git a/src/dev-toolbar/error-viewer/marker.ts b/src/dev-toolbar/error-viewer/marker.ts index 875d3f1..3b8ae34 100644 --- a/src/dev-toolbar/error-viewer/marker.ts +++ b/src/dev-toolbar/error-viewer/marker.ts @@ -1,10 +1,15 @@ /** - * Builds the directive markers the code view puts above a snippet. + * Prepares the source the code view highlights. * - * Twinkleplop reads directives out of comments in the source it highlights, - * and drops a line that holds nothing else. Keeping the markers on their own - * lines means the code itself is never edited to carry them, which matters for - * a snippet the reader compares against their own file. + * The panel shows a window around a stack frame, but it highlights the whole + * file and hides the rest. A window is a blunt cut: starting it inside a block + * comment or a template literal leaves the highlighter reading an opening it + * never saw, and the colours fall apart from there. Hiding instead of cutting + * keeps the file whole for the tokenizer and shows the reader the same lines. + * + * Twinkleplop reads directives out of comments in the source it highlights and + * drops a line that holds nothing else, so the markers sit on their own lines + * above the file and the code is never edited to carry them. */ const WORD = /[\p{L}\p{N}_$]/u; @@ -31,31 +36,74 @@ export function wordAt(line: string | undefined, column: number | undefined): st return undefined; } -export interface MarkerInput { - /** The lines of the snippet, without any markers. */ - snippet: string[]; - /** 1-based line of the error inside the snippet. */ +/** A range of the source the renderer leaves out. */ +export interface HiddenRange { + start: number; + end: number; + hide: true; +} + +export interface SnippetInput { + content: string; + /** 1-based line of the frame inside the file. */ line: number; - /** Column of the error, when the frame carries one. */ + /** Column of the frame, when it carries one. */ column?: number; + /** How many lines to show on each side of the frame. */ + range: number; } -/** - * The source to highlight: the markers, then the snippet. - * - * A line reference counts the lines that are dropped, so the error line moves - * down by however many markers sit above it. - */ -export function withMarkers(input: MarkerInput): string { - const { snippet, line, column } = input; - if (line < 1 || line > snippet.length) return snippet.join('\n'); - - const word = wordAt(snippet[line - 1], column); - const target = line + (word ? 2 : 1); - const markers = [`// [!hl :${target}]`]; - // The frame points at one word, which the error mark sits under while the - // line stays highlighted around it. - if (word) markers.push(`// [!err =${word} :${target}]`); - - return [...markers, ...snippet].join('\n'); +export interface Snippet { + /** The whole file, with the markers above it. */ + source: string; + /** The parts outside the window, which the renderer leaves out. */ + hidden: HiddenRange[]; + /** The number the first shown line carries. */ + firstLine: number; +} + +/** Byte offset of the start of every line. */ +function lineStarts(source: string): number[] { + const starts = [0]; + for (let index = 0; index < source.length; index++) { + if (source[index] === '\n') starts.push(index + 1); + } + return starts; +} + +export function buildSnippet(input: SnippetInput): Snippet { + const { content, line, column, range } = input; + const lines = content.split('\n'); + + const first = Math.max(line - range, 1); + const last = Math.min(line + range, lines.length); + + const markers: string[] = []; + if (line >= 1 && line <= lines.length) { + // A line reference counts the lines that are dropped, so the frame's line + // sits below the markers by however many there are. + const word = wordAt(lines[line - 1], column); + const target = line + (word ? 2 : 1); + markers.push(`// [!focus :${target}]`); + // The frame points at one word, which the error mark sits under while the + // line around it stays in focus. + if (word) markers.push(`// [!err =${word} :${target}]`); + } + + const source = [...markers, content].join('\n'); + const starts = lineStarts(source); + const offset = markers.length; + + // The marker lines are dropped on their own, so only the file's own lines + // outside the window are hidden. + const hidden: HiddenRange[] = []; + if (first > 1) hidden.push({ start: 0, end: starts[offset + first - 1]!, hide: true }); + if (last < lines.length) { + const tail = starts[offset + last]; + if (tail !== undefined && tail < source.length) { + hidden.push({ start: tail, end: source.length, hide: true }); + } + } + + return { source, hidden, firstLine: first }; } diff --git a/src/dev-toolbar/error-viewer/styles.css b/src/dev-toolbar/error-viewer/styles.css index 7732998..394cd88 100644 --- a/src/dev-toolbar/error-viewer/styles.css +++ b/src/dev-toolbar/error-viewer/styles.css @@ -265,13 +265,19 @@ color: rgba(115, 138, 148, 0.4); } -/* The `hl` directive marks the line the frame points at. */ -[data-solid-error-viewer-code-view] .l.highlight { +/* The `focus` directive marks the line the frame points at. */ +[data-solid-error-viewer-code-view] .l.focus { display: inline-block; min-width: 100%; background-color: oklch(0.63 0.21 25 / 0.25); } +/* The highlighter tags the block when a line is in focus, so the lines around + it can step back without the panel tracking which line that is. */ +[data-solid-error-viewer-code-view] .has-focus .l:not(.focus) { + opacity: 0.65; +} + /* The `err` directive marks the word inside it, when the frame has a column. */ [data-solid-error-viewer-code-view] .tok.error { border-radius: 0.125rem; diff --git a/tests/e2e/devtools.spec.ts b/tests/e2e/devtools.spec.ts index c1c82c1..2950090 100644 --- a/tests/e2e/devtools.spec.ts +++ b/tests/e2e/devtools.spec.ts @@ -46,12 +46,17 @@ test('captures client errors', async ({ page }) => { // directives the panel writes above the snippet. const code = page.locator('[data-solid-error-viewer-code-view]').first(); await expect(code.locator('.twinkleplop')).toBeVisible(); - await expect(code.locator('.l.highlight')).toHaveCount(1); - await expect(code.locator('.l.highlight')).toContainText('client boom'); + await expect(code.locator('.l.focus')).toHaveCount(1); + await expect(code.locator('.l.focus')).toContainText('client boom'); await expect(code.locator('.tok.error')).toHaveCount(1); + // The window is cut out of a whole highlighted file, so the lines outside it + // are gone while the code inside them still reads correctly. + await expect(code).not.toContainText('emitServerFunctionResponse'); + await expect(code.locator('.tok.keyword').first()).toBeVisible(); + // The markers themselves never reach the reader. - await expect(code).not.toContainText('[!hl'); + await expect(code).not.toContainText('[!focus'); await expect(code).not.toContainText('[!err'); }); From aeadd60e7b2581861a376f23f4e90864157064a7 Mon Sep 17 00:00:00 2001 From: "Alexis H. Munsayac" Date: Wed, 23 Sep 2026 22:31:52 +0800 Subject: [PATCH 3/5] fix: keep the lines the code view can scroll to The view showed fifteen lines on each side of the frame, while its scrollbar reaches about twenty-five, so the reader could scroll into lines that were not there. It now keeps far more of the file than the scrollbar can reach and opens on the frame's line. The bound is only there to stop a very large file from putting every one of its lines in the page. Co-Authored-By: Claude Opus 5 --- .changeset/twinkleplop-highlighting.md | 2 +- src/dev-toolbar/error-viewer/CodeView.tsx | 27 ++++++++++++++++++++--- tests/e2e/devtools.spec.ts | 16 ++++++++++---- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/.changeset/twinkleplop-highlighting.md b/.changeset/twinkleplop-highlighting.md index ae14eaf..6f937d8 100644 --- a/.changeset/twinkleplop-highlighting.md +++ b/.changeset/twinkleplop-highlighting.md @@ -5,5 +5,5 @@ Highlight error sources with twinkleplop instead of shiki. The code view now highlights synchronously, so a stack frame's source appears with the panel rather than a moment later, and the toolbar no longer ships a WebAssembly grammar engine. The built package drops from 8.1 MB to 3.6 MB, and the error viewer chunk from 1.1 MB to 273 kB. -The panel highlights the whole file and hides the lines outside the window it shows. Cutting the file first left the highlighter reading a block comment or template literal it never saw open, which broke the colours for the rest of the snippet. +The panel highlights the whole file rather than cutting it down to the lines around the frame. Cutting first left the highlighter reading a block comment or template literal it never saw open, which broke the colours for the rest of the snippet, and it took away lines the reader could otherwise scroll to. The view opens on the frame's line instead. The frame's line is marked with the `focus` directive and the word it points at with `err`, both written as comments above the file. The code itself is never edited to carry them, and marker lines are dropped from the output. diff --git a/src/dev-toolbar/error-viewer/CodeView.tsx b/src/dev-toolbar/error-viewer/CodeView.tsx index 7d4e45a..11d9422 100644 --- a/src/dev-toolbar/error-viewer/CodeView.tsx +++ b/src/dev-toolbar/error-viewer/CodeView.tsx @@ -1,5 +1,5 @@ // @refresh skip -import { createMemo } from 'solid-js'; +import { createEffect, createMemo, createSignal } from 'solid-js'; import type { JSX } from '@solidjs/web'; import { codeToHtml } from './highlight.js'; import '@twinkleplop/theme-github/dark'; @@ -12,9 +12,18 @@ export interface CodeViewProps { column?: number; } -const RANGE = 15; +/** + * Lines kept on each side of the frame. + * + * The view scrolls, so anything the reader can scroll to has to be there. This + * is far past the reach of the scrollbar and only stops a very large file from + * putting every one of its lines in the page. + */ +const RANGE = 250; export function CodeView(props: CodeViewProps): JSX.Element | null { + const [element, setElement] = createSignal(); + const html = createMemo(() => codeToHtml({ fileName: props.fileName, @@ -25,5 +34,17 @@ export function CodeView(props: CodeViewProps): JSX.Element | null { }), ); - return
; + // The frame can sit anywhere in the file, so the view opens on it. Scrolling + // the box itself leaves the page where it is. + createEffect( + () => ({ view: element(), code: html() }), + ({ view }) => { + if (!view) return; + const focused = view.querySelector('.focus') as HTMLElement | null; + if (!focused) return; + view.scrollTop = Math.max(focused.offsetTop - view.clientHeight / 2, 0); + }, + ); + + return
; } diff --git a/tests/e2e/devtools.spec.ts b/tests/e2e/devtools.spec.ts index 2950090..31375f0 100644 --- a/tests/e2e/devtools.spec.ts +++ b/tests/e2e/devtools.spec.ts @@ -50,10 +50,18 @@ test('captures client errors', async ({ page }) => { await expect(code.locator('.l.focus')).toContainText('client boom'); await expect(code.locator('.tok.error')).toHaveCount(1); - // The window is cut out of a whole highlighted file, so the lines outside it - // are gone while the code inside them still reads correctly. - await expect(code).not.toContainText('emitServerFunctionResponse'); - await expect(code.locator('.tok.keyword').first()).toBeVisible(); + // The view scrolls, so it holds the lines the reader can scroll to rather + // than a window cut around the frame. + await expect(code).toContainText('emitServerFunctionResponse'); + + // It opens on the frame instead of the top of the file. + expect( + await code.evaluate((view) => { + const focused = view.querySelector('.focus')!.getBoundingClientRect(); + const box = view.getBoundingClientRect(); + return focused.top >= box.top && focused.bottom <= box.bottom; + }), + ).toBe(true); // The markers themselves never reach the reader. await expect(code).not.toContainText('[!focus'); From d0b73be3dd4128529965ee8733bd1085dc3db0f9 Mon Sep 17 00:00:00 2001 From: "Alexis H. Munsayac" Date: Wed, 23 Sep 2026 22:40:47 +0800 Subject: [PATCH 4/5] fix: show twenty-five lines on each side of a frame The code view keeps a window that matches how far it scrolls, so the reader never scrolls into lines that are missing and the panel never holds a whole file. The window is cut after highlighting, not before, so a block comment or template literal above it still reads correctly. Lines outside it are tagged through the renderer's line hook and dropped from the markup, which the hide overlays did not do at the offsets they were given. Co-Authored-By: Claude Opus 5 --- .changeset/twinkleplop-highlighting.md | 2 +- src/dev-toolbar/error-viewer/CodeView.tsx | 7 +-- src/dev-toolbar/error-viewer/highlight.ts | 37 +++++++++++-- src/dev-toolbar/error-viewer/marker.test.ts | 26 +++++---- src/dev-toolbar/error-viewer/marker.ts | 61 ++++++--------------- tests/e2e/devtools.spec.ts | 5 +- 6 files changed, 73 insertions(+), 65 deletions(-) diff --git a/.changeset/twinkleplop-highlighting.md b/.changeset/twinkleplop-highlighting.md index 6f937d8..dc93a27 100644 --- a/.changeset/twinkleplop-highlighting.md +++ b/.changeset/twinkleplop-highlighting.md @@ -5,5 +5,5 @@ Highlight error sources with twinkleplop instead of shiki. The code view now highlights synchronously, so a stack frame's source appears with the panel rather than a moment later, and the toolbar no longer ships a WebAssembly grammar engine. The built package drops from 8.1 MB to 3.6 MB, and the error viewer chunk from 1.1 MB to 273 kB. -The panel highlights the whole file rather than cutting it down to the lines around the frame. Cutting first left the highlighter reading a block comment or template literal it never saw open, which broke the colours for the rest of the snippet, and it took away lines the reader could otherwise scroll to. The view opens on the frame's line instead. +The panel highlights the whole file and keeps twenty-five lines on each side of the frame, which is about as far as the view scrolls. Cutting the file before highlighting it left the highlighter reading a block comment or template literal it never saw open, and the colours fell apart from there. The view opens on the frame's line. The frame's line is marked with the `focus` directive and the word it points at with `err`, both written as comments above the file. The code itself is never edited to carry them, and marker lines are dropped from the output. diff --git a/src/dev-toolbar/error-viewer/CodeView.tsx b/src/dev-toolbar/error-viewer/CodeView.tsx index 11d9422..9093615 100644 --- a/src/dev-toolbar/error-viewer/CodeView.tsx +++ b/src/dev-toolbar/error-viewer/CodeView.tsx @@ -15,11 +15,10 @@ export interface CodeViewProps { /** * Lines kept on each side of the frame. * - * The view scrolls, so anything the reader can scroll to has to be there. This - * is far past the reach of the scrollbar and only stops a very large file from - * putting every one of its lines in the page. + * The view scrolls about this far, so the snippet holds what the reader can + * scroll to and nothing beyond it. */ -const RANGE = 250; +const RANGE = 25; export function CodeView(props: CodeViewProps): JSX.Element | null { const [element, setElement] = createSignal(); diff --git a/src/dev-toolbar/error-viewer/highlight.ts b/src/dev-toolbar/error-viewer/highlight.ts index c26710e..dc62e2d 100644 --- a/src/dev-toolbar/error-viewer/highlight.ts +++ b/src/dev-toolbar/error-viewer/highlight.ts @@ -25,15 +25,44 @@ function highlighterFor(fileName: string) { : highlighters.tsx; } +const OUTSIDE = 'data-outside'; + +/** + * Removes the lines the window leaves out. + * + * The highlighter writes one row per line and joins them with newlines, and a + * row never holds a newline of its own, so the rows split cleanly. The wrapper + * around them is kept whatever the first shown line is. + */ +function dropOutsideRows(html: string): string { + const open = html.indexOf(''); + const close = html.lastIndexOf(''); + if (open < 0 || close < 0) return html; + + const start = open + ''.length; + const rows = html + .slice(start, close) + .split('\n') + .filter((row) => !row.includes(OUTSIDE)); + + return html.slice(0, start) + rows.join('\n') + html.slice(close); +} + export interface CodeHtmlInput extends SnippetInput { fileName: string; } /** The window around a frame, highlighted as part of the whole file. */ export function codeToHtml(input: CodeHtmlInput): string { - const { source, hidden, firstLine } = buildSnippet(input); - return highlighterFor(input.fileName)(source, { - line_numbers: { start: firstLine }, - overlays: hidden, + const { source, offset, first, last } = buildSnippet(input); + + const html = highlighterFor(input.fileName)(source, { + line_numbers: { start: 1 }, + line: (_rendered: number, sourceLine: number) => { + const line = sourceLine - offset; + return line < first || line > last ? { attrs: { [OUTSIDE]: '' } } : undefined; + }, }); + + return dropOutsideRows(html); } diff --git a/src/dev-toolbar/error-viewer/marker.test.ts b/src/dev-toolbar/error-viewer/marker.test.ts index 1f0c6f1..30285d2 100644 --- a/src/dev-toolbar/error-viewer/marker.test.ts +++ b/src/dev-toolbar/error-viewer/marker.test.ts @@ -55,8 +55,8 @@ describe('buildSnippet', () => { expect(source.split('\n')[0]).toBe('// [!focus :7]'); }); - it('keeps the whole file and hides what sits outside the window', () => { - const { source, hidden, firstLine } = buildSnippet({ + it('keeps the whole file and names the window around the frame', () => { + const { source, first, last, offset } = buildSnippet({ content: FILE, line: 6, column: 3, @@ -64,15 +64,12 @@ describe('buildSnippet', () => { }); expect(source).toContain('A block comment the window would cut in half.'); - expect(firstLine).toBe(5); - expect(hidden).toHaveLength(2); - // The head runs to the start of the first shown line, the tail to the end. - expect(hidden[0]!.start).toBe(0); - expect(hidden[1]!.end).toBe(source.length); + expect({ first, last, offset }).toEqual({ first: 5, last: 7, offset: 2 }); }); - it('hides nothing when the window covers the file', () => { - expect(buildSnippet({ content: FILE, line: 5, range: 50 }).hidden).toHaveLength(0); + it('stops the window at the ends of the file', () => { + const { first, last } = buildSnippet({ content: FILE, line: 5, range: 50 }); + expect({ first, last }).toEqual({ first: 1, last: 9 }); }); }); @@ -90,7 +87,16 @@ describe('codeToHtml', () => { expect(html).toContain('throw'); expect(html).not.toContain('A block comment'); - expect(html).toContain('5'); + }); + + // The numbers are the file's own, and only the window's lines are kept. + it('keeps the window and numbers it by the file', () => { + const html = codeToHtml({ fileName: 'boom.ts', content: FILE, line: 6, column: 3, range: 1 }); + const numbers = [...html.matchAll(/(\d+)<\/span>/g)].map((match) => + Number(match[1]), + ); + + expect(numbers).toEqual([5, 6, 7]); }); it('puts the frame in focus and marks its word', () => { diff --git a/src/dev-toolbar/error-viewer/marker.ts b/src/dev-toolbar/error-viewer/marker.ts index 3b8ae34..2672b59 100644 --- a/src/dev-toolbar/error-viewer/marker.ts +++ b/src/dev-toolbar/error-viewer/marker.ts @@ -2,10 +2,10 @@ * Prepares the source the code view highlights. * * The panel shows a window around a stack frame, but it highlights the whole - * file and hides the rest. A window is a blunt cut: starting it inside a block - * comment or a template literal leaves the highlighter reading an opening it - * never saw, and the colours fall apart from there. Hiding instead of cutting - * keeps the file whole for the tokenizer and shows the reader the same lines. + * file and drops the lines outside the window afterwards. A window is a blunt + * cut: starting it inside a block comment or a template literal leaves the + * highlighter reading an opening it never saw, and the colours fall apart from + * there. * * Twinkleplop reads directives out of comments in the source it highlights and * drops a line that holds nothing else, so the markers sit on their own lines @@ -36,48 +36,31 @@ export function wordAt(line: string | undefined, column: number | undefined): st return undefined; } -/** A range of the source the renderer leaves out. */ -export interface HiddenRange { - start: number; - end: number; - hide: true; -} - export interface SnippetInput { content: string; /** 1-based line of the frame inside the file. */ line: number; /** Column of the frame, when it carries one. */ column?: number; - /** How many lines to show on each side of the frame. */ + /** How many lines to keep on each side of the frame. */ range: number; } export interface Snippet { /** The whole file, with the markers above it. */ source: string; - /** The parts outside the window, which the renderer leaves out. */ - hidden: HiddenRange[]; - /** The number the first shown line carries. */ - firstLine: number; -} - -/** Byte offset of the start of every line. */ -function lineStarts(source: string): number[] { - const starts = [0]; - for (let index = 0; index < source.length; index++) { - if (source[index] === '\n') starts.push(index + 1); - } - return starts; + /** Lines the markers take up, which sit above the file's first line. */ + offset: number; + /** First line of the file to show. */ + first: number; + /** Last line of the file to show. */ + last: number; } export function buildSnippet(input: SnippetInput): Snippet { const { content, line, column, range } = input; const lines = content.split('\n'); - const first = Math.max(line - range, 1); - const last = Math.min(line + range, lines.length); - const markers: string[] = []; if (line >= 1 && line <= lines.length) { // A line reference counts the lines that are dropped, so the frame's line @@ -90,20 +73,10 @@ export function buildSnippet(input: SnippetInput): Snippet { if (word) markers.push(`// [!err =${word} :${target}]`); } - const source = [...markers, content].join('\n'); - const starts = lineStarts(source); - const offset = markers.length; - - // The marker lines are dropped on their own, so only the file's own lines - // outside the window are hidden. - const hidden: HiddenRange[] = []; - if (first > 1) hidden.push({ start: 0, end: starts[offset + first - 1]!, hide: true }); - if (last < lines.length) { - const tail = starts[offset + last]; - if (tail !== undefined && tail < source.length) { - hidden.push({ start: tail, end: source.length, hide: true }); - } - } - - return { source, hidden, firstLine: first }; + return { + source: [...markers, content].join('\n'), + offset: markers.length, + first: Math.max(line - range, 1), + last: Math.min(line + range, lines.length), + }; } diff --git a/tests/e2e/devtools.spec.ts b/tests/e2e/devtools.spec.ts index 31375f0..1ddf696 100644 --- a/tests/e2e/devtools.spec.ts +++ b/tests/e2e/devtools.spec.ts @@ -50,9 +50,10 @@ test('captures client errors', async ({ page }) => { await expect(code.locator('.l.focus')).toContainText('client boom'); await expect(code.locator('.tok.error')).toHaveCount(1); - // The view scrolls, so it holds the lines the reader can scroll to rather - // than a window cut around the frame. + // The window around the frame is what the view scrolls through: lines near + // it are there, lines far from it are not. await expect(code).toContainText('emitServerFunctionResponse'); + await expect(code).not.toContainText('__disposeToolbar'); // It opens on the frame instead of the top of the file. expect( From 5ddbecc05113b08f708e75faa0eb1027044aa9b0 Mon Sep 17 00:00:00 2001 From: "Alexis H. Munsayac" Date: Thu, 24 Sep 2026 01:00:51 +0800 Subject: [PATCH 5/5] chore: update dependencies to Solid 2.0.0-rc.9 Update every dev dependency to its latest release, including Solid 2.0.0-rc.9, Vite 8.3, Vitest 5 and Changesets 3. Solid rc.9 compiles JSX with @solidjs/compiler. The runtime reads event handlers under a new key, so markup from @dom-expressions/compiler rendered but never responded to a click. The build and the test fixture now use the new compiler. solid-js also ships a development build for Node now, which keeps dev hooks and error messages. The production-path registry test takes the hooks away itself, and the end-to-end tests run Node with the development condition, the same one that selects the toolbar's server build. Co-Authored-By: Claude Opus 5.5 --- .changeset/solid-rc-9.md | 7 + package.json | 38 +- pnpm-lock.yaml | 2149 +++++++------------ rolldown.config.js | 2 +- src/dev-toolbar/reactivity/registry.test.ts | 12 +- tests/e2e/devtools.spec.ts | 3 + tests/fixture/vite.config.ts | 2 +- 7 files changed, 805 insertions(+), 1408 deletions(-) create mode 100644 .changeset/solid-rc-9.md diff --git a/.changeset/solid-rc-9.md b/.changeset/solid-rc-9.md new file mode 100644 index 0000000..b7f7d88 --- /dev/null +++ b/.changeset/solid-rc-9.md @@ -0,0 +1,7 @@ +--- +'@solidjs/start-devtools': patch +--- + +Build against Solid 2.0.0-rc.9. + +Solid now compiles JSX with `@solidjs/compiler`, and its runtime no longer reads the event handlers the old `@dom-expressions/compiler` writes, so the toolbar is built with the new compiler. diff --git a/package.json b/package.json index 2edb97b..282889d 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "format": "oxfmt --write", "format:check": "oxfmt --check", "test": "vitest run", - "test:e2e": "playwright test", + "test:e2e": "NODE_OPTIONS=--conditions=development playwright test", "typecheck": "tsc --noEmit -p tsconfig.tests.json", "release": "pnpm build && changeset publish" }, @@ -57,29 +57,29 @@ }, "devDependencies": { "@arethetypeswrong/cli": "^0.18.5", - "@changesets/cli": "^2.30.0", - "@dom-expressions/compiler": "^0.50.0-next.43", + "@changesets/cli": "^3.0.3", "@jridgewell/trace-mapping": "^0.3.31", - "@playwright/test": "^1.62.1", - "@solidjs/vite-plugin": "3.0.0-next.35", - "@solidjs/web": "^2.0.0-rc.0", - "@twinkleplop/annotation": "^0.1.3", - "@twinkleplop/theme-github": "^0.2.0", - "@twinkleplop/tsx": "^0.1.3", - "@twinkleplop/typescript": "^0.1.3", - "@types/node": "^24.0.0", + "@playwright/test": "^1.63.0", + "@solidjs/compiler": "^2.0.0-rc.9", + "@solidjs/vite-plugin": "3.0.0-next.44", + "@solidjs/web": "^2.0.0-rc.9", + "@twinkleplop/annotation": "^0.1.4", + "@twinkleplop/theme-github": "^0.2.1", + "@twinkleplop/tsx": "^0.1.4", + "@twinkleplop/typescript": "^0.1.4", + "@types/node": "^26.6.2", "error-stack-parser-es": "^2.0.1", "html-to-image": "^1.11.13", - "oxfmt": "^0.64.0", - "publint": "^0.3.23", - "rolldown": "^1.2.4", - "rolldown-plugin-dts": "^0.28.2", - "seroval": "^1.6.0", - "solid-js": "^2.0.0-rc.0", + "oxfmt": "^0.70.0", + "publint": "^0.3.24", + "rolldown": "^1.2.9", + "rolldown-plugin-dts": "^0.28.6", + "seroval": "^1.6.7", + "solid-js": "^2.0.0-rc.9", "terracotta": "2.0.0-next.9", "typescript": "^7.0.2", - "vite": "^8.2.1", - "vitest": "^4.1.11" + "vite": "^8.3.0", + "vitest": "^5.0.1" }, "packageManager": "pnpm@11.22.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4570864..689e406 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,38 +12,38 @@ importers: specifier: ^0.18.5 version: 0.18.5 '@changesets/cli': - specifier: ^2.30.0 - version: 2.31.1(@types/node@24.13.3) - '@dom-expressions/compiler': - specifier: ^0.50.0-next.43 - version: 0.50.0-next.43 + specifier: ^3.0.3 + version: 3.0.3 '@jridgewell/trace-mapping': specifier: ^0.3.31 version: 0.3.31 '@playwright/test': - specifier: ^1.62.1 - version: 1.62.1 + specifier: ^1.63.0 + version: 1.63.0 + '@solidjs/compiler': + specifier: ^2.0.0-rc.9 + version: 2.0.0-rc.9 '@solidjs/vite-plugin': - specifier: 3.0.0-next.35 - version: 3.0.0-next.35(@solidjs/web@2.0.0-rc.0(solid-js@2.0.0-rc.0))(solid-js@2.0.0-rc.0)(supports-color@7.2.0)(vite@8.2.1(@types/node@24.13.3)) + specifier: 3.0.0-next.44 + version: 3.0.0-next.44(@solidjs/web@2.0.0-rc.9(solid-js@2.0.0-rc.9))(solid-js@2.0.0-rc.9)(supports-color@7.2.0)(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1)) '@solidjs/web': - specifier: ^2.0.0-rc.0 - version: 2.0.0-rc.0(solid-js@2.0.0-rc.0) + specifier: ^2.0.0-rc.9 + version: 2.0.0-rc.9(solid-js@2.0.0-rc.9) '@twinkleplop/annotation': - specifier: ^0.1.3 - version: 0.1.3 + specifier: ^0.1.4 + version: 0.1.4 '@twinkleplop/theme-github': - specifier: ^0.2.0 - version: 0.2.0 + specifier: ^0.2.1 + version: 0.2.1 '@twinkleplop/tsx': - specifier: ^0.1.3 - version: 0.1.3 + specifier: ^0.1.4 + version: 0.1.4 '@twinkleplop/typescript': - specifier: ^0.1.3 - version: 0.1.3 + specifier: ^0.1.4 + version: 0.1.4 '@types/node': - specifier: ^24.0.0 - version: 24.13.3 + specifier: ^26.6.2 + version: 26.6.2 error-stack-parser-es: specifier: ^2.0.1 version: 2.0.1 @@ -51,35 +51,35 @@ importers: specifier: ^1.11.13 version: 1.11.13 oxfmt: - specifier: ^0.64.0 - version: 0.64.0 + specifier: ^0.70.0 + version: 0.70.0 publint: - specifier: ^0.3.23 - version: 0.3.23 + specifier: ^0.3.24 + version: 0.3.24 rolldown: - specifier: ^1.2.4 - version: 1.2.4 + specifier: ^1.2.9 + version: 1.2.9 rolldown-plugin-dts: - specifier: ^0.28.2 - version: 0.28.2(rolldown@1.2.4)(typescript@7.0.2) + specifier: ^0.28.6 + version: 0.28.6(rolldown@1.2.9)(typescript@7.0.2) seroval: - specifier: ^1.6.0 - version: 1.6.2 + specifier: ^1.6.7 + version: 1.6.7 solid-js: - specifier: ^2.0.0-rc.0 - version: 2.0.0-rc.0 + specifier: ^2.0.0-rc.9 + version: 2.0.0-rc.9 terracotta: specifier: 2.0.0-next.9 - version: 2.0.0-next.9(@solidjs/web@2.0.0-rc.0(solid-js@2.0.0-rc.0))(solid-js@2.0.0-rc.0) + version: 2.0.0-next.9(@solidjs/web@2.0.0-rc.9(solid-js@2.0.0-rc.9))(solid-js@2.0.0-rc.9) typescript: specifier: ^7.0.2 version: 7.0.2 vite: - specifier: ^8.2.1 - version: 8.2.1(@types/node@24.13.3) + specifier: ^8.3.0 + version: 8.3.0(@types/node@26.6.2)(yaml@2.9.1) vitest: - specifier: ^4.1.11 - version: 4.1.11(@types/node@24.13.3)(vite@8.2.1(@types/node@24.13.3)) + specifier: ^5.0.1 + version: 5.0.1(@types/node@26.6.2)(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1)) packages: @@ -168,10 +168,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.29.7': - resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} - engines: {node: '>=6.9.0'} - '@babel/template@7.29.7': resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} @@ -187,126 +183,88 @@ packages: '@braidai/lang@1.1.2': resolution: {integrity: sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA==} - '@changesets/apply-release-plan@7.1.1': - resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} + '@changesets/apply-release-plan@8.1.1': + resolution: {integrity: sha512-nk2Hbq3M9NeHMdaIRBDvawKrQJzXB9sGyBUE5yWnIKtvdcNCPj75zBekJYr0gTT2ecJH3eFeTrc8eisPImcv0Q==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/assemble-release-plan@6.0.10': - resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==} + '@changesets/assemble-release-plan@7.0.0': + resolution: {integrity: sha512-oEW8BxdA604kGGtDSCiHr5w9Tv4UWe9I2k61IBNZzCOE1kbYaJj4v+lFQNgcEZFkUc2pV/+hASErGDvpJOZCTg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/changelog-git@0.2.1': - resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + '@changesets/changelog-git@1.0.0': + resolution: {integrity: sha512-3Dst2Ime2Op5nd4XmWJLPIgp11ZFqJqSkVug9izK6TDcIV4YlhPS4ECbEVR+eGI0bk0r1ItogD4j2Oli87bJrA==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/cli@2.31.1': - resolution: {integrity: sha512-uO05WTcRBwuVOJVSW8Cmpqw6q0WDL53ajGCMyszutvOe5toOnunbpM4jZzf+qxBOz7i0AzopZ8diBuewjmF40w==} + '@changesets/cli@3.0.3': + resolution: {integrity: sha512-L1i67bMfkK6iC/kDejuNO4pFgTRcWIObsD6Qof2woP1I4M8tj17DGlcpRaTzTv1DYSP5EMwWdEtR8X0Pj5Jg3Q==} + engines: {node: ^22.11 || ^24 || >=26, npm: '>=10.9.0', pnpm: '>=10.0.0', yarn: '>=4.5.2'} hasBin: true - '@changesets/config@3.1.4': - resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==} - - '@changesets/errors@0.2.0': - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + '@changesets/config@4.0.1': + resolution: {integrity: sha512-PxpxSQLQSLDjceAgRq+4FWlU+HflDIw03mmPVipxoQx9xrXFUjmqTy3SE+n/2t+DqPdpPiLWVr5NRiLZvjyLwg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/get-dependents-graph@2.1.4': - resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==} + '@changesets/errors@1.0.0': + resolution: {integrity: sha512-ElN/mEzn6zmETgjwf5MclCMa9ef59sAR0lfO8VSYIsiRvbC2FbLB/92EoYw10Sl0kGixxHFiJZUSv7dA+YpR8g==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/get-release-plan@4.0.16': - resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==} + '@changesets/format@0.1.2': + resolution: {integrity: sha512-Caez5XtNXCFS/G5bwyav3wuXL0tMxVd2ZGbaumWbzN08tyzO21asCw7JZhNtVsAZDCvDRUzZN+Iit9SyRITSYA==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/get-version-range-type@0.4.0': - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + '@changesets/get-dependents-graph@3.0.0': + resolution: {integrity: sha512-ji/t5wFA1zREKXRUePE6Qi+Qu2UgxCeSSGQrphezwvQZrp49B7sJ+8+wvM0tA7zPeSxYKCojDy3WWgrl+s+awg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/git@3.0.4': - resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + '@changesets/git@4.0.1': + resolution: {integrity: sha512-6vWpIAC4LkpmlqaIu37ViT5enyd9+uBwAiGqCGhASvkSHBgx4PrtTGXWTMFYpDmZbjgyonyVgMciPrW4MqtJsA==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/logger@0.1.1': - resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + '@changesets/parse@1.0.0': + resolution: {integrity: sha512-P0iaMb9p9CRYZiTgAllEIF9AUMQHIy1G72tKlcIqJp61icZSsKQNiOPdxAMZG8m/DvZwt/oz5xEbTpike//dWg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/parse@0.4.3': - resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==} + '@changesets/pre@3.0.0': + resolution: {integrity: sha512-Zm/6YliV/a2oeWTqHJf6KxLrQwgcK1i/BRDl2m0EKZvbnxV5fG9QRhwJJGshjsZTUTS6dkfURQ2K6aAvgNw/3Q==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/pre@2.0.2': - resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + '@changesets/read@1.0.1': + resolution: {integrity: sha512-nzvSC6RcTiWf/dsuwZFXpLzGGsRHYCL68U3uHV7srsulU93aVWY7u2GEJiDZ+4GIIElfaW5EqtKC0UHroY+LTQ==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/read@0.6.7': - resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} + '@changesets/should-skip-package@1.0.0': + resolution: {integrity: sha512-pwqoJmbONn1XgXmZXPEExgAaT+HdZLjALFTDgIm+PnS5KeO2nLtzA2/Q+4aMFY14kFMuXKG30MObhvDzWgzDgg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/should-skip-package@0.1.2': - resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + '@changesets/types@7.0.0': + resolution: {integrity: sha512-c5GoiQyt3pxiXjrWSNoP8/GRf4kG+VnKzovx1OQM8dYYALlSwgedmkPmJ+ZqGxqwg9D3Bkj85Uo4KLd5BN3A0w==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + '@changesets/write@1.0.1': + resolution: {integrity: sha512-q/ThtP9gcnEP6xlv7LrY26C2mHqdGBti/MmOVngt/M/oIGYkssmQGxPK9WzBNt2juVcH/vml2WQ+ra8LXYOTaA==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/types@6.1.0': - resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + '@clack/core@1.5.1': + resolution: {integrity: sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==} + engines: {node: '>= 20.12.0'} - '@changesets/write@0.4.0': - resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@clack/prompts@1.8.1': + resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==} + engines: {node: '>= 20.12.0'} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@dom-expressions/compiler-darwin-arm64@0.50.0-next.43': - resolution: {integrity: sha512-aVkvvRtEyHPbtZMZe4DHhFzPzQ4qHO9uGXyPDiddBXfjZgkCqejpcJ18t0emJIpIPpproHFdr+9VyLOKs9ENNw==} - cpu: [arm64] - os: [darwin] - - '@dom-expressions/compiler-darwin-x64@0.50.0-next.43': - resolution: {integrity: sha512-zJXhjsSydgZbu0pCfD5/FH5UYH7t6Vy8dKD9AVTokE3LFQgLIVrssX2WwN60jh5+OW9okbJBGZXiZ4/2sqb9OA==} - cpu: [x64] - os: [darwin] - - '@dom-expressions/compiler-linux-arm64-gnu@0.50.0-next.43': - resolution: {integrity: sha512-ZEjWL59aAj39C7TANYvtzW5rmeH/kfzZIWoZ3Wf/MSiXm8Ermadx76hX0yMMqLdxy0ec69lRYF4gXC7X2k6LMw==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@dom-expressions/compiler-linux-x64-gnu@0.50.0-next.43': - resolution: {integrity: sha512-ur/VTzMqAkJq45GHSGlk4uq0I/92Zow5mPcovh+Lg2bnyNrPXMNM9kXrIqio2jUgSyRT4y2QbeI9Us30IeZI6g==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@dom-expressions/compiler-wasm32-wasi@0.50.0-next.43': - resolution: {integrity: sha512-X+0Rz1fm7Z1S3ONFwg+NJ8edf2MWUrxOrP50hM2x4PkIe2ST0WzqHbkH4yIXjqttF0R1NErh+ac3q4WGF4wWBg==} - engines: {node: '>=14.0.0'} - - '@dom-expressions/compiler-win32-x64-msvc@0.50.0-next.43': - resolution: {integrity: sha512-hQlqtiYVst4rNKAWtC9cwfuP95L8Dw+PR5Zwp6AA92vsMgQlJ7+QaJoQAxuKkEUtl212VnW06SJKzx00pSkv8g==} - cpu: [x64] - os: [win32] - - '@dom-expressions/compiler@0.50.0-next.43': - resolution: {integrity: sha512-ekEuAFLb868iGu6bw8KA2wgD3gYJpYYTjSbOtuXGlCZnWFA6Wx8Qf720ZYNlb40QjGe3/2kUHTtn47JfaCwPcA==} - - '@emnapi/core@1.11.2': - resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} - '@emnapi/core@1.11.3': resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==} - '@emnapi/runtime@1.11.2': - resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} - '@emnapi/runtime@1.11.3': resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} - '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@emnapi/wasi-threads@1.2.3': resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} - '@inquirer/external-editor@1.0.3': - resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -320,257 +278,264 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@loaderkit/resolve@1.0.6': resolution: {integrity: sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg==} - '@manypkg/find-root@1.1.0': - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@manypkg/find-root@3.1.0': + resolution: {integrity: sha512-BcSqCyKhBVZ5YkSzOiheMCV41kqAFptW6xGqYSTjkVTl9XQpr+pqHhwgGCOHQtjDCv7Is6EFyA14Sm5GVbVABA==} + engines: {node: '>=20.0.0'} - '@manypkg/get-packages@1.1.3': - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/get-packages@3.1.0': + resolution: {integrity: sha512-0TbBVyvPrP7xGYBI/cP8UP+yl/z+HtbTttAD7FMAJgn/kXOTwh5/60TsqP9ZYY710forNfyV0N8P/IE/ujGZJg==} + engines: {node: '>=20.0.0'} - '@napi-rs/wasm-runtime@1.2.3': - resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + '@manypkg/tools@2.1.2': + resolution: {integrity: sha512-6QEf6yqFbETdwGITKq57aYoPfX/3K8XFNwsAlx0C1M7o8cb79sv1M3w+tWuWvIcSbNqrLF7OD7YpZMVVz335hQ==} + engines: {node: '>=20.0.0'} + + '@napi-rs/wasm-runtime@1.2.4': + resolution: {integrity: sha512-AJxoUD2/15ESHbvpcyjU274nsAPLuOtPHCk0vKJM5pj//Fg/B1FXNWjPnXTT9PymCYYiHo4zPj0ZomXBKhoy7g==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@oxc-project/types@0.150.0': + resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==} - '@oxc-project/types@0.144.0': - resolution: {integrity: sha512-nuhZIOLuI6TFQ32I/WnUx+SCPY7SdSKwgnFHydAuoS1+Z4BRcaP+RRJmGzl9lw+0OFF7UmaESf7KQRXaNLHypg==} - - '@oxfmt/binding-android-arm-eabi@0.64.0': - resolution: {integrity: sha512-o6uzh/jTOQeAY5TdkAeXdqv7MBRcPxiRA08zrcBtkKj5cSu/FMu0Hl7Q6Fi1KCKyCWZ6lJVjBzdsJvsKltUsGQ==} + '@oxfmt/binding-android-arm-eabi@0.70.0': + resolution: {integrity: sha512-Xd7YO4/T2axEj6FTLcj4Why3mTBqFMg+x24xtorT4Lb2+1g82090GH0a/4U1m0pABGYiix2bq1pqkYrmV3f0Sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.64.0': - resolution: {integrity: sha512-jRGSUeeP7p3Gynw2YaCVtjBIA6ZxY6bEB/ES5i54OhqmRTyuVg7ZgstEtzgq6GOAJd+2QZ5pvf+bFfmW5Mp9cw==} + '@oxfmt/binding-android-arm64@0.70.0': + resolution: {integrity: sha512-x9rlMYyKXdgKdYyUJzGsK1ZV8P4di/J32ipzcS6Jet6p9r9UAh28neXIMtdlSaJJycdi61Z4YkcLKLpk8ueFjg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.64.0': - resolution: {integrity: sha512-JINwtU2lW7nOFSqi+H2qplipNUqah9Gc1jgGmB82kTD4UnZrZIVxCJ9qEmFiKfjNq27gYLFhrUb0to86aCwMjw==} + '@oxfmt/binding-darwin-arm64@0.70.0': + resolution: {integrity: sha512-IUTUPvrBVYy7POh4stXzRdz4IVC/1QSaviCWoyenSlOhGu0X9j5K07vCTM9biLjAA2Zs31l0Rj5vvRpj9n95wA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.64.0': - resolution: {integrity: sha512-gCmuswrgrOSajV4HCRFkVCGIruPq8bjYuPYgSE2WQB3mD6XrdyZ3JMSRZCkQ8zCxOyGWriBo6QoZ5nmMHQ1BfA==} + '@oxfmt/binding-darwin-x64@0.70.0': + resolution: {integrity: sha512-vw745q870oTd6J517O24asoX4/E+eK0nxYIFoedSLqgJ+nI5En7+ZS82iZSHZ69zevQrnOXiyHP01dA+t8xD8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.64.0': - resolution: {integrity: sha512-Ab8g7a38pT0MMImjh7anRSTve6buWBIlcXIFBYa5xl4s6UxEgKSc2xOOhbGtLwvXnEi2PsEDGoJh3oUU7xkehQ==} + '@oxfmt/binding-freebsd-x64@0.70.0': + resolution: {integrity: sha512-NO14EgSM9dFkcg+MfGPxvsKqXYs9LKaxPrOKXpv1R0rLokGGFDcCq6dBMq18dE4wlpFOovX0UZY2uh1P30O7QA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.64.0': - resolution: {integrity: sha512-BgvS3CoQ+Xy2deoZqEN8JVKabcCZi2RxA3yant8G9OAv9KuPJ9TCjHkqigzdHUVwErZxEP5d2bzLIEyKYyBDLg==} + '@oxfmt/binding-linux-arm-gnueabihf@0.70.0': + resolution: {integrity: sha512-139OEhHarj9CYoJ/i9gXlPv4KLBGtLj2toseOWYFf09QwlhklaZk+wW3aOvlqoeZtuayvkoSNVWra7WJ21s3VQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.64.0': - resolution: {integrity: sha512-QXpNxwoMj0YvnceCNZadNSden3bIcnvjn/sDp/rwZhRoZoZYGpHvtPyhGsdJz9uvT9GkaMW7SsLddurU56dt8w==} + '@oxfmt/binding-linux-arm-musleabihf@0.70.0': + resolution: {integrity: sha512-GEh2PY3IWTE0M24eNhTduountANSbWyDmMnzFSQE/nGg/bjPugbUgiGuFu+xdqcQSd/HKSwH80/F2yVVD48yhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.64.0': - resolution: {integrity: sha512-BBgH3I1ppDsI5pZ4Pdhw0ceYxwVCfbU/bZEBCeZ6caRS9x0ZabErxubP7riGUn11PXZBhe8DYdjkDKP1FlVQ5w==} + '@oxfmt/binding-linux-arm64-gnu@0.70.0': + resolution: {integrity: sha512-En5i+UJmZSPxuSf47F2Hl5YOzKB0bicQLnGQkeTCMQ35cWLtbrSwACJKfiLqRZrk05DwSnsJkhBRaM3OURtIaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.64.0': - resolution: {integrity: sha512-v19HSjC/BGXdt26qEvKZtwAHgGmQ2Agcap2kQP+KIqoRZqivVzYth3ui2dJA1i+6/fjpjga85lIOaJJjQ/bOOw==} + '@oxfmt/binding-linux-arm64-musl@0.70.0': + resolution: {integrity: sha512-WWOoV5W9Im3flVwOVrWn/2DUlOF8v5vcCip+kcNuaMpulRCh6nzzt1Su2vcL2F908YJIXNV3HvegbBHuyLwKHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.64.0': - resolution: {integrity: sha512-PElLnOo4xFTBZrxPhgTIj0eHqZXwEBQoNWtb7facUV170T0B0FRET0iNbb3LUeLWTybkUW+vsdyv4ihOdyXGyw==} + '@oxfmt/binding-linux-ppc64-gnu@0.70.0': + resolution: {integrity: sha512-YUouneIqW+5n7aE8xx/zeZ6/utr/KH7oykcGoFyd8Uz8uh591T1oKlnoWA3BsRq/ZR42oY1w4MUYvS/0e/MQOA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.64.0': - resolution: {integrity: sha512-Qzsg15n4F5CH+MorcRW4MkAEMiLzXmeG+DiDSbP/bBTqCmWOH3K9DHryNrve+JHlV0txS+B6Z9P5Xz+cmWeL+g==} + '@oxfmt/binding-linux-riscv64-gnu@0.70.0': + resolution: {integrity: sha512-iEnMf21S5aGVa4hViDGY8sAQ/AHyCu2JPyrQF8P06wtHhSkD1YJBeT4m/KiGewgf7+a5XCYSCRIPcRQa1xwEoQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.64.0': - resolution: {integrity: sha512-/GZ358wnQ/Ez4UVnCcZIi56JkY0sOdZ+B108pqXKqZz3jLS59F4KEAB1Qv3fRlObrFEk+3L2vUQ/xoPx+3vjXw==} + '@oxfmt/binding-linux-riscv64-musl@0.70.0': + resolution: {integrity: sha512-91Sdniaj20fQzyMeCxMDzTP4c9s4RB8dGQ308xHhDR0n6U7+1Xq7N9klE7mfXq8iV3lRmIGSXi5X23Hn/0XX/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.64.0': - resolution: {integrity: sha512-/C9We3DXegowfLXtVCYHeNiU9azwCDr5cQkEtCVlc74vyn+lLQSPApJ1CZmxAduqeq/Oi3gQ+IVptyhCaTMtkQ==} + '@oxfmt/binding-linux-s390x-gnu@0.70.0': + resolution: {integrity: sha512-uUV30M6E+2TKKGMaKiwfeL4RZrviHXlUxsrYJ/jFBb+1EZy+pnFT+hF73eeWdzh5NqPOAnw0iiMAIqjqiLZPFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.64.0': - resolution: {integrity: sha512-91KM2CeRWscIEHlj1NsW2WSnzGeq1Ehq+39bfDowTdkn+fcvK/x4Y1RcyqT7glyBjZio0ldkeCG6Usj3v7ASog==} + '@oxfmt/binding-linux-x64-gnu@0.70.0': + resolution: {integrity: sha512-ivMcX6kNDPhqtbOaBt/ItFlLlTlXNHLgRuNmxP6Na6UuYXRT10llpJcAPbGeRgjjb3Qzv4jwPp3fB0hui50WNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.64.0': - resolution: {integrity: sha512-gw7uEk9I+7zoT1EYLra1eWArIzNcz8e3jkv+Noo2+o2T7wPvsNSQbfoa4DSfZlvn1i6mJ05RiZ4/omaXPDNhQg==} + '@oxfmt/binding-linux-x64-musl@0.70.0': + resolution: {integrity: sha512-w+S+fERxYmlZSyZlJK/U292FjyBoH8cCEj21/tYJX6atX5kNSn+HDkhlFQKT2zcMwUW0uAtUL/bOrlwJZwqRdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.64.0': - resolution: {integrity: sha512-HYHFf616FHSPSO07c09mjmXBfQ73wIVM3m0txOiooa5XZkGoxFd6B14PVj0LB0DXIqJ6wAO/dDR/NX/5UUaqnw==} + '@oxfmt/binding-openharmony-arm64@0.70.0': + resolution: {integrity: sha512-Zlom1Xkx257R8bk4ZI4zJsrGno2opknz1+5v5baka3nn4FPyvNSdh8JUL4CdN1S1OWRMvJ9UJQ+RfIqGGCUEfA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.64.0': - resolution: {integrity: sha512-uQjFp081IZSWD6VAofX2iO2z01awAdHmfC+NrieWIPKrT2hZKQDyq/U18M7ifC0sm0Wz8aHY/p6+FDYIzs/CrQ==} + '@oxfmt/binding-win32-arm64-msvc@0.70.0': + resolution: {integrity: sha512-FQgPW5R17vzt7cgrJ8eG/dqX00o2xHsqFeLfw4xzA9FRHpN/DjFo9YDonvIIXGxiEuS9F/jZPnGO+KHNKuCo4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.64.0': - resolution: {integrity: sha512-lNM6byTAQ881jugzFu8juJTbNRgsUTlswMA6pJmwi1XDvmIqnnb49lcUAs5gz94fCJLrVN+/X3s3jOKqx23WIQ==} + '@oxfmt/binding-win32-ia32-msvc@0.70.0': + resolution: {integrity: sha512-ZfZublNhZ+XBndMiXhkiLlPE+XyGRDa0CweeTL6t1fZypfCh1LTg7e5CvnOeTBunq15MskOcRempumSPGAaCQA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.64.0': - resolution: {integrity: sha512-BtmbtL/QjMtF1a6C3CqoDluH2IfB6fJt62E+B9RFfUPtFk4Iz9PFS6+y/SzzOvSxc7aUk2Kphwg7Dh8lMbwu6g==} + '@oxfmt/binding-win32-x64-msvc@0.70.0': + resolution: {integrity: sha512-HlIZEn+WzLQL0DszNzldiRl/DPRCX5R0Vkt6qeUPR1YHwy52hZZo4x6HoTOVmKRP2wUiwPGtKsihNY/f8KRaBg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@playwright/test@1.62.1': - resolution: {integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==} + '@playwright/test@1.63.0': + resolution: {integrity: sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==} engines: {node: '>=20'} hasBin: true - '@publint/pack@0.1.6': - resolution: {integrity: sha512-3uVNyGcVplhPZSLVyeIpL7+cIRn1YCSNHLG/rUIlBQMVH8YuN9++YF+5+UDIIO9RW98dujiUoTltO7RDB5bFJA==} + '@pnpm/deps.graph-sequencer@1100.0.1': + resolution: {integrity: sha512-pOr5+q1fLYKwFN3LAJuGZEnfXDcQ73zqgDHMtGy+K+uIoUqyY+6MeDCWFwfu+4EFuq76I5EPFofoNAI+Bmmq4A==} + engines: {node: '>=22.13'} + + '@publint/pack@0.1.7': + resolution: {integrity: sha512-4EDEmvxWtgsCnnVeBvtFIFZtUhPPt1+bA9JrSwU4Sa//6oKtzCSlGGXYJr44OD9aGISymbieJ4mCKHUygUDU+g==} engines: {node: '>=18'} - '@rolldown/binding-android-arm64@1.2.4': - resolution: {integrity: sha512-jHC2cnyKz5xU2fhECtFl8OZ83cYNt13GZQD+0uMJ/X3o+ijmd56okHhTUwxVSHPx1IRVIJEZ1/1pPzeLCU6XKA==} + '@rolldown/binding-android-arm-eabi@1.2.9': + resolution: {integrity: sha512-tNISae1QEf/vkb3xkRcjV5SEdzPE97We5IVaa2Z8jSszQPZ8U60B/YCYpw4QI7VidYsBtKavczXf+DyDs9WGxw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.9': + resolution: {integrity: sha512-YC8YsI30o606GTZi0VyzYlsDKFP8W61i/QzayHDkLbNEz/IShqAmTa+hsJRj13xTHA0H+6fk4b2UmGn+Q/cMlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.2.4': - resolution: {integrity: sha512-Dc5mPD8F5F/FS8i01syd7FTF6yB2fVthH/TRkjwJkzUK6EpoxHtqvZQP5Zwq80/5z19TWYHIg1KOHboCgVx/aQ==} + '@rolldown/binding-darwin-arm64@1.2.9': + resolution: {integrity: sha512-IwhlH3qK5urrY8hZiEgGkHKEFN901p/p2bjxCxJlr4GyNnF7wYpUvK+Y43uaRYuC4hpfjzbR3SJC3arX1jGvmw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.4': - resolution: {integrity: sha512-fpDm4oBo6SqLvWUYCmFhdde3U9KH2fRNNMeAnAPAIwxRL345xutL0EtEUcuoxsoazdJGv/MuDBQHlCDrtbvqOg==} + '@rolldown/binding-darwin-x64@1.2.9': + resolution: {integrity: sha512-XxpJfVzFh+jilRxIXUqcfYAYcunIc/XEzIizsOL1fcJee5Sf7H3mH8WlLmfHfluz5amqR88QQo9izKtmMlavAw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.2.4': - resolution: {integrity: sha512-rSJoreDE/HoIzoaib6MTp5jQtCTdMHKIvItAKT/ImS6Y6Ww76oUaeMyp4Vc/fAgd/ehji068IxetHXAnqUwN9A==} + '@rolldown/binding-freebsd-x64@1.2.9': + resolution: {integrity: sha512-kSfvhmgeWyfkbT3p/1s5vSgboogoah2zkm9fX2zjg2hHxSV7T4KhMWRUUaRk4OXNqoD3QAUeRqLcs1aZOK4U1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.2.4': - resolution: {integrity: sha512-/jm8OGHgn7oGaJu3i/qZI9spUGcJ+y/lk43ttQ/iO1tOd9NissG6o97bighBCiL+BKRngmcDuR6ikfwYdJmVuQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.9': + resolution: {integrity: sha512-1RVzG17pxqbTfYLC352JlLt6kKLG+6Hr30n8DlIJqsnV5luUDd2Qdx9Ayw1Cabfyb1K9k0jXEZ7evxkRoT+uiw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.2.4': - resolution: {integrity: sha512-tIP06BeD9EqvECBrPZ+sqdPlYrT+aYaAiu1wYziVx5elRK/ftm33JxVDy2bXGbr6J0CrtirCkR87/X5a2euEng==} + '@rolldown/binding-linux-arm64-gnu@1.2.9': + resolution: {integrity: sha512-BXqPvZ2drqVD+/Z8UpKwcs4Mp7grM+eGFku4CAEKrEtcbAsUpzREphK1sogCRZGreVPiMkiiBtw0n3TPteuqvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.2.4': - resolution: {integrity: sha512-Ql1Q0EQqVThvn9VAVlwNzsUvbSFtCMGjLpRRi4pk5i7NZZ4n5ISiLMjHYtus4VQ2PvkSw24zyaCVsiS+sXPj1w==} + '@rolldown/binding-linux-arm64-musl@1.2.9': + resolution: {integrity: sha512-11vWvo8YDwLzukt27J3aYDWU+gg2P7J+ZOmiJ0hkF5BXZDW7pVya7r40MXDy6ya0i9KamoENSVKIugvJNgFXIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.2.4': - resolution: {integrity: sha512-GjbjXD4XXfN19D0LZNbmiCBUoDiRACsYHr0yaIbbn8aFsXjHZifcYqu/W5Er5X2X990WjHXFrxarn5chzItorQ==} + '@rolldown/binding-linux-ppc64-gnu@1.2.9': + resolution: {integrity: sha512-a1tijMkdwsIARtc0F39ApURROkf3NwqinI6TOiSSWCTR7dT96dffNvMUtDHnq64wKNTIZOIlzKrFvvFUznJiyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.4': - resolution: {integrity: sha512-p5WR0NOwaRmJ/B1b6IjEFLLivwEsf3PrdBIhRbhTCQisbo2SvHHpG4ELB/+FgQNnB88LTOF86upmJmbvZdQ2lw==} + '@rolldown/binding-linux-s390x-gnu@1.2.9': + resolution: {integrity: sha512-x6SQNdAvv4c3hWqTMaWuawzMX9myaCs/yEmlGsxJzkdClnHW7FbrjQuSiRDhuSYzEYoEMhsaJy9qHG/XNemJPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.4': - resolution: {integrity: sha512-4/GyVjmhR+Tc6HLJvwc1sOhPqAZtySiSMesOZyX6JQ5XBxoTDEMKQzvo07NIK6nTon/SivlZqvhzvuVBNQhObQ==} + '@rolldown/binding-linux-x64-gnu@1.2.9': + resolution: {integrity: sha512-9s0AZ8BFK5/n7B/TBoa2yJE3gI3KURrbXcPBlsAsvjU4VeJKgE90y1YtNxyEUIcHPQkg6/yfF3qihUrcM/Kf0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.2.4': - resolution: {integrity: sha512-l9eeLsCNvPpmSXUej0etw/J1eqV0Jj1D5G/xG6YTijmE6dkv6E2QezgWbTfQk63v952DPqrjOCoiqxq7Bw0YUQ==} + '@rolldown/binding-linux-x64-musl@1.2.9': + resolution: {integrity: sha512-P7VWAmV+WdJluH7ovnRGoiv2i8To7GAZ+kGzfGup635cyL7SyYl3lSUaA3Gp5THf0n/Co5EyEqb2zbqq+nMOHQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.2.4': - resolution: {integrity: sha512-e0F355MSTMm3+UOqtV3L24gFUp2N5m1f8L/7d56deik6va+AXdrt9F8LbzGpeWGWRbZEDq4m8NVnJDeBtf9DZg==} + '@rolldown/binding-openharmony-arm64@1.2.9': + resolution: {integrity: sha512-1qixtsE4BK8h+yS3BfmZ09UhA7O/N4IACva6YBr7EBvCJraByTuRcgOTaiA62Tm0vey3UcKXLOaoGHtYmNGEVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-win32-arm64-msvc@1.2.4': - resolution: {integrity: sha512-AWLi0uBRYh6QlE7OKhiz+phZC0qwtij2QZmhmOdsLdFn64m7oMpooE9ICE3lhm9xMb4SpDo2WbHcxX1iFLFtqw==} + '@rolldown/binding-win32-arm64-msvc@1.2.9': + resolution: {integrity: sha512-ok8IQjcEPs1AKZfuEUznVBrJw+gK4soq+bx8b1X2XoMqVClarc1q5JDmVtWXY1xfr6ZuHTAsPXHTgTrqKTZeww==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.4': - resolution: {integrity: sha512-UwSDJOg3dqCAejWdxclJjCsh3Qq4vLYMDxmyHqo1btz3stK2VqgwNd3mm5tuIwzSlGIQ/1H9Hr+Zn09mrezNqQ==} + '@rolldown/binding-win32-x64-msvc@1.2.9': + resolution: {integrity: sha512-Ip2mXoU0hM0boq3Rf+ekuT653OROSo6aSYcPT1VHE4q52KvyxgFkQgrgb/IEsxOuvQ2fZZbs8khJAyCEPM24/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -582,8 +547,8 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@solidjs/babel-plugin@2.0.0-rc.7': - resolution: {integrity: sha512-cKcyVbOh8WC7ywV3txxfNrFRtTa7t8O3tXDXRf3RE3DKyZr+hZmbEOq6q/T6smaJXS3ekzuUDVlQrG1+HErnhg==} + '@solidjs/babel-plugin@2.0.0-rc.9': + resolution: {integrity: sha512-Qd+qY9UCB3gYCWQSS3p9DETHx9igOnQWFo0xqqyFWO9xT0mo3SmAyfHbQXOLlpuwpPC2DJjzjtWqiT/HQHPYYQ==} peerDependencies: '@babel/core': ^7.20.12 '@tsrx/core': 0.1.63 @@ -591,51 +556,52 @@ packages: '@tsrx/core': optional: true - '@solidjs/compiler-darwin-arm64@2.0.0-rc.7': - resolution: {integrity: sha512-xJ7FoPrFV94LMuEPNJ2nIGFlqhVGR+s5GAr0nzMRMdWAimriF0sZ8clxlIqPS3v2oaNE9JW7EDCdJysD3JezWg==} + '@solidjs/compiler-darwin-arm64@2.0.0-rc.9': + resolution: {integrity: sha512-pFEu7BYhEuCkwgAdveTkkOTYpkq4IMbGYTwLqOprk6Ts+65rHjrV7Pm+hkoETqaRzX66n1vThsSG/j1NPU8FsA==} cpu: [arm64] os: [darwin] - '@solidjs/compiler-darwin-x64@2.0.0-rc.7': - resolution: {integrity: sha512-rcu8wcxeO0QWXu69yFaSf3ZR1KlsPDCzmRmdA8fX/cte96Ox0r6GfMXE+5CH/gg9dSaXY3qwwmpSG9AEvLxZQg==} + '@solidjs/compiler-darwin-x64@2.0.0-rc.9': + resolution: {integrity: sha512-bxJnKYUvqKyV/hzbgDi2VThb9D8NStr9+RFv1l4rjI8pXZxlqNSPGbISAdzk4DbbXNQdKHNl2ne0M1uuhXPpjA==} cpu: [x64] os: [darwin] - '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.7': - resolution: {integrity: sha512-EhiLKgLcFkHWYOx3Pds3px0onhTbzpDfenhsuDy1R7ViZYALXXBlZ+EUSE85rKwyCM0sgcR/kVMswL2V8sJXng==} + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.9': + resolution: {integrity: sha512-UzugKIkZDfMUJR4GqEeYX5bj5N4xl3TvnsxYhPfkDlulszw6RXpnya0l5xrPKY0woXKz4+rPnvUrA8zJjwJKdA==} cpu: [arm64] os: [linux] libc: [glibc] - '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.7': - resolution: {integrity: sha512-ymN3hIqzH3msWt3lcU3vqILnzRlB1rNbv1BlUqXkwVZByjFw/bJQ+BgncIq0WqNH6ciQ5nhZ1E7ECgGw/SNwEA==} + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.9': + resolution: {integrity: sha512-vejdMmYyozeFmOK7uZ/THfIiASqMUYeNOsG8Gcve8LtSUgcGHYxVxcVvw7Aaf2bGyPCjv0AEKblbn/F9Bk1rlw==} cpu: [x64] os: [linux] libc: [glibc] - '@solidjs/compiler-wasm32-wasi@2.0.0-rc.7': - resolution: {integrity: sha512-k4vN+EHRtoIxj0D8d2VYHPEnWIok6kokbZskpn1pXrOoXBkj0OmqzzyJVBvSRYx6cWDWEjCKSWGuufRRZtgmjA==} + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.9': + resolution: {integrity: sha512-MvRfGiJhEzn7PJumX8hzKjZjwhmLLa5yym3aG67rG9vs9EB3q2XO+syNUkmBXMMw9WQy3kc/jXh5xmrJz/N3Bg==} engines: {node: '>=14.0.0'} - '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.7': - resolution: {integrity: sha512-pZtrkWmiiZ/NRwyMASAitwAa4EO2jlt4z8Z5K9NoljnBreWrCsz4HmIKSIeZ+17++WwAyeZo2byon0AEv6FzRQ==} + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.9': + resolution: {integrity: sha512-u+Jh/5QA5jJf+VXInq/nQ7RINDIZXLI0WgErbeIIpdY0v01SdZ12wqi9P9iQSWIflF9ef0Pwa5MFde3E23xszQ==} cpu: [x64] os: [win32] - '@solidjs/compiler@2.0.0-rc.7': - resolution: {integrity: sha512-jhFq/QcoUM34760NuQiSvMDInZ+3AEHwA354VELRDpAJwuiMpPbEvkSH6qqfgneDzVwCiCtLbjScqUEymU7R1A==} + '@solidjs/compiler@2.0.0-rc.9': + resolution: {integrity: sha512-TzxMcJDhVswSEL3UtXuUWfFzIyNBx0LN6KAJZ6ryvlElAEdq2T2mpaw/Vn5fMjXcv0bCqas8CVADBhrkDVfPMg==} - '@solidjs/signals@2.0.0-rc.0': - resolution: {integrity: sha512-oKZSfvsCcKw1uJjOGbUkJ+OqlhXLHtZ+rShSyu9KH0lUH7UUwfMfsKeh81JPiQxDDg4YLhEwI38hg0JkwzTdvA==} + '@solidjs/signals@2.0.0-rc.9': + resolution: {integrity: sha512-o3pqiTgpH5NR2DstiKrt9s/6+0YOFtv+MfvLONwLsS247I+EWMMyTu9BkRcgd35UR5Pa1DM16lI1/5uaIMY6Gw==} + engines: {node: '>=22.12.0'} - '@solidjs/vite-plugin@3.0.0-next.35': - resolution: {integrity: sha512-8Mlftd+WfZkwOoCZRyMxA8innT8b2D/qawTu+28RW/Hj4eSmStSLx4dHjYeH9MxyOwo7DQStAyHAADk5LFQVRw==} + '@solidjs/vite-plugin@3.0.0-next.44': + resolution: {integrity: sha512-P/jIo9khECJft0eS2VCYJq16/JPtqoeBqaw/33VAlov8DSkd/6DU605wUTTZ3ZzpB0BFjDrwlyInjKNxFH0oLQ==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@solidjs/start-devtools': ^1.0.0-next.2 - '@solidjs/web': ^2.0.0-rc.0 - '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* - solid-js: ^2.0.0-rc.0 + '@solidjs/web': ^2.0.0-rc.9 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.0.0 || ^7.0.0 + solid-js: ^2.0.0-rc.9 vite: ^8.0.0 || ^9.0.0 peerDependenciesMeta: '@solidjs/start-devtools': @@ -643,40 +609,38 @@ packages: '@testing-library/jest-dom': optional: true - '@solidjs/web@2.0.0-rc.0': - resolution: {integrity: sha512-pYSaA9+dH8H1h/d/ZF/P2kR6omfzFGNcdzKhWTcg9fJghXhn8+5UrXUr2iYxDdYNOXZzxxFQhYHSJ7P4HKDqgw==} + '@solidjs/web@2.0.0-rc.9': + resolution: {integrity: sha512-pfiWoLDnLc+QYWc7UyLqO+5QrPEf3oTiNmmRC+C+uM6AZ5VH0bZMNPtLM5rJ29LKPiTwQitKV843IQDf/oeyhQ==} + engines: {node: '>=22.12.0'} peerDependencies: - solid-js: ^2.0.0-rc.0 - - '@standard-schema/spec@1.1.0': - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + solid-js: ^2.0.0-rc.9 - '@twinkleplop/annotation@0.1.3': - resolution: {integrity: sha512-7rgXvsO/aLcTu0IzaMuOOZoTkVsuYWwsEItVtFY9vrw1r2EjL+ENKupXjdPY4tsDaAsTbK1NR88QadNbUt9GTw==} + '@twinkleplop/annotation@0.1.4': + resolution: {integrity: sha512-/H9IDZdfDPzQgw151HtZe8tasoTHzz53m55U1HsMgnPQMbrYk5Z+NvIAdsef6Tc1bQXQ3XS2axpNLjZ//GZm8g==} - '@twinkleplop/core@0.2.0': - resolution: {integrity: sha512-rSzamqk0r8fF0O3LkeBpV+dnKLCwn/cM6ww1HTOVMl8QTu4EfeJqxOcMHq20cqCcE/Vvs+w/BENq++UywpSeSA==} + '@twinkleplop/core@0.2.1': + resolution: {integrity: sha512-e/5EokljcDDsGvh55n0QO+HXDMVbpUhkNpg/QCWlY0Igw4a0qTB7fbJWtFrcRhBqfg+H7Wtw07A6U8YADm9J/A==} - '@twinkleplop/css@0.1.3': - resolution: {integrity: sha512-6ZB/rDLwkZLJlMaTiekCYkQ7DMcc52sO20FkIq60RtVw8Rr/q7bG5qCpX5tiFu7Z55y7Xj1JIY90mKQ6NjNJLA==} + '@twinkleplop/css@0.1.4': + resolution: {integrity: sha512-1ocBF2Fn3qiGJLGEMuMHiXB2LNVXyLHY5k3czvKXjcEqA1pLmHY2vypUnlVqCJFctcjFFDQiQ/F6Oon9lPwezQ==} - '@twinkleplop/html@0.1.3': - resolution: {integrity: sha512-CV+GvBPrKVhotoSO0LmKWUFUP01Ojj8G4+XJ8YN6cp9TcuxzaEKDyUgBG94l0qNwLjl9brd+GPcNnnjSeP9Lzg==} + '@twinkleplop/html@0.1.4': + resolution: {integrity: sha512-Ggw4Fz2TXUvkhhTX7qYY/YzBzgd/3j50b0A4GoepHVyOxkvN37g24oCT9DgiBTrZzAaYw84JWHu4k/NUAeed7g==} - '@twinkleplop/javascript@0.1.3': - resolution: {integrity: sha512-32E+UMI3OVFaLwARSIyKgto1oUx5IjZpvY7T1ebYpq8nRE58P9TnPuqVs2UVBsxyC1OPrfAyEtrL9P8IT+40+A==} + '@twinkleplop/javascript@0.1.4': + resolution: {integrity: sha512-gIfRSQrtcbUz+aV245CVl0Ilg0a3FsMDFFSRrh/GJte3N32BBvT77QVRcN+N/EW2s4hiyrVF9BQGvo3IBqilUg==} - '@twinkleplop/theme-github@0.2.0': - resolution: {integrity: sha512-NXvq9duV5H42GyApEDTyPKXQtQhWfkCd+Cs6bNSSUgE92HWamfKS3gmmFnJYO7pDBPYa9Bub9MalKFxwIYXOIw==} + '@twinkleplop/theme-github@0.2.1': + resolution: {integrity: sha512-ePjuzSvpZtDJvtpZOFYFrJvj5eIgE8TzECxExoGFVfMkTNWkVGo6A1JoyFKa2+m6CfSsqFYp1SyIWqXy7BG8/g==} - '@twinkleplop/tsx@0.1.3': - resolution: {integrity: sha512-f3SguxVjX2/xGGqxieTV9RXSRB3xYdttw4rGcsmQPgalfDXb8A6te29Thg4WeSDo0U0pZquYlxlMOSJ3XcMWNg==} + '@twinkleplop/tsx@0.1.4': + resolution: {integrity: sha512-nFf5eACc4Y2kor+zFV7OPWNDUtGQvkOErrFaxMYdij/GH8qj891iGnZ9FmM9B5avJL5XYqw1YG4cR7yucnax5Q==} - '@twinkleplop/typescript@0.1.3': - resolution: {integrity: sha512-M9jPfDCOvvyORUi6TEKvVUbvmdR0wu365E6P9aBE4x6I1LY83cXMfMYu2pCAH6qtMQmH7Xn6F5Ql17Jwta6omQ==} + '@twinkleplop/typescript@0.1.4': + resolution: {integrity: sha512-jc/7ccXF/S+BwmGXC48y4ffaeMnniDfL4MyH8GKKctMiZiiVL1LQTTfLeSfzDjbFsK2zGWvi8KuHv4Lsqfk73A==} - '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@tybys/wasm-util@0.10.4': + resolution: {integrity: sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==} '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -699,11 +663,8 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - - '@types/node@24.13.3': - resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} + '@types/node@26.6.2': + resolution: {integrity: sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==} '@typescript/typescript-aix-ppc64@7.0.2': resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} @@ -825,11 +786,8 @@ packages: cpu: [x64] os: [win32] - '@vitest/expect@4.1.11': - resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - - '@vitest/mocker@4.1.11': - resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} + '@vitest/mocker@5.0.1': + resolution: {integrity: sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -839,159 +797,143 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.11': - resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - - '@vitest/runner@4.1.11': - resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - - '@vitest/snapshot@4.1.11': - resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} + '@vitest/spy@5.0.1': + resolution: {integrity: sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==} - '@vitest/spy@4.1.11': - resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - - '@vitest/utils@4.1.11': - resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} - - '@yuku-codegen/binding-android-arm64@0.8.7': - resolution: {integrity: sha512-C/0zV5IhgVdYhGJTwrY0v8dknxlhiKwtVJkMUaexu9/QvRmzlV4vfU3hZlUSgqc2BxQHntL1mCVbDq8j0FRFDw==} + '@yuku-codegen/binding-android-arm64@0.10.2': + resolution: {integrity: sha512-Oc2KInVkPfUjEB4PeV6X0NvIoyYTzDe/WmqFrTwBqKs6YKnz4A7XwWQvJTb7M0rLz9a6WgpUUiiS5QKaCi4O/g==} cpu: [arm64] os: [android] - '@yuku-codegen/binding-darwin-arm64@0.8.7': - resolution: {integrity: sha512-/u+REDMI4a0/lsJXTM4c53/w31OGZLOReZIyg62uhgLs0kc8NHsj/nOcxTdlQjq5gi0zhdkccD9LaLTXcdzPvw==} + '@yuku-codegen/binding-darwin-arm64@0.10.2': + resolution: {integrity: sha512-3H7eNPIHJndUJXZ4QUGBPq1zC6RGcUZfm7bymJes+/N7wTVWUn1bxZ9JcozYHpkWQNm9f23G8YWbaHD9aYH72A==} cpu: [arm64] os: [darwin] - '@yuku-codegen/binding-darwin-x64@0.8.7': - resolution: {integrity: sha512-sMMzFOwCo4WXR+/6zIBThOocSC50iIIZZdfiIDbaLvj0Ax/rWt/iavyfEAqajyvzydLyCqR/ZItdLWSRlu1umw==} + '@yuku-codegen/binding-darwin-x64@0.10.2': + resolution: {integrity: sha512-AJOUpR2s3LF9AWiiub/Uyc/UoXNTWcq8hK3cVI6fUSXtwh34dG21J6hRuNlO6JVJFTo4o3ScVvZOrh/YFfUEAA==} cpu: [x64] os: [darwin] - '@yuku-codegen/binding-freebsd-x64@0.8.7': - resolution: {integrity: sha512-MpdpKXix9P+Y1rKgjvcNeNtGjXeL1CmttNhYINrWls8kRpm4xM/oBGTmn6w7to8lAlwj5jm8q03dQPl5mRv4Qw==} + '@yuku-codegen/binding-freebsd-x64@0.10.2': + resolution: {integrity: sha512-ms7DcZu87u5CiK/wMwvpKAvAmtaqKjCQIXNweMLypG6qbuiaOMQf1jpbB5+j46xBcgCovo8TQMcv0bCQLKIL9w==} cpu: [x64] os: [freebsd] - '@yuku-codegen/binding-linux-arm-gnu@0.8.7': - resolution: {integrity: sha512-rr1srFLlPAmC1vtxfc9C1YLDe3iH09YjfSeeIidBqKhzx1MATjOAq4mjlRUOnhr/L27MotWIYOFKwVsd5JZFOg==} + '@yuku-codegen/binding-linux-arm-gnu@0.10.2': + resolution: {integrity: sha512-xJDpYAsKV5+eaiBhTYl05fvT6sst4PsCeuIFMRu9b0/WCSrNQPfCDtAQ5/MS6xNpsdujdZEPR+gmfWk3ZG5i3A==} cpu: [arm] os: [linux] libc: [glibc] - '@yuku-codegen/binding-linux-arm-musl@0.8.7': - resolution: {integrity: sha512-eAufXh8qBRpiSO6ueaMDL+yyoXIGLhpUce72YbcACtZU2qhExwBIJyEtQf5kH2Ki0X2aqkSjSfog4OPtKXan3Q==} + '@yuku-codegen/binding-linux-arm-musl@0.10.2': + resolution: {integrity: sha512-qfTkgd7AEx61l4K9VtXWCGTxc/fmXJ4ZheDz3i+/AAJUtg4sa0bPrc0VBxPggB/rayR8Z3+JfrBItuyanBJJ9Q==} cpu: [arm] os: [linux] libc: [musl] - '@yuku-codegen/binding-linux-arm64-gnu@0.8.7': - resolution: {integrity: sha512-gw4w6wPoHObBrdIC4duVWLmJOvpdE25j5D7yrM5mACNlK4klRz/lv8hK+ssQk9EJHBgZjSaqZIJVFgqNYbfv7A==} + '@yuku-codegen/binding-linux-arm64-gnu@0.10.2': + resolution: {integrity: sha512-4e6Mifm/4UdjtU3D8mATIrvgP+xEiH8xtQOjd0zpd72XKWT7ug3sdyhq2utkkZFP6BvYp7SgZrI+aR4VeIOHdw==} cpu: [arm64] os: [linux] libc: [glibc] - '@yuku-codegen/binding-linux-arm64-musl@0.8.7': - resolution: {integrity: sha512-L68N6Y4XkqcIaKo3Ra88JEvBEH4AHff44A4INcrxeVWZ8CZtu2tCpfVxe3hR8qQQMcvBSQlDn24KpkCKEhVvfA==} + '@yuku-codegen/binding-linux-arm64-musl@0.10.2': + resolution: {integrity: sha512-RdsJrUfDYFVV3JOmWFUWwSu31fa1APn12xDeIKxgl/YWxrabwtxsDBNjF2561c7tmcbiewdCUvngqRs8AyGVLA==} cpu: [arm64] os: [linux] libc: [musl] - '@yuku-codegen/binding-linux-x64-gnu@0.8.7': - resolution: {integrity: sha512-dzyAbltJmf3Cqlb8HcFuYIf5Yn0fl1vTr3XJ9HiVNNvOlhqPSArOqtw9vI1p6/VTXTjrMLXlU+s+/kNHiIy/Cw==} + '@yuku-codegen/binding-linux-x64-gnu@0.10.2': + resolution: {integrity: sha512-mVzWimEPPreaPyXIUvxsHoJzvO7ckZ5j0LgQFHz04zQIRwt9A9T2hA7K5/jYjJKkMxWG/U2VjhGNwVhtyU+uqg==} cpu: [x64] os: [linux] libc: [glibc] - '@yuku-codegen/binding-linux-x64-musl@0.8.7': - resolution: {integrity: sha512-Otw4MH3404q0Bbvl+YTdW9aoUV5vXmUw8260bWvt1XlaoIX/ceSgI4ygheRDMfBPoHt6FDayQaO9OLVUZAgkFA==} + '@yuku-codegen/binding-linux-x64-musl@0.10.2': + resolution: {integrity: sha512-Y77fyISurmr2mvO1yeq3u+x/WJbACgPR4w+lzEVx30ViCxZzIGrZPRN1yEdZ9xUNPNsIO5thBHIdRNG+UGUG+Q==} cpu: [x64] os: [linux] libc: [musl] - '@yuku-codegen/binding-win32-arm64@0.8.7': - resolution: {integrity: sha512-qo/jyrzryiBuKEsFiuWaBCBe3tRMynQ0qFWFgOEjcCMQeZfBm+wKiVEUEFXXLc7bh8YezguAWp0Mtnhq4ARNyA==} + '@yuku-codegen/binding-win32-arm64@0.10.2': + resolution: {integrity: sha512-1+tGLyG0u5YYy0lev4ck7/0sd8xJ9SZde0dLut7qLDPZV5WVTV8x6OxNXUne/PGuHZyO1vK+txPQzzHOyXHGSw==} cpu: [arm64] os: [win32] - '@yuku-codegen/binding-win32-x64@0.8.7': - resolution: {integrity: sha512-D5lDsVDx6m00E6bWySlWdH72Ca4TPSaphDqB6QjU6MpuNLIJqoGoatYyq2rOmBE8Zv/kunot/o58KGL03P3eiA==} + '@yuku-codegen/binding-win32-x64@0.10.2': + resolution: {integrity: sha512-8a2SExRohRbwC0MY4VpOF0/RSckrJ2ASZqAor5/RYSJJaeadR93n10gZzcKT6pY9ukiSOIZCRKVRD2tH73T0qA==} cpu: [x64] os: [win32] - '@yuku-parser/binding-android-arm64@0.8.7': - resolution: {integrity: sha512-eGKYiUDX7Y0V7tDTmg+JTVnXnjMqfXXsorZ+EDf5kxwchQ3Or1HS14MzI2fw+jFhHR85fCWt+mtX33Yao73hIQ==} + '@yuku-parser/binding-android-arm64@0.10.2': + resolution: {integrity: sha512-2VPBU9fRGRAQ2xPAvghnec3oou5Nrxm2Bezhf+13UMspAxQSkF/32r+ySKXSwIPA5/RivumDJDxAxc301Sgicw==} cpu: [arm64] os: [android] - '@yuku-parser/binding-darwin-arm64@0.8.7': - resolution: {integrity: sha512-Re0RHelKLnjEURulY2/KxW+Ngb8zuNA4BRZuMwgGQNzVumT6u4U2N2hc01oeYVNVof0i7GrXE4UCNBgbpRRnjQ==} + '@yuku-parser/binding-darwin-arm64@0.10.2': + resolution: {integrity: sha512-LD+PMZE51tCYTOss5HBkm3/AE39MvcMDBfWJx7A4yDcjfNbAQDnHZKtzSOuqrswx+TQHY0ws5xn6+fWOwtmfBA==} cpu: [arm64] os: [darwin] - '@yuku-parser/binding-darwin-x64@0.8.7': - resolution: {integrity: sha512-Hn8DROtQkjlA1ACbPgj4a7eP9IuVOI504oiTwpkWPbpaDWD9KdmnVYCqW+1LfenNK/g7O9NhWGpXEdaCNX7lIA==} + '@yuku-parser/binding-darwin-x64@0.10.2': + resolution: {integrity: sha512-mmZ8cND+AoIIMRERyMinlg5ApHxP23B9jH2B5wT7T+dliPa9rubLxneB/SUjFwyUjGaFnB5G7t4YvpfbO5zbkQ==} cpu: [x64] os: [darwin] - '@yuku-parser/binding-freebsd-x64@0.8.7': - resolution: {integrity: sha512-bAP2OV8wRuzplX/jYxv9+vvqQT8JxyNphI8fLfXGL054Xs+4/J5u33cIm3y4rxY8rdoLmmdiJs2Tq7r7lrDRfA==} + '@yuku-parser/binding-freebsd-x64@0.10.2': + resolution: {integrity: sha512-gVIjaaIddbRfAhHlC8N809wQWml7mxfSVnzaLtzGXObTeFTPAg/YVnQXt1UOhPM1ah5eG/8Y0RUlNpB4GVe7eQ==} cpu: [x64] os: [freebsd] - '@yuku-parser/binding-linux-arm-gnu@0.8.7': - resolution: {integrity: sha512-kTYwJQQgmZeAWdDIWabiReIZMpmfLueIj1tCmjStUtFGhR1Z0qwxonKVfUC4N7h/VhGGzLZ//7O1kgt1QKqgCg==} + '@yuku-parser/binding-linux-arm-gnu@0.10.2': + resolution: {integrity: sha512-q/XPPQQAPdlw05aPj30ygBhekmQryGOwxVraBgApjKK8yY1kNQgqq6XCYLF1WHSee+lhxclrTO7W0/bt7dR1GA==} cpu: [arm] os: [linux] libc: [glibc] - '@yuku-parser/binding-linux-arm-musl@0.8.7': - resolution: {integrity: sha512-uL4jE8HPT2BLlxAXyD10LqgPuXa9eDa0BKpCdSANmzIJghq/2eZo3/gQNtaxPZMupWoxjYzSad9IXrwu7aYPXQ==} + '@yuku-parser/binding-linux-arm-musl@0.10.2': + resolution: {integrity: sha512-A+Cb0I1hFF4wilTQpWs79k1aNnj4B2tkrHx3zsuUNF9BtVY2zPZ4yeQEM/zjXrS/qJlNMZVK9NrWJjwdpnTrfg==} cpu: [arm] os: [linux] libc: [musl] - '@yuku-parser/binding-linux-arm64-gnu@0.8.7': - resolution: {integrity: sha512-3gVN4pWSKZmXiNX7cU164dR9MPvesCHnlH6nPfpK+yQsCuYphjKKplcb4SnZBrhiqmXbgb2HR0c2TS0IZUPhgA==} + '@yuku-parser/binding-linux-arm64-gnu@0.10.2': + resolution: {integrity: sha512-aGNSzqIqqphFwAdIFwVvKIyXD1Iy3CxrEJVIZAT87Ecyi4vCmmDD2v2l9h+Gd3/wSy3JZlOI792LJbKAjyy9rQ==} cpu: [arm64] os: [linux] libc: [glibc] - '@yuku-parser/binding-linux-arm64-musl@0.8.7': - resolution: {integrity: sha512-S0mwfEjoLpxzXeZw802Wa4RaELsQiPtWqG6INcy8j4GtvNFtl4LCX3eGO1XLn9pyLAISLzTRyU3zUCBUPin8lg==} + '@yuku-parser/binding-linux-arm64-musl@0.10.2': + resolution: {integrity: sha512-Ddl1sF0rtuCXyHGSOV6dcmdx+ETv1iD+IVFqQuOjzkJZWclxJxdBWX6ZJMRtTiGqGUTbqLEKiTXxpR/Bvqk+2A==} cpu: [arm64] os: [linux] libc: [musl] - '@yuku-parser/binding-linux-x64-gnu@0.8.7': - resolution: {integrity: sha512-lnbWdPmerE5D1uH1G4IEZKnPzCrWCStRGrtgpSIe1RibAo5bZIjDbbbPYXmMHCEh4F+x/JaJpElh26a3r+BPbg==} + '@yuku-parser/binding-linux-x64-gnu@0.10.2': + resolution: {integrity: sha512-/nlcpR6IF5U+0m5L9wvAIXeQa2DT+BXuvqKDsTcOTlcc0B4dHNyqE5hTXsS4hAyimpy2ZK8A1zMNF5hTrjg2cg==} cpu: [x64] os: [linux] libc: [glibc] - '@yuku-parser/binding-linux-x64-musl@0.8.7': - resolution: {integrity: sha512-769uwndMvMzUvATWbAcEvyLHKA+DzhHSCl/obBUrRdYfRo26yxui6S8y3z7uJ+Naup7UKrDxrpK7OnQkxkl9KQ==} + '@yuku-parser/binding-linux-x64-musl@0.10.2': + resolution: {integrity: sha512-GX80dxTQD/M/OryyuxJcFzFENzry3cDFPvCFTyWogNWQH3fSHfMrNfpwpl1YzMos1eV9NygK5GSDG7VArQlb4w==} cpu: [x64] os: [linux] libc: [musl] - '@yuku-parser/binding-win32-arm64@0.8.7': - resolution: {integrity: sha512-mEB/9PlaAkisJ6KWGz0zvywXoU6+80dTlR2LwS7s/jcXXoU6fm2+sitBZXtqu3+Q4DcDgPxM45uWMCzPs0TSRw==} + '@yuku-parser/binding-win32-arm64@0.10.2': + resolution: {integrity: sha512-agePQBV4VHewiGU0ACSjscZ/hJd283f9JfAF19Gf1rI5+wy5tTgx4GS36i0b3xim15AQ4RCpDRosEvhLZ4zAOw==} cpu: [arm64] os: [win32] - '@yuku-parser/binding-win32-x64@0.8.7': - resolution: {integrity: sha512-8vNB2DP0ou61nGb8tc/qfi41gfyDXz1MHr2zqL3nR+cJ6CEbiuWV/l/a/vv151gCgiZLLAyGkQGENpozdg716w==} + '@yuku-parser/binding-win32-x64@0.10.2': + resolution: {integrity: sha512-s8//CMpgL5+y1lvDCdyh1rwGI5+ytDJywFJRe1vnhI7n0j+caxshNucurikYLLVeQ2SYFex6aPrzgQxkabBQRA==} cpu: [x64] os: [win32] - '@yuku-toolchain/types@0.8.7': - resolution: {integrity: sha512-2Z53dNxAJL6UvFoIrDZvYf3zlO8s4VJK4O2hhaB4mXVwwpX/7ajtss3cmfqKvamlNLWyt9FSWs4eoYdlbxpnHA==} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} + '@yuku-toolchain/types@0.10.2': + resolution: {integrity: sha512-sSeo4SSSToiS+sSD+bwn/s94EEcaLJ7tG5LCp8gFYC1G5VzxzX7fqB6m9RU1yMD8KTpu6zdU/I1NlQf8hVBJ9Q==} ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} @@ -1012,16 +954,6 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1031,19 +963,15 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - browserslist@4.28.9: resolution: {integrity: sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + cac@7.0.0: + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} + engines: {node: '>=20.19.0'} + caniuse-lite@1.0.30001810: resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} @@ -1063,9 +991,6 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - chardet@2.2.0: - resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} - cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} @@ -1095,10 +1020,6 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -1111,18 +1032,10 @@ packages: supports-color: optional: true - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dts-resolver@3.0.0: resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} engines: {node: ^22.18.0 || >=24.0.0} @@ -1141,10 +1054,6 @@ packages: emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -1163,11 +1072,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -1175,15 +1079,14 @@ packages: resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} - extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -1197,27 +1100,6 @@ packages: fflate@0.8.3: resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1231,21 +1113,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-tsconfig@5.0.0-beta.5: - resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==} + get-tsconfig@5.0.0-beta.6: + resolution: {integrity: sha512-X6fBC0pmImC70gvX2zm56go9hx0MyoGVdG0tUCkg/D+Xnh5TJsOZ7iDbOdI3PvmtrDxnu1YdDufpK2QJX1Meqw==} engines: {node: '>=20.20.0'} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1259,60 +1130,27 @@ packages: html-to-image@1.11.13: resolution: {integrity: sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==} - human-id@4.2.0: - resolution: {integrity: sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==} + human-id@4.2.1: + resolution: {integrity: sha512-zPGsiS+dWoTZtZ4AtpA9Y+BdSFSNWvnouNlWNoUFyAM6xHOHmdCvqO3k8AIbdamCOv4gUFUVNPf6rJFfc4UiJw==} hasBin: true - iconv-lite@0.7.3: - resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} - engines: {node: '>=0.10.0'} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} - is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.15.1: - resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==} - hasBin: true - - js-yaml@4.3.1: - resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==} - hasBin: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -1323,8 +1161,11 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + launch-editor@2.14.1: + resolution: {integrity: sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==} lightningcss-android-arm64@1.33.0: resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} @@ -1400,13 +1241,6 @@ packages: resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} engines: {node: '>= 12.0.0'} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lru-cache@11.5.2: resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} engines: {node: 20 || >=22} @@ -1414,8 +1248,8 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.4.1: + resolution: {integrity: sha512-8lyCu36ErXR0J9uaGKlKQoiLZKmtI63YGLE8G2o9jyRPdr4X47LusSOwgOJOzcVtp81fTAAjxR7BwKz682Jhow==} marked-terminal@7.3.0: resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} @@ -1432,14 +1266,6 @@ packages: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -1450,8 +1276,8 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.18: - resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + nanoid@3.3.19: + resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -1467,15 +1293,16 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - obug@2.1.4: - resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==} + obug@2.2.1: + resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} engines: {node: '>=12.20.0'} - outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} + engines: {node: '>=12.20.0'} - oxfmt@0.64.0: - resolution: {integrity: sha512-XZ4GFBN/PLbXKq+0zrgpQfPKYuJlUuj+nzZJY7UpIbFMNyefNLCdN9EwViycNqnYcv0wrn0jXcQLlqJp8RCKBg==} + oxfmt@0.70.0: + resolution: {integrity: sha512-IsHxZ4y0wQLLMhnrJblBJgZsLDzfULrJnAw5j/QqsTlMa/m3AqsbToi+W71uhBGaqlqq/PbbjvHc09TJwdv3Tw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1487,29 +1314,6 @@ packages: vite-plus: optional: true - p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - package-manager-detector@0.2.11: - resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} - package-manager-detector@1.8.0: resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} @@ -1525,91 +1329,46 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - - picomatch@4.0.5: - resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - - playwright-core@1.62.1: - resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + playwright-core@1.63.0: + resolution: {integrity: sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==} engines: {node: '>=20'} hasBin: true - playwright@1.62.1: - resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + playwright@1.63.0: + resolution: {integrity: sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==} engines: {node: '>=20'} hasBin: true - postcss@8.5.26: - resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - publint@0.3.23: - resolution: {integrity: sha512-5MQipUPcB7MWw84zLUkHrg/H/UBtk3LL+A0GngTTBSsiNJLQurMUaSIRG3edlOrRz4UFe0AOKK9TZdIWviV+jQ==} + publint@0.3.24: + resolution: {integrity: sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw==} engines: {node: '>=18'} hasBin: true - quansync@0.2.11: - resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rolldown-plugin-dts@0.28.2: - resolution: {integrity: sha512-U0Ng45ZaESZ7rJtQtgCWkJYCpMgH42yIj3xv9HGAsh/dJ8XBhjI4lcqh4NOWx8+CAxoY2HWg8VYINML2yE9A5A==} + rolldown-plugin-dts@0.28.6: + resolution: {integrity: sha512-qKrFtBfRfR2hP233m7Ic9zf3wv6MSYdZghWKMdEO6dRYZGlNfINJAa1P5ZVvyHh3mrcd7IJQvIY8L9vnm+v5rQ==} engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0} peerDependencies: '@typescript/native-preview': '*' '@volar/typescript': ~2.4.0 + '@vue/language-core': ~3.2.0 || ~3.3.0 rolldown: ^1.2.0 typescript: ^5.0.0 || ^6.0.0 || ~7.0.0 vue-tsc: ~3.2.0 || ~3.3.0 @@ -1618,26 +1377,22 @@ packages: optional: true '@volar/typescript': optional: true + '@vue/language-core': + optional: true typescript: optional: true vue-tsc: optional: true - rolldown@1.2.4: - resolution: {integrity: sha512-rSr7irW0K7QRWzjdJXqZowkcRdDtjRduh43rBltnVKd0VFq839l1lJoDvGJb6gl7+4rTTCrPWu+YfujUL8Ug7w==} + rolldown@1.2.9: + resolution: {integrity: sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1647,45 +1402,33 @@ packages: engines: {node: '>=10'} hasBin: true - seroval-plugins@1.5.6: - resolution: {integrity: sha512-HXuLAX2pu/UByPpaeo/TaMfvMIi+1QqIoPJYCcAtU8QkVNwgR6MPlGuCQTErV1JwraaMbYaWVIBX7mppzGLATQ==} + seroval-plugins@1.6.7: + resolution: {integrity: sha512-4Nk35ttD3DTDJW4hgw5StsVAPeU6qnDFnULAouw6tQ7oLTV/ICXrWpsXo2EE52eSP2joUMazbVf52mFEcADqRw==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.5.6: - resolution: {integrity: sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA==} + seroval@1.6.7: + resolution: {integrity: sha512-AeDcLh0yO2SFm9W71essgnSzLV9DI8ZH0x0knXn2DMnUZj728mpLbxjlbB6IqKCmqh8JA3cEqRyGoNkt584JcQ==} engines: {node: '>=10'} - seroval@1.6.2: - resolution: {integrity: sha512-mPT+SD2TrlB6wvte1KkYOYUkubaTbd6pZ/6Kk3C9nxzrHmCZyhxOO7XGAeL7f+yLKZglzGtM9odUVvg/EhO+vQ==} - engines: {node: '>=10'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + shell-quote@1.10.0: + resolution: {integrity: sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==} + engines: {node: '>= 0.4'} siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} skin-tone@2.0.0: resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} engines: {node: '>=8'} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - solid-js@2.0.0-rc.0: - resolution: {integrity: sha512-3enTJ71VL69nM5p/it2InVBDBt316Cqfij+F0S7VuHZLITc8YV7Rvavjoy52nAKKxYWXM+BcXh2K7KcLTf1zdQ==} + solid-js@2.0.0-rc.9: + resolution: {integrity: sha512-J/oHWnWqe7S0FeIEdIRKDvyyo+HY/TYKr2PrIB8VlePMWuErDg78QHqdsAV7f6HKa9qhWR/23eqzR/ZRV9ep0g==} + engines: {node: '>=22.12.0'} solid-use@1.0.0-next.3: resolution: {integrity: sha512-bEUzCWEKEYIYr807QNUQfewX3MlaIYExZFKuM3S9kK3pc4tlnpc0YPKnpQp28Inmtd3DzLkmK9Zq1UC1xVM7Gw==} @@ -1697,12 +1440,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - spawndamnit@3.0.1: - resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -1717,10 +1454,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1729,10 +1462,6 @@ packages: resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} engines: {node: '>=14.18'} - term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - terracotta@2.0.0-next.9: resolution: {integrity: sha512-kg5T5EiYfxsFumnGSQ6NB3g8UdvbNULcbbIR2KRCI3W5AJ42WqtgJqngklOX28e+LsXs62ibd3HnfGa7F7NXww==} engines: {node: '>=20'} @@ -1747,29 +1476,26 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinybench@6.1.4: + resolution: {integrity: sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==} + engines: {node: '>=20.0.0'} tinyexec@1.3.0: resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} + engines: {node: '>=18'} + tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tinypool@2.1.0: - resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + tinypool@2.1.2: + resolution: {integrity: sha512-9YodfrxS9g9IbFr/KOjE5bAeJ0p61n3bW6mqvy0jtoeKd1kTW1Cxm0oulm6KX2lyM9Gl6WIe8nEbY7LWv5ZJww==} engines: {node: ^20.0.0 || >=22.0.0} - tinyrainbow@3.1.1: - resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} - engines: {node: '>=14.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1783,37 +1509,30 @@ packages: engines: {node: '>=16.20.0'} hasBin: true - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} unicode-emoji-modifier-base@1.0.0: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - update-browserslist-db@1.3.2: resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' - validate-html-nesting@1.2.4: - resolution: {integrity: sha512-doQi7e8EJ2OWneSG1aZpJluS6A49aZM0+EICXWKm1i6WvqTLmq0tpUcImc4KTWG50mORO0C4YDBtOCSYvElftw==} - validate-npm-package-name@5.0.1: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vite@8.2.1: - resolution: {integrity: sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==} + vite@8.3.0: + resolution: {integrity: sha512-lhZBVvEHefgE+HQZC9O7EBJgCU/nVzFNl7vkS4RE0APtWLP02/8QVIkQtzBxPquh7lq5/78NHipTj7ODQ6XuyQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.4.0 + '@vitejs/devtools': ^0.7.1 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -1858,23 +1577,23 @@ packages: vite: optional: true - vitest@4.1.11: - resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + vitest@5.0.1: + resolution: {integrity: sha512-iA95lQbKEkvrtTkdAgnWbXfbipWiiWe/hDl2P5tMi6WFwD76G0NxXAGp/M9EOcYupeGJRr6wppMc7CoA41TQjg==} + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.11 - '@vitest/browser-preview': 4.1.11 - '@vitest/browser-webdriverio': 4.1.11 - '@vitest/coverage-istanbul': 4.1.11 - '@vitest/coverage-v8': 4.1.11 - '@vitest/ui': 4.1.11 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.1 + '@vitest/browser-preview': 5.0.1 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.1 + '@vitest/coverage-v8': 5.0.1 + '@vitest/ui': 5.0.1 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + vite: ^6.4.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -1899,11 +1618,6 @@ packages: jsdom: optional: true - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -1920,6 +1634,11 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@2.9.1: + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -1928,14 +1647,14 @@ packages: resolution: {integrity: sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w==} engines: {node: '>=10'} - yuku-ast@0.8.7: - resolution: {integrity: sha512-h6+4bDfyootiMB9vckk5uKo5r5j0GHrkr17FQTDNfEsFT3DWlN9uu1HJwQwc64pgmLCI945fWM3lbTIqxjT3GQ==} + yuku-ast@0.10.2: + resolution: {integrity: sha512-UnG9mA6giglCvSErft2/40TVFX750Sj1xgwddPLpG7J7rlr/P1wPADg9G2RK+d/1tNLtRVoLdMMOMVBB9561TQ==} - yuku-codegen@0.8.7: - resolution: {integrity: sha512-adwDZSh8oVDzhE6Du9PwVWxcOxeV0e2EVhUuMKWfhSY4wkrDq9eqixlxFF3l/XGUV1E7UFzhpz9393MUumkyNw==} + yuku-codegen@0.10.2: + resolution: {integrity: sha512-hentl2dtrF6cPjiAirtkfxfFZBA6Hdm61UqRJ7cA0qrlDNMk9PZGOjw5w1mx3E0hu/6pHcJF4dJW+D0SXHPZOA==} - yuku-parser@0.8.7: - resolution: {integrity: sha512-vRD9nwt4L3aYpxNqeSC4WqLv58xrXef0Ong1Mc45CTXTIpvLafx7JO05sczmQZwdLEZvywrLOGdNC5+Rp5N1BQ==} + yuku-parser@0.10.2: + resolution: {integrity: sha512-CgaU0/PPjCAIEZ3WQroosOxTY3eeKldAN3h+vk8pMNz4+jl1CZzBR4pW+K/rRPF112VooCL5FdjJoiMNjDrL2A==} snapshots: @@ -2055,8 +1774,6 @@ snapshots: '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-plugin-utils': 7.29.7 - '@babel/runtime@7.29.7': {} - '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 @@ -2082,187 +1799,123 @@ snapshots: '@braidai/lang@1.1.2': {} - '@changesets/apply-release-plan@7.1.1': - dependencies: - '@changesets/config': 3.1.4 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.4 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 + '@changesets/apply-release-plan@8.1.1': + dependencies: + '@changesets/config': 4.0.1 + '@changesets/format': 0.1.2 + '@changesets/git': 4.0.1 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + import-meta-resolve: 4.2.0 + jsonc-parser: 3.3.1 semver: 7.8.5 - '@changesets/assemble-release-plan@6.0.10': + '@changesets/assemble-release-plan@7.0.0': dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 semver: 7.8.5 - '@changesets/changelog-git@0.2.1': - dependencies: - '@changesets/types': 6.1.0 - - '@changesets/cli@2.31.1(@types/node@24.13.3)': - dependencies: - '@changesets/apply-release-plan': 7.1.1 - '@changesets/assemble-release-plan': 6.0.10 - '@changesets/changelog-git': 0.2.1 - '@changesets/config': 3.1.4 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/get-release-plan': 4.0.16 - '@changesets/git': 3.0.4 - '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.7 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@24.13.3) - '@manypkg/get-packages': 1.1.3 - ansi-colors: 4.1.3 - enquirer: 2.4.1 - fs-extra: 7.0.1 - mri: 1.2.0 - package-manager-detector: 0.2.11 - picocolors: 1.1.1 - resolve-from: 5.0.0 + '@changesets/changelog-git@1.0.0': + dependencies: + '@changesets/types': 7.0.0 + + '@changesets/cli@3.0.3': + dependencies: + '@changesets/apply-release-plan': 8.1.1 + '@changesets/assemble-release-plan': 7.0.0 + '@changesets/changelog-git': 1.0.0 + '@changesets/config': 4.0.1 + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/git': 4.0.1 + '@changesets/pre': 3.0.0 + '@changesets/read': 1.0.1 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + '@changesets/write': 1.0.1 + '@clack/prompts': 1.8.1 + '@manypkg/get-packages': 3.1.0 + '@pnpm/deps.graph-sequencer': 1100.0.1 + cac: 7.0.0 + import-meta-resolve: 4.2.0 + launch-editor: 2.14.1 + package-manager-detector: 1.8.0 semver: 7.8.5 - spawndamnit: 3.0.1 - term-size: 2.2.1 - transitivePeerDependencies: - - '@types/node' + tinyexec: 1.3.1 - '@changesets/config@3.1.4': + '@changesets/config@4.0.1': dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/logger': 0.1.1 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.8 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 + picomatch: 4.0.7 - '@changesets/errors@0.2.0': + '@changesets/errors@1.0.0': {} + + '@changesets/format@0.1.2': dependencies: - extendable-error: 0.1.7 + package-manager-detector: 1.8.0 + tinyexec: 1.3.1 - '@changesets/get-dependents-graph@2.1.4': + '@changesets/get-dependents-graph@3.0.0': dependencies: - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - picocolors: 1.1.1 + '@changesets/types': 7.0.0 semver: 7.8.5 - '@changesets/get-release-plan@4.0.16': + '@changesets/git@4.0.1': dependencies: - '@changesets/assemble-release-plan': 6.0.10 - '@changesets/config': 3.1.4 - '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.7 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 + picomatch: 4.0.7 + tinyexec: 1.3.1 - '@changesets/get-version-range-type@0.4.0': {} - - '@changesets/git@3.0.4': + '@changesets/parse@1.0.0': dependencies: - '@changesets/errors': 0.2.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 3.0.1 + '@changesets/types': 7.0.0 + yaml: 2.9.1 - '@changesets/logger@0.1.1': + '@changesets/pre@3.0.0': dependencies: - picocolors: 1.1.1 + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 - '@changesets/parse@0.4.3': + '@changesets/read@1.0.1': dependencies: - '@changesets/types': 6.1.0 - js-yaml: 4.3.1 + '@changesets/git': 4.0.1 + '@changesets/parse': 1.0.0 + '@changesets/types': 7.0.0 - '@changesets/pre@2.0.2': + '@changesets/should-skip-package@1.0.0': dependencies: - '@changesets/errors': 0.2.0 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 + '@changesets/types': 7.0.0 - '@changesets/read@0.6.7': - dependencies: - '@changesets/git': 3.0.4 - '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.3 - '@changesets/types': 6.1.0 - fs-extra: 7.0.1 - p-filter: 2.1.0 - picocolors: 1.1.1 + '@changesets/types@7.0.0': {} - '@changesets/should-skip-package@0.1.2': + '@changesets/write@1.0.1': dependencies: - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - - '@changesets/types@4.1.0': {} - - '@changesets/types@6.1.0': {} + '@changesets/format': 0.1.2 + '@changesets/types': 7.0.0 + human-id: 4.2.1 - '@changesets/write@0.4.0': + '@clack/core@1.5.1': dependencies: - '@changesets/types': 6.1.0 - fs-extra: 7.0.1 - human-id: 4.2.0 - prettier: 2.8.8 - - '@colors/colors@1.5.0': - optional: true - - '@dom-expressions/compiler-darwin-arm64@0.50.0-next.43': - optional: true + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 - '@dom-expressions/compiler-darwin-x64@0.50.0-next.43': - optional: true - - '@dom-expressions/compiler-linux-arm64-gnu@0.50.0-next.43': - optional: true - - '@dom-expressions/compiler-linux-x64-gnu@0.50.0-next.43': - optional: true - - '@dom-expressions/compiler-wasm32-wasi@0.50.0-next.43': + '@clack/prompts@1.8.1': dependencies: - '@emnapi/core': 1.11.2 - '@emnapi/runtime': 1.11.2 - '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) - optional: true + '@clack/core': 1.5.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 - '@dom-expressions/compiler-win32-x64-msvc@0.50.0-next.43': - optional: true - - '@dom-expressions/compiler@0.50.0-next.43': - optionalDependencies: - '@dom-expressions/compiler-darwin-arm64': 0.50.0-next.43 - '@dom-expressions/compiler-darwin-x64': 0.50.0-next.43 - '@dom-expressions/compiler-linux-arm64-gnu': 0.50.0-next.43 - '@dom-expressions/compiler-linux-x64-gnu': 0.50.0-next.43 - '@dom-expressions/compiler-wasm32-wasi': 0.50.0-next.43 - '@dom-expressions/compiler-win32-x64-msvc': 0.50.0-next.43 - - '@emnapi/core@1.11.2': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 + '@colors/colors@1.5.0': optional: true '@emnapi/core@1.11.3': @@ -2271,36 +1924,19 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.11.2': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.11.3': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.2': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.3': dependencies: tslib: 2.8.1 optional: true - '@inquirer/external-editor@1.0.3(@types/node@24.13.3)': - dependencies: - chardet: 2.2.0 - iconv-lite: 0.7.3 - optionalDependencies: - '@types/node': 24.13.3 - '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': @@ -2312,6 +1948,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/sourcemap-codec@1.6.0': {} + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -2321,162 +1959,147 @@ snapshots: dependencies: '@braidai/lang': 1.1.2 - '@manypkg/find-root@1.1.0': + '@manypkg/find-root@3.1.0': dependencies: - '@babel/runtime': 7.29.7 - '@types/node': 12.20.55 - find-up: 4.1.0 - fs-extra: 8.1.0 + '@manypkg/tools': 2.1.2 - '@manypkg/get-packages@1.1.3': + '@manypkg/get-packages@3.1.0': dependencies: - '@babel/runtime': 7.29.7 - '@changesets/types': 4.1.0 - '@manypkg/find-root': 1.1.0 - fs-extra: 8.1.0 - globby: 11.1.0 - read-yaml-file: 1.1.0 + '@manypkg/find-root': 3.1.0 + '@manypkg/tools': 2.1.2 - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': + '@manypkg/tools@2.1.2': dependencies: - '@emnapi/core': 1.11.2 - '@emnapi/runtime': 1.11.2 - '@tybys/wasm-util': 0.10.3 - optional: true + jju: 1.4.0 + tinyglobby: 0.2.17 + yaml: 2.9.1 - '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': + '@napi-rs/wasm-runtime@1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 - '@tybys/wasm-util': 0.10.3 + '@tybys/wasm-util': 0.10.4 optional: true - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@oxc-project/types@0.144.0': {} + '@oxc-project/types@0.150.0': {} - '@oxfmt/binding-android-arm-eabi@0.64.0': + '@oxfmt/binding-android-arm-eabi@0.70.0': optional: true - '@oxfmt/binding-android-arm64@0.64.0': + '@oxfmt/binding-android-arm64@0.70.0': optional: true - '@oxfmt/binding-darwin-arm64@0.64.0': + '@oxfmt/binding-darwin-arm64@0.70.0': optional: true - '@oxfmt/binding-darwin-x64@0.64.0': + '@oxfmt/binding-darwin-x64@0.70.0': optional: true - '@oxfmt/binding-freebsd-x64@0.64.0': + '@oxfmt/binding-freebsd-x64@0.70.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.64.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.70.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.64.0': + '@oxfmt/binding-linux-arm-musleabihf@0.70.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.64.0': + '@oxfmt/binding-linux-arm64-gnu@0.70.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.64.0': + '@oxfmt/binding-linux-arm64-musl@0.70.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.64.0': + '@oxfmt/binding-linux-ppc64-gnu@0.70.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.64.0': + '@oxfmt/binding-linux-riscv64-gnu@0.70.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.64.0': + '@oxfmt/binding-linux-riscv64-musl@0.70.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.64.0': + '@oxfmt/binding-linux-s390x-gnu@0.70.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.64.0': + '@oxfmt/binding-linux-x64-gnu@0.70.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.64.0': + '@oxfmt/binding-linux-x64-musl@0.70.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.64.0': + '@oxfmt/binding-openharmony-arm64@0.70.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.64.0': + '@oxfmt/binding-win32-arm64-msvc@0.70.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.64.0': + '@oxfmt/binding-win32-ia32-msvc@0.70.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.64.0': + '@oxfmt/binding-win32-x64-msvc@0.70.0': optional: true - '@playwright/test@1.62.1': + '@playwright/test@1.63.0': dependencies: - playwright: 1.62.1 + playwright: 1.63.0 + + '@pnpm/deps.graph-sequencer@1100.0.1': {} - '@publint/pack@0.1.6': + '@publint/pack@0.1.7': dependencies: - tinyexec: 1.3.0 + tinyexec: 1.3.1 + + '@rolldown/binding-android-arm-eabi@1.2.9': + optional: true - '@rolldown/binding-android-arm64@1.2.4': + '@rolldown/binding-android-arm64@1.2.9': optional: true - '@rolldown/binding-darwin-arm64@1.2.4': + '@rolldown/binding-darwin-arm64@1.2.9': optional: true - '@rolldown/binding-darwin-x64@1.2.4': + '@rolldown/binding-darwin-x64@1.2.9': optional: true - '@rolldown/binding-freebsd-x64@1.2.4': + '@rolldown/binding-freebsd-x64@1.2.9': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.4': + '@rolldown/binding-linux-arm-gnueabihf@1.2.9': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.4': + '@rolldown/binding-linux-arm64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.4': + '@rolldown/binding-linux-arm64-musl@1.2.9': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.4': + '@rolldown/binding-linux-ppc64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.4': + '@rolldown/binding-linux-s390x-gnu@1.2.9': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.4': + '@rolldown/binding-linux-x64-gnu@1.2.9': optional: true - '@rolldown/binding-linux-x64-musl@1.2.4': + '@rolldown/binding-linux-x64-musl@1.2.9': optional: true - '@rolldown/binding-openharmony-arm64@1.2.4': + '@rolldown/binding-openharmony-arm64@1.2.9': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.4': + '@rolldown/binding-win32-arm64-msvc@1.2.9': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.4': + '@rolldown/binding-win32-x64-msvc@1.2.9': optional: true '@rolldown/pluginutils@1.0.1': {} '@sindresorhus/is@4.6.0': {} - '@solidjs/babel-plugin@2.0.0-rc.7(@babel/core@7.29.7(supports-color@7.2.0))': + '@solidjs/babel-plugin@2.0.0-rc.9(@babel/core@7.29.7(supports-color@7.2.0))': dependencies: '@babel/core': 7.29.7(supports-color@7.2.0) '@babel/helper-module-imports': 7.18.6 @@ -2484,103 +2107,100 @@ snapshots: '@babel/types': 7.29.8 html-entities: 2.3.3 parse5: 7.3.0 - validate-html-nesting: 1.2.4 - '@solidjs/compiler-darwin-arm64@2.0.0-rc.7': + '@solidjs/compiler-darwin-arm64@2.0.0-rc.9': optional: true - '@solidjs/compiler-darwin-x64@2.0.0-rc.7': + '@solidjs/compiler-darwin-x64@2.0.0-rc.9': optional: true - '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.7': + '@solidjs/compiler-linux-arm64-gnu@2.0.0-rc.9': optional: true - '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.7': + '@solidjs/compiler-linux-x64-gnu@2.0.0-rc.9': optional: true - '@solidjs/compiler-wasm32-wasi@2.0.0-rc.7': + '@solidjs/compiler-wasm32-wasi@2.0.0-rc.9': dependencies: '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 - '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + '@napi-rs/wasm-runtime': 1.2.4(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) optional: true - '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.7': + '@solidjs/compiler-win32-x64-msvc@2.0.0-rc.9': optional: true - '@solidjs/compiler@2.0.0-rc.7': + '@solidjs/compiler@2.0.0-rc.9': optionalDependencies: - '@solidjs/compiler-darwin-arm64': 2.0.0-rc.7 - '@solidjs/compiler-darwin-x64': 2.0.0-rc.7 - '@solidjs/compiler-linux-arm64-gnu': 2.0.0-rc.7 - '@solidjs/compiler-linux-x64-gnu': 2.0.0-rc.7 - '@solidjs/compiler-wasm32-wasi': 2.0.0-rc.7 - '@solidjs/compiler-win32-x64-msvc': 2.0.0-rc.7 + '@solidjs/compiler-darwin-arm64': 2.0.0-rc.9 + '@solidjs/compiler-darwin-x64': 2.0.0-rc.9 + '@solidjs/compiler-linux-arm64-gnu': 2.0.0-rc.9 + '@solidjs/compiler-linux-x64-gnu': 2.0.0-rc.9 + '@solidjs/compiler-wasm32-wasi': 2.0.0-rc.9 + '@solidjs/compiler-win32-x64-msvc': 2.0.0-rc.9 - '@solidjs/signals@2.0.0-rc.0': {} + '@solidjs/signals@2.0.0-rc.9': {} - '@solidjs/vite-plugin@3.0.0-next.35(@solidjs/web@2.0.0-rc.0(solid-js@2.0.0-rc.0))(solid-js@2.0.0-rc.0)(supports-color@7.2.0)(vite@8.2.1(@types/node@24.13.3))': + '@solidjs/vite-plugin@3.0.0-next.44(@solidjs/web@2.0.0-rc.9(solid-js@2.0.0-rc.9))(solid-js@2.0.0-rc.9)(supports-color@7.2.0)(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1))': dependencies: '@ampproject/remapping': 2.3.0 '@babel/core': 7.29.7(supports-color@7.2.0) - '@solidjs/babel-plugin': 2.0.0-rc.7(@babel/core@7.29.7(supports-color@7.2.0)) - '@solidjs/compiler': 2.0.0-rc.7 - '@solidjs/web': 2.0.0-rc.0(solid-js@2.0.0-rc.0) + '@solidjs/babel-plugin': 2.0.0-rc.9(@babel/core@7.29.7(supports-color@7.2.0)) + '@solidjs/compiler': 2.0.0-rc.9 + '@solidjs/web': 2.0.0-rc.9(solid-js@2.0.0-rc.9) '@types/babel__core': 7.20.5 merge-anything: 5.1.7 - solid-js: 2.0.0-rc.0 - vite: 8.2.1(@types/node@24.13.3) - vitefu: 1.1.3(vite@8.2.1(@types/node@24.13.3)) + solid-js: 2.0.0-rc.9 + vite: 8.3.0(@types/node@26.6.2)(yaml@2.9.1) + vitefu: 1.1.3(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1)) transitivePeerDependencies: - '@tsrx/core' - supports-color - '@solidjs/web@2.0.0-rc.0(solid-js@2.0.0-rc.0)': + '@solidjs/web@2.0.0-rc.9(solid-js@2.0.0-rc.9)': dependencies: - seroval: 1.5.6 - seroval-plugins: 1.5.6(seroval@1.5.6) - solid-js: 2.0.0-rc.0 + seroval: 1.6.7 + seroval-plugins: 1.6.7(seroval@1.6.7) + solid-js: 2.0.0-rc.9 - '@standard-schema/spec@1.1.0': {} - - '@twinkleplop/annotation@0.1.3': + '@twinkleplop/annotation@0.1.4': dependencies: - '@twinkleplop/core': 0.2.0 + '@twinkleplop/core': 0.2.1 - '@twinkleplop/core@0.2.0': {} + '@twinkleplop/core@0.2.1': {} - '@twinkleplop/css@0.1.3': + '@twinkleplop/css@0.1.4': dependencies: - '@twinkleplop/core': 0.2.0 + '@twinkleplop/core': 0.2.1 - '@twinkleplop/html@0.1.3': + '@twinkleplop/html@0.1.4': dependencies: - '@twinkleplop/core': 0.2.0 - '@twinkleplop/css': 0.1.3 - '@twinkleplop/javascript': 0.1.3 + '@twinkleplop/core': 0.2.1 + '@twinkleplop/css': 0.1.4 + '@twinkleplop/javascript': 0.1.4 - '@twinkleplop/javascript@0.1.3': + '@twinkleplop/javascript@0.1.4': dependencies: - '@twinkleplop/core': 0.2.0 - '@twinkleplop/css': 0.1.3 - '@twinkleplop/html': 0.1.3 + '@twinkleplop/core': 0.2.1 + '@twinkleplop/css': 0.1.4 + '@twinkleplop/html': 0.1.4 - '@twinkleplop/theme-github@0.2.0': + '@twinkleplop/theme-github@0.2.1': dependencies: - '@twinkleplop/core': 0.2.0 + '@twinkleplop/core': 0.2.1 - '@twinkleplop/tsx@0.1.3': + '@twinkleplop/tsx@0.1.4': dependencies: - '@twinkleplop/core': 0.2.0 - '@twinkleplop/javascript': 0.1.3 - '@twinkleplop/typescript': 0.1.3 + '@twinkleplop/core': 0.2.1 + '@twinkleplop/javascript': 0.1.4 + '@twinkleplop/typescript': 0.1.4 - '@twinkleplop/typescript@0.1.3': + '@twinkleplop/typescript@0.1.4': dependencies: - '@twinkleplop/core': 0.2.0 - '@twinkleplop/javascript': 0.1.3 + '@twinkleplop/core': 0.2.1 + '@twinkleplop/javascript': 0.1.4 - '@tybys/wasm-util@0.10.3': + '@tybys/wasm-util@0.10.4': dependencies: tslib: 2.8.1 optional: true @@ -2615,11 +2235,9 @@ snapshots: '@types/estree@1.0.9': {} - '@types/node@12.20.55': {} - - '@types/node@24.13.3': + '@types/node@26.6.2': dependencies: - undici-types: 7.18.2 + undici-types: 8.9.0 '@typescript/typescript-aix-ppc64@7.0.2': optional: true @@ -2681,122 +2299,90 @@ snapshots: '@typescript/typescript-win32-x64@7.0.2': optional: true - '@vitest/expect@4.1.11': + '@vitest/mocker@5.0.1(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1))': dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 - chai: 6.2.2 - tinyrainbow: 3.1.1 - - '@vitest/mocker@4.1.11(vite@8.2.1(@types/node@24.13.3))': - dependencies: - '@vitest/spy': 4.1.11 + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.1 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 1.4.1 optionalDependencies: - vite: 8.2.1(@types/node@24.13.3) - - '@vitest/pretty-format@4.1.11': - dependencies: - tinyrainbow: 3.1.1 - - '@vitest/runner@4.1.11': - dependencies: - '@vitest/utils': 4.1.11 - pathe: 2.0.3 - - '@vitest/snapshot@4.1.11': - dependencies: - '@vitest/pretty-format': 4.1.11 - '@vitest/utils': 4.1.11 - magic-string: 0.30.21 - pathe: 2.0.3 + vite: 8.3.0(@types/node@26.6.2)(yaml@2.9.1) - '@vitest/spy@4.1.11': {} + '@vitest/spy@5.0.1': {} - '@vitest/utils@4.1.11': - dependencies: - '@vitest/pretty-format': 4.1.11 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.1 - - '@yuku-codegen/binding-android-arm64@0.8.7': + '@yuku-codegen/binding-android-arm64@0.10.2': optional: true - '@yuku-codegen/binding-darwin-arm64@0.8.7': + '@yuku-codegen/binding-darwin-arm64@0.10.2': optional: true - '@yuku-codegen/binding-darwin-x64@0.8.7': + '@yuku-codegen/binding-darwin-x64@0.10.2': optional: true - '@yuku-codegen/binding-freebsd-x64@0.8.7': + '@yuku-codegen/binding-freebsd-x64@0.10.2': optional: true - '@yuku-codegen/binding-linux-arm-gnu@0.8.7': + '@yuku-codegen/binding-linux-arm-gnu@0.10.2': optional: true - '@yuku-codegen/binding-linux-arm-musl@0.8.7': + '@yuku-codegen/binding-linux-arm-musl@0.10.2': optional: true - '@yuku-codegen/binding-linux-arm64-gnu@0.8.7': + '@yuku-codegen/binding-linux-arm64-gnu@0.10.2': optional: true - '@yuku-codegen/binding-linux-arm64-musl@0.8.7': + '@yuku-codegen/binding-linux-arm64-musl@0.10.2': optional: true - '@yuku-codegen/binding-linux-x64-gnu@0.8.7': + '@yuku-codegen/binding-linux-x64-gnu@0.10.2': optional: true - '@yuku-codegen/binding-linux-x64-musl@0.8.7': + '@yuku-codegen/binding-linux-x64-musl@0.10.2': optional: true - '@yuku-codegen/binding-win32-arm64@0.8.7': + '@yuku-codegen/binding-win32-arm64@0.10.2': optional: true - '@yuku-codegen/binding-win32-x64@0.8.7': + '@yuku-codegen/binding-win32-x64@0.10.2': optional: true - '@yuku-parser/binding-android-arm64@0.8.7': + '@yuku-parser/binding-android-arm64@0.10.2': optional: true - '@yuku-parser/binding-darwin-arm64@0.8.7': + '@yuku-parser/binding-darwin-arm64@0.10.2': optional: true - '@yuku-parser/binding-darwin-x64@0.8.7': + '@yuku-parser/binding-darwin-x64@0.10.2': optional: true - '@yuku-parser/binding-freebsd-x64@0.8.7': + '@yuku-parser/binding-freebsd-x64@0.10.2': optional: true - '@yuku-parser/binding-linux-arm-gnu@0.8.7': + '@yuku-parser/binding-linux-arm-gnu@0.10.2': optional: true - '@yuku-parser/binding-linux-arm-musl@0.8.7': + '@yuku-parser/binding-linux-arm-musl@0.10.2': optional: true - '@yuku-parser/binding-linux-arm64-gnu@0.8.7': + '@yuku-parser/binding-linux-arm64-gnu@0.10.2': optional: true - '@yuku-parser/binding-linux-arm64-musl@0.8.7': + '@yuku-parser/binding-linux-arm64-musl@0.10.2': optional: true - '@yuku-parser/binding-linux-x64-gnu@0.8.7': + '@yuku-parser/binding-linux-x64-gnu@0.10.2': optional: true - '@yuku-parser/binding-linux-x64-musl@0.8.7': + '@yuku-parser/binding-linux-x64-musl@0.10.2': optional: true - '@yuku-parser/binding-win32-arm64@0.8.7': + '@yuku-parser/binding-win32-arm64@0.10.2': optional: true - '@yuku-parser/binding-win32-x64@0.8.7': + '@yuku-parser/binding-win32-x64@0.10.2': optional: true - '@yuku-toolchain/types@0.8.7': {} - - ansi-colors@4.1.3: {} + '@yuku-toolchain/types@0.10.2': {} ansi-escapes@7.3.0: dependencies: @@ -2812,26 +2398,10 @@ snapshots: any-promise@1.3.0: {} - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - array-union@2.1.0: {} - assertion-error@2.0.1: {} baseline-browser-mapping@2.11.21: {} - better-path-resolve@1.0.0: - dependencies: - is-windows: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - browserslist@4.28.9: dependencies: baseline-browser-mapping: 2.11.21 @@ -2840,6 +2410,8 @@ snapshots: node-releases: 2.0.55 update-browserslist-db: 1.3.2(browserslist@4.28.9) + cac@7.0.0: {} + caniuse-lite@1.0.30001810: {} chai@6.2.2: {} @@ -2853,8 +2425,6 @@ snapshots: char-regex@1.0.2: {} - chardet@2.2.0: {} - cjs-module-lexer@1.4.3: {} cli-highlight@2.1.11: @@ -2888,12 +2458,6 @@ snapshots: convert-source-map@2.0.0: {} - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - csstype@3.2.3: {} debug@4.4.3(supports-color@7.2.0): @@ -2902,14 +2466,8 @@ snapshots: optionalDependencies: supports-color: 7.2.0 - detect-indent@6.1.0: {} - detect-libc@2.1.2: {} - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - dts-resolver@3.0.0: {} electron-to-chromium@1.5.426: {} @@ -2918,11 +2476,6 @@ snapshots: emojilib@2.4.0: {} - enquirer@2.4.1: - dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 - entities@6.0.1: {} environment@1.1.0: {} @@ -2933,58 +2486,28 @@ snapshots: escalade@3.2.0: {} - esprima@4.0.1: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 expect-type@1.4.0: {} - extendable-error@0.1.7: {} + fast-string-truncated-width@3.0.3: {} - fast-glob@3.3.3: + fast-string-width@3.0.2: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 + fast-string-truncated-width: 3.0.3 - fastq@1.20.1: + fast-wrap-ansi@0.2.2: dependencies: - reusify: 1.1.0 + fast-string-width: 3.0.2 - fdir@6.5.0(picomatch@4.0.5): + fdir@6.5.0(picomatch@4.0.7): optionalDependencies: - picomatch: 4.0.5 + picomatch: 4.0.7 fflate@0.8.3: {} - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true @@ -2992,25 +2515,10 @@ snapshots: get-caller-file@2.0.5: {} - get-tsconfig@5.0.0-beta.5: + get-tsconfig@5.0.0-beta.6: dependencies: resolve-pkg-maps: 1.0.0 - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - - graceful-fs@4.2.11: {} - has-flag@4.0.0: {} highlight.js@10.7.3: {} @@ -3019,52 +2527,28 @@ snapshots: html-to-image@1.11.13: {} - human-id@4.2.0: {} + human-id@4.2.1: {} - iconv-lite@0.7.3: - dependencies: - safer-buffer: 2.1.2 - - ignore@5.3.2: {} - - is-extglob@2.1.1: {} + import-meta-resolve@4.2.0: {} is-fullwidth-code-point@3.0.0: {} - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-subdir@1.2.0: - dependencies: - better-path-resolve: 1.0.0 - is-what@4.1.16: {} - is-windows@1.0.2: {} - - isexe@2.0.0: {} + jju@1.4.0: {} js-tokens@4.0.0: {} - js-yaml@3.15.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.3.1: - dependencies: - argparse: 2.0.1 - jsesc@3.1.0: {} json5@2.2.3: {} - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 + jsonc-parser@3.3.1: {} + + launch-editor@2.14.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.10.0 lightningcss-android-arm64@1.33.0: optional: true @@ -3115,21 +2599,15 @@ snapshots: lightningcss-win32-arm64-msvc: 1.33.0 lightningcss-win32-x64-msvc: 1.33.0 - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - lodash.startcase@4.4.0: {} - lru-cache@11.5.2: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - magic-string@0.30.21: + magic-string@1.4.1: dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 marked-terminal@7.3.0(marked@9.1.6): dependencies: @@ -3148,13 +2626,6 @@ snapshots: dependencies: is-what: 4.1.16 - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 - mri@1.2.0: {} ms@2.1.3: {} @@ -3165,7 +2636,7 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.18: {} + nanoid@3.3.19: {} node-emoji@2.2.0: dependencies: @@ -3178,53 +2649,33 @@ snapshots: object-assign@4.1.1: {} - obug@2.1.4: {} + obug@2.2.1: {} - outdent@0.5.0: {} + obug@3.0.0: {} - oxfmt@0.64.0: + oxfmt@0.70.0: dependencies: - tinypool: 2.1.0 + tinypool: 2.1.2 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.64.0 - '@oxfmt/binding-android-arm64': 0.64.0 - '@oxfmt/binding-darwin-arm64': 0.64.0 - '@oxfmt/binding-darwin-x64': 0.64.0 - '@oxfmt/binding-freebsd-x64': 0.64.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.64.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.64.0 - '@oxfmt/binding-linux-arm64-gnu': 0.64.0 - '@oxfmt/binding-linux-arm64-musl': 0.64.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.64.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.64.0 - '@oxfmt/binding-linux-riscv64-musl': 0.64.0 - '@oxfmt/binding-linux-s390x-gnu': 0.64.0 - '@oxfmt/binding-linux-x64-gnu': 0.64.0 - '@oxfmt/binding-linux-x64-musl': 0.64.0 - '@oxfmt/binding-openharmony-arm64': 0.64.0 - '@oxfmt/binding-win32-arm64-msvc': 0.64.0 - '@oxfmt/binding-win32-ia32-msvc': 0.64.0 - '@oxfmt/binding-win32-x64-msvc': 0.64.0 - - p-filter@2.1.0: - dependencies: - p-map: 2.1.0 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-map@2.1.0: {} - - p-try@2.2.0: {} - - package-manager-detector@0.2.11: - dependencies: - quansync: 0.2.11 + '@oxfmt/binding-android-arm-eabi': 0.70.0 + '@oxfmt/binding-android-arm64': 0.70.0 + '@oxfmt/binding-darwin-arm64': 0.70.0 + '@oxfmt/binding-darwin-x64': 0.70.0 + '@oxfmt/binding-freebsd-x64': 0.70.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.70.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.70.0 + '@oxfmt/binding-linux-arm64-gnu': 0.70.0 + '@oxfmt/binding-linux-arm64-musl': 0.70.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.70.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.70.0 + '@oxfmt/binding-linux-riscv64-musl': 0.70.0 + '@oxfmt/binding-linux-s390x-gnu': 0.70.0 + '@oxfmt/binding-linux-x64-gnu': 0.70.0 + '@oxfmt/binding-linux-x64-musl': 0.70.0 + '@oxfmt/binding-openharmony-arm64': 0.70.0 + '@oxfmt/binding-win32-arm64-msvc': 0.70.0 + '@oxfmt/binding-win32-ia32-msvc': 0.70.0 + '@oxfmt/binding-win32-x64-msvc': 0.70.0 package-manager-detector@1.8.0: {} @@ -3240,156 +2691,105 @@ snapshots: dependencies: entities: 6.0.1 - path-exists@4.0.0: {} - - path-key@3.1.1: {} - - path-type@4.0.0: {} - - pathe@2.0.3: {} - picocolors@1.1.1: {} - picomatch@2.3.2: {} - - picomatch@4.0.5: {} - - pify@4.0.1: {} + picomatch@4.0.7: {} - playwright-core@1.62.1: {} + playwright-core@1.63.0: {} - playwright@1.62.1: + playwright@1.63.0: dependencies: - playwright-core: 1.62.1 - optionalDependencies: - fsevents: 2.3.2 + playwright-core: 1.63.0 - postcss@8.5.26: + postcss@8.5.28: dependencies: - nanoid: 3.3.18 + nanoid: 3.3.19 picocolors: 1.1.1 source-map-js: 1.2.1 - prettier@2.8.8: {} - - publint@0.3.23: + publint@0.3.24: dependencies: - '@publint/pack': 0.1.6 + '@publint/pack': 0.1.7 package-manager-detector: 1.8.0 picocolors: 1.1.1 sade: 1.8.1 - quansync@0.2.11: {} - - queue-microtask@1.2.3: {} - - read-yaml-file@1.1.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.15.1 - pify: 4.0.1 - strip-bom: 3.0.0 - require-directory@2.1.1: {} - resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - reusify@1.1.0: {} - - rolldown-plugin-dts@0.28.2(rolldown@1.2.4)(typescript@7.0.2): + rolldown-plugin-dts@0.28.6(rolldown@1.2.9)(typescript@7.0.2): dependencies: dts-resolver: 3.0.0 - get-tsconfig: 5.0.0-beta.5 - obug: 2.1.4 - rolldown: 1.2.4 - yuku-ast: 0.8.7 - yuku-codegen: 0.8.7 - yuku-parser: 0.8.7 + get-tsconfig: 5.0.0-beta.6 + obug: 3.0.0 + rolldown: 1.2.9 + yuku-ast: 0.10.2 + yuku-codegen: 0.10.2 + yuku-parser: 0.10.2 optionalDependencies: typescript: 7.0.2 transitivePeerDependencies: - oxc-resolver - rolldown@1.2.4: + rolldown@1.2.9: dependencies: - '@oxc-project/types': 0.144.0 + '@oxc-project/types': 0.150.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.2.4 - '@rolldown/binding-darwin-arm64': 1.2.4 - '@rolldown/binding-darwin-x64': 1.2.4 - '@rolldown/binding-freebsd-x64': 1.2.4 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.4 - '@rolldown/binding-linux-arm64-gnu': 1.2.4 - '@rolldown/binding-linux-arm64-musl': 1.2.4 - '@rolldown/binding-linux-ppc64-gnu': 1.2.4 - '@rolldown/binding-linux-s390x-gnu': 1.2.4 - '@rolldown/binding-linux-x64-gnu': 1.2.4 - '@rolldown/binding-linux-x64-musl': 1.2.4 - '@rolldown/binding-openharmony-arm64': 1.2.4 - '@rolldown/binding-win32-arm64-msvc': 1.2.4 - '@rolldown/binding-win32-x64-msvc': 1.2.4 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 + '@rolldown/binding-android-arm-eabi': 1.2.9 + '@rolldown/binding-android-arm64': 1.2.9 + '@rolldown/binding-darwin-arm64': 1.2.9 + '@rolldown/binding-darwin-x64': 1.2.9 + '@rolldown/binding-freebsd-x64': 1.2.9 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.9 + '@rolldown/binding-linux-arm64-gnu': 1.2.9 + '@rolldown/binding-linux-arm64-musl': 1.2.9 + '@rolldown/binding-linux-ppc64-gnu': 1.2.9 + '@rolldown/binding-linux-s390x-gnu': 1.2.9 + '@rolldown/binding-linux-x64-gnu': 1.2.9 + '@rolldown/binding-linux-x64-musl': 1.2.9 + '@rolldown/binding-openharmony-arm64': 1.2.9 + '@rolldown/binding-win32-arm64-msvc': 1.2.9 + '@rolldown/binding-win32-x64-msvc': 1.2.9 sade@1.8.1: dependencies: mri: 1.2.0 - safer-buffer@2.1.2: {} - semver@6.3.1: {} semver@7.8.5: {} - seroval-plugins@1.5.6(seroval@1.5.6): + seroval-plugins@1.6.7(seroval@1.6.7): dependencies: - seroval: 1.5.6 - - seroval@1.5.6: {} - - seroval@1.6.2: {} + seroval: 1.6.7 - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 + seroval@1.6.7: {} - shebang-regex@3.0.0: {} + shell-quote@1.10.0: {} siginfo@2.0.0: {} - signal-exit@4.1.0: {} + sisteransi@1.0.5: {} skin-tone@2.0.0: dependencies: unicode-emoji-modifier-base: 1.0.0 - slash@3.0.0: {} - - solid-js@2.0.0-rc.0: + solid-js@2.0.0-rc.9: dependencies: - '@solidjs/signals': 2.0.0-rc.0 + '@solidjs/signals': 2.0.0-rc.9 csstype: 3.2.3 - seroval: 1.5.6 - seroval-plugins: 1.5.6(seroval@1.5.6) + seroval: 1.6.7 + seroval-plugins: 1.6.7(seroval@1.6.7) - solid-use@1.0.0-next.3(solid-js@2.0.0-rc.0): + solid-use@1.0.0-next.3(solid-js@2.0.0-rc.9): dependencies: - solid-js: 2.0.0-rc.0 + solid-js: 2.0.0-rc.9 source-map-js@1.2.1: {} - spawndamnit@3.0.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - sprintf-js@1.0.3: {} - stackback@0.0.2: {} std-env@4.2.0: {} @@ -3404,8 +2804,6 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-bom@3.0.0: {} - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -3415,13 +2813,11 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 - term-size@2.2.1: {} - - terracotta@2.0.0-next.9(@solidjs/web@2.0.0-rc.0(solid-js@2.0.0-rc.0))(solid-js@2.0.0-rc.0): + terracotta@2.0.0-next.9(@solidjs/web@2.0.0-rc.9(solid-js@2.0.0-rc.9))(solid-js@2.0.0-rc.9): dependencies: - '@solidjs/web': 2.0.0-rc.0(solid-js@2.0.0-rc.0) - solid-js: 2.0.0-rc.0 - solid-use: 1.0.0-next.3(solid-js@2.0.0-rc.0) + '@solidjs/web': 2.0.0-rc.9(solid-js@2.0.0-rc.9) + solid-js: 2.0.0-rc.9 + solid-use: 1.0.0-next.3(solid-js@2.0.0-rc.9) thenify-all@1.6.0: dependencies: @@ -3431,22 +2827,18 @@ snapshots: dependencies: any-promise: 1.3.0 - tinybench@2.9.0: {} + tinybench@6.1.4: {} tinyexec@1.3.0: {} + tinyexec@1.3.1: {} + tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 - tinypool@2.1.0: {} - - tinyrainbow@3.1.1: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 + tinypool@2.1.2: {} tslib@2.8.1: optional: true @@ -3476,68 +2868,55 @@ snapshots: '@typescript/typescript-win32-arm64': 7.0.2 '@typescript/typescript-win32-x64': 7.0.2 - undici-types@7.18.2: {} + undici-types@8.9.0: {} unicode-emoji-modifier-base@1.0.0: {} - universalify@0.1.2: {} - update-browserslist-db@1.3.2(browserslist@4.28.9): dependencies: browserslist: 4.28.9 escalade: 3.2.0 picocolors: 1.1.1 - validate-html-nesting@1.2.4: {} - validate-npm-package-name@5.0.1: {} - vite@8.2.1(@types/node@24.13.3): + vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1): dependencies: lightningcss: 1.33.0 - picomatch: 4.0.5 - postcss: 8.5.26 - rolldown: 1.2.4 + picomatch: 4.0.7 + postcss: 8.5.28 + rolldown: 1.2.9 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.13.3 + '@types/node': 26.6.2 fsevents: 2.3.3 + yaml: 2.9.1 - vitefu@1.1.3(vite@8.2.1(@types/node@24.13.3)): + vitefu@1.1.3(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1)): optionalDependencies: - vite: 8.2.1(@types/node@24.13.3) + vite: 8.3.0(@types/node@26.6.2)(yaml@2.9.1) - vitest@4.1.11(@types/node@24.13.3)(vite@8.2.1(@types/node@24.13.3)): + vitest@5.0.1(@types/node@26.6.2)(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1)): dependencies: - '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(vite@8.2.1(@types/node@24.13.3)) - '@vitest/pretty-format': 4.1.11 - '@vitest/runner': 4.1.11 - '@vitest/snapshot': 4.1.11 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.1(vite@8.3.0(@types/node@26.6.2)(yaml@2.9.1)) + chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 - magic-string: 0.30.21 - obug: 2.1.4 - pathe: 2.0.3 - picomatch: 4.0.5 + magic-string: 1.4.1 + obug: 2.2.1 + picomatch: 4.0.7 std-env: 4.2.0 - tinybench: 2.9.0 + tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - tinyrainbow: 3.1.1 - vite: 8.2.1(@types/node@24.13.3) + vite: 8.3.0(@types/node@26.6.2)(yaml@2.9.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.13.3 + '@types/node': 26.6.2 transitivePeerDependencies: - msw - which@2.0.2: - dependencies: - isexe: 2.0.0 - why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -3553,6 +2932,8 @@ snapshots: yallist@3.1.1: {} + yaml@2.9.1: {} + yargs-parser@20.2.9: {} yargs@16.2.2: @@ -3565,41 +2946,41 @@ snapshots: y18n: 5.0.8 yargs-parser: 20.2.9 - yuku-ast@0.8.7: + yuku-ast@0.10.2: dependencies: - '@yuku-toolchain/types': 0.8.7 + '@yuku-toolchain/types': 0.10.2 - yuku-codegen@0.8.7: + yuku-codegen@0.10.2: dependencies: - '@yuku-toolchain/types': 0.8.7 + '@yuku-toolchain/types': 0.10.2 optionalDependencies: - '@yuku-codegen/binding-android-arm64': 0.8.7 - '@yuku-codegen/binding-darwin-arm64': 0.8.7 - '@yuku-codegen/binding-darwin-x64': 0.8.7 - '@yuku-codegen/binding-freebsd-x64': 0.8.7 - '@yuku-codegen/binding-linux-arm-gnu': 0.8.7 - '@yuku-codegen/binding-linux-arm-musl': 0.8.7 - '@yuku-codegen/binding-linux-arm64-gnu': 0.8.7 - '@yuku-codegen/binding-linux-arm64-musl': 0.8.7 - '@yuku-codegen/binding-linux-x64-gnu': 0.8.7 - '@yuku-codegen/binding-linux-x64-musl': 0.8.7 - '@yuku-codegen/binding-win32-arm64': 0.8.7 - '@yuku-codegen/binding-win32-x64': 0.8.7 - - yuku-parser@0.8.7: - dependencies: - '@yuku-toolchain/types': 0.8.7 - yuku-ast: 0.8.7 + '@yuku-codegen/binding-android-arm64': 0.10.2 + '@yuku-codegen/binding-darwin-arm64': 0.10.2 + '@yuku-codegen/binding-darwin-x64': 0.10.2 + '@yuku-codegen/binding-freebsd-x64': 0.10.2 + '@yuku-codegen/binding-linux-arm-gnu': 0.10.2 + '@yuku-codegen/binding-linux-arm-musl': 0.10.2 + '@yuku-codegen/binding-linux-arm64-gnu': 0.10.2 + '@yuku-codegen/binding-linux-arm64-musl': 0.10.2 + '@yuku-codegen/binding-linux-x64-gnu': 0.10.2 + '@yuku-codegen/binding-linux-x64-musl': 0.10.2 + '@yuku-codegen/binding-win32-arm64': 0.10.2 + '@yuku-codegen/binding-win32-x64': 0.10.2 + + yuku-parser@0.10.2: + dependencies: + '@yuku-toolchain/types': 0.10.2 + yuku-ast: 0.10.2 optionalDependencies: - '@yuku-parser/binding-android-arm64': 0.8.7 - '@yuku-parser/binding-darwin-arm64': 0.8.7 - '@yuku-parser/binding-darwin-x64': 0.8.7 - '@yuku-parser/binding-freebsd-x64': 0.8.7 - '@yuku-parser/binding-linux-arm-gnu': 0.8.7 - '@yuku-parser/binding-linux-arm-musl': 0.8.7 - '@yuku-parser/binding-linux-arm64-gnu': 0.8.7 - '@yuku-parser/binding-linux-arm64-musl': 0.8.7 - '@yuku-parser/binding-linux-x64-gnu': 0.8.7 - '@yuku-parser/binding-linux-x64-musl': 0.8.7 - '@yuku-parser/binding-win32-arm64': 0.8.7 - '@yuku-parser/binding-win32-x64': 0.8.7 + '@yuku-parser/binding-android-arm64': 0.10.2 + '@yuku-parser/binding-darwin-arm64': 0.10.2 + '@yuku-parser/binding-darwin-x64': 0.10.2 + '@yuku-parser/binding-freebsd-x64': 0.10.2 + '@yuku-parser/binding-linux-arm-gnu': 0.10.2 + '@yuku-parser/binding-linux-arm-musl': 0.10.2 + '@yuku-parser/binding-linux-arm64-gnu': 0.10.2 + '@yuku-parser/binding-linux-arm64-musl': 0.10.2 + '@yuku-parser/binding-linux-x64-gnu': 0.10.2 + '@yuku-parser/binding-linux-x64-musl': 0.10.2 + '@yuku-parser/binding-win32-arm64': 0.10.2 + '@yuku-parser/binding-win32-x64': 0.10.2 diff --git a/rolldown.config.js b/rolldown.config.js index 32d53f7..9f834af 100644 --- a/rolldown.config.js +++ b/rolldown.config.js @@ -1,4 +1,4 @@ -import { transformAsync } from '@dom-expressions/compiler'; +import { transformAsync } from '@solidjs/compiler'; import { readFileSync } from 'node:fs'; import { defineConfig } from 'rolldown'; import { dts } from 'rolldown-plugin-dts'; diff --git a/src/dev-toolbar/reactivity/registry.test.ts b/src/dev-toolbar/reactivity/registry.test.ts index 794781f..311d46e 100644 --- a/src/dev-toolbar/reactivity/registry.test.ts +++ b/src/dev-toolbar/reactivity/registry.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it, vi } from 'vitest'; import { EMPTY_GRAPH, excludeReactiveOwner, @@ -9,8 +9,14 @@ import { subscribeReactivityGraph, } from './registry.js'; -// This suite runs against the server build of solid-js, which ships no dev -// hooks. It covers the path an app takes in production. +// Covers the path an app takes in production, where solid-js ships no dev +// hooks. The test runner resolves the development build, which has them, so +// the suite takes them away. +vi.mock('solid-js', async (original) => ({ + ...(await original()), + DEV: undefined, +})); + describe('registry without the dev runtime', () => { it('reports that the graph is unavailable', () => { expect(isReactivityAvailable()).toBe(false); diff --git a/tests/e2e/devtools.spec.ts b/tests/e2e/devtools.spec.ts index 1ddf696..54a8599 100644 --- a/tests/e2e/devtools.spec.ts +++ b/tests/e2e/devtools.spec.ts @@ -326,6 +326,9 @@ test('mounts once and disposes', async ({ page }) => { await expect(page.locator('[data-solid-dev-toolbar]')).toHaveCount(0); }); +// The toolbar's server build only loads under the development condition, and +// the test script runs Node with it. Without it solid-js loads its production +// server build, which replaces every error message with a generic one. test('sets a 500 status for server render errors', async () => { const moduleUrl = pathToFileURL(path.join(root, 'dist/server.js')).href; const { DevToolbar } = await import(moduleUrl); diff --git a/tests/fixture/vite.config.ts b/tests/fixture/vite.config.ts index 8f13503..e2e6a8e 100644 --- a/tests/fixture/vite.config.ts +++ b/tests/fixture/vite.config.ts @@ -1,4 +1,4 @@ -import { transformAsync } from '@dom-expressions/compiler'; +import { transformAsync } from '@solidjs/compiler'; import { fileURLToPath } from 'node:url'; import { defineConfig, type Plugin } from 'vite';