diff --git a/package.json b/package.json index e6ed7f2..0ad1bc2 100644 --- a/package.json +++ b/package.json @@ -50,10 +50,14 @@ "svelte": "^3 || ^4 || ^5 || ^5.0.0-next.0", "vitest": "^4.0.0" }, + "dependencies": { + "@testing-library/svelte-core": "^1.0.0-next.2" + }, "devDependencies": { "@antfu/eslint-config": "^2.24.1", - "@sveltejs/vite-plugin-svelte": "^5.0.3", - "@vitest/browser-playwright": "^4.0.0-beta.15", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@types/node": "^24.10.1", + "@vitest/browser-playwright": "^4.0.9", "bumpp": "^9.4.2", "changelogithub": "^0.13.9", "eslint": "^9.8.0", @@ -63,7 +67,7 @@ "tsx": "^4.17.0", "typescript": "^5.5.4", "vite": "^7.1.9", - "vitest": "^4.0.0-beta.15", + "vitest": "^4.0.9", "zx": "^8.1.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c73b749..4398c10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,16 +7,23 @@ settings: importers: .: + dependencies: + '@testing-library/svelte-core': + specifier: ^1.0.0-next.2 + version: 1.0.0-next.2(svelte@5.34.2) devDependencies: '@antfu/eslint-config': specifier: ^2.24.1 - version: 2.24.1(@vue/compiler-sfc@3.4.35)(eslint@9.8.0)(svelte@5.34.2)(typescript@5.5.4)(vitest@4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)) + version: 2.24.1(@vue/compiler-sfc@3.4.35)(eslint@9.8.0)(svelte@5.34.2)(typescript@5.5.4)(vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)) '@sveltejs/vite-plugin-svelte': - specifier: ^5.0.3 - version: 5.0.3(svelte@5.34.2)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + specifier: ^6.2.1 + version: 6.2.1(svelte@5.34.2)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + '@types/node': + specifier: ^24.10.1 + version: 24.10.1 '@vitest/browser-playwright': - specifier: ^4.0.0-beta.15 - version: 4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(playwright@1.46.0)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.0-beta.15) + specifier: ^4.0.9 + version: 4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(playwright@1.46.0)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.15) bumpp: specifier: ^9.4.2 version: 9.4.2 @@ -43,10 +50,10 @@ importers: version: 5.5.4 vite: specifier: ^7.1.9 - version: 7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) + version: 7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) vitest: - specifier: ^4.0.0-beta.15 - version: 4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) + specifier: ^4.0.9 + version: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) zx: specifier: ^8.1.4 version: 8.1.4 @@ -752,6 +759,9 @@ packages: cpu: [x64] os: [win32] + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@stylistic/eslint-plugin-js@2.6.1': resolution: {integrity: sha512-iLOiVzcvqzDGD9U0EuVOX680v+XOPiPAjkxWj+Q6iV2GLOM5NB27tKVOpJY7AzBhidwpRbaLTgg3T4UzYx09jw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -786,20 +796,26 @@ packages: peerDependencies: acorn: ^8.9.0 - '@sveltejs/vite-plugin-svelte-inspector@4.0.1': - resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22} + '@sveltejs/vite-plugin-svelte-inspector@5.0.1': + resolution: {integrity: sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==} + engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: - '@sveltejs/vite-plugin-svelte': ^5.0.0 + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 svelte: ^5.0.0 - vite: ^6.0.0 + vite: ^6.3.0 || ^7.0.0 - '@sveltejs/vite-plugin-svelte@5.0.3': - resolution: {integrity: sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22} + '@sveltejs/vite-plugin-svelte@6.2.1': + resolution: {integrity: sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==} + engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: svelte: ^5.0.0 - vite: ^6.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@testing-library/svelte-core@1.0.0-next.2': + resolution: {integrity: sha512-RmCak5l+1k1m+u8YK98WDWpg5c2DWrVnlBQDQTzLVJ+OSI7VrP6sFJKWInvctBzDnKAWUDH5qiQhMc4Usr9NCg==} + engines: {node: '>=16'} + peerDependencies: + svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -834,8 +850,8 @@ packages: '@types/mdast@3.0.15': resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - '@types/node@22.1.0': - resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -933,22 +949,22 @@ packages: resolution: {integrity: sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/browser-playwright@4.0.0-beta.15': - resolution: {integrity: sha512-t24rArYR/VSq+dFW2F8MFT4qeblXs3xlQeo3oTBKt8hywueRRKp18Lm0b5D4nKBzSYaaFVzatC5GxG6pk6GBZA==} + '@vitest/browser-playwright@4.0.15': + resolution: {integrity: sha512-94yVpDbb+ykiT7mK6ToonGnq2GIHEQGBTZTAzGxBGQXcVNCh54YKC2/WkfaDzxy0m6Kgw05kq3FYHKHu+wRdIA==} peerDependencies: playwright: '*' - vitest: 4.0.0-beta.15 + vitest: 4.0.15 - '@vitest/browser@4.0.0-beta.15': - resolution: {integrity: sha512-WfEnZxEb5yDf6YmgdYW04sQ3fsXVsbDhPuAweVFOKAGH4rPRu11dNGRsQu3sYBqYp7C4cECfYmzfpGTqtdydVQ==} + '@vitest/browser@4.0.15': + resolution: {integrity: sha512-zedtczX688KehaIaAv7m25CeDLb0gBtAOa2Oi1G1cqvSO5aLSVfH6lpZMJLW8BKYuWMxLQc9/5GYoM+jgvGIrw==} peerDependencies: - vitest: 4.0.0-beta.15 + vitest: 4.0.15 - '@vitest/expect@4.0.0-beta.15': - resolution: {integrity: sha512-RZ32uLPfDqdv6Zk6h4kMjARFt1fypz8SiUAqOLWv9VUY/7hR1m4uklaIWwZw4kq9FadSa6bZE0Z/4vbj6PnPbQ==} + '@vitest/expect@4.0.15': + resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==} - '@vitest/mocker@4.0.0-beta.15': - resolution: {integrity: sha512-fH2hHB1XAmSGnFaf+2+ZjZW1Gc4+3INrsKo/u6AaxY1x/5D6Jw+pZOKhdRr3QyPiFxfo05bNQIIu1eE+NgsXEg==} + '@vitest/mocker@4.0.15': + resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -958,20 +974,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.0-beta.15': - resolution: {integrity: sha512-DZS8SxaBxuIWLlJH7AwaH8oKbQZnxydN1iYksJThgk9A4ap7xol9YR1QwKS01psYUbXueOB3073BwxqueRwLyA==} + '@vitest/pretty-format@4.0.15': + resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==} - '@vitest/runner@4.0.0-beta.15': - resolution: {integrity: sha512-SJUTRfTNJkhkvY51HPk5wBw46TJr4IScj+TQhAAWLDHSL1nctzN1qFe8xbmMyZvJW18SfqMh8DPdcdiRLMVMYA==} + '@vitest/runner@4.0.15': + resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==} - '@vitest/snapshot@4.0.0-beta.15': - resolution: {integrity: sha512-2qJzzgvpLGlrbdgJegZ5CVsdkWkza+cZWdrk2Rtd57Pfr+JMQiXFOZp8GLJ10tKEddKXqP/PtVVAmCNezNiFMg==} + '@vitest/snapshot@4.0.15': + resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==} - '@vitest/spy@4.0.0-beta.15': - resolution: {integrity: sha512-GJCaUj+TwQFjfixj00gPQsnmHrKwGxbYSarEuPq8zsVfL049MWDJZaD7M1OXY5X9atsnIDGi1IaEEiWckH/jjw==} + '@vitest/spy@4.0.15': + resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==} - '@vitest/utils@4.0.0-beta.15': - resolution: {integrity: sha512-MRs6D//FeZp1kQGyF4fyPZ4YVmlV/topjmiT0iYGBVZYafXAwpXChQhzdW0EIsfjMDsOMWckChKtubvAb6ZnHA==} + '@vitest/utils@4.0.15': + resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==} '@vue/compiler-core@3.4.35': resolution: {integrity: sha512-gKp0zGoLnMYtw4uS/SJRRO7rsVggLjvot3mcctlMXunYNsX+aRJDqqw/lV5/gHK91nvaAAlWFgdVl020AW1Prg==} @@ -1125,8 +1141,8 @@ packages: caniuse-lite@1.0.30001649: resolution: {integrity: sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==} - chai@6.2.0: - resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} engines: {node: '>=18'} chalk@2.4.2: @@ -1256,15 +1272,6 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1910,10 +1917,6 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} @@ -1965,6 +1968,9 @@ packages: magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} @@ -2107,6 +2113,9 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ofetch@1.3.4: resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==} @@ -2278,10 +2287,6 @@ packages: resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} engines: {node: '>=4'} - postcss@8.5.5: - resolution: {integrity: sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -2462,12 +2467,12 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} - strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -2557,17 +2562,14 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@2.0.0: - resolution: {integrity: sha512-/RX9RzeH2xU5ADE7n2Ykvmi9ED3FBGPAjw9u3zucrNNaEBIO0HPSYgL0NT7+3p147ojeSdaVu08F6hjpv31HJg==} - engines: {node: ^20.0.0 || >=22.0.0} - tinyrainbow@3.0.3: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} @@ -2675,8 +2677,8 @@ packages: ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - undici-types@6.13.0: - resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} @@ -2747,32 +2749,32 @@ packages: yaml: optional: true - vitefu@1.0.5: - resolution: {integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==} + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: vite: optional: true - vitest@4.0.0-beta.15: - resolution: {integrity: sha512-3hc+uim1oUBjKucJ0KKPSFWY0Sod0RaMglOYRxfEn49O6y9gk8dnpIxPb8vF9NkdBNM/Si3N4JWClbGRV75MDQ==} + vitest@4.0.15: + resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser-playwright': 4.0.0-beta.15 - '@vitest/browser-preview': 4.0.0-beta.15 - '@vitest/browser-webdriverio': 4.0.0-beta.15 - '@vitest/ui': 4.0.0-beta.15 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.15 + '@vitest/browser-preview': 4.0.15 + '@vitest/browser-webdriverio': 4.0.15 + '@vitest/ui': 4.0.15 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true @@ -2890,7 +2892,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@2.24.1(@vue/compiler-sfc@3.4.35)(eslint@9.8.0)(svelte@5.34.2)(typescript@5.5.4)(vitest@4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0))': + '@antfu/eslint-config@2.24.1(@vue/compiler-sfc@3.4.35)(eslint@9.8.0)(svelte@5.34.2)(typescript@5.5.4)(vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0))': dependencies: '@antfu/install-pkg': 0.3.3 '@clack/prompts': 0.7.0 @@ -2915,7 +2917,7 @@ snapshots: eslint-plugin-toml: 0.11.1(eslint@9.8.0) eslint-plugin-unicorn: 55.0.0(eslint@9.8.0) eslint-plugin-unused-imports: 4.0.1(@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0) - eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)) + eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)) eslint-plugin-vue: 9.27.0(eslint@9.8.0) eslint-plugin-yml: 1.14.0(eslint@9.8.0) eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.35)(eslint@9.8.0) @@ -3193,16 +3195,17 @@ snapshots: '@humanwhocodes/retry@0.3.0': {} - '@inquirer/confirm@5.1.2': + '@inquirer/confirm@5.1.2(@types/node@24.10.1)': dependencies: - '@inquirer/core': 10.1.3 - '@inquirer/type': 3.0.2 + '@inquirer/core': 10.1.3(@types/node@24.10.1) + '@inquirer/type': 3.0.2(@types/node@24.10.1) + '@types/node': 24.10.1 optional: true - '@inquirer/core@10.1.3': + '@inquirer/core@10.1.3(@types/node@24.10.1)': dependencies: '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2 + '@inquirer/type': 3.0.2(@types/node@24.10.1) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -3217,7 +3220,9 @@ snapshots: '@inquirer/figures@1.0.9': optional: true - '@inquirer/type@3.0.2': + '@inquirer/type@3.0.2(@types/node@24.10.1)': + dependencies: + '@types/node': 24.10.1 optional: true '@isaacs/cliui@8.0.2': @@ -3404,6 +3409,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.43.0': optional: true + '@standard-schema/spec@1.0.0': {} + '@stylistic/eslint-plugin-js@2.6.1(eslint@9.8.0)': dependencies: '@types/eslint': 9.6.0 @@ -3455,28 +3462,31 @@ snapshots: dependencies: acorn: 8.12.1 - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.34.2)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)))(svelte@5.34.2)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.34.2)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)))(svelte@5.34.2)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.34.2)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) - debug: 4.4.0 + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.34.2)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + debug: 4.4.3 svelte: 5.34.2 - vite: 7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) + vite: 7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.34.2)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))': + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.34.2)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.34.2)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)))(svelte@5.34.2)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) - debug: 4.4.0 + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.34.2)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)))(svelte@5.34.2)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + debug: 4.4.3 deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.17 + magic-string: 0.30.19 svelte: 5.34.2 - vite: 7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) - vitefu: 1.0.5(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + vite: 7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) + vitefu: 1.1.1(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) transitivePeerDependencies: - supports-color + '@testing-library/svelte-core@1.0.0-next.2(svelte@5.34.2)': + dependencies: + svelte: 5.34.2 + '@types/chai@5.2.2': dependencies: '@types/deep-eql': 4.0.2 @@ -3503,24 +3513,23 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.1.0 + '@types/node': 24.10.1 optional: true '@types/json-schema@7.0.15': {} '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.1.0 + '@types/node': 24.10.1 optional: true '@types/mdast@3.0.15': dependencies: '@types/unist': 2.0.10 - '@types/node@22.1.0': + '@types/node@24.10.1': dependencies: - undici-types: 6.13.0 - optional: true + undici-types: 7.16.0 '@types/normalize-package-data@2.4.4': {} @@ -3651,29 +3660,29 @@ snapshots: '@typescript-eslint/types': 8.0.1 eslint-visitor-keys: 3.4.3 - '@vitest/browser-playwright@4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(playwright@1.46.0)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.0-beta.15)': + '@vitest/browser-playwright@4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(playwright@1.46.0)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.15)': dependencies: - '@vitest/browser': 4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)) - '@vitest/mocker': 4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + '@vitest/browser': 4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)) + '@vitest/mocker': 4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) playwright: 1.46.0 tinyrainbow: 3.0.3 - vitest: 4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) + vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0))': + '@vitest/browser@4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0))': dependencies: - '@vitest/mocker': 4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) - '@vitest/utils': 4.0.0-beta.15 - magic-string: 0.30.19 + '@vitest/mocker': 4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + '@vitest/utils': 4.0.15 + magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) + vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -3681,43 +3690,44 @@ snapshots: - utf-8-validate - vite - '@vitest/expect@4.0.0-beta.15': + '@vitest/expect@4.0.15': dependencies: + '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.2 - '@vitest/spy': 4.0.0-beta.15 - '@vitest/utils': 4.0.0-beta.15 - chai: 6.2.0 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 + chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))': + '@vitest/mocker@4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))': dependencies: - '@vitest/spy': 4.0.0-beta.15 + '@vitest/spy': 4.0.15 estree-walker: 3.0.3 - magic-string: 0.30.19 + magic-string: 0.30.21 optionalDependencies: - msw: 2.7.0(typescript@5.5.4) - vite: 7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) + msw: 2.7.0(@types/node@24.10.1)(typescript@5.5.4) + vite: 7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) - '@vitest/pretty-format@4.0.0-beta.15': + '@vitest/pretty-format@4.0.15': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.0-beta.15': + '@vitest/runner@4.0.15': dependencies: - '@vitest/utils': 4.0.0-beta.15 + '@vitest/utils': 4.0.15 pathe: 2.0.3 - '@vitest/snapshot@4.0.0-beta.15': + '@vitest/snapshot@4.0.15': dependencies: - '@vitest/pretty-format': 4.0.0-beta.15 - magic-string: 0.30.19 + '@vitest/pretty-format': 4.0.15 + magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.0-beta.15': {} + '@vitest/spy@4.0.15': {} - '@vitest/utils@4.0.0-beta.15': + '@vitest/utils@4.0.15': dependencies: - '@vitest/pretty-format': 4.0.0-beta.15 + '@vitest/pretty-format': 4.0.15 tinyrainbow: 3.0.3 '@vue/compiler-core@3.4.35': @@ -3742,7 +3752,7 @@ snapshots: '@vue/shared': 3.4.35 estree-walker: 2.0.2 magic-string: 0.30.19 - postcss: 8.5.5 + postcss: 8.5.6 source-map-js: 1.2.1 '@vue/compiler-ssr@3.4.35': @@ -3880,7 +3890,7 @@ snapshots: caniuse-lite@1.0.30001649: {} - chai@6.2.0: {} + chai@6.2.1: {} chalk@2.4.2: dependencies: @@ -4017,10 +4027,6 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -4319,13 +4325,13 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4) - eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)): + eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)(vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0)): dependencies: '@typescript-eslint/utils': 7.18.0(eslint@9.8.0)(typescript@5.5.4) eslint: 9.8.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4) - vitest: 4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) + vitest: 4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0) transitivePeerDependencies: - supports-color - typescript @@ -4754,8 +4760,6 @@ snapshots: kleur@3.0.3: {} - kleur@4.1.5: {} - kolorist@1.8.0: {} levn@0.4.1: @@ -4800,6 +4804,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + mdast-util-from-markdown@0.8.5: dependencies: '@types/mdast': 3.0.15 @@ -4876,12 +4884,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.0(typescript@5.5.4): + msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.2 + '@inquirer/confirm': 5.1.2(@types/node@24.10.1) '@mswjs/interceptors': 0.37.5 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -4953,6 +4961,8 @@ snapshots: object-assign@4.1.1: {} + obug@2.1.1: {} + ofetch@1.3.4: dependencies: destr: 2.0.3 @@ -5107,12 +5117,6 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.5: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -5316,9 +5320,9 @@ snapshots: statuses@2.0.1: optional: true - std-env@3.7.0: {} + std-env@3.10.0: {} - std-env@3.9.0: {} + std-env@3.7.0: {} strict-event-emitter@0.5.1: optional: true @@ -5424,15 +5428,13 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} + tinyexec@1.0.2: {} tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@2.0.0: {} - tinyrainbow@3.0.3: {} titleize@3.0.0: {} @@ -5527,8 +5529,7 @@ snapshots: ufo@1.5.4: {} - undici-types@6.13.0: - optional: true + undici-types@7.16.0: {} unist-util-stringify-position@2.0.3: dependencies: @@ -5562,7 +5563,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0): + vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0): dependencies: esbuild: 0.25.5 fdir: 6.5.0(picomatch@4.0.3) @@ -5571,40 +5572,41 @@ snapshots: rollup: 4.43.0 tinyglobby: 0.2.15 optionalDependencies: + '@types/node': 24.10.1 fsevents: 2.3.3 jiti: 1.21.6 tsx: 4.17.0 yaml: 2.5.0 - vitefu@1.0.5(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)): + vitefu@1.1.1(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)): optionalDependencies: - vite: 7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) + vite: 7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) - vitest@4.0.0-beta.15(@vitest/browser-playwright@4.0.0-beta.15)(jiti@1.21.6)(msw@2.7.0(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0): + vitest@4.0.15(@types/node@24.10.1)(@vitest/browser-playwright@4.0.15)(jiti@1.21.6)(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(tsx@4.17.0)(yaml@2.5.0): dependencies: - '@vitest/expect': 4.0.0-beta.15 - '@vitest/mocker': 4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) - '@vitest/pretty-format': 4.0.0-beta.15 - '@vitest/runner': 4.0.0-beta.15 - '@vitest/snapshot': 4.0.0-beta.15 - '@vitest/spy': 4.0.0-beta.15 - '@vitest/utils': 4.0.0-beta.15 - debug: 4.4.3 + '@vitest/expect': 4.0.15 + '@vitest/mocker': 4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0)) + '@vitest/pretty-format': 4.0.15 + '@vitest/runner': 4.0.15 + '@vitest/snapshot': 4.0.15 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 es-module-lexer: 1.7.0 expect-type: 1.2.2 - magic-string: 0.30.19 + magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.9.0 + std-env: 3.10.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinypool: 2.0.0 tinyrainbow: 3.0.3 - vite: 7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) + vite: 7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0) why-is-node-running: 2.3.0 optionalDependencies: - '@vitest/browser-playwright': 4.0.0-beta.15(msw@2.7.0(typescript@5.5.4))(playwright@1.46.0)(vite@7.1.9(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.0-beta.15) + '@types/node': 24.10.1 + '@vitest/browser-playwright': 4.0.15(msw@2.7.0(@types/node@24.10.1)(typescript@5.5.4))(playwright@1.46.0)(vite@7.1.9(@types/node@24.10.1)(jiti@1.21.6)(tsx@4.17.0)(yaml@2.5.0))(vitest@4.0.15) transitivePeerDependencies: - jiti - less @@ -5614,7 +5616,6 @@ snapshots: - sass-embedded - stylus - sugarss - - supports-color - terser - tsx - yaml @@ -5708,4 +5709,4 @@ snapshots: zx@8.1.4: optionalDependencies: '@types/fs-extra': 11.0.4 - '@types/node': 22.1.0 + '@types/node': 24.10.1 diff --git a/src/core/index.js b/src/core/index.js deleted file mode 100644 index 6b9b77b..0000000 --- a/src/core/index.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Rendering core for svelte-testing-library. - * - * Defines how components are added to and removed from the DOM. - * Will switch to legacy, class-based mounting logic - * if it looks like we're in a Svelte <= 4 environment. - */ -import * as LegacyCore from './legacy.js' -import * as ModernCore from './modern.svelte.js' -import { createValidateOptions } from './validate-options.js' - -const { mount, unmount, updateProps, allowedOptions } - = ModernCore.IS_MODERN_SVELTE ? ModernCore : LegacyCore - -/** Validate component options. */ -const validateOptions = createValidateOptions(allowedOptions) - -export { mount, unmount, updateProps, validateOptions } -export { UnknownSvelteOptionsError } from './validate-options.js' diff --git a/src/core/legacy.js b/src/core/legacy.js deleted file mode 100644 index 658351d..0000000 --- a/src/core/legacy.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Legacy rendering core for svelte-testing-library. - * - * Supports Svelte <= 4. - */ - -/** Allowed options for the component constructor. */ -const allowedOptions = [ - 'target', - 'accessors', - 'anchor', - 'props', - 'hydrate', - 'intro', - 'context', -] - -/** - * Mount the component into the DOM. - * - * The `onDestroy` callback is included for strict backwards compatibility - * with previous versions of this library. It's mostly unnecessary logic. - */ -function mount(Component, options, onDestroy) { - const component = new Component(options) - - if (typeof onDestroy === 'function') { - component.$$.on_destroy.push(() => { - onDestroy(component) - }) - } - - return component -} - -/** Remove the component from the DOM. */ -function unmount(component) { - component.$destroy() -} - -/** Update the component's props. */ -function updateProps(component, nextProps) { - component.$set(nextProps) -} - -export { allowedOptions, mount, unmount, updateProps } diff --git a/src/core/modern.svelte.js b/src/core/modern.svelte.js deleted file mode 100644 index 7094fa8..0000000 --- a/src/core/modern.svelte.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * Modern rendering core for svelte-testing-library. - * - * Supports Svelte >= 5. - */ -import * as Svelte from 'svelte' - -/** Props signals for each rendered component. */ -const propsByComponent = new Map() - -/** Whether we're using Svelte >= 5. */ -const IS_MODERN_SVELTE = typeof Svelte.mount === 'function' - -/** Allowed options to the `mount` call. */ -const allowedOptions = [ - 'target', - 'anchor', - 'props', - 'events', - 'context', - 'intro', -] - -/** Mount the component into the DOM. */ -function mount(Component, options) { - const props = $state(options.props ?? {}) - const component = Svelte.mount(Component, { ...options, props }) - - Svelte.flushSync() - propsByComponent.set(component, props) - - return component -} - -/** Remove the component from the DOM. */ -function unmount(component) { - propsByComponent.delete(component) - Svelte.flushSync(() => Svelte.unmount(component)) -} - -/** - * Update the component's props. - * - * Relies on the `$state` signal added in `mount`. - */ -function updateProps(component, nextProps) { - const prevProps = propsByComponent.get(component) - Object.assign(prevProps, nextProps) -} - -export { allowedOptions, IS_MODERN_SVELTE, mount, unmount, updateProps } diff --git a/src/core/validate-options.js b/src/core/validate-options.js deleted file mode 100644 index c4962cd..0000000 --- a/src/core/validate-options.js +++ /dev/null @@ -1,41 +0,0 @@ -class UnknownSvelteOptionsError extends TypeError { - constructor(unknownOptions, allowedOptions) { - super(`Unknown options. - - Unknown: [ ${unknownOptions.join(', ')} ] - Allowed: [ ${allowedOptions.join(', ')} ] - - To pass both Svelte options and props to a component, - or to use props that share a name with a Svelte option, - you must place all your props under the \`props\` key: - - render(Component, { props: { /** props here **/ } }) -`) - this.name = 'UnknownSvelteOptionsError' - } -} - -function createValidateOptions(allowedOptions) { - return (options) => { - const isProps = !Object.keys(options).some(option => - allowedOptions.includes(option), - ) - - if (isProps) { - return { props: options } - } - - // Check if any props and Svelte options were accidentally mixed. - const unknownOptions = Object.keys(options).filter( - option => !allowedOptions.includes(option), - ) - - if (unknownOptions.length > 0) { - throw new UnknownSvelteOptionsError(unknownOptions, allowedOptions) - } - - return options - } -} - -export { createValidateOptions, UnknownSvelteOptionsError } diff --git a/src/pure.js b/src/pure.js index fe67cac..02493fe 100644 --- a/src/pure.js +++ b/src/pure.js @@ -1,47 +1,21 @@ // @ts-check -import * as Svelte from 'svelte' - import { page, utils } from 'vitest/browser' -import { mount, unmount, updateProps, validateOptions } from './core/index.js' +import { cleanup, render as coreRender } from '@testing-library/svelte-core' const { debug, getElementLocatorSelectors } = utils -/** - * @type {Set} - */ -const targetCache = new Set() -/** - * @type {Set} - */ -const componentCache = new Set() - -/** - * Customize how Svelte renders the component. - * - * @template {import('svelte').SvelteComponent} C - * @typedef {import('svelte').ComponentProps | Partial>>} SvelteComponentOptions - */ - -/** - * Customize how Testing Library sets up the document and binds queries. - * - * @typedef {{ - * baseElement?: HTMLElement - * }} RenderOptions - */ - /** * The rendered component and bound testing functions. * - * @template {import('svelte').SvelteComponent} C + * @template {import('@testing-library/svelte-core/types').Component} C * * @typedef {{ * container: HTMLElement * baseElement: HTMLElement - * component: C + * component: import('@testing-library/svelte-core/types').Exports * debug: (el?: HTMLElement) => void - * rerender: (props: Partial>) => Promise + * rerender: import('@testing-library/svelte-core/types').Rerender * unmount: () => void * locator: import('vitest/browser').Locator * } & import('vitest/browser').LocatorSelectors} RenderResult @@ -50,88 +24,29 @@ const componentCache = new Set() /** * Render a component into the document. * - * @template {import('svelte').SvelteComponent} C + * @template {import('@testing-library/svelte-core/types').Component} C * - * @param {import('../types/pure.js').ComponentType} Component - The component to render. - * @param {SvelteComponentOptions} options - Customize how Svelte renders the component. - * @param {RenderOptions} renderOptions - Customize how Testing Library sets up the document and binds queries. + * @param {import('@testing-library/svelte-core/types').ComponentImport} Component - The component to render. + * @param {import('@testing-library/svelte-core/types').ComponentOptions} options - Customize how Svelte renders the component. + * @param {import('@testing-library/svelte-core/types').SetupOptions} renderOptions - Customize how the document and queries are set up.. * @returns {RenderResult} The rendered component and bound testing functions. */ function render(Component, options = {}, renderOptions = {}) { - options = validateOptions(options) - - const baseElement - = renderOptions.baseElement ?? options.target ?? document.body - + const { baseElement, container, component, rerender, unmount } = coreRender(Component, options, renderOptions) const queries = getElementLocatorSelectors(baseElement) - const target - = options.target ?? baseElement.appendChild(document.createElement('div')) - - targetCache.add(target) - - const component = mount( - 'default' in Component ? Component.default : Component, - { ...options, target }, - cleanupComponent, - ) - - componentCache.add(component) - return { baseElement, component, - container: target, - locator: page.elementLocator(target), + container, + locator: page.elementLocator(container), debug: (el = baseElement) => { debug(el) }, - rerender: async (props) => { - if (props.props) { - console.warn( - 'rerender({ props: {...} }) deprecated, use rerender({...}) instead', - ) - props = props.props - } - - updateProps(component, props) - await Svelte.tick() - }, - unmount: () => { - cleanupComponent(component) - }, + rerender, + unmount, ...queries, } } -/** - * Remove a component from the component cache. - * @param {import('svelte').SvelteComponent} component - */ -function cleanupComponent(component) { - const inCache = componentCache.delete(component) - - if (inCache) { - unmount(component) - } -} - -/** - * Remove a target element from the target cache - * @param {Element} target - */ -function cleanupTarget(target) { - const inCache = targetCache.delete(target) - - if (inCache) { - document.body.removeChild(target) - } -} - -/** Unmount all components and remove elements added to ``. */ -function cleanup() { - componentCache.forEach(cleanupComponent) - targetCache.forEach(cleanupTarget) -} - export { cleanup, render } diff --git a/types/pure.d.ts b/types/pure.d.ts index 6f14182..5c59389 100644 --- a/types/pure.d.ts +++ b/types/pure.d.ts @@ -1,97 +1,31 @@ import { LocatorSelectors, Locator } from 'vitest/browser' +import type { Component, ComponentImport, ComponentOptions, Exports, Rerender, SetupOptions } from '@testing-library/svelte-core/types' -import type { - Component as ModernComponent, - ComponentConstructorOptions as LegacyConstructorOptions, - ComponentProps, - EventDispatcher, - mount, - SvelteComponent as LegacyComponent, - SvelteComponentTyped as Svelte3LegacyComponent, -} from 'svelte' - -type IS_MODERN_SVELTE = ModernComponent extends (...args: any[]) => any - ? true - : false; - -type IS_LEGACY_SVELTE_4 = - EventDispatcher extends (...args: any[]) => any ? true : false; - -/** A compiled, imported Svelte component. */ -export type Component< - P extends Record = any, - E extends Record = any, -> = IS_MODERN_SVELTE extends true - ? ModernComponent | LegacyComponent

- : IS_LEGACY_SVELTE_4 extends true - ? LegacyComponent

- : Svelte3LegacyComponent

; - -/** - * The type of an imported, compiled Svelte component. - * - * In Svelte 5, this distinction no longer matters. - * In Svelte 4, this is the Svelte component class constructor. - */ -export type ComponentType = C extends LegacyComponent - ? new (...args: any[]) => C - : C; - -/** The props of a component. */ -export type Props = ComponentProps; - -/** - * The exported fields of a component. - * - * In Svelte 5, this is the set of variables marked as `export`'d. - * In Svelte 4, this is simply the instance of the component class. - */ -export type Exports = IS_MODERN_SVELTE extends true - ? C extends ModernComponent - ? E - : C & { $set: never; $on: never; $destroy: never } - : C +export type { Component, ComponentImport, ComponentOptions, Exports, Rerender, SetupOptions } from '@testing-library/svelte-core/types' -/** - * Options that may be passed to `mount` when rendering the component. - * - * In Svelte 4, these are the options passed to the component constructor. - */ -export type MountOptions = IS_MODERN_SVELTE extends true - ? Parameters, Exports>>[1] - : LegacyConstructorOptions> - -/** - * Customize how Svelte renders the component. - */ -export type SvelteComponentOptions = Props | MountOptions; -/** - * Customize how Testing Library sets up the document and binds queries. - */ -export type RenderOptions = { - baseElement?: HTMLElement; -}; /** * The rendered component and bound testing functions. */ export interface RenderResult extends LocatorSelectors { container: HTMLElement; baseElement: HTMLElement; - component: C; + component: Exports; debug: (el?: HTMLElement) => void; - rerender: (props: Partial>) => Promise; + rerender: Rerender; unmount: () => void; locator: Locator; } + /** Unmount all components and remove elements added to ``. */ export function cleanup(): void; + /** * Render a component into the document. */ -export function render(Component: ComponentType, options?: SvelteComponentOptions, renderOptions?: RenderOptions): RenderResult; +export function render(Component: ComponentImport, options?: ComponentOptions, renderOptions?: SetupOptions): RenderResult; declare module 'vitest/browser' { interface BrowserPage { render: typeof render } -} \ No newline at end of file +} diff --git a/vitest.config.ts b/vitest.config.ts index e2d33fd..04580c9 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -4,15 +4,16 @@ import { playwright } from '@vitest/browser-playwright' export default defineConfig({ plugins: [svelte()], + optimizeDeps: { + include: ['@testing-library/svelte-core'], + }, test: { - name: 'react', + name: 'svelte', browser: { enabled: true, headless: true, provider: playwright(), - instances: [ - { browser: 'chromium' }, - ], + instances: [{ browser: 'chromium' }], }, }, })